diff --git a/.DS_Store b/.DS_Store index 3e7c32a6..8fbbb0f0 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.env b/.env index ebd0cf76..a9465114 100644 --- a/.env +++ b/.env @@ -1,5 +1,13 @@ -# Frontend URL +# Production Environment Configuration +# Frontend URL (production server) VITE_FRONTEND_BASE_URL=https://ai-sandbox.oliver.solutions/semblance -# Backend API URL -VITE_API_BASE_URL=https://ai-sandbox.oliver.solutions/semblance_back/api \ No newline at end of file +# Backend API URL (production server) +VITE_API_BASE_URL=https://ai-sandbox.oliver.solutions/semblance_back/api + +# WebSocket path (production server) +VITE_WEBSOCKET_PATH=/semblance_back/socket.io/ + +# MSAL Authentication (production server) +VITE_MSAL_REDIRECT_URI=https://ai-sandbox.oliver.solutions/semblance +VITE_MSAL_POST_LOGOUT_REDIRECT_URI=https://ai-sandbox.oliver.solutions/semblance \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 00000000..32dd9588 --- /dev/null +++ b/.env.development @@ -0,0 +1,13 @@ +# Development Environment Configuration +# Frontend URL (local development) +VITE_FRONTEND_BASE_URL=http://localhost:5173 + +# Backend API URL (local development - no base path) +VITE_API_BASE_URL=/api + +# WebSocket path (local development - no base path) +VITE_WEBSOCKET_PATH=/socket.io/ + +# MSAL Authentication (local development) +VITE_MSAL_REDIRECT_URI=http://localhost:5173/ +VITE_MSAL_POST_LOGOUT_REDIRECT_URI=http://localhost:5173/ \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 00000000..a9465114 --- /dev/null +++ b/.env.production @@ -0,0 +1,13 @@ +# Production Environment Configuration +# Frontend URL (production server) +VITE_FRONTEND_BASE_URL=https://ai-sandbox.oliver.solutions/semblance + +# Backend API URL (production server) +VITE_API_BASE_URL=https://ai-sandbox.oliver.solutions/semblance_back/api + +# WebSocket path (production server) +VITE_WEBSOCKET_PATH=/semblance_back/socket.io/ + +# MSAL Authentication (production server) +VITE_MSAL_REDIRECT_URI=https://ai-sandbox.oliver.solutions/semblance +VITE_MSAL_POST_LOGOUT_REDIRECT_URI=https://ai-sandbox.oliver.solutions/semblance \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 9567c7a8..7c83d66d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,7 +9,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co - **Preview**: `npm run preview` - **Backend**: `cd backend && python run.py` -**Note**: This project is hosted on a server. Always use `npm run build` instead of `npm run dev` for testing changes. +**Note**: This project supports both local development and production deployment. See Environment Configuration section below. ## Backend Commands - **Start Backend**: `python run.py` (from backend/ directory) @@ -68,8 +68,37 @@ python -c "from app import create_app; app = create_app()" # Test app creation - **Types**: `/src/types/` - TypeScript type definitions - **Contexts**: `/src/contexts/` - React context providers -## Environment -- **Base Path**: Uses `/semblance/` in production (configured in vite.config.ts) +## Environment Configuration + +This application supports both local development and production deployment through environment-specific configuration files: + +### Environment Files +- **`.env.development`**: Local development configuration +- **`.env.production`**: Production server configuration +- **`.env`**: Active configuration (copy from appropriate environment file) + +### Development vs Production +The application automatically adapts based on environment variables: + +**Development Mode:** +- Base path: `/` (root) +- API base: `/api` +- WebSocket path: `/socket.io/` +- MSAL redirect: `http://localhost:5173/` + +**Production Mode:** +- Base path: `/semblance/` +- API base: `https://ai-sandbox.oliver.solutions/semblance_back/api` +- WebSocket path: `/semblance_back/socket.io/` +- MSAL redirect: `https://ai-sandbox.oliver.solutions/semblance` + +### Setup Instructions +1. **For local development**: Copy `.env.development` to `.env` +2. **For production**: Copy `.env.production` to `.env` +3. The build system will use the appropriate configuration + +### Technical Details +- **Base Path**: Configured in vite.config.ts based on `NODE_ENV` - **Backend Port**: 5137 (Hypercorn ASGI server) - **Frontend Dev Port**: 5173 - **Temp Directories**: Backend creates `/backend/temp/` for file handling \ No newline at end of file diff --git a/backend/.env b/backend/.env index 6d3f1824..a4d61d82 100644 --- a/backend/.env +++ b/backend/.env @@ -1,5 +1,6 @@ # MongoDB Configuration - these are the MongoDB admin credentials, not app credentials -MONGO_URI=mongodb://localhost:27017/semblance_db +MONGO_URI=mongodb://localhost:27020/semblance_db +MONGO_PORT=27020 # If you need to connect to MongoDB with authentication, uncomment and set these values # MONGO_USER=admin @@ -9,4 +10,6 @@ MONGO_URI=mongodb://localhost:27017/semblance_db FLASK_APP=run.py FLASK_DEBUG=1 # FLASK_ENV is deprecated in Flask 2.x, using FLASK_DEBUG instead -SECRET_KEY=your-secret-key-for-sessions-and-tokens \ No newline at end of file +SECRET_KEY=your-secret-key-for-sessions-and-tokens + +OPENAI_API_KEY=REDACTED_OPENAI_KEY diff --git a/backend/app/models/__pycache__/focus_group.cpython-313.pyc b/backend/app/models/__pycache__/focus_group.cpython-313.pyc index 6100fdbd..aebd971f 100644 Binary files a/backend/app/models/__pycache__/focus_group.cpython-313.pyc and b/backend/app/models/__pycache__/focus_group.cpython-313.pyc differ diff --git a/backend/app/models/focus_group.py b/backend/app/models/focus_group.py index 5a5bd319..ee5f15e1 100644 --- a/backend/app/models/focus_group.py +++ b/backend/app/models/focus_group.py @@ -799,8 +799,27 @@ class FocusGroup: # Insert the mode event result = db.focus_group_mode_events.insert_one(mode_event) + if result.inserted_id: + mode_event_id = str(result.inserted_id) + mode_event["_id"] = mode_event_id + + # Emit WebSocket event for new mode event + mode_event_for_websocket = { + 'id': mode_event_id, + 'focus_group_id': focus_group_id, + 'event_type': event_type, + 'timestamp': mode_event["timestamp"].isoformat(), + 'user_id': user_id, + 'created_at': mode_event["created_at"].isoformat() + } + print(f"🔔 EMITTING WEBSOCKET EVENT: mode_event_update for focus group {focus_group_id}") + print(f"🔔 Mode event data: event_type={event_type}, timestamp={mode_event['timestamp'].isoformat()}") + emit_websocket_event('mode_event_update', focus_group_id, mode_event_for_websocket) + + return mode_event_id + # Return the id of the new mode event - return str(result.inserted_id) + return None except Exception as e: print(f"Error adding mode event to focus group {focus_group_id}: {e}") print(traceback.format_exc()) diff --git a/backend/app/routes/__pycache__/focus_group_ai.cpython-313.pyc b/backend/app/routes/__pycache__/focus_group_ai.cpython-313.pyc index 9b5afa60..4e3b2c1f 100644 Binary files a/backend/app/routes/__pycache__/focus_group_ai.cpython-313.pyc and b/backend/app/routes/__pycache__/focus_group_ai.cpython-313.pyc differ diff --git a/backend/app/services/__pycache__/ai_moderator_service.cpython-313.pyc b/backend/app/services/__pycache__/ai_moderator_service.cpython-313.pyc index f3196598..f83a2751 100644 Binary files a/backend/app/services/__pycache__/ai_moderator_service.cpython-313.pyc and b/backend/app/services/__pycache__/ai_moderator_service.cpython-313.pyc differ diff --git a/backend/app/services/__pycache__/autonomous_conversation_controller.cpython-313.pyc b/backend/app/services/__pycache__/autonomous_conversation_controller.cpython-313.pyc index da4f0b31..1c2087c0 100644 Binary files a/backend/app/services/__pycache__/autonomous_conversation_controller.cpython-313.pyc and b/backend/app/services/__pycache__/autonomous_conversation_controller.cpython-313.pyc differ diff --git a/dist/assets/index-C-lVT2hb.css b/dist/assets/index-C-lVT2hb.css new file mode 100644 index 00000000..8db0d56a --- /dev/null +++ b/dist/assets/index-C-lVT2hb.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap";.back-button{position:absolute;top:1.25rem;left:1.25rem;z-index:10;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:9999px;background-color:#fffc;border:1px solid rgba(0,0,0,.1);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:all .15s ease}.back-button:hover{background-color:#ffffffe6;transform:translateY(-1px);box-shadow:0 2px 4px #0000000d}.back-button:active{transform:translateY(0)}.back-button-content{display:flex;align-items:center;gap:.25rem}.page-header-with-back{display:flex;align-items:center;gap:.75rem;padding-left:2.5rem;position:relative}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 350 30% 98%;--foreground: 345 30% 15%;--card: 0 0% 100%;--card-foreground: 345 30% 15%;--popover: 0 0% 100%;--popover-foreground: 345 30% 15%;--primary: 350 85% 80%;--primary-foreground: 350 30% 20%;--secondary: 350 30% 96.1%;--secondary-foreground: 345 30% 15%;--muted: 350 30% 96.1%;--muted-foreground: 350 10% 50%;--accent: 350 30% 96.1%;--accent-foreground: 345 30% 15%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 350 30% 98%;--border: 350 30% 91.4%;--input: 350 30% 91.4%;--ring: 350 85% 80%;--radius: .5rem;--sidebar-background: 0 0% 100%;--sidebar-foreground: 345 30% 15%;--sidebar-primary: 350 85% 80%;--sidebar-primary-foreground: 350 30% 20%;--sidebar-accent: 350 30% 96.1%;--sidebar-accent-foreground: 345 30% 15%;--sidebar-border: 350 30% 91.4%;--sidebar-ring: 350 85% 80%}.dark{--background: 345 30% 10%;--foreground: 350 30% 98%;--card: 345 30% 10%;--card-foreground: 350 30% 98%;--popover: 345 30% 10%;--popover-foreground: 350 30% 98%;--primary: 350 85% 80%;--primary-foreground: 345 30% 15%;--secondary: 342 20% 17.5%;--secondary-foreground: 350 30% 98%;--muted: 342 20% 17.5%;--muted-foreground: 350 10% 70%;--accent: 342 20% 17.5%;--accent-foreground: 350 30% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 350 30% 98%;--border: 342 20% 17.5%;--input: 342 20% 17.5%;--ring: 350 70% 85%;--sidebar-background: 345 30% 10%;--sidebar-foreground: 350 30% 98%;--sidebar-primary: 350 85% 80%;--sidebar-primary-foreground: 350 30% 98%;--sidebar-accent: 342 20% 17.5%;--sidebar-accent-foreground: 350 30% 98%;--sidebar-border: 342 20% 17.5%;--sidebar-ring: 350 70% 85%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Inter,system-ui,sans-serif;color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--muted-foreground) / .4)}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .6)}@font-face{font-family:SF Pro Display;src:local("SF Pro Display"),local("SFProDisplay"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-regular-webfont.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:SF Pro Display;src:local("SF Pro Display Medium"),local("SFProDisplay-Medium"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-medium-webfont.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:SF Pro Display;src:local("SF Pro Display Semibold"),local("SFProDisplay-Semibold"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-semibold-webfont.woff) format("woff");font-weight:600;font-style:normal}@font-face{font-family:SF Pro Display;src:local("SF Pro Display Bold"),local("SFProDisplay-Bold"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-bold-webfont.woff) format("woff");font-weight:700;font-style:normal}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.glass-card{border-width:1px;border-color:#fff3;background-color:#fffc;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.glass-panel{border-width:1px;border-color:#fff6;background-color:#ffffffe6;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.text-gradient{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #f9a8d4 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;color:transparent}.hover-transition{transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation-duration:.3s;animation-timing-function:cubic-bezier(.4,0,.2,1)}.button-transition{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.2s;animation-timing-function:cubic-bezier(0,0,.2,1)}.sidebar-icon{margin-right:.75rem;margin-top:.125rem;height:1rem;width:1rem;flex-shrink:0;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.sidebar-section{display:flex;align-items:flex-start}.sidebar-sub-item{font-size:.875rem;line-height:1.25rem;color:hsl(var(--muted-foreground))}.persona-card{position:relative;overflow:hidden;min-height:360px}.persona-card-overlay{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.2s;animation-timing-function:cubic-bezier(0,0,.2,1)}.persona-card:hover .persona-card-overlay,.persona-card.selected .persona-card-overlay{background-color:#ecd1de4d}.persona-card-checkmark{position:absolute;top:.75rem;left:.75rem;z-index:20;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.2s;animation-timing-function:cubic-bezier(0,0,.2,1);border-radius:9999px;border-width:1px;border-color:#fff6;background-color:#ffffffe6;padding:.25rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.persona-card.selected .persona-card-checkmark{opacity:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-right-12{right:-3rem}.-top-12{top:-3rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.bottom-\[-10rem\]{bottom:-10rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[50\%\]{left:50%}.left-\[calc\(50\%\+11rem\)\]{left:calc(50% + 11rem)}.left-\[calc\(50\%-11rem\)\]{left:calc(50% - 11rem)}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-16{top:4rem}.top-2{top:.5rem}.top-20{top:5rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[-10rem\]{top:-10rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1\]{z-index:1}.col-span-full{grid-column:1 / -1}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-1{margin-bottom:.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-5{margin-right:1.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-24{margin-top:6rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-\[1155\/678\]{aspect-ratio:1155/678}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-4{width:1rem;height:1rem}.h-0{height:0px}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[25vh\]{height:25vh}.h-\[450px\]{height:450px}.h-\[70vh\]{height:70vh}.h-\[calc\(100vh-12rem\)\]{height:calc(100vh - 12rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[2rem\]{min-height:2rem}.min-h-\[40px\]{min-height:40px}.min-h-\[60px\]{min-height:60px}.min-h-\[80px\]{min-height:80px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:0px}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[350px\]{width:350px}.w-\[36\.125rem\]{width:36.125rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-32{min-width:8rem}.min-w-36{min-width:9rem}.min-w-5{min-width:1.25rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[400px\]{max-width:400px}.max-w-\[70\%\]{max-width:70%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[30deg\]{--tw-rotate: 30deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .5s ease-out}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}.animate-float{animation:float 3s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-\[1\.5px\]{border-width:1.5px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-\[\#0078d4\]{--tw-border-opacity: 1;border-color:rgb(0 120 212 / var(--tw-border-opacity, 1))}.border-\[--color-border\]{border-color:var(--color-border)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-muted-foreground\/20{border-color:hsl(var(--muted-foreground) / .2)}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/80{border-color:#e2e8f0cc}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-primary{border-left-color:hsl(var(--primary))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0078d4\]{--tw-bg-opacity: 1;background-color:rgb(0 120 212 / var(--tw-bg-opacity, 1))}.bg-\[--color-bg\]{background-color:var(--color-bg)}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-900\/10{background-color:#1118271a}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-pink-200{--tw-bg-opacity: 1;background-color:rgb(251 207 232 / var(--tw-bg-opacity, 1))}.bg-pink-300{--tw-bg-opacity: 1;background-color:rgb(249 168 212 / var(--tw-bg-opacity, 1))}.bg-pink-400{--tw-bg-opacity: 1;background-color:rgb(244 114 182 / var(--tw-bg-opacity, 1))}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-yellow-400{--tw-bg-opacity: 1;background-color:rgb(250 204 21 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-blue-400{--tw-gradient-from: #60a5fa var(--tw-gradient-from-position);--tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-100{--tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary{--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/5{--tw-gradient-from: hsl(var(--primary) / .05) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-blue-400{--tw-gradient-to: #60a5fa var(--tw-gradient-to-position)}.to-blue-400\/5{--tw-gradient-to: rgb(96 165 250 / .05) var(--tw-gradient-to-position)}.to-gray-200{--tw-gradient-to: #e5e7eb var(--tw-gradient-to-position)}.to-primary{--tw-gradient-to: hsl(var(--primary)) var(--tw-gradient-to-position)}.to-slate-50{--tw-gradient-to: #f8fafc var(--tw-gradient-to-position)}.fill-amber-400{fill:#fbbf24}.fill-current{fill:currentColor}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-2\.5{padding-left:.625rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Inter,system-ui,sans-serif}.font-sf{font-family:SF Pro Display,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.8rem\]{font-size:.8rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-\[0_-2px_4px_rgba\(0\,0\,0\,0\.05\)\]{--tw-shadow: 0 -2px 4px rgba(0,0,0,.05);--tw-shadow-colored: 0 -2px 4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-blue-200{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.ring-blue-500{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.ring-gray-900\/10{--tw-ring-color: rgb(17 24 39 / .1)}.ring-primary{--tw-ring-color: hsl(var(--primary))}.ring-red-400{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.ring-offset-white{--tw-ring-offset-color: #fff}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.fade-in-80{--tw-enter-opacity: .8}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.running{animation-play-state:running}.paused{animation-play-state:paused}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-500::placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.hover\:translate-y-\[-2px\]:hover{--tw-translate-y: -2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:translate-y-\[-4px\]:hover{--tw-translate-y: -4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-\[\#106ebe\]:hover{--tw-border-opacity: 1;border-color:rgb(16 110 190 / var(--tw-border-opacity, 1))}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-\[\#106ebe\]:hover{--tw-bg-opacity: 1;background-color:rgb(16 110 190 / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50\/50:hover{background-color:#f9fafb80}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary:hover{background-color:hsl(var(--primary))}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-300:hover{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-600:hover{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-primary-foreground:hover{color:hsl(var(--primary-foreground))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-gray-900\/20:hover{--tw-ring-color: rgb(17 24 39 / .2)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-primary:focus{background-color:hsl(var(--primary))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-primary-foreground:focus{color:hsl(var(--primary-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-primary:focus{--tw-ring-color: hsl(var(--primary))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-slate-950:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(2 6 23 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toast .group-\[\.toast\]\:absolute{position:absolute}.group.toast .group-\[\.toast\]\:left-3{left:.75rem}.group.toast .group-\[\.toast\]\:top-3{top:.75rem}.group.toast .group-\[\.toast\]\:h-5{height:1.25rem}.group.toast .group-\[\.toast\]\:w-5{width:1.25rem}.group.toast .group-\[\.toast\]\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:p-1{padding:.25rem}.group.toaster .group-\[\.toaster\]\:pr-8{padding-right:2rem}.group.toast .group-\[\.toast\]\:text-foreground\/70{color:hsl(var(--foreground) / .7)}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toast .group-\[\.toast\]\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group.toast .group-\[\.toast\]\:transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.group.toast .hover\:group-\[\.toast\]\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.group.toast .hover\:group-\[\.toast\]\:text-foreground:hover{color:hsl(var(--foreground))}.group.toast .focus\:group-\[\.toast\]\:opacity-100:focus{opacity:1}.group.toast .focus\:group-\[\.toast\]\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.group.toast .focus\:group-\[\.toast\]\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group.toast .focus\:group-\[\.toast\]\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:bg-accent\/50[aria-selected=true]{background-color:hsl(var(--accent) / .5)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:rotate-90[data-state=open]{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[active\]\:bg-accent\/50[data-active]{background-color:hsl(var(--accent) / .5)}.data-\[selected\=\'true\'\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer[data-variant=inset]~.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]{min-height:calc(100svh - 1rem)}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:bottom-\[-20rem\]{bottom:-20rem}.sm\:left-\[calc\(50\%\+30rem\)\]{left:calc(50% + 30rem)}.sm\:left-\[calc\(50\%-30rem\)\]{left:calc(50% - 30rem)}.sm\:top-\[-20rem\]{top:-20rem}.sm\:mt-0{margin-top:0}.sm\:mt-24{margin-top:6rem}.sm\:flex{display:flex}.sm\:w-\[72\.1875rem\]{width:72.1875rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-32{padding-top:8rem;padding-bottom:8rem}.sm\:text-left{text-align:left}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 768px){.md\:absolute{position:absolute}.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-64{width:16rem}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:border-l{border-left-width:1px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mt-0{margin-top:0}.lg\:flex{display:flex}.lg\:w-64{width:16rem}.lg\:flex-auto{flex:1 1 auto}.lg\:flex-shrink-0{flex-shrink:0}.lg\:flex-grow{flex-grow:1}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-40{padding-top:10rem;padding-bottom:10rem}}@media (min-width: 1280px){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:hsl(var(--accent))}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:has([aria-selected]):first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:has([aria-selected]):last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-accent\/50:has([aria-selected].day-outside){background-color:hsl(var(--accent) / .5)}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:h-2\.5>svg{height:.625rem}.\[\&\>svg\]\:h-3>svg{height:.75rem}.\[\&\>svg\]\:w-2\.5>svg{width:.625rem}.\[\&\>svg\]\:w-3>svg{width:.75rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:hsl(var(--muted-foreground))}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:hsl(var(--border) / .5)}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:hsl(var(--border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer{outline:2px solid transparent;outline-offset:2px}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:hsl(var(--muted))}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-sector\]\:outline-none .recharts-sector,.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{outline:2px solid transparent;outline-offset:2px}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/dist/assets/index-KiCc6bNq.js b/dist/assets/index-KiCc6bNq.js deleted file mode 100644 index 6e6b742d..00000000 --- a/dist/assets/index-KiCc6bNq.js +++ /dev/null @@ -1,715 +0,0 @@ -var ck=t=>{throw TypeError(t)};var tS=(t,e,n)=>e.has(t)||ck("Cannot "+n);var xe=(t,e,n)=>(tS(t,e,"read from private field"),n?n.call(t):e.get(t)),fn=(t,e,n)=>e.has(t)?ck("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),Gt=(t,e,n,r)=>(tS(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),Wr=(t,e,n)=>(tS(t,e,"access private method"),n);var Bg=(t,e,n,r)=>({set _(i){Gt(t,e,i,n)},get _(){return xe(t,e,r)}});function UW(t,e){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();var Hg=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function un(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var q$={exports:{}},Kb={},Y$={exports:{}},Jt={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var ag=Symbol.for("react.element"),BW=Symbol.for("react.portal"),HW=Symbol.for("react.fragment"),zW=Symbol.for("react.strict_mode"),VW=Symbol.for("react.profiler"),GW=Symbol.for("react.provider"),KW=Symbol.for("react.context"),WW=Symbol.for("react.forward_ref"),qW=Symbol.for("react.suspense"),YW=Symbol.for("react.memo"),QW=Symbol.for("react.lazy"),lk=Symbol.iterator;function XW(t){return t===null||typeof t!="object"?null:(t=lk&&t[lk]||t["@@iterator"],typeof t=="function"?t:null)}var Q$={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},X$=Object.assign,J$={};function Tf(t,e,n){this.props=t,this.context=e,this.refs=J$,this.updater=n||Q$}Tf.prototype.isReactComponent={};Tf.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};Tf.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Z$(){}Z$.prototype=Tf.prototype;function vj(t,e,n){this.props=t,this.context=e,this.refs=J$,this.updater=n||Q$}var yj=vj.prototype=new Z$;yj.constructor=vj;X$(yj,Tf.prototype);yj.isPureReactComponent=!0;var uk=Array.isArray,eL=Object.prototype.hasOwnProperty,xj={current:null},tL={key:!0,ref:!0,__self:!0,__source:!0};function nL(t,e,n){var r,i={},s=null,o=null;if(e!=null)for(r in e.ref!==void 0&&(o=e.ref),e.key!==void 0&&(s=""+e.key),e)eL.call(e,r)&&!tL.hasOwnProperty(r)&&(i[r]=e[r]);var c=arguments.length-2;if(c===1)i.children=n;else if(1>>1,J=I[Q];if(0>>1;Qi(ne,X))uei(F,ne)?(I[Q]=F,I[ue]=X,Q=ue):(I[Q]=ne,I[U]=X,Q=U);else if(uei(F,X))I[Q]=F,I[ue]=X,Q=ue;else break e}}return D}function i(I,D){var X=I.sortIndex-D.sortIndex;return X!==0?X:I.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var s=performance;t.unstable_now=function(){return s.now()}}else{var o=Date,c=o.now();t.unstable_now=function(){return o.now()-c}}var l=[],u=[],d=1,f=null,h=3,p=!1,g=!1,m=!1,y=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,x=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(I){for(var D=n(u);D!==null;){if(D.callback===null)r(u);else if(D.startTime<=I)r(u),D.sortIndex=D.expirationTime,e(l,D);else break;D=n(u)}}function S(I){if(m=!1,w(I),!g)if(n(l)!==null)g=!0,L(C);else{var D=n(u);D!==null&&V(S,D.startTime-I)}}function C(I,D){g=!1,m&&(m=!1,b(j),j=-1),p=!0;var X=h;try{for(w(D),f=n(l);f!==null&&(!(f.expirationTime>D)||I&&!O());){var Q=f.callback;if(typeof Q=="function"){f.callback=null,h=f.priorityLevel;var J=Q(f.expirationTime<=D);D=t.unstable_now(),typeof J=="function"?f.callback=J:f===n(l)&&r(l),w(D)}else r(l);f=n(l)}if(f!==null)var ye=!0;else{var U=n(u);U!==null&&V(S,U.startTime-D),ye=!1}return ye}finally{f=null,h=X,p=!1}}var _=!1,A=null,j=-1,P=5,k=-1;function O(){return!(t.unstable_now()-kI||125Q?(I.sortIndex=X,e(u,I),n(l)===null&&I===n(u)&&(m?(b(j),j=-1):m=!0,V(S,X-Q))):(I.sortIndex=J,e(l,I),g||p||(g=!0,L(C))),I},t.unstable_shouldYield=O,t.unstable_wrapCallback=function(I){var D=h;return function(){var X=h;h=D;try{return I.apply(this,arguments)}finally{h=X}}}})(cL);aL.exports=cL;var cq=aL.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var lq=v,rs=cq;function Ae(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),RC=Object.prototype.hasOwnProperty,uq=/^[: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]*$/,fk={},hk={};function dq(t){return RC.call(hk,t)?!0:RC.call(fk,t)?!1:uq.test(t)?hk[t]=!0:(fk[t]=!0,!1)}function fq(t,e,n,r){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function hq(t,e,n,r){if(e===null||typeof e>"u"||fq(t,e,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function wi(t,e,n,r,i,s,o){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=s,this.removeEmptyString=o}var Vr={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){Vr[t]=new wi(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];Vr[e]=new wi(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){Vr[t]=new wi(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){Vr[t]=new wi(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){Vr[t]=new wi(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){Vr[t]=new wi(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){Vr[t]=new wi(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){Vr[t]=new wi(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){Vr[t]=new wi(t,5,!1,t.toLowerCase(),null,!1,!1)});var wj=/[\-:]([a-z])/g;function Sj(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(wj,Sj);Vr[e]=new wi(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(wj,Sj);Vr[e]=new wi(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(wj,Sj);Vr[e]=new wi(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){Vr[t]=new wi(t,1,!1,t.toLowerCase(),null,!1,!1)});Vr.xlinkHref=new wi("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){Vr[t]=new wi(t,1,!1,t.toLowerCase(),null,!0,!0)});function Cj(t,e,n,r){var i=Vr.hasOwnProperty(e)?Vr[e]:null;(i!==null?i.type!==0:r||!(2c||i[o]!==s[c]){var l=` -`+i[o].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=o&&0<=c);break}}}finally{iS=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?$h(t):""}function pq(t){switch(t.tag){case 5:return $h(t.type);case 16:return $h("Lazy");case 13:return $h("Suspense");case 19:return $h("SuspenseList");case 0:case 2:case 15:return t=sS(t.type,!1),t;case 11:return t=sS(t.type.render,!1),t;case 1:return t=sS(t.type,!0),t;default:return""}}function LC(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case Xu:return"Fragment";case Qu:return"Portal";case MC:return"Profiler";case _j:return"StrictMode";case DC:return"Suspense";case $C:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case dL:return(t.displayName||"Context")+".Consumer";case uL:return(t._context.displayName||"Context")+".Provider";case Aj:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case jj:return e=t.displayName||null,e!==null?e:LC(t.type)||"Memo";case nc:e=t._payload,t=t._init;try{return LC(t(e))}catch{}}return null}function mq(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return LC(e);case 8:return e===_j?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Gc(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function hL(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function gq(t){var e=hL(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,s=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return i.call(this)},set:function(o){r=""+o,s.call(this,o)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function Gg(t){t._valueTracker||(t._valueTracker=gq(t))}function pL(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),r="";return t&&(r=hL(t)?t.checked?"true":"false":t.value),t=r,t!==n?(e.setValue(t),!0):!1}function my(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function FC(t,e){var n=e.checked;return Qn({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function mk(t,e){var n=e.defaultValue==null?"":e.defaultValue,r=e.checked!=null?e.checked:e.defaultChecked;n=Gc(e.value!=null?e.value:n),t._wrapperState={initialChecked:r,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function mL(t,e){e=e.checked,e!=null&&Cj(t,"checked",e,!1)}function UC(t,e){mL(t,e);var n=Gc(e.value),r=e.type;if(n!=null)r==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(r==="submit"||r==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?BC(t,e.type,n):e.hasOwnProperty("defaultValue")&&BC(t,e.type,Gc(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function gk(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var r=e.type;if(!(r!=="submit"&&r!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function BC(t,e,n){(e!=="number"||my(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var Lh=Array.isArray;function hd(t,e,n,r){if(t=t.options,e){e={};for(var i=0;i"+e.valueOf().toString()+"",e=Kg.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Cp(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var Xh={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},vq=["Webkit","ms","Moz","O"];Object.keys(Xh).forEach(function(t){vq.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),Xh[e]=Xh[t]})});function xL(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||Xh.hasOwnProperty(t)&&Xh[t]?(""+e).trim():e+"px"}function bL(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=xL(n,e[n],r);n==="float"&&(n="cssFloat"),r?t.setProperty(n,i):t[n]=i}}var yq=Qn({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function VC(t,e){if(e){if(yq[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(Ae(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(Ae(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(Ae(61))}if(e.style!=null&&typeof e.style!="object")throw Error(Ae(62))}}function GC(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){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 KC=null;function Ej(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var WC=null,pd=null,md=null;function xk(t){if(t=ug(t)){if(typeof WC!="function")throw Error(Ae(280));var e=t.stateNode;e&&(e=Xb(e),WC(t.stateNode,t.type,e))}}function wL(t){pd?md?md.push(t):md=[t]:pd=t}function SL(){if(pd){var t=pd,e=md;if(md=pd=null,xk(t),e)for(t=0;t>>=0,t===0?32:31-(Tq(t)/Pq|0)|0}var Wg=64,qg=4194304;function Fh(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function xy(t,e){var n=t.pendingLanes;if(n===0)return 0;var r=0,i=t.suspendedLanes,s=t.pingedLanes,o=n&268435455;if(o!==0){var c=o&~i;c!==0?r=Fh(c):(s&=o,s!==0&&(r=Fh(s)))}else o=n&~i,o!==0?r=Fh(o):s!==0&&(r=Fh(s));if(r===0)return 0;if(e!==0&&e!==r&&!(e&i)&&(i=r&-r,s=e&-e,i>=s||i===16&&(s&4194240)!==0))return e;if(r&4&&(r|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=r;0n;n++)e.push(t);return e}function cg(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-Ys(e),t[e]=n}function Rq(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var r=t.eventTimes;for(t=t.expirationTimes;0=Zh),Nk=" ",Tk=!1;function HL(t,e){switch(t){case"keyup":return c7.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zL(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Ju=!1;function u7(t,e){switch(t){case"compositionend":return zL(e);case"keypress":return e.which!==32?null:(Tk=!0,Nk);case"textInput":return t=e.data,t===Nk&&Tk?null:t;default:return null}}function d7(t,e){if(Ju)return t==="compositionend"||!Mj&&HL(t,e)?(t=UL(),Bv=Oj=vc=null,Ju=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Ik(n)}}function WL(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?WL(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function qL(){for(var t=window,e=my();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=my(t.document)}return e}function Dj(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function b7(t){var e=qL(),n=t.focusedElem,r=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&WL(n.ownerDocument.documentElement,n)){if(r!==null&&Dj(n)){if(e=r.start,t=r.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var i=n.textContent.length,s=Math.min(r.start,i);r=r.end===void 0?s:Math.min(r.end,i),!t.extend&&s>r&&(i=r,r=s,s=i),i=Rk(n,s);var o=Rk(n,r);i&&o&&(t.rangeCount!==1||t.anchorNode!==i.node||t.anchorOffset!==i.offset||t.focusNode!==o.node||t.focusOffset!==o.offset)&&(e=e.createRange(),e.setStart(i.node,i.offset),t.removeAllRanges(),s>r?(t.addRange(e),t.extend(o.node,o.offset)):(e.setEnd(o.node,o.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Zu=null,ZC=null,tp=null,e_=!1;function Mk(t,e,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;e_||Zu==null||Zu!==my(r)||(r=Zu,"selectionStart"in r&&Dj(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),tp&&Tp(tp,r)||(tp=r,r=Sy(ZC,"onSelect"),0nd||(t.current=o_[nd],o_[nd]=null,nd--)}function Pn(t,e){nd++,o_[nd]=t.current,t.current=e}var Kc={},ri=al(Kc),ki=al(!1),ru=Kc;function Hd(t,e){var n=t.type.contextTypes;if(!n)return Kc;var r=t.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===e)return r.__reactInternalMemoizedMaskedChildContext;var i={},s;for(s in n)i[s]=e[s];return r&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=i),i}function Oi(t){return t=t.childContextTypes,t!=null}function _y(){Ln(ki),Ln(ri)}function Hk(t,e,n){if(ri.current!==Kc)throw Error(Ae(168));Pn(ri,e),Pn(ki,n)}function rF(t,e,n){var r=t.stateNode;if(e=e.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in e))throw Error(Ae(108,mq(t)||"Unknown",i));return Qn({},n,r)}function Ay(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||Kc,ru=ri.current,Pn(ri,t),Pn(ki,ki.current),!0}function zk(t,e,n){var r=t.stateNode;if(!r)throw Error(Ae(169));n?(t=rF(t,e,ru),r.__reactInternalMemoizedMergedChildContext=t,Ln(ki),Ln(ri),Pn(ri,t)):Ln(ki),Pn(ki,n)}var fa=null,Jb=!1,xS=!1;function iF(t){fa===null?fa=[t]:fa.push(t)}function O7(t){Jb=!0,iF(t)}function cl(){if(!xS&&fa!==null){xS=!0;var t=0,e=xn;try{var n=fa;for(xn=1;t>=o,i-=o,ma=1<<32-Ys(e)+i|n<j?(P=A,A=null):P=A.sibling;var k=h(b,A,w[j],S);if(k===null){A===null&&(A=P);break}t&&A&&k.alternate===null&&e(b,A),x=s(k,x,j),_===null?C=k:_.sibling=k,_=k,A=P}if(j===w.length)return n(b,A),zn&&Cl(b,j),C;if(A===null){for(;jj?(P=A,A=null):P=A.sibling;var O=h(b,A,k.value,S);if(O===null){A===null&&(A=P);break}t&&A&&O.alternate===null&&e(b,A),x=s(O,x,j),_===null?C=O:_.sibling=O,_=O,A=P}if(k.done)return n(b,A),zn&&Cl(b,j),C;if(A===null){for(;!k.done;j++,k=w.next())k=f(b,k.value,S),k!==null&&(x=s(k,x,j),_===null?C=k:_.sibling=k,_=k);return zn&&Cl(b,j),C}for(A=r(b,A);!k.done;j++,k=w.next())k=p(A,b,j,k.value,S),k!==null&&(t&&k.alternate!==null&&A.delete(k.key===null?j:k.key),x=s(k,x,j),_===null?C=k:_.sibling=k,_=k);return t&&A.forEach(function(E){return e(b,E)}),zn&&Cl(b,j),C}function y(b,x,w,S){if(typeof w=="object"&&w!==null&&w.type===Xu&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Vg:e:{for(var C=w.key,_=x;_!==null;){if(_.key===C){if(C=w.type,C===Xu){if(_.tag===7){n(b,_.sibling),x=i(_,w.props.children),x.return=b,b=x;break e}}else if(_.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===nc&&Kk(C)===_.type){n(b,_.sibling),x=i(_,w.props),x.ref=vh(b,_,w),x.return=b,b=x;break e}n(b,_);break}else e(b,_);_=_.sibling}w.type===Xu?(x=ql(w.props.children,b.mode,S,w.key),x.return=b,b=x):(S=Yv(w.type,w.key,w.props,null,b.mode,S),S.ref=vh(b,x,w),S.return=b,b=S)}return o(b);case Qu:e:{for(_=w.key;x!==null;){if(x.key===_)if(x.tag===4&&x.stateNode.containerInfo===w.containerInfo&&x.stateNode.implementation===w.implementation){n(b,x.sibling),x=i(x,w.children||[]),x.return=b,b=x;break e}else{n(b,x);break}else e(b,x);x=x.sibling}x=ES(w,b.mode,S),x.return=b,b=x}return o(b);case nc:return _=w._init,y(b,x,_(w._payload),S)}if(Lh(w))return g(b,x,w,S);if(fh(w))return m(b,x,w,S);tv(b,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,x!==null&&x.tag===6?(n(b,x.sibling),x=i(x,w),x.return=b,b=x):(n(b,x),x=jS(w,b.mode,S),x.return=b,b=x),o(b)):n(b,x)}return y}var Vd=cF(!0),lF=cF(!1),Ny=al(null),Ty=null,sd=null,Uj=null;function Bj(){Uj=sd=Ty=null}function Hj(t){var e=Ny.current;Ln(Ny),t._currentValue=e}function l_(t,e,n){for(;t!==null;){var r=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,r!==null&&(r.childLanes|=e)):r!==null&&(r.childLanes&e)!==e&&(r.childLanes|=e),t===n)break;t=t.return}}function vd(t,e){Ty=t,Uj=sd=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(Ti=!0),t.firstContext=null)}function As(t){var e=t._currentValue;if(Uj!==t)if(t={context:t,memoizedValue:e,next:null},sd===null){if(Ty===null)throw Error(Ae(308));sd=t,Ty.dependencies={lanes:0,firstContext:t}}else sd=sd.next=t;return e}var kl=null;function zj(t){kl===null?kl=[t]:kl.push(t)}function uF(t,e,n,r){var i=e.interleaved;return i===null?(n.next=n,zj(e)):(n.next=i.next,i.next=n),e.interleaved=n,Pa(t,r)}function Pa(t,e){t.lanes|=e;var n=t.alternate;for(n!==null&&(n.lanes|=e),n=t,t=t.return;t!==null;)t.childLanes|=e,n=t.alternate,n!==null&&(n.childLanes|=e),n=t,t=t.return;return n.tag===3?n.stateNode:null}var rc=!1;function Vj(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function dF(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Ca(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function Nc(t,e,n){var r=t.updateQueue;if(r===null)return null;if(r=r.shared,sn&2){var i=r.pending;return i===null?e.next=e:(e.next=i.next,i.next=e),r.pending=e,Pa(t,n)}return i=r.interleaved,i===null?(e.next=e,zj(r)):(e.next=i.next,i.next=e),r.interleaved=e,Pa(t,n)}function zv(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194240)!==0)){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,Tj(t,n)}}function Wk(t,e){var n=t.updateQueue,r=t.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,s=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};s===null?i=s=o:s=s.next=o,n=n.next}while(n!==null);s===null?i=s=e:s=s.next=e}else i=s=e;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:s,shared:r.shared,effects:r.effects},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}function Py(t,e,n,r){var i=t.updateQueue;rc=!1;var s=i.firstBaseUpdate,o=i.lastBaseUpdate,c=i.shared.pending;if(c!==null){i.shared.pending=null;var l=c,u=l.next;l.next=null,o===null?s=u:o.next=u,o=l;var d=t.alternate;d!==null&&(d=d.updateQueue,c=d.lastBaseUpdate,c!==o&&(c===null?d.firstBaseUpdate=u:c.next=u,d.lastBaseUpdate=l))}if(s!==null){var f=i.baseState;o=0,d=u=l=null,c=s;do{var h=c.lane,p=c.eventTime;if((r&h)===h){d!==null&&(d=d.next={eventTime:p,lane:0,tag:c.tag,payload:c.payload,callback:c.callback,next:null});e:{var g=t,m=c;switch(h=e,p=n,m.tag){case 1:if(g=m.payload,typeof g=="function"){f=g.call(p,f,h);break e}f=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=m.payload,h=typeof g=="function"?g.call(p,f,h):g,h==null)break e;f=Qn({},f,h);break e;case 2:rc=!0}}c.callback!==null&&c.lane!==0&&(t.flags|=64,h=i.effects,h===null?i.effects=[c]:h.push(c))}else p={eventTime:p,lane:h,tag:c.tag,payload:c.payload,callback:c.callback,next:null},d===null?(u=d=p,l=f):d=d.next=p,o|=h;if(c=c.next,c===null){if(c=i.shared.pending,c===null)break;h=c,c=h.next,h.next=null,i.lastBaseUpdate=h,i.shared.pending=null}}while(!0);if(d===null&&(l=f),i.baseState=l,i.firstBaseUpdate=u,i.lastBaseUpdate=d,e=i.shared.interleaved,e!==null){i=e;do o|=i.lane,i=i.next;while(i!==e)}else s===null&&(i.shared.lanes=0);ou|=o,t.lanes=o,t.memoizedState=f}}function qk(t,e,n){if(t=e.effects,e.effects=null,t!==null)for(e=0;en?n:4,t(!0);var r=wS.transition;wS.transition={};try{t(!1),e()}finally{xn=n,wS.transition=r}}function NF(){return js().memoizedState}function D7(t,e,n){var r=Pc(t);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},TF(t))PF(e,n);else if(n=uF(t,e,n,r),n!==null){var i=yi();Qs(n,t,r,i),kF(n,e,r)}}function $7(t,e,n){var r=Pc(t),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(TF(t))PF(e,i);else{var s=t.alternate;if(t.lanes===0&&(s===null||s.lanes===0)&&(s=e.lastRenderedReducer,s!==null))try{var o=e.lastRenderedState,c=s(o,n);if(i.hasEagerState=!0,i.eagerState=c,io(c,o)){var l=e.interleaved;l===null?(i.next=i,zj(e)):(i.next=l.next,l.next=i),e.interleaved=i;return}}catch{}finally{}n=uF(t,e,i,r),n!==null&&(i=yi(),Qs(n,t,r,i),kF(n,e,r))}}function TF(t){var e=t.alternate;return t===Yn||e!==null&&e===Yn}function PF(t,e){np=Oy=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function kF(t,e,n){if(n&4194240){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,Tj(t,n)}}var Iy={readContext:As,useCallback:qr,useContext:qr,useEffect:qr,useImperativeHandle:qr,useInsertionEffect:qr,useLayoutEffect:qr,useMemo:qr,useReducer:qr,useRef:qr,useState:qr,useDebugValue:qr,useDeferredValue:qr,useTransition:qr,useMutableSource:qr,useSyncExternalStore:qr,useId:qr,unstable_isNewReconciler:!1},L7={readContext:As,useCallback:function(t,e){return wo().memoizedState=[t,e===void 0?null:e],t},useContext:As,useEffect:Qk,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,Gv(4194308,4,CF.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Gv(4194308,4,t,e)},useInsertionEffect:function(t,e){return Gv(4,2,t,e)},useMemo:function(t,e){var n=wo();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var r=wo();return e=n!==void 0?n(e):e,r.memoizedState=r.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},r.queue=t,t=t.dispatch=D7.bind(null,Yn,t),[r.memoizedState,t]},useRef:function(t){var e=wo();return t={current:t},e.memoizedState=t},useState:Yk,useDebugValue:Jj,useDeferredValue:function(t){return wo().memoizedState=t},useTransition:function(){var t=Yk(!1),e=t[0];return t=M7.bind(null,t[1]),wo().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var r=Yn,i=wo();if(zn){if(n===void 0)throw Error(Ae(407));n=n()}else{if(n=e(),Mr===null)throw Error(Ae(349));su&30||mF(r,e,n)}i.memoizedState=n;var s={value:n,getSnapshot:e};return i.queue=s,Qk(vF.bind(null,r,s,t),[t]),r.flags|=2048,$p(9,gF.bind(null,r,s,n,e),void 0,null),n},useId:function(){var t=wo(),e=Mr.identifierPrefix;if(zn){var n=ga,r=ma;n=(r&~(1<<32-Ys(r)-1)).toString(32)+n,e=":"+e+"R"+n,n=Mp++,0<\/script>",t=t.removeChild(t.firstChild)):typeof r.is=="string"?t=o.createElement(n,{is:r.is}):(t=o.createElement(n),n==="select"&&(o=t,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):t=o.createElementNS(t,n),t[No]=e,t[Op]=r,BF(t,e,!1,!1),e.stateNode=t;e:{switch(o=GC(n,r),n){case"dialog":On("cancel",t),On("close",t),i=r;break;case"iframe":case"object":case"embed":On("load",t),i=r;break;case"video":case"audio":for(i=0;iWd&&(e.flags|=128,r=!0,yh(s,!1),e.lanes=4194304)}else{if(!r)if(t=ky(o),t!==null){if(e.flags|=128,r=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),yh(s,!0),s.tail===null&&s.tailMode==="hidden"&&!o.alternate&&!zn)return Yr(e),null}else 2*rr()-s.renderingStartTime>Wd&&n!==1073741824&&(e.flags|=128,r=!0,yh(s,!1),e.lanes=4194304);s.isBackwards?(o.sibling=e.child,e.child=o):(n=s.last,n!==null?n.sibling=o:e.child=o,s.last=o)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=rr(),e.sibling=null,n=Wn.current,Pn(Wn,r?n&1|2:n&1),e):(Yr(e),null);case 22:case 23:return iE(),r=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==r&&(e.flags|=8192),r&&e.mode&1?Ki&1073741824&&(Yr(e),e.subtreeFlags&6&&(e.flags|=8192)):Yr(e),null;case 24:return null;case 25:return null}throw Error(Ae(156,e.tag))}function K7(t,e){switch(Lj(e),e.tag){case 1:return Oi(e.type)&&_y(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Gd(),Ln(ki),Ln(ri),Wj(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return Kj(e),null;case 13:if(Ln(Wn),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(Ae(340));zd()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return Ln(Wn),null;case 4:return Gd(),null;case 10:return Hj(e.type._context),null;case 22:case 23:return iE(),null;case 24:return null;default:return null}}var rv=!1,ei=!1,W7=typeof WeakSet=="function"?WeakSet:Set,Qe=null;function od(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Zn(t,e,r)}else n.current=null}function y_(t,e,n){try{n()}catch(r){Zn(t,e,r)}}var aO=!1;function q7(t,e){if(t_=by,t=qL(),Dj(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,s=r.focusNode;r=r.focusOffset;try{n.nodeType,s.nodeType}catch{n=null;break e}var o=0,c=-1,l=-1,u=0,d=0,f=t,h=null;t:for(;;){for(var p;f!==n||i!==0&&f.nodeType!==3||(c=o+i),f!==s||r!==0&&f.nodeType!==3||(l=o+r),f.nodeType===3&&(o+=f.nodeValue.length),(p=f.firstChild)!==null;)h=f,f=p;for(;;){if(f===t)break t;if(h===n&&++u===i&&(c=o),h===s&&++d===r&&(l=o),(p=f.nextSibling)!==null)break;f=h,h=f.parentNode}f=p}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(n_={focusedElem:t,selectionRange:n},by=!1,Qe=e;Qe!==null;)if(e=Qe,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Qe=t;else for(;Qe!==null;){e=Qe;try{var g=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var m=g.memoizedProps,y=g.memoizedState,b=e.stateNode,x=b.getSnapshotBeforeUpdate(e.elementType===e.type?m:$s(e.type,m),y);b.__reactInternalSnapshotBeforeUpdate=x}break;case 3:var w=e.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Ae(163))}}catch(S){Zn(e,e.return,S)}if(t=e.sibling,t!==null){t.return=e.return,Qe=t;break}Qe=e.return}return g=aO,aO=!1,g}function rp(t,e,n){var r=e.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&t)===t){var s=i.destroy;i.destroy=void 0,s!==void 0&&y_(e,n,s)}i=i.next}while(i!==r)}}function t0(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var r=n.create;n.destroy=r()}n=n.next}while(n!==e)}}function x_(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function VF(t){var e=t.alternate;e!==null&&(t.alternate=null,VF(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[No],delete e[Op],delete e[s_],delete e[P7],delete e[k7])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function GF(t){return t.tag===5||t.tag===3||t.tag===4}function cO(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||GF(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function b_(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=Cy));else if(r!==4&&(t=t.child,t!==null))for(b_(t,e,n),t=t.sibling;t!==null;)b_(t,e,n),t=t.sibling}function w_(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(r!==4&&(t=t.child,t!==null))for(w_(t,e,n),t=t.sibling;t!==null;)w_(t,e,n),t=t.sibling}var Ur=null,Us=!1;function Ya(t,e,n){for(n=n.child;n!==null;)KF(t,e,n),n=n.sibling}function KF(t,e,n){if(Mo&&typeof Mo.onCommitFiberUnmount=="function")try{Mo.onCommitFiberUnmount(Wb,n)}catch{}switch(n.tag){case 5:ei||od(n,e);case 6:var r=Ur,i=Us;Ur=null,Ya(t,e,n),Ur=r,Us=i,Ur!==null&&(Us?(t=Ur,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):Ur.removeChild(n.stateNode));break;case 18:Ur!==null&&(Us?(t=Ur,n=n.stateNode,t.nodeType===8?yS(t.parentNode,n):t.nodeType===1&&yS(t,n),Ep(t)):yS(Ur,n.stateNode));break;case 4:r=Ur,i=Us,Ur=n.stateNode.containerInfo,Us=!0,Ya(t,e,n),Ur=r,Us=i;break;case 0:case 11:case 14:case 15:if(!ei&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var s=i,o=s.destroy;s=s.tag,o!==void 0&&(s&2||s&4)&&y_(n,e,o),i=i.next}while(i!==r)}Ya(t,e,n);break;case 1:if(!ei&&(od(n,e),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(c){Zn(n,e,c)}Ya(t,e,n);break;case 21:Ya(t,e,n);break;case 22:n.mode&1?(ei=(r=ei)||n.memoizedState!==null,Ya(t,e,n),ei=r):Ya(t,e,n);break;default:Ya(t,e,n)}}function lO(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new W7),e.forEach(function(r){var i=r9.bind(null,t,r);n.has(r)||(n.add(r),r.then(i,i))})}}function Is(t,e){var n=e.deletions;if(n!==null)for(var r=0;ri&&(i=o),r&=~s}if(r=i,r=rr()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Q7(r/1960))-r,10t?16:t,yc===null)var r=!1;else{if(t=yc,yc=null,Dy=0,sn&6)throw Error(Ae(331));var i=sn;for(sn|=4,Qe=t.current;Qe!==null;){var s=Qe,o=s.child;if(Qe.flags&16){var c=s.deletions;if(c!==null){for(var l=0;lrr()-nE?Wl(t,0):tE|=n),Ii(t,e)}function e4(t,e){e===0&&(t.mode&1?(e=qg,qg<<=1,!(qg&130023424)&&(qg=4194304)):e=1);var n=yi();t=Pa(t,e),t!==null&&(cg(t,e,n),Ii(t,n))}function n9(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),e4(t,n)}function r9(t,e){var n=0;switch(t.tag){case 13:var r=t.stateNode,i=t.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=t.stateNode;break;default:throw Error(Ae(314))}r!==null&&r.delete(e),e4(t,n)}var t4;t4=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||ki.current)Ti=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return Ti=!1,V7(t,e,n);Ti=!!(t.flags&131072)}else Ti=!1,zn&&e.flags&1048576&&sF(e,Ey,e.index);switch(e.lanes=0,e.tag){case 2:var r=e.type;Kv(t,e),t=e.pendingProps;var i=Hd(e,ri.current);vd(e,n),i=Yj(null,e,r,t,i,n);var s=Qj();return e.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Oi(r)?(s=!0,Ay(e)):s=!1,e.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Vj(e),i.updater=e0,e.stateNode=i,i._reactInternals=e,d_(e,r,t,n),e=p_(null,e,r,!0,s,n)):(e.tag=0,zn&&s&&$j(e),ui(null,e,i,n),e=e.child),e;case 16:r=e.elementType;e:{switch(Kv(t,e),t=e.pendingProps,i=r._init,r=i(r._payload),e.type=r,i=e.tag=s9(r),t=$s(r,t),i){case 0:e=h_(null,e,r,t,n);break e;case 1:e=iO(null,e,r,t,n);break e;case 11:e=nO(null,e,r,t,n);break e;case 14:e=rO(null,e,r,$s(r.type,t),n);break e}throw Error(Ae(306,r,""))}return e;case 0:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:$s(r,i),h_(t,e,r,i,n);case 1:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:$s(r,i),iO(t,e,r,i,n);case 3:e:{if(LF(e),t===null)throw Error(Ae(387));r=e.pendingProps,s=e.memoizedState,i=s.element,dF(t,e),Py(e,r,null,n);var o=e.memoizedState;if(r=o.element,s.isDehydrated)if(s={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},e.updateQueue.baseState=s,e.memoizedState=s,e.flags&256){i=Kd(Error(Ae(423)),e),e=sO(t,e,r,n,i);break e}else if(r!==i){i=Kd(Error(Ae(424)),e),e=sO(t,e,r,n,i);break e}else for(Xi=Ec(e.stateNode.containerInfo.firstChild),Ji=e,zn=!0,Vs=null,n=lF(e,null,r,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(zd(),r===i){e=ka(t,e,n);break e}ui(t,e,r,n)}e=e.child}return e;case 5:return fF(e),t===null&&c_(e),r=e.type,i=e.pendingProps,s=t!==null?t.memoizedProps:null,o=i.children,r_(r,i)?o=null:s!==null&&r_(r,s)&&(e.flags|=32),$F(t,e),ui(t,e,o,n),e.child;case 6:return t===null&&c_(e),null;case 13:return FF(t,e,n);case 4:return Gj(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=Vd(e,null,r,n):ui(t,e,r,n),e.child;case 11:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:$s(r,i),nO(t,e,r,i,n);case 7:return ui(t,e,e.pendingProps,n),e.child;case 8:return ui(t,e,e.pendingProps.children,n),e.child;case 12:return ui(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(r=e.type._context,i=e.pendingProps,s=e.memoizedProps,o=i.value,Pn(Ny,r._currentValue),r._currentValue=o,s!==null)if(io(s.value,o)){if(s.children===i.children&&!ki.current){e=ka(t,e,n);break e}}else for(s=e.child,s!==null&&(s.return=e);s!==null;){var c=s.dependencies;if(c!==null){o=s.child;for(var l=c.firstContext;l!==null;){if(l.context===r){if(s.tag===1){l=Ca(-1,n&-n),l.tag=2;var u=s.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}s.lanes|=n,l=s.alternate,l!==null&&(l.lanes|=n),l_(s.return,n,e),c.lanes|=n;break}l=l.next}}else if(s.tag===10)o=s.type===e.type?null:s.child;else if(s.tag===18){if(o=s.return,o===null)throw Error(Ae(341));o.lanes|=n,c=o.alternate,c!==null&&(c.lanes|=n),l_(o,n,e),o=s.sibling}else o=s.child;if(o!==null)o.return=s;else for(o=s;o!==null;){if(o===e){o=null;break}if(s=o.sibling,s!==null){s.return=o.return,o=s;break}o=o.return}s=o}ui(t,e,i.children,n),e=e.child}return e;case 9:return i=e.type,r=e.pendingProps.children,vd(e,n),i=As(i),r=r(i),e.flags|=1,ui(t,e,r,n),e.child;case 14:return r=e.type,i=$s(r,e.pendingProps),i=$s(r.type,i),rO(t,e,r,i,n);case 15:return MF(t,e,e.type,e.pendingProps,n);case 17:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:$s(r,i),Kv(t,e),e.tag=1,Oi(r)?(t=!0,Ay(e)):t=!1,vd(e,n),OF(e,r,i),d_(e,r,i,n),p_(null,e,r,!0,t,n);case 19:return UF(t,e,n);case 22:return DF(t,e,n)}throw Error(Ae(156,e.tag))};function n4(t,e){return TL(t,e)}function i9(t,e,n,r){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function bs(t,e,n,r){return new i9(t,e,n,r)}function oE(t){return t=t.prototype,!(!t||!t.isReactComponent)}function s9(t){if(typeof t=="function")return oE(t)?1:0;if(t!=null){if(t=t.$$typeof,t===Aj)return 11;if(t===jj)return 14}return 2}function kc(t,e){var n=t.alternate;return n===null?(n=bs(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function Yv(t,e,n,r,i,s){var o=2;if(r=t,typeof t=="function")oE(t)&&(o=1);else if(typeof t=="string")o=5;else e:switch(t){case Xu:return ql(n.children,i,s,e);case _j:o=8,i|=8;break;case MC:return t=bs(12,n,e,i|2),t.elementType=MC,t.lanes=s,t;case DC:return t=bs(13,n,e,i),t.elementType=DC,t.lanes=s,t;case $C:return t=bs(19,n,e,i),t.elementType=$C,t.lanes=s,t;case fL:return r0(n,i,s,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case uL:o=10;break e;case dL:o=9;break e;case Aj:o=11;break e;case jj:o=14;break e;case nc:o=16,r=null;break e}throw Error(Ae(130,t==null?t:typeof t,""))}return e=bs(o,n,e,i),e.elementType=t,e.type=r,e.lanes=s,e}function ql(t,e,n,r){return t=bs(7,t,r,e),t.lanes=n,t}function r0(t,e,n,r){return t=bs(22,t,r,e),t.elementType=fL,t.lanes=n,t.stateNode={isHidden:!1},t}function jS(t,e,n){return t=bs(6,t,null,e),t.lanes=n,t}function ES(t,e,n){return e=bs(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function o9(t,e,n,r,i){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=aS(0),this.expirationTimes=aS(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=aS(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function aE(t,e,n,r,i,s,o,c,l){return t=new o9(t,e,n,c,l),e===1?(e=1,s===!0&&(e|=8)):e=0,s=bs(3,null,null,e),t.current=s,s.stateNode=t,s.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Vj(s),t}function a9(t,e,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(o4)}catch(t){console.error(t)}}o4(),oL.exports=is;var Of=oL.exports;const a4=un(Of);var c4,vO=Of;c4=vO.createRoot,vO.hydrateRoot;var yO=["light","dark"],f9="(prefers-color-scheme: dark)",h9=v.createContext(void 0),p9={setTheme:t=>{},themes:[]},m9=()=>{var t;return(t=v.useContext(h9))!=null?t:p9};v.memo(({forcedTheme:t,storageKey:e,attribute:n,enableSystem:r,enableColorScheme:i,defaultTheme:s,value:o,attrs:c,nonce:l})=>{let u=s==="system",d=n==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${c.map(g=>`'${g}'`).join(",")})`};`:`var d=document.documentElement,n='${n}',s='setAttribute';`,f=i?yO.includes(s)&&s?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${s}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",h=(g,m=!1,y=!0)=>{let b=o?o[g]:g,x=m?g+"|| ''":`'${b}'`,w="";return i&&y&&!m&&yO.includes(g)&&(w+=`d.style.colorScheme = '${g}';`),n==="class"?m||b?w+=`c.add(${x})`:w+="null":b&&(w+=`d[s](n,${x})`),w},p=t?`!function(){${d}${h(t)}}()`:r?`!function(){try{${d}var e=localStorage.getItem('${e}');if('system'===e||(!e&&${u})){var t='${f9}',m=window.matchMedia(t);if(m.media!==t||m.matches){${h("dark")}}else{${h("light")}}}else if(e){${o?`var x=${JSON.stringify(o)};`:""}${h(o?"x[e]":"e",!0)}}${u?"":"else{"+h(s,!1,!1)+"}"}${f}}catch(e){}}()`:`!function(){try{${d}var e=localStorage.getItem('${e}');if(e){${o?`var x=${JSON.stringify(o)};`:""}${h(o?"x[e]":"e",!0)}}else{${h(s,!1,!1)};}${f}}catch(t){}}();`;return v.createElement("script",{nonce:l,dangerouslySetInnerHTML:{__html:p}})});var g9=t=>{switch(t){case"success":return x9;case"info":return w9;case"warning":return b9;case"error":return S9;default:return null}},v9=Array(12).fill(0),y9=({visible:t})=>T.createElement("div",{className:"sonner-loading-wrapper","data-visible":t},T.createElement("div",{className:"sonner-spinner"},v9.map((e,n)=>T.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),x9=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),b9=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),w9=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),S9=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),C9=()=>{let[t,e]=T.useState(document.hidden);return T.useEffect(()=>{let n=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",n),()=>window.removeEventListener("visibilitychange",n)},[]),t},j_=1,_9=class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let e=this.subscribers.indexOf(t);this.subscribers.splice(e,1)}),this.publish=t=>{this.subscribers.forEach(e=>e(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var e;let{message:n,...r}=t,i=typeof(t==null?void 0:t.id)=="number"||((e=t.id)==null?void 0:e.length)>0?t.id:j_++,s=this.toasts.find(c=>c.id===i),o=t.dismissible===void 0?!0:t.dismissible;return s?this.toasts=this.toasts.map(c=>c.id===i?(this.publish({...c,...t,id:i,title:n}),{...c,...t,id:i,dismissible:o,title:n}):c):this.addToast({title:n,...r,dismissible:o,id:i}),i},this.dismiss=t=>(t||this.toasts.forEach(e=>{this.subscribers.forEach(n=>n({id:e.id,dismiss:!0}))}),this.subscribers.forEach(e=>e({id:t,dismiss:!0})),t),this.message=(t,e)=>this.create({...e,message:t}),this.error=(t,e)=>this.create({...e,message:t,type:"error"}),this.success=(t,e)=>this.create({...e,type:"success",message:t}),this.info=(t,e)=>this.create({...e,type:"info",message:t}),this.warning=(t,e)=>this.create({...e,type:"warning",message:t}),this.loading=(t,e)=>this.create({...e,type:"loading",message:t}),this.promise=(t,e)=>{if(!e)return;let n;e.loading!==void 0&&(n=this.create({...e,promise:t,type:"loading",message:e.loading,description:typeof e.description!="function"?e.description:void 0}));let r=t instanceof Promise?t:t(),i=n!==void 0;return r.then(async s=>{if(j9(s)&&!s.ok){i=!1;let o=typeof e.error=="function"?await e.error(`HTTP error! status: ${s.status}`):e.error,c=typeof e.description=="function"?await e.description(`HTTP error! status: ${s.status}`):e.description;this.create({id:n,type:"error",message:o,description:c})}else if(e.success!==void 0){i=!1;let o=typeof e.success=="function"?await e.success(s):e.success,c=typeof e.description=="function"?await e.description(s):e.description;this.create({id:n,type:"success",message:o,description:c})}}).catch(async s=>{if(e.error!==void 0){i=!1;let o=typeof e.error=="function"?await e.error(s):e.error,c=typeof e.description=="function"?await e.description(s):e.description;this.create({id:n,type:"error",message:o,description:c})}}).finally(()=>{var s;i&&(this.dismiss(n),n=void 0),(s=e.finally)==null||s.call(e)}),n},this.custom=(t,e)=>{let n=(e==null?void 0:e.id)||j_++;return this.create({jsx:t(n),id:n,...e}),n},this.subscribers=[],this.toasts=[]}},Gi=new _9,A9=(t,e)=>{let n=(e==null?void 0:e.id)||j_++;return Gi.addToast({title:t,...e,id:n}),n},j9=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",E9=A9,N9=()=>Gi.toasts,se=Object.assign(E9,{success:Gi.success,info:Gi.info,warning:Gi.warning,error:Gi.error,custom:Gi.custom,message:Gi.message,promise:Gi.promise,dismiss:Gi.dismiss,loading:Gi.loading},{getHistory:N9});function T9(t,{insertAt:e}={}){if(typeof document>"u")return;let n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",e==="top"&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=t:r.appendChild(document.createTextNode(t))}T9(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}:where([data-sonner-toaster][data-x-position="right"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position="left"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} -`);function ov(t){return t.label!==void 0}var P9=3,k9="32px",O9=4e3,I9=356,R9=14,M9=20,D9=200;function $9(...t){return t.filter(Boolean).join(" ")}var L9=t=>{var e,n,r,i,s,o,c,l,u,d;let{invert:f,toast:h,unstyled:p,interacting:g,setHeights:m,visibleToasts:y,heights:b,index:x,toasts:w,expanded:S,removeToast:C,defaultRichColors:_,closeButton:A,style:j,cancelButtonStyle:P,actionButtonStyle:k,className:O="",descriptionClassName:E="",duration:R,position:M,gap:G,loadingIcon:L,expandByDefault:V,classNames:I,icons:D,closeButtonAriaLabel:X="Close toast",pauseWhenPageIsHidden:Q,cn:J}=t,[ye,U]=T.useState(!1),[ne,ue]=T.useState(!1),[F,ce]=T.useState(!1),[te,pe]=T.useState(!1),[we,Y]=T.useState(0),[nt,Ue]=T.useState(0),at=T.useRef(null),Be=T.useRef(null),Bt=x===0,N=x+1<=y,$=h.type,B=h.dismissible!==!1,K=h.className||"",Z=h.descriptionClassName||"",H=T.useMemo(()=>b.findIndex(ct=>ct.toastId===h.id)||0,[b,h.id]),re=T.useMemo(()=>{var ct;return(ct=h.closeButton)!=null?ct:A},[h.closeButton,A]),me=T.useMemo(()=>h.duration||R||O9,[h.duration,R]),be=T.useRef(0),ke=T.useRef(0),Se=T.useRef(0),qe=T.useRef(null),[st,Dt]=M.split("-"),We=T.useMemo(()=>b.reduce((ct,jt,ot)=>ot>=H?ct:ct+jt.height,0),[b,H]),Je=C9(),At=h.invert||f,Yt=$==="loading";ke.current=T.useMemo(()=>H*G+We,[H,We]),T.useEffect(()=>{U(!0)},[]),T.useLayoutEffect(()=>{if(!ye)return;let ct=Be.current,jt=ct.style.height;ct.style.height="auto";let ot=ct.getBoundingClientRect().height;ct.style.height=jt,Ue(ot),m(Ze=>Ze.find(gn=>gn.toastId===h.id)?Ze.map(gn=>gn.toastId===h.id?{...gn,height:ot}:gn):[{toastId:h.id,height:ot,position:h.position},...Ze])},[ye,h.title,h.description,m,h.id]);let Xn=T.useCallback(()=>{ue(!0),Y(ke.current),m(ct=>ct.filter(jt=>jt.toastId!==h.id)),setTimeout(()=>{C(h)},D9)},[h,C,m,ke]);T.useEffect(()=>{if(h.promise&&$==="loading"||h.duration===1/0||h.type==="loading")return;let ct,jt=me;return S||g||Q&&Je?(()=>{if(Se.current{var ot;(ot=h.onAutoClose)==null||ot.call(h,h),Xn()},jt)),()=>clearTimeout(ct)},[S,g,V,h,me,Xn,h.promise,$,Q,Je]),T.useEffect(()=>{let ct=Be.current;if(ct){let jt=ct.getBoundingClientRect().height;return Ue(jt),m(ot=>[{toastId:h.id,height:jt,position:h.position},...ot]),()=>m(ot=>ot.filter(Ze=>Ze.toastId!==h.id))}},[m,h.id]),T.useEffect(()=>{h.delete&&Xn()},[Xn,h.delete]);function cr(){return D!=null&&D.loading?T.createElement("div",{className:"sonner-loader","data-visible":$==="loading"},D.loading):L?T.createElement("div",{className:"sonner-loader","data-visible":$==="loading"},L):T.createElement(y9,{visible:$==="loading"})}return T.createElement("li",{"aria-live":h.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:Be,className:J(O,K,I==null?void 0:I.toast,(e=h==null?void 0:h.classNames)==null?void 0:e.toast,I==null?void 0:I.default,I==null?void 0:I[$],(n=h==null?void 0:h.classNames)==null?void 0:n[$]),"data-sonner-toast":"","data-rich-colors":(r=h.richColors)!=null?r:_,"data-styled":!(h.jsx||h.unstyled||p),"data-mounted":ye,"data-promise":!!h.promise,"data-removed":ne,"data-visible":N,"data-y-position":st,"data-x-position":Dt,"data-index":x,"data-front":Bt,"data-swiping":F,"data-dismissible":B,"data-type":$,"data-invert":At,"data-swipe-out":te,"data-expanded":!!(S||V&&ye),style:{"--index":x,"--toasts-before":x,"--z-index":w.length-x,"--offset":`${ne?we:ke.current}px`,"--initial-height":V?"auto":`${nt}px`,...j,...h.style},onPointerDown:ct=>{Yt||!B||(at.current=new Date,Y(ke.current),ct.target.setPointerCapture(ct.pointerId),ct.target.tagName!=="BUTTON"&&(ce(!0),qe.current={x:ct.clientX,y:ct.clientY}))},onPointerUp:()=>{var ct,jt,ot,Ze;if(te||!B)return;qe.current=null;let gn=Number(((ct=Be.current)==null?void 0:ct.style.getPropertyValue("--swipe-amount").replace("px",""))||0),Os=new Date().getTime()-((jt=at.current)==null?void 0:jt.getTime()),ea=Math.abs(gn)/Os;if(Math.abs(gn)>=M9||ea>.11){Y(ke.current),(ot=h.onDismiss)==null||ot.call(h,h),Xn(),pe(!0);return}(Ze=Be.current)==null||Ze.style.setProperty("--swipe-amount","0px"),ce(!1)},onPointerMove:ct=>{var jt;if(!qe.current||!B)return;let ot=ct.clientY-qe.current.y,Ze=ct.clientX-qe.current.x,gn=(st==="top"?Math.min:Math.max)(0,ot),Os=ct.pointerType==="touch"?10:2;Math.abs(gn)>Os?(jt=Be.current)==null||jt.style.setProperty("--swipe-amount",`${ot}px`):Math.abs(Ze)>Os&&(qe.current=null)}},re&&!h.jsx?T.createElement("button",{"aria-label":X,"data-disabled":Yt,"data-close-button":!0,onClick:Yt||!B?()=>{}:()=>{var ct;Xn(),(ct=h.onDismiss)==null||ct.call(h,h)},className:J(I==null?void 0:I.closeButton,(i=h==null?void 0:h.classNames)==null?void 0:i.closeButton)},T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},T.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),T.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,h.jsx||T.isValidElement(h.title)?h.jsx||h.title:T.createElement(T.Fragment,null,$||h.icon||h.promise?T.createElement("div",{"data-icon":"",className:J(I==null?void 0:I.icon,(s=h==null?void 0:h.classNames)==null?void 0:s.icon)},h.promise||h.type==="loading"&&!h.icon?h.icon||cr():null,h.type!=="loading"?h.icon||(D==null?void 0:D[$])||g9($):null):null,T.createElement("div",{"data-content":"",className:J(I==null?void 0:I.content,(o=h==null?void 0:h.classNames)==null?void 0:o.content)},T.createElement("div",{"data-title":"",className:J(I==null?void 0:I.title,(c=h==null?void 0:h.classNames)==null?void 0:c.title)},h.title),h.description?T.createElement("div",{"data-description":"",className:J(E,Z,I==null?void 0:I.description,(l=h==null?void 0:h.classNames)==null?void 0:l.description)},h.description):null),T.isValidElement(h.cancel)?h.cancel:h.cancel&&ov(h.cancel)?T.createElement("button",{"data-button":!0,"data-cancel":!0,style:h.cancelButtonStyle||P,onClick:ct=>{var jt,ot;ov(h.cancel)&&B&&((ot=(jt=h.cancel).onClick)==null||ot.call(jt,ct),Xn())},className:J(I==null?void 0:I.cancelButton,(u=h==null?void 0:h.classNames)==null?void 0:u.cancelButton)},h.cancel.label):null,T.isValidElement(h.action)?h.action:h.action&&ov(h.action)?T.createElement("button",{"data-button":!0,"data-action":!0,style:h.actionButtonStyle||k,onClick:ct=>{var jt,ot;ov(h.action)&&(ct.defaultPrevented||((ot=(jt=h.action).onClick)==null||ot.call(jt,ct),Xn()))},className:J(I==null?void 0:I.actionButton,(d=h==null?void 0:h.classNames)==null?void 0:d.actionButton)},h.action.label):null))};function xO(){if(typeof window>"u"||typeof document>"u")return"ltr";let t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}var F9=t=>{let{invert:e,position:n="bottom-right",hotkey:r=["altKey","KeyT"],expand:i,closeButton:s,className:o,offset:c,theme:l="light",richColors:u,duration:d,style:f,visibleToasts:h=P9,toastOptions:p,dir:g=xO(),gap:m=R9,loadingIcon:y,icons:b,containerAriaLabel:x="Notifications",pauseWhenPageIsHidden:w,cn:S=$9}=t,[C,_]=T.useState([]),A=T.useMemo(()=>Array.from(new Set([n].concat(C.filter(Q=>Q.position).map(Q=>Q.position)))),[C,n]),[j,P]=T.useState([]),[k,O]=T.useState(!1),[E,R]=T.useState(!1),[M,G]=T.useState(l!=="system"?l:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),L=T.useRef(null),V=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),I=T.useRef(null),D=T.useRef(!1),X=T.useCallback(Q=>{var J;(J=C.find(ye=>ye.id===Q.id))!=null&&J.delete||Gi.dismiss(Q.id),_(ye=>ye.filter(({id:U})=>U!==Q.id))},[C]);return T.useEffect(()=>Gi.subscribe(Q=>{if(Q.dismiss){_(J=>J.map(ye=>ye.id===Q.id?{...ye,delete:!0}:ye));return}setTimeout(()=>{a4.flushSync(()=>{_(J=>{let ye=J.findIndex(U=>U.id===Q.id);return ye!==-1?[...J.slice(0,ye),{...J[ye],...Q},...J.slice(ye+1)]:[Q,...J]})})})}),[]),T.useEffect(()=>{if(l!=="system"){G(l);return}l==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?G("dark"):G("light")),typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:Q})=>{G(Q?"dark":"light")})},[l]),T.useEffect(()=>{C.length<=1&&O(!1)},[C]),T.useEffect(()=>{let Q=J=>{var ye,U;r.every(ne=>J[ne]||J.code===ne)&&(O(!0),(ye=L.current)==null||ye.focus()),J.code==="Escape"&&(document.activeElement===L.current||(U=L.current)!=null&&U.contains(document.activeElement))&&O(!1)};return document.addEventListener("keydown",Q),()=>document.removeEventListener("keydown",Q)},[r]),T.useEffect(()=>{if(L.current)return()=>{I.current&&(I.current.focus({preventScroll:!0}),I.current=null,D.current=!1)}},[L.current]),C.length?T.createElement("section",{"aria-label":`${x} ${V}`,tabIndex:-1},A.map((Q,J)=>{var ye;let[U,ne]=Q.split("-");return T.createElement("ol",{key:Q,dir:g==="auto"?xO():g,tabIndex:-1,ref:L,className:o,"data-sonner-toaster":!0,"data-theme":M,"data-y-position":U,"data-x-position":ne,style:{"--front-toast-height":`${((ye=j[0])==null?void 0:ye.height)||0}px`,"--offset":typeof c=="number"?`${c}px`:c||k9,"--width":`${I9}px`,"--gap":`${m}px`,...f},onBlur:ue=>{D.current&&!ue.currentTarget.contains(ue.relatedTarget)&&(D.current=!1,I.current&&(I.current.focus({preventScroll:!0}),I.current=null))},onFocus:ue=>{ue.target instanceof HTMLElement&&ue.target.dataset.dismissible==="false"||D.current||(D.current=!0,I.current=ue.relatedTarget)},onMouseEnter:()=>O(!0),onMouseMove:()=>O(!0),onMouseLeave:()=>{E||O(!1)},onPointerDown:ue=>{ue.target instanceof HTMLElement&&ue.target.dataset.dismissible==="false"||R(!0)},onPointerUp:()=>R(!1)},C.filter(ue=>!ue.position&&J===0||ue.position===Q).map((ue,F)=>{var ce,te;return T.createElement(L9,{key:ue.id,icons:b,index:F,toast:ue,defaultRichColors:u,duration:(ce=p==null?void 0:p.duration)!=null?ce:d,className:p==null?void 0:p.className,descriptionClassName:p==null?void 0:p.descriptionClassName,invert:e,visibleToasts:h,closeButton:(te=p==null?void 0:p.closeButton)!=null?te:s,interacting:E,position:Q,style:p==null?void 0:p.style,unstyled:p==null?void 0:p.unstyled,classNames:p==null?void 0:p.classNames,cancelButtonStyle:p==null?void 0:p.cancelButtonStyle,actionButtonStyle:p==null?void 0:p.actionButtonStyle,removeToast:X,toasts:C.filter(pe=>pe.position==ue.position),heights:j.filter(pe=>pe.position==ue.position),setHeights:P,expandByDefault:i,gap:m,loadingIcon:y,expanded:k,pauseWhenPageIsHidden:w,cn:S})}))})):null};const U9=({...t})=>{const{theme:e="system"}=m9();return a.jsx(F9,{theme:e,className:"toaster group",position:"bottom-right",visibleToasts:2,closeButton:!0,toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg group-[.toaster]:pr-8",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",closeButton:"group-[.toast]:absolute group-[.toast]:left-3 group-[.toast]:top-3 group-[.toast]:h-5 group-[.toast]:w-5 group-[.toast]:rounded-md group-[.toast]:p-1 group-[.toast]:text-foreground/70 group-[.toast]:opacity-100 group-[.toast]:transition-opacity hover:group-[.toast]:text-foreground hover:group-[.toast]:bg-muted/50 focus:group-[.toast]:opacity-100 focus:group-[.toast]:outline-none focus:group-[.toast]:ring-1 focus:group-[.toast]:ring-ring"}},...t})};function Ne(t,e,{checkForDefaultPrevented:n=!0}={}){return function(i){if(t==null||t(i),n===!1||!i.defaultPrevented)return e==null?void 0:e(i)}}function B9(t,e){typeof t=="function"?t(e):t!=null&&(t.current=e)}function c0(...t){return e=>t.forEach(n=>B9(n,e))}function Ot(...t){return v.useCallback(c0(...t),t)}function H9(t,e){const n=v.createContext(e),r=s=>{const{children:o,...c}=s,l=v.useMemo(()=>c,Object.values(c));return a.jsx(n.Provider,{value:l,children:o})};r.displayName=t+"Provider";function i(s){const o=v.useContext(n);if(o)return o;if(e!==void 0)return e;throw new Error(`\`${s}\` must be used within \`${t}\``)}return[r,i]}function Fi(t,e=[]){let n=[];function r(s,o){const c=v.createContext(o),l=n.length;n=[...n,o];const u=f=>{var b;const{scope:h,children:p,...g}=f,m=((b=h==null?void 0:h[t])==null?void 0:b[l])||c,y=v.useMemo(()=>g,Object.values(g));return a.jsx(m.Provider,{value:y,children:p})};u.displayName=s+"Provider";function d(f,h){var m;const p=((m=h==null?void 0:h[t])==null?void 0:m[l])||c,g=v.useContext(p);if(g)return g;if(o!==void 0)return o;throw new Error(`\`${f}\` must be used within \`${s}\``)}return[u,d]}const i=()=>{const s=n.map(o=>v.createContext(o));return function(c){const l=(c==null?void 0:c[t])||s;return v.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,z9(i,...e)]}function z9(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(s){const o=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(s)[`__scope${u}`];return{...c,...f}},{});return v.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}var Ho=v.forwardRef((t,e)=>{const{children:n,...r}=t,i=v.Children.toArray(n),s=i.find(V9);if(s){const o=s.props.children,c=i.map(l=>l===s?v.Children.count(o)>1?v.Children.only(null):v.isValidElement(o)?o.props.children:null:l);return a.jsx(E_,{...r,ref:e,children:v.isValidElement(o)?v.cloneElement(o,void 0,c):null})}return a.jsx(E_,{...r,ref:e,children:n})});Ho.displayName="Slot";var E_=v.forwardRef((t,e)=>{const{children:n,...r}=t;if(v.isValidElement(n)){const i=K9(n);return v.cloneElement(n,{...G9(r,n.props),ref:e?c0(e,i):i})}return v.Children.count(n)>1?v.Children.only(null):null});E_.displayName="SlotClone";var dE=({children:t})=>a.jsx(a.Fragment,{children:t});function V9(t){return v.isValidElement(t)&&t.type===dE}function G9(t,e){const n={...e};for(const r in e){const i=t[r],s=e[r];/^on[A-Z]/.test(r)?i&&s?n[r]=(...c)=>{s(...c),i(...c)}:i&&(n[r]=i):r==="style"?n[r]={...i,...s}:r==="className"&&(n[r]=[i,s].filter(Boolean).join(" "))}return{...t,...n}}function K9(t){var r,i;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(i=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:i.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var W9=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"],it=W9.reduce((t,e)=>{const n=v.forwardRef((r,i)=>{const{asChild:s,...o}=r,c=s?Ho:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),a.jsx(c,{...o,ref:i})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{});function l4(t,e){t&&Of.flushSync(()=>t.dispatchEvent(e))}function Cr(t){const e=v.useRef(t);return v.useEffect(()=>{e.current=t}),v.useMemo(()=>(...n)=>{var r;return(r=e.current)==null?void 0:r.call(e,...n)},[])}function q9(t,e=globalThis==null?void 0:globalThis.document){const n=Cr(t);v.useEffect(()=>{const r=i=>{i.key==="Escape"&&n(i)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[n,e])}var Y9="DismissableLayer",N_="dismissableLayer.update",Q9="dismissableLayer.pointerDownOutside",X9="dismissableLayer.focusOutside",bO,u4=v.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),fg=v.forwardRef((t,e)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:s,onInteractOutside:o,onDismiss:c,...l}=t,u=v.useContext(u4),[d,f]=v.useState(null),h=(d==null?void 0:d.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=v.useState({}),g=Ot(e,A=>f(A)),m=Array.from(u.layers),[y]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),b=m.indexOf(y),x=d?m.indexOf(d):-1,w=u.layersWithOutsidePointerEventsDisabled.size>0,S=x>=b,C=eY(A=>{const j=A.target,P=[...u.branches].some(k=>k.contains(j));!S||P||(i==null||i(A),o==null||o(A),A.defaultPrevented||c==null||c())},h),_=tY(A=>{const j=A.target;[...u.branches].some(k=>k.contains(j))||(s==null||s(A),o==null||o(A),A.defaultPrevented||c==null||c())},h);return q9(A=>{x===u.layers.size-1&&(r==null||r(A),!A.defaultPrevented&&c&&(A.preventDefault(),c()))},h),v.useEffect(()=>{if(d)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(bO=h.body.style.pointerEvents,h.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(d)),u.layers.add(d),wO(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(h.body.style.pointerEvents=bO)}},[d,h,n,u]),v.useEffect(()=>()=>{d&&(u.layers.delete(d),u.layersWithOutsidePointerEventsDisabled.delete(d),wO())},[d,u]),v.useEffect(()=>{const A=()=>p({});return document.addEventListener(N_,A),()=>document.removeEventListener(N_,A)},[]),a.jsx(it.div,{...l,ref:g,style:{pointerEvents:w?S?"auto":"none":void 0,...t.style},onFocusCapture:Ne(t.onFocusCapture,_.onFocusCapture),onBlurCapture:Ne(t.onBlurCapture,_.onBlurCapture),onPointerDownCapture:Ne(t.onPointerDownCapture,C.onPointerDownCapture)})});fg.displayName=Y9;var J9="DismissableLayerBranch",Z9=v.forwardRef((t,e)=>{const n=v.useContext(u4),r=v.useRef(null),i=Ot(e,r);return v.useEffect(()=>{const s=r.current;if(s)return n.branches.add(s),()=>{n.branches.delete(s)}},[n.branches]),a.jsx(it.div,{...t,ref:i})});Z9.displayName=J9;function eY(t,e=globalThis==null?void 0:globalThis.document){const n=Cr(t),r=v.useRef(!1),i=v.useRef(()=>{});return v.useEffect(()=>{const s=c=>{if(c.target&&!r.current){let l=function(){d4(Q9,n,u,{discrete:!0})};const u={originalEvent:c};c.pointerType==="touch"?(e.removeEventListener("click",i.current),i.current=l,e.addEventListener("click",i.current,{once:!0})):l()}else e.removeEventListener("click",i.current);r.current=!1},o=window.setTimeout(()=>{e.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(o),e.removeEventListener("pointerdown",s),e.removeEventListener("click",i.current)}},[e,n]),{onPointerDownCapture:()=>r.current=!0}}function tY(t,e=globalThis==null?void 0:globalThis.document){const n=Cr(t),r=v.useRef(!1);return v.useEffect(()=>{const i=s=>{s.target&&!r.current&&d4(X9,n,{originalEvent:s},{discrete:!1})};return e.addEventListener("focusin",i),()=>e.removeEventListener("focusin",i)},[e,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function wO(){const t=new CustomEvent(N_);document.dispatchEvent(t)}function d4(t,e,n,{discrete:r}){const i=n.originalEvent.target,s=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:n});e&&i.addEventListener(t,e,{once:!0}),r?l4(i,s):i.dispatchEvent(s)}var Gr=globalThis!=null&&globalThis.document?v.useLayoutEffect:()=>{},nY=iL.useId||(()=>{}),rY=0;function Xs(t){const[e,n]=v.useState(nY());return Gr(()=>{n(r=>r??String(rY++))},[t]),e?`radix-${e}`:""}const iY=["top","right","bottom","left"],Wc=Math.min,Yi=Math.max,Fy=Math.round,av=Math.floor,qc=t=>({x:t,y:t}),sY={left:"right",right:"left",bottom:"top",top:"bottom"},oY={start:"end",end:"start"};function T_(t,e,n){return Yi(t,Wc(e,n))}function Oa(t,e){return typeof t=="function"?t(e):t}function Ia(t){return t.split("-")[0]}function If(t){return t.split("-")[1]}function fE(t){return t==="x"?"y":"x"}function hE(t){return t==="y"?"height":"width"}function Yc(t){return["top","bottom"].includes(Ia(t))?"y":"x"}function pE(t){return fE(Yc(t))}function aY(t,e,n){n===void 0&&(n=!1);const r=If(t),i=pE(t),s=hE(i);let o=i==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(o=Uy(o)),[o,Uy(o)]}function cY(t){const e=Uy(t);return[P_(t),e,P_(e)]}function P_(t){return t.replace(/start|end/g,e=>oY[e])}function lY(t,e,n){const r=["left","right"],i=["right","left"],s=["top","bottom"],o=["bottom","top"];switch(t){case"top":case"bottom":return n?e?i:r:e?r:i;case"left":case"right":return e?s:o;default:return[]}}function uY(t,e,n,r){const i=If(t);let s=lY(Ia(t),n==="start",r);return i&&(s=s.map(o=>o+"-"+i),e&&(s=s.concat(s.map(P_)))),s}function Uy(t){return t.replace(/left|right|bottom|top/g,e=>sY[e])}function dY(t){return{top:0,right:0,bottom:0,left:0,...t}}function f4(t){return typeof t!="number"?dY(t):{top:t,right:t,bottom:t,left:t}}function By(t){const{x:e,y:n,width:r,height:i}=t;return{width:r,height:i,top:n,left:e,right:e+r,bottom:n+i,x:e,y:n}}function SO(t,e,n){let{reference:r,floating:i}=t;const s=Yc(e),o=pE(e),c=hE(o),l=Ia(e),u=s==="y",d=r.x+r.width/2-i.width/2,f=r.y+r.height/2-i.height/2,h=r[c]/2-i[c]/2;let p;switch(l){case"top":p={x:d,y:r.y-i.height};break;case"bottom":p={x:d,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:f};break;case"left":p={x:r.x-i.width,y:f};break;default:p={x:r.x,y:r.y}}switch(If(e)){case"start":p[o]-=h*(n&&u?-1:1);break;case"end":p[o]+=h*(n&&u?-1:1);break}return p}const fY=async(t,e,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:s=[],platform:o}=n,c=s.filter(Boolean),l=await(o.isRTL==null?void 0:o.isRTL(e));let u=await o.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:f}=SO(u,r,l),h=r,p={},g=0;for(let m=0;m({name:"arrow",options:t,async fn(e){const{x:n,y:r,placement:i,rects:s,platform:o,elements:c,middlewareData:l}=e,{element:u,padding:d=0}=Oa(t,e)||{};if(u==null)return{};const f=f4(d),h={x:n,y:r},p=pE(i),g=hE(p),m=await o.getDimensions(u),y=p==="y",b=y?"top":"left",x=y?"bottom":"right",w=y?"clientHeight":"clientWidth",S=s.reference[g]+s.reference[p]-h[p]-s.floating[g],C=h[p]-s.reference[p],_=await(o.getOffsetParent==null?void 0:o.getOffsetParent(u));let A=_?_[w]:0;(!A||!await(o.isElement==null?void 0:o.isElement(_)))&&(A=c.floating[w]||s.floating[g]);const j=S/2-C/2,P=A/2-m[g]/2-1,k=Wc(f[b],P),O=Wc(f[x],P),E=k,R=A-m[g]-O,M=A/2-m[g]/2+j,G=T_(E,M,R),L=!l.arrow&&If(i)!=null&&M!==G&&s.reference[g]/2-(MM<=0)){var O,E;const M=(((O=s.flip)==null?void 0:O.index)||0)+1,G=A[M];if(G)return{data:{index:M,overflows:k},reset:{placement:G}};let L=(E=k.filter(V=>V.overflows[0]<=0).sort((V,I)=>V.overflows[1]-I.overflows[1])[0])==null?void 0:E.placement;if(!L)switch(p){case"bestFit":{var R;const V=(R=k.filter(I=>{if(_){const D=Yc(I.placement);return D===x||D==="y"}return!0}).map(I=>[I.placement,I.overflows.filter(D=>D>0).reduce((D,X)=>D+X,0)]).sort((I,D)=>I[1]-D[1])[0])==null?void 0:R[0];V&&(L=V);break}case"initialPlacement":L=c;break}if(i!==L)return{reset:{placement:L}}}return{}}}};function CO(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function _O(t){return iY.some(e=>t[e]>=0)}const mY=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:n}=e,{strategy:r="referenceHidden",...i}=Oa(t,e);switch(r){case"referenceHidden":{const s=await Fp(e,{...i,elementContext:"reference"}),o=CO(s,n.reference);return{data:{referenceHiddenOffsets:o,referenceHidden:_O(o)}}}case"escaped":{const s=await Fp(e,{...i,altBoundary:!0}),o=CO(s,n.floating);return{data:{escapedOffsets:o,escaped:_O(o)}}}default:return{}}}}};async function gY(t,e){const{placement:n,platform:r,elements:i}=t,s=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Ia(n),c=If(n),l=Yc(n)==="y",u=["left","top"].includes(o)?-1:1,d=s&&l?-1:1,f=Oa(e,t);let{mainAxis:h,crossAxis:p,alignmentAxis:g}=typeof f=="number"?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:f.mainAxis||0,crossAxis:f.crossAxis||0,alignmentAxis:f.alignmentAxis};return c&&typeof g=="number"&&(p=c==="end"?g*-1:g),l?{x:p*d,y:h*u}:{x:h*u,y:p*d}}const vY=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var n,r;const{x:i,y:s,placement:o,middlewareData:c}=e,l=await gY(e,t);return o===((n=c.offset)==null?void 0:n.placement)&&(r=c.arrow)!=null&&r.alignmentOffset?{}:{x:i+l.x,y:s+l.y,data:{...l,placement:o}}}}},yY=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:i}=e,{mainAxis:s=!0,crossAxis:o=!1,limiter:c={fn:y=>{let{x:b,y:x}=y;return{x:b,y:x}}},...l}=Oa(t,e),u={x:n,y:r},d=await Fp(e,l),f=Yc(Ia(i)),h=fE(f);let p=u[h],g=u[f];if(s){const y=h==="y"?"top":"left",b=h==="y"?"bottom":"right",x=p+d[y],w=p-d[b];p=T_(x,p,w)}if(o){const y=f==="y"?"top":"left",b=f==="y"?"bottom":"right",x=g+d[y],w=g-d[b];g=T_(x,g,w)}const m=c.fn({...e,[h]:p,[f]:g});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[h]:s,[f]:o}}}}}},xY=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:n,y:r,placement:i,rects:s,middlewareData:o}=e,{offset:c=0,mainAxis:l=!0,crossAxis:u=!0}=Oa(t,e),d={x:n,y:r},f=Yc(i),h=fE(f);let p=d[h],g=d[f];const m=Oa(c,e),y=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const w=h==="y"?"height":"width",S=s.reference[h]-s.floating[w]+y.mainAxis,C=s.reference[h]+s.reference[w]-y.mainAxis;pC&&(p=C)}if(u){var b,x;const w=h==="y"?"width":"height",S=["top","left"].includes(Ia(i)),C=s.reference[f]-s.floating[w]+(S&&((b=o.offset)==null?void 0:b[f])||0)+(S?0:y.crossAxis),_=s.reference[f]+s.reference[w]+(S?0:((x=o.offset)==null?void 0:x[f])||0)-(S?y.crossAxis:0);g_&&(g=_)}return{[h]:p,[f]:g}}}},bY=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,r;const{placement:i,rects:s,platform:o,elements:c}=e,{apply:l=()=>{},...u}=Oa(t,e),d=await Fp(e,u),f=Ia(i),h=If(i),p=Yc(i)==="y",{width:g,height:m}=s.floating;let y,b;f==="top"||f==="bottom"?(y=f,b=h===(await(o.isRTL==null?void 0:o.isRTL(c.floating))?"start":"end")?"left":"right"):(b=f,y=h==="end"?"top":"bottom");const x=m-d.top-d.bottom,w=g-d.left-d.right,S=Wc(m-d[y],x),C=Wc(g-d[b],w),_=!e.middlewareData.shift;let A=S,j=C;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(j=w),(r=e.middlewareData.shift)!=null&&r.enabled.y&&(A=x),_&&!h){const k=Yi(d.left,0),O=Yi(d.right,0),E=Yi(d.top,0),R=Yi(d.bottom,0);p?j=g-2*(k!==0||O!==0?k+O:Yi(d.left,d.right)):A=m-2*(E!==0||R!==0?E+R:Yi(d.top,d.bottom))}await l({...e,availableWidth:j,availableHeight:A});const P=await o.getDimensions(c.floating);return g!==P.width||m!==P.height?{reset:{rects:!0}}:{}}}};function l0(){return typeof window<"u"}function Rf(t){return h4(t)?(t.nodeName||"").toLowerCase():"#document"}function Zi(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Yo(t){var e;return(e=(h4(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function h4(t){return l0()?t instanceof Node||t instanceof Zi(t).Node:!1}function so(t){return l0()?t instanceof Element||t instanceof Zi(t).Element:!1}function zo(t){return l0()?t instanceof HTMLElement||t instanceof Zi(t).HTMLElement:!1}function AO(t){return!l0()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Zi(t).ShadowRoot}function hg(t){const{overflow:e,overflowX:n,overflowY:r,display:i}=oo(t);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!["inline","contents"].includes(i)}function wY(t){return["table","td","th"].includes(Rf(t))}function u0(t){return[":popover-open",":modal"].some(e=>{try{return t.matches(e)}catch{return!1}})}function mE(t){const e=gE(),n=so(t)?oo(t):t;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function SY(t){let e=Qc(t);for(;zo(e)&&!qd(e);){if(mE(e))return e;if(u0(e))return null;e=Qc(e)}return null}function gE(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function qd(t){return["html","body","#document"].includes(Rf(t))}function oo(t){return Zi(t).getComputedStyle(t)}function d0(t){return so(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function Qc(t){if(Rf(t)==="html")return t;const e=t.assignedSlot||t.parentNode||AO(t)&&t.host||Yo(t);return AO(e)?e.host:e}function p4(t){const e=Qc(t);return qd(e)?t.ownerDocument?t.ownerDocument.body:t.body:zo(e)&&hg(e)?e:p4(e)}function Up(t,e,n){var r;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=p4(t),s=i===((r=t.ownerDocument)==null?void 0:r.body),o=Zi(i);if(s){const c=k_(o);return e.concat(o,o.visualViewport||[],hg(i)?i:[],c&&n?Up(c):[])}return e.concat(i,Up(i,[],n))}function k_(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function m4(t){const e=oo(t);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const i=zo(t),s=i?t.offsetWidth:n,o=i?t.offsetHeight:r,c=Fy(n)!==s||Fy(r)!==o;return c&&(n=s,r=o),{width:n,height:r,$:c}}function vE(t){return so(t)?t:t.contextElement}function xd(t){const e=vE(t);if(!zo(e))return qc(1);const n=e.getBoundingClientRect(),{width:r,height:i,$:s}=m4(e);let o=(s?Fy(n.width):n.width)/r,c=(s?Fy(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!c||!Number.isFinite(c))&&(c=1),{x:o,y:c}}const CY=qc(0);function g4(t){const e=Zi(t);return!gE()||!e.visualViewport?CY:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function _Y(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==Zi(t)?!1:e}function cu(t,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=vE(t);let o=qc(1);e&&(r?so(r)&&(o=xd(r)):o=xd(t));const c=_Y(s,n,r)?g4(s):qc(0);let l=(i.left+c.x)/o.x,u=(i.top+c.y)/o.y,d=i.width/o.x,f=i.height/o.y;if(s){const h=Zi(s),p=r&&so(r)?Zi(r):r;let g=h,m=k_(g);for(;m&&r&&p!==g;){const y=xd(m),b=m.getBoundingClientRect(),x=oo(m),w=b.left+(m.clientLeft+parseFloat(x.paddingLeft))*y.x,S=b.top+(m.clientTop+parseFloat(x.paddingTop))*y.y;l*=y.x,u*=y.y,d*=y.x,f*=y.y,l+=w,u+=S,g=Zi(m),m=k_(g)}}return By({width:d,height:f,x:l,y:u})}function AY(t){let{elements:e,rect:n,offsetParent:r,strategy:i}=t;const s=i==="fixed",o=Yo(r),c=e?u0(e.floating):!1;if(r===o||c&&s)return n;let l={scrollLeft:0,scrollTop:0},u=qc(1);const d=qc(0),f=zo(r);if((f||!f&&!s)&&((Rf(r)!=="body"||hg(o))&&(l=d0(r)),zo(r))){const h=cu(r);u=xd(r),d.x=h.x+r.clientLeft,d.y=h.y+r.clientTop}return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+d.x,y:n.y*u.y-l.scrollTop*u.y+d.y}}function jY(t){return Array.from(t.getClientRects())}function O_(t,e){const n=d0(t).scrollLeft;return e?e.left+n:cu(Yo(t)).left+n}function EY(t){const e=Yo(t),n=d0(t),r=t.ownerDocument.body,i=Yi(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),s=Yi(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let o=-n.scrollLeft+O_(t);const c=-n.scrollTop;return oo(r).direction==="rtl"&&(o+=Yi(e.clientWidth,r.clientWidth)-i),{width:i,height:s,x:o,y:c}}function NY(t,e){const n=Zi(t),r=Yo(t),i=n.visualViewport;let s=r.clientWidth,o=r.clientHeight,c=0,l=0;if(i){s=i.width,o=i.height;const u=gE();(!u||u&&e==="fixed")&&(c=i.offsetLeft,l=i.offsetTop)}return{width:s,height:o,x:c,y:l}}function TY(t,e){const n=cu(t,!0,e==="fixed"),r=n.top+t.clientTop,i=n.left+t.clientLeft,s=zo(t)?xd(t):qc(1),o=t.clientWidth*s.x,c=t.clientHeight*s.y,l=i*s.x,u=r*s.y;return{width:o,height:c,x:l,y:u}}function jO(t,e,n){let r;if(e==="viewport")r=NY(t,n);else if(e==="document")r=EY(Yo(t));else if(so(e))r=TY(e,n);else{const i=g4(t);r={...e,x:e.x-i.x,y:e.y-i.y}}return By(r)}function v4(t,e){const n=Qc(t);return n===e||!so(n)||qd(n)?!1:oo(n).position==="fixed"||v4(n,e)}function PY(t,e){const n=e.get(t);if(n)return n;let r=Up(t,[],!1).filter(c=>so(c)&&Rf(c)!=="body"),i=null;const s=oo(t).position==="fixed";let o=s?Qc(t):t;for(;so(o)&&!qd(o);){const c=oo(o),l=mE(o);!l&&c.position==="fixed"&&(i=null),(s?!l&&!i:!l&&c.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||hg(o)&&!l&&v4(t,o))?r=r.filter(d=>d!==o):i=c,o=Qc(o)}return e.set(t,r),r}function kY(t){let{element:e,boundary:n,rootBoundary:r,strategy:i}=t;const o=[...n==="clippingAncestors"?u0(e)?[]:PY(e,this._c):[].concat(n),r],c=o[0],l=o.reduce((u,d)=>{const f=jO(e,d,i);return u.top=Yi(f.top,u.top),u.right=Wc(f.right,u.right),u.bottom=Wc(f.bottom,u.bottom),u.left=Yi(f.left,u.left),u},jO(e,c,i));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function OY(t){const{width:e,height:n}=m4(t);return{width:e,height:n}}function IY(t,e,n){const r=zo(e),i=Yo(e),s=n==="fixed",o=cu(t,!0,s,e);let c={scrollLeft:0,scrollTop:0};const l=qc(0);if(r||!r&&!s)if((Rf(e)!=="body"||hg(i))&&(c=d0(e)),r){const p=cu(e,!0,s,e);l.x=p.x+e.clientLeft,l.y=p.y+e.clientTop}else i&&(l.x=O_(i));let u=0,d=0;if(i&&!r&&!s){const p=i.getBoundingClientRect();d=p.top+c.scrollTop,u=p.left+c.scrollLeft-O_(i,p)}const f=o.left+c.scrollLeft-l.x-u,h=o.top+c.scrollTop-l.y-d;return{x:f,y:h,width:o.width,height:o.height}}function NS(t){return oo(t).position==="static"}function EO(t,e){if(!zo(t)||oo(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return Yo(t)===n&&(n=n.ownerDocument.body),n}function y4(t,e){const n=Zi(t);if(u0(t))return n;if(!zo(t)){let i=Qc(t);for(;i&&!qd(i);){if(so(i)&&!NS(i))return i;i=Qc(i)}return n}let r=EO(t,e);for(;r&&wY(r)&&NS(r);)r=EO(r,e);return r&&qd(r)&&NS(r)&&!mE(r)?n:r||SY(t)||n}const RY=async function(t){const e=this.getOffsetParent||y4,n=this.getDimensions,r=await n(t.floating);return{reference:IY(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function MY(t){return oo(t).direction==="rtl"}const DY={convertOffsetParentRelativeRectToViewportRelativeRect:AY,getDocumentElement:Yo,getClippingRect:kY,getOffsetParent:y4,getElementRects:RY,getClientRects:jY,getDimensions:OY,getScale:xd,isElement:so,isRTL:MY};function $Y(t,e){let n=null,r;const i=Yo(t);function s(){var c;clearTimeout(r),(c=n)==null||c.disconnect(),n=null}function o(c,l){c===void 0&&(c=!1),l===void 0&&(l=1),s();const{left:u,top:d,width:f,height:h}=t.getBoundingClientRect();if(c||e(),!f||!h)return;const p=av(d),g=av(i.clientWidth-(u+f)),m=av(i.clientHeight-(d+h)),y=av(u),x={rootMargin:-p+"px "+-g+"px "+-m+"px "+-y+"px",threshold:Yi(0,Wc(1,l))||1};let w=!0;function S(C){const _=C[0].intersectionRatio;if(_!==l){if(!w)return o();_?o(!1,_):r=setTimeout(()=>{o(!1,1e-7)},1e3)}w=!1}try{n=new IntersectionObserver(S,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,x)}n.observe(t)}return o(!0),s}function LY(t,e,n,r){r===void 0&&(r={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=vE(t),d=i||s?[...u?Up(u):[],...Up(e)]:[];d.forEach(b=>{i&&b.addEventListener("scroll",n,{passive:!0}),s&&b.addEventListener("resize",n)});const f=u&&c?$Y(u,n):null;let h=-1,p=null;o&&(p=new ResizeObserver(b=>{let[x]=b;x&&x.target===u&&p&&(p.unobserve(e),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(e)})),n()}),u&&!l&&p.observe(u),p.observe(e));let g,m=l?cu(t):null;l&&y();function y(){const b=cu(t);m&&(b.x!==m.x||b.y!==m.y||b.width!==m.width||b.height!==m.height)&&n(),m=b,g=requestAnimationFrame(y)}return n(),()=>{var b;d.forEach(x=>{i&&x.removeEventListener("scroll",n),s&&x.removeEventListener("resize",n)}),f==null||f(),(b=p)==null||b.disconnect(),p=null,l&&cancelAnimationFrame(g)}}const FY=vY,UY=yY,BY=pY,HY=bY,zY=mY,NO=hY,VY=xY,GY=(t,e,n)=>{const r=new Map,i={platform:DY,...n},s={...i.platform,_c:r};return fY(t,e,{...i,platform:s})};var Qv=typeof document<"u"?v.useLayoutEffect:v.useEffect;function Hy(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let n,r,i;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(n=t.length,n!==e.length)return!1;for(r=n;r--!==0;)if(!Hy(t[r],e[r]))return!1;return!0}if(i=Object.keys(t),n=i.length,n!==Object.keys(e).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(e,i[r]))return!1;for(r=n;r--!==0;){const s=i[r];if(!(s==="_owner"&&t.$$typeof)&&!Hy(t[s],e[s]))return!1}return!0}return t!==t&&e!==e}function x4(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function TO(t,e){const n=x4(t);return Math.round(e*n)/n}function TS(t){const e=v.useRef(t);return Qv(()=>{e.current=t}),e}function KY(t){t===void 0&&(t={});const{placement:e="bottom",strategy:n="absolute",middleware:r=[],platform:i,elements:{reference:s,floating:o}={},transform:c=!0,whileElementsMounted:l,open:u}=t,[d,f]=v.useState({x:0,y:0,strategy:n,placement:e,middlewareData:{},isPositioned:!1}),[h,p]=v.useState(r);Hy(h,r)||p(r);const[g,m]=v.useState(null),[y,b]=v.useState(null),x=v.useCallback(I=>{I!==_.current&&(_.current=I,m(I))},[]),w=v.useCallback(I=>{I!==A.current&&(A.current=I,b(I))},[]),S=s||g,C=o||y,_=v.useRef(null),A=v.useRef(null),j=v.useRef(d),P=l!=null,k=TS(l),O=TS(i),E=TS(u),R=v.useCallback(()=>{if(!_.current||!A.current)return;const I={placement:e,strategy:n,middleware:h};O.current&&(I.platform=O.current),GY(_.current,A.current,I).then(D=>{const X={...D,isPositioned:E.current!==!1};M.current&&!Hy(j.current,X)&&(j.current=X,Of.flushSync(()=>{f(X)}))})},[h,e,n,O,E]);Qv(()=>{u===!1&&j.current.isPositioned&&(j.current.isPositioned=!1,f(I=>({...I,isPositioned:!1})))},[u]);const M=v.useRef(!1);Qv(()=>(M.current=!0,()=>{M.current=!1}),[]),Qv(()=>{if(S&&(_.current=S),C&&(A.current=C),S&&C){if(k.current)return k.current(S,C,R);R()}},[S,C,R,k,P]);const G=v.useMemo(()=>({reference:_,floating:A,setReference:x,setFloating:w}),[x,w]),L=v.useMemo(()=>({reference:S,floating:C}),[S,C]),V=v.useMemo(()=>{const I={position:n,left:0,top:0};if(!L.floating)return I;const D=TO(L.floating,d.x),X=TO(L.floating,d.y);return c?{...I,transform:"translate("+D+"px, "+X+"px)",...x4(L.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:X}},[n,c,L.floating,d.x,d.y]);return v.useMemo(()=>({...d,update:R,refs:G,elements:L,floatingStyles:V}),[d,R,G,L,V])}const WY=t=>{function e(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:t,fn(n){const{element:r,padding:i}=typeof t=="function"?t(n):t;return r&&e(r)?r.current!=null?NO({element:r.current,padding:i}).fn(n):{}:r?NO({element:r,padding:i}).fn(n):{}}}},qY=(t,e)=>({...FY(t),options:[t,e]}),YY=(t,e)=>({...UY(t),options:[t,e]}),QY=(t,e)=>({...VY(t),options:[t,e]}),XY=(t,e)=>({...BY(t),options:[t,e]}),JY=(t,e)=>({...HY(t),options:[t,e]}),ZY=(t,e)=>({...zY(t),options:[t,e]}),eQ=(t,e)=>({...WY(t),options:[t,e]});var tQ="Arrow",b4=v.forwardRef((t,e)=>{const{children:n,width:r=10,height:i=5,...s}=t;return a.jsx(it.svg,{...s,ref:e,width:r,height:i,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:t.asChild?n:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});b4.displayName=tQ;var nQ=b4;function rQ(t,e=[]){let n=[];function r(s,o){const c=v.createContext(o),l=n.length;n=[...n,o];function u(f){const{scope:h,children:p,...g}=f,m=(h==null?void 0:h[t][l])||c,y=v.useMemo(()=>g,Object.values(g));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,g=v.useContext(p);if(g)return g;if(o!==void 0)return o;throw new Error(`\`${f}\` must be used within \`${s}\``)}return u.displayName=s+"Provider",[u,d]}const i=()=>{const s=n.map(o=>v.createContext(o));return function(c){const l=(c==null?void 0:c[t])||s;return v.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,iQ(i,...e)]}function iQ(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(s){const o=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(s)[`__scope${u}`];return{...c,...f}},{});return v.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}function pg(t){const[e,n]=v.useState(void 0);return Gr(()=>{if(t){n({width:t.offsetWidth,height:t.offsetHeight});const r=new ResizeObserver(i=>{if(!Array.isArray(i)||!i.length)return;const s=i[0];let o,c;if("borderBoxSize"in s){const l=s.borderBoxSize,u=Array.isArray(l)?l[0]:l;o=u.inlineSize,c=u.blockSize}else o=t.offsetWidth,c=t.offsetHeight;n({width:o,height:c})});return r.observe(t,{box:"border-box"}),()=>r.unobserve(t)}else n(void 0)},[t]),e}var yE="Popper",[w4,Mf]=rQ(yE),[sQ,S4]=w4(yE),C4=t=>{const{__scopePopper:e,children:n}=t,[r,i]=v.useState(null);return a.jsx(sQ,{scope:e,anchor:r,onAnchorChange:i,children:n})};C4.displayName=yE;var _4="PopperAnchor",A4=v.forwardRef((t,e)=>{const{__scopePopper:n,virtualRef:r,...i}=t,s=S4(_4,n),o=v.useRef(null),c=Ot(e,o);return v.useEffect(()=>{s.onAnchorChange((r==null?void 0:r.current)||o.current)}),r?null:a.jsx(it.div,{...i,ref:c})});A4.displayName=_4;var xE="PopperContent",[oQ,aQ]=w4(xE),j4=v.forwardRef((t,e)=>{var F,ce,te,pe,we,Y;const{__scopePopper:n,side:r="bottom",sideOffset:i=0,align:s="center",alignOffset:o=0,arrowPadding:c=0,avoidCollisions:l=!0,collisionBoundary:u=[],collisionPadding:d=0,sticky:f="partial",hideWhenDetached:h=!1,updatePositionStrategy:p="optimized",onPlaced:g,...m}=t,y=S4(xE,n),[b,x]=v.useState(null),w=Ot(e,nt=>x(nt)),[S,C]=v.useState(null),_=pg(S),A=(_==null?void 0:_.width)??0,j=(_==null?void 0:_.height)??0,P=r+(s!=="center"?"-"+s:""),k=typeof d=="number"?d:{top:0,right:0,bottom:0,left:0,...d},O=Array.isArray(u)?u:[u],E=O.length>0,R={padding:k,boundary:O.filter(lQ),altBoundary:E},{refs:M,floatingStyles:G,placement:L,isPositioned:V,middlewareData:I}=KY({strategy:"fixed",placement:P,whileElementsMounted:(...nt)=>LY(...nt,{animationFrame:p==="always"}),elements:{reference:y.anchor},middleware:[qY({mainAxis:i+j,alignmentAxis:o}),l&&YY({mainAxis:!0,crossAxis:!1,limiter:f==="partial"?QY():void 0,...R}),l&&XY({...R}),JY({...R,apply:({elements:nt,rects:Ue,availableWidth:at,availableHeight:Be})=>{const{width:Bt,height:N}=Ue.reference,$=nt.floating.style;$.setProperty("--radix-popper-available-width",`${at}px`),$.setProperty("--radix-popper-available-height",`${Be}px`),$.setProperty("--radix-popper-anchor-width",`${Bt}px`),$.setProperty("--radix-popper-anchor-height",`${N}px`)}}),S&&eQ({element:S,padding:c}),uQ({arrowWidth:A,arrowHeight:j}),h&&ZY({strategy:"referenceHidden",...R})]}),[D,X]=T4(L),Q=Cr(g);Gr(()=>{V&&(Q==null||Q())},[V,Q]);const J=(F=I.arrow)==null?void 0:F.x,ye=(ce=I.arrow)==null?void 0:ce.y,U=((te=I.arrow)==null?void 0:te.centerOffset)!==0,[ne,ue]=v.useState();return Gr(()=>{b&&ue(window.getComputedStyle(b).zIndex)},[b]),a.jsx("div",{ref:M.setFloating,"data-radix-popper-content-wrapper":"",style:{...G,transform:V?G.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ne,"--radix-popper-transform-origin":[(pe=I.transformOrigin)==null?void 0:pe.x,(we=I.transformOrigin)==null?void 0:we.y].join(" "),...((Y=I.hide)==null?void 0:Y.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:a.jsx(oQ,{scope:n,placedSide:D,onArrowChange:C,arrowX:J,arrowY:ye,shouldHideArrow:U,children:a.jsx(it.div,{"data-side":D,"data-align":X,...m,ref:w,style:{...m.style,animation:V?void 0:"none"}})})})});j4.displayName=xE;var E4="PopperArrow",cQ={top:"bottom",right:"left",bottom:"top",left:"right"},N4=v.forwardRef(function(e,n){const{__scopePopper:r,...i}=e,s=aQ(E4,r),o=cQ[s.placedSide];return a.jsx("span",{ref:s.onArrowChange,style:{position:"absolute",left:s.arrowX,top:s.arrowY,[o]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[s.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[s.placedSide],visibility:s.shouldHideArrow?"hidden":void 0},children:a.jsx(nQ,{...i,ref:n,style:{...i.style,display:"block"}})})});N4.displayName=E4;function lQ(t){return t!==null}var uQ=t=>({name:"transformOrigin",options:t,fn(e){var y,b,x;const{placement:n,rects:r,middlewareData:i}=e,o=((y=i.arrow)==null?void 0:y.centerOffset)!==0,c=o?0:t.arrowWidth,l=o?0:t.arrowHeight,[u,d]=T4(n),f={start:"0%",center:"50%",end:"100%"}[d],h=(((b=i.arrow)==null?void 0:b.x)??0)+c/2,p=(((x=i.arrow)==null?void 0:x.y)??0)+l/2;let g="",m="";return u==="bottom"?(g=o?f:`${h}px`,m=`${-l}px`):u==="top"?(g=o?f:`${h}px`,m=`${r.floating.height+l}px`):u==="right"?(g=`${-l}px`,m=o?f:`${p}px`):u==="left"&&(g=`${r.floating.width+l}px`,m=o?f:`${p}px`),{data:{x:g,y:m}}}});function T4(t){const[e,n="center"]=t.split("-");return[e,n]}var P4=C4,bE=A4,wE=j4,SE=N4,dQ="Portal",f0=v.forwardRef((t,e)=>{var c;const{container:n,...r}=t,[i,s]=v.useState(!1);Gr(()=>s(!0),[]);const o=n||i&&((c=globalThis==null?void 0:globalThis.document)==null?void 0:c.body);return o?a4.createPortal(a.jsx(it.div,{...r,ref:e}),o):null});f0.displayName=dQ;function fQ(t,e){return v.useReducer((n,r)=>e[n][r]??n,t)}var Kr=t=>{const{present:e,children:n}=t,r=hQ(e),i=typeof n=="function"?n({present:r.isPresent}):v.Children.only(n),s=Ot(r.ref,pQ(i));return typeof n=="function"||r.isPresent?v.cloneElement(i,{ref:s}):null};Kr.displayName="Presence";function hQ(t){const[e,n]=v.useState(),r=v.useRef({}),i=v.useRef(t),s=v.useRef("none"),o=t?"mounted":"unmounted",[c,l]=fQ(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return v.useEffect(()=>{const u=cv(r.current);s.current=c==="mounted"?u:"none"},[c]),Gr(()=>{const u=r.current,d=i.current;if(d!==t){const h=s.current,p=cv(u);t?l("MOUNT"):p==="none"||(u==null?void 0:u.display)==="none"?l("UNMOUNT"):l(d&&h!==p?"ANIMATION_OUT":"UNMOUNT"),i.current=t}},[t,l]),Gr(()=>{if(e){let u;const d=e.ownerDocument.defaultView??window,f=p=>{const m=cv(r.current).includes(p.animationName);if(p.target===e&&m&&(l("ANIMATION_END"),!i.current)){const y=e.style.animationFillMode;e.style.animationFillMode="forwards",u=d.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=y)})}},h=p=>{p.target===e&&(s.current=cv(r.current))};return e.addEventListener("animationstart",h),e.addEventListener("animationcancel",f),e.addEventListener("animationend",f),()=>{d.clearTimeout(u),e.removeEventListener("animationstart",h),e.removeEventListener("animationcancel",f),e.removeEventListener("animationend",f)}}else l("ANIMATION_END")},[e,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:v.useCallback(u=>{u&&(r.current=getComputedStyle(u)),n(u)},[])}}function cv(t){return(t==null?void 0:t.animationName)||"none"}function pQ(t){var r,i;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(i=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:i.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}function ao({prop:t,defaultProp:e,onChange:n=()=>{}}){const[r,i]=mQ({defaultProp:e,onChange:n}),s=t!==void 0,o=s?t:r,c=Cr(n),l=v.useCallback(u=>{if(s){const f=typeof u=="function"?u(t):u;f!==t&&c(f)}else i(u)},[s,t,i,c]);return[o,l]}function mQ({defaultProp:t,onChange:e}){const n=v.useState(t),[r]=n,i=v.useRef(r),s=Cr(e);return v.useEffect(()=>{i.current!==r&&(s(r),i.current=r)},[r,i,s]),n}var gQ="VisuallyHidden",CE=v.forwardRef((t,e)=>a.jsx(it.span,{...t,ref:e,style:{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal",...t.style}}));CE.displayName=gQ;var vQ=CE,[h0,sFe]=Fi("Tooltip",[Mf]),_E=Mf(),k4="TooltipProvider",yQ=700,PO="tooltip.open",[xQ,O4]=h0(k4),I4=t=>{const{__scopeTooltip:e,delayDuration:n=yQ,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:s}=t,[o,c]=v.useState(!0),l=v.useRef(!1),u=v.useRef(0);return v.useEffect(()=>{const d=u.current;return()=>window.clearTimeout(d)},[]),a.jsx(xQ,{scope:e,isOpenDelayed:o,delayDuration:n,onOpen:v.useCallback(()=>{window.clearTimeout(u.current),c(!1)},[]),onClose:v.useCallback(()=>{window.clearTimeout(u.current),u.current=window.setTimeout(()=>c(!0),r)},[r]),isPointerInTransitRef:l,onPointerInTransitChange:v.useCallback(d=>{l.current=d},[]),disableHoverableContent:i,children:s})};I4.displayName=k4;var R4="Tooltip",[oFe,p0]=h0(R4),I_="TooltipTrigger",bQ=v.forwardRef((t,e)=>{const{__scopeTooltip:n,...r}=t,i=p0(I_,n),s=O4(I_,n),o=_E(n),c=v.useRef(null),l=Ot(e,c,i.onTriggerChange),u=v.useRef(!1),d=v.useRef(!1),f=v.useCallback(()=>u.current=!1,[]);return v.useEffect(()=>()=>document.removeEventListener("pointerup",f),[f]),a.jsx(bE,{asChild:!0,...o,children:a.jsx(it.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:l,onPointerMove:Ne(t.onPointerMove,h=>{h.pointerType!=="touch"&&!d.current&&!s.isPointerInTransitRef.current&&(i.onTriggerEnter(),d.current=!0)}),onPointerLeave:Ne(t.onPointerLeave,()=>{i.onTriggerLeave(),d.current=!1}),onPointerDown:Ne(t.onPointerDown,()=>{u.current=!0,document.addEventListener("pointerup",f,{once:!0})}),onFocus:Ne(t.onFocus,()=>{u.current||i.onOpen()}),onBlur:Ne(t.onBlur,i.onClose),onClick:Ne(t.onClick,i.onClose)})})});bQ.displayName=I_;var wQ="TooltipPortal",[aFe,SQ]=h0(wQ,{forceMount:void 0}),Yd="TooltipContent",M4=v.forwardRef((t,e)=>{const n=SQ(Yd,t.__scopeTooltip),{forceMount:r=n.forceMount,side:i="top",...s}=t,o=p0(Yd,t.__scopeTooltip);return a.jsx(Kr,{present:r||o.open,children:o.disableHoverableContent?a.jsx(D4,{side:i,...s,ref:e}):a.jsx(CQ,{side:i,...s,ref:e})})}),CQ=v.forwardRef((t,e)=>{const n=p0(Yd,t.__scopeTooltip),r=O4(Yd,t.__scopeTooltip),i=v.useRef(null),s=Ot(e,i),[o,c]=v.useState(null),{trigger:l,onClose:u}=n,d=i.current,{onPointerInTransitChange:f}=r,h=v.useCallback(()=>{c(null),f(!1)},[f]),p=v.useCallback((g,m)=>{const y=g.currentTarget,b={x:g.clientX,y:g.clientY},x=EQ(b,y.getBoundingClientRect()),w=NQ(b,x),S=TQ(m.getBoundingClientRect()),C=kQ([...w,...S]);c(C),f(!0)},[f]);return v.useEffect(()=>()=>h(),[h]),v.useEffect(()=>{if(l&&d){const g=y=>p(y,d),m=y=>p(y,l);return l.addEventListener("pointerleave",g),d.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",g),d.removeEventListener("pointerleave",m)}}},[l,d,p,h]),v.useEffect(()=>{if(o){const g=m=>{const y=m.target,b={x:m.clientX,y:m.clientY},x=(l==null?void 0:l.contains(y))||(d==null?void 0:d.contains(y)),w=!PQ(b,o);x?h():w&&(h(),u())};return document.addEventListener("pointermove",g),()=>document.removeEventListener("pointermove",g)}},[l,d,o,u,h]),a.jsx(D4,{...t,ref:s})}),[_Q,AQ]=h0(R4,{isInside:!1}),D4=v.forwardRef((t,e)=>{const{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:s,onPointerDownOutside:o,...c}=t,l=p0(Yd,n),u=_E(n),{onClose:d}=l;return v.useEffect(()=>(document.addEventListener(PO,d),()=>document.removeEventListener(PO,d)),[d]),v.useEffect(()=>{if(l.trigger){const f=h=>{const p=h.target;p!=null&&p.contains(l.trigger)&&d()};return window.addEventListener("scroll",f,{capture:!0}),()=>window.removeEventListener("scroll",f,{capture:!0})}},[l.trigger,d]),a.jsx(fg,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:s,onPointerDownOutside:o,onFocusOutside:f=>f.preventDefault(),onDismiss:d,children:a.jsxs(wE,{"data-state":l.stateAttribute,...u,...c,ref:e,style:{...c.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[a.jsx(dE,{children:r}),a.jsx(_Q,{scope:n,isInside:!0,children:a.jsx(vQ,{id:l.contentId,role:"tooltip",children:i||r})})]})})});M4.displayName=Yd;var $4="TooltipArrow",jQ=v.forwardRef((t,e)=>{const{__scopeTooltip:n,...r}=t,i=_E(n);return AQ($4,n).isInside?null:a.jsx(SE,{...i,...r,ref:e})});jQ.displayName=$4;function EQ(t,e){const n=Math.abs(e.top-t.y),r=Math.abs(e.bottom-t.y),i=Math.abs(e.right-t.x),s=Math.abs(e.left-t.x);switch(Math.min(n,r,i,s)){case s:return"left";case i:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function NQ(t,e,n=5){const r=[];switch(e){case"top":r.push({x:t.x-n,y:t.y+n},{x:t.x+n,y:t.y+n});break;case"bottom":r.push({x:t.x-n,y:t.y-n},{x:t.x+n,y:t.y-n});break;case"left":r.push({x:t.x+n,y:t.y-n},{x:t.x+n,y:t.y+n});break;case"right":r.push({x:t.x-n,y:t.y-n},{x:t.x-n,y:t.y+n});break}return r}function TQ(t){const{top:e,right:n,bottom:r,left:i}=t;return[{x:i,y:e},{x:n,y:e},{x:n,y:r},{x:i,y:r}]}function PQ(t,e){const{x:n,y:r}=t;let i=!1;for(let s=0,o=e.length-1;sr!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function kQ(t){const e=t.slice();return e.sort((n,r)=>n.xr.x?1:n.yr.y?1:0),OQ(e)}function OQ(t){if(t.length<=1)return t.slice();const e=[];for(let r=0;r=2;){const s=e[e.length-1],o=e[e.length-2];if((s.x-o.x)*(i.y-o.y)>=(s.y-o.y)*(i.x-o.x))e.pop();else break}e.push(i)}e.pop();const n=[];for(let r=t.length-1;r>=0;r--){const i=t[r];for(;n.length>=2;){const s=n[n.length-1],o=n[n.length-2];if((s.x-o.x)*(i.y-o.y)>=(s.y-o.y)*(i.x-o.x))n.pop();else break}n.push(i)}return n.pop(),e.length===1&&n.length===1&&e[0].x===n[0].x&&e[0].y===n[0].y?e:e.concat(n)}var IQ=I4,L4=M4;function F4(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e{const e=DQ(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=t;return{getClassGroupId:o=>{const c=o.split(AE);return c[0]===""&&c.length!==1&&c.shift(),U4(c,e)||MQ(o)},getConflictingClassGroupIds:(o,c)=>{const l=n[o]||[];return c&&r[o]?[...l,...r[o]]:l}}},U4=(t,e)=>{var o;if(t.length===0)return e.classGroupId;const n=t[0],r=e.nextPart.get(n),i=r?U4(t.slice(1),r):void 0;if(i)return i;if(e.validators.length===0)return;const s=t.join(AE);return(o=e.validators.find(({validator:c})=>c(s)))==null?void 0:o.classGroupId},kO=/^\[(.+)\]$/,MQ=t=>{if(kO.test(t)){const e=kO.exec(t)[1],n=e==null?void 0:e.substring(0,e.indexOf(":"));if(n)return"arbitrary.."+n}},DQ=t=>{const{theme:e,prefix:n}=t,r={nextPart:new Map,validators:[]};return LQ(Object.entries(t.classGroups),n).forEach(([s,o])=>{R_(o,r,s,e)}),r},R_=(t,e,n,r)=>{t.forEach(i=>{if(typeof i=="string"){const s=i===""?e:OO(e,i);s.classGroupId=n;return}if(typeof i=="function"){if($Q(i)){R_(i(r),e,n,r);return}e.validators.push({validator:i,classGroupId:n});return}Object.entries(i).forEach(([s,o])=>{R_(o,OO(e,s),n,r)})})},OO=(t,e)=>{let n=t;return e.split(AE).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},$Q=t=>t.isThemeGetter,LQ=(t,e)=>e?t.map(([n,r])=>{const i=r.map(s=>typeof s=="string"?e+s:typeof s=="object"?Object.fromEntries(Object.entries(s).map(([o,c])=>[e+o,c])):s);return[n,i]}):t,FQ=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=new Map,r=new Map;const i=(s,o)=>{n.set(s,o),e++,e>t&&(e=0,r=n,n=new Map)};return{get(s){let o=n.get(s);if(o!==void 0)return o;if((o=r.get(s))!==void 0)return i(s,o),o},set(s,o){n.has(s)?n.set(s,o):i(s,o)}}},B4="!",UQ=t=>{const{separator:e,experimentalParseClassName:n}=t,r=e.length===1,i=e[0],s=e.length,o=c=>{const l=[];let u=0,d=0,f;for(let y=0;yd?f-d:void 0;return{modifiers:l,hasImportantModifier:p,baseClassName:g,maybePostfixModifierPosition:m}};return n?c=>n({className:c,parseClassName:o}):o},BQ=t=>{if(t.length<=1)return t;const e=[];let n=[];return t.forEach(r=>{r[0]==="["?(e.push(...n.sort(),r),n=[]):n.push(r)}),e.push(...n.sort()),e},HQ=t=>({cache:FQ(t.cacheSize),parseClassName:UQ(t),...RQ(t)}),zQ=/\s+/,VQ=(t,e)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i}=e,s=[],o=t.trim().split(zQ);let c="";for(let l=o.length-1;l>=0;l-=1){const u=o[l],{modifiers:d,hasImportantModifier:f,baseClassName:h,maybePostfixModifierPosition:p}=n(u);let g=!!p,m=r(g?h.substring(0,p):h);if(!m){if(!g){c=u+(c.length>0?" "+c:c);continue}if(m=r(h),!m){c=u+(c.length>0?" "+c:c);continue}g=!1}const y=BQ(d).join(":"),b=f?y+B4:y,x=b+m;if(s.includes(x))continue;s.push(x);const w=i(m,g);for(let S=0;S0?" "+c:c)}return c};function GQ(){let t=0,e,n,r="";for(;t{if(typeof t=="string")return t;let e,n="";for(let r=0;rf(d),t());return n=HQ(u),r=n.cache.get,i=n.cache.set,s=c,c(l)}function c(l){const u=r(l);if(u)return u;const d=VQ(l,n);return i(l,d),d}return function(){return s(GQ.apply(null,arguments))}}const kn=t=>{const e=n=>n[t]||[];return e.isThemeGetter=!0,e},z4=/^\[(?:([a-z-]+):)?(.+)\]$/i,WQ=/^\d+\/\d+$/,qQ=new Set(["px","full","screen"]),YQ=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,QQ=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,XQ=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,JQ=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ZQ=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,na=t=>bd(t)||qQ.has(t)||WQ.test(t),Qa=t=>Df(t,"length",aX),bd=t=>!!t&&!Number.isNaN(Number(t)),PS=t=>Df(t,"number",bd),bh=t=>!!t&&Number.isInteger(Number(t)),eX=t=>t.endsWith("%")&&bd(t.slice(0,-1)),Ht=t=>z4.test(t),Xa=t=>YQ.test(t),tX=new Set(["length","size","percentage"]),nX=t=>Df(t,tX,V4),rX=t=>Df(t,"position",V4),iX=new Set(["image","url"]),sX=t=>Df(t,iX,lX),oX=t=>Df(t,"",cX),wh=()=>!0,Df=(t,e,n)=>{const r=z4.exec(t);return r?r[1]?typeof e=="string"?r[1]===e:e.has(r[1]):n(r[2]):!1},aX=t=>QQ.test(t)&&!XQ.test(t),V4=()=>!1,cX=t=>JQ.test(t),lX=t=>ZQ.test(t),uX=()=>{const t=kn("colors"),e=kn("spacing"),n=kn("blur"),r=kn("brightness"),i=kn("borderColor"),s=kn("borderRadius"),o=kn("borderSpacing"),c=kn("borderWidth"),l=kn("contrast"),u=kn("grayscale"),d=kn("hueRotate"),f=kn("invert"),h=kn("gap"),p=kn("gradientColorStops"),g=kn("gradientColorStopPositions"),m=kn("inset"),y=kn("margin"),b=kn("opacity"),x=kn("padding"),w=kn("saturate"),S=kn("scale"),C=kn("sepia"),_=kn("skew"),A=kn("space"),j=kn("translate"),P=()=>["auto","contain","none"],k=()=>["auto","hidden","clip","visible","scroll"],O=()=>["auto",Ht,e],E=()=>[Ht,e],R=()=>["",na,Qa],M=()=>["auto",bd,Ht],G=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],L=()=>["solid","dashed","dotted","double","none"],V=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],I=()=>["start","end","center","between","around","evenly","stretch"],D=()=>["","0",Ht],X=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Q=()=>[bd,Ht];return{cacheSize:500,separator:":",theme:{colors:[wh],spacing:[na,Qa],blur:["none","",Xa,Ht],brightness:Q(),borderColor:[t],borderRadius:["none","","full",Xa,Ht],borderSpacing:E(),borderWidth:R(),contrast:Q(),grayscale:D(),hueRotate:Q(),invert:D(),gap:E(),gradientColorStops:[t],gradientColorStopPositions:[eX,Qa],inset:O(),margin:O(),opacity:Q(),padding:E(),saturate:Q(),scale:Q(),sepia:D(),skew:Q(),space:E(),translate:E()},classGroups:{aspect:[{aspect:["auto","square","video",Ht]}],container:["container"],columns:[{columns:[Xa]}],"break-after":[{"break-after":X()}],"break-before":[{"break-before":X()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...G(),Ht]}],overflow:[{overflow:k()}],"overflow-x":[{"overflow-x":k()}],"overflow-y":[{"overflow-y":k()}],overscroll:[{overscroll:P()}],"overscroll-x":[{"overscroll-x":P()}],"overscroll-y":[{"overscroll-y":P()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",bh,Ht]}],basis:[{basis:O()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Ht]}],grow:[{grow:D()}],shrink:[{shrink:D()}],order:[{order:["first","last","none",bh,Ht]}],"grid-cols":[{"grid-cols":[wh]}],"col-start-end":[{col:["auto",{span:["full",bh,Ht]},Ht]}],"col-start":[{"col-start":M()}],"col-end":[{"col-end":M()}],"grid-rows":[{"grid-rows":[wh]}],"row-start-end":[{row:["auto",{span:[bh,Ht]},Ht]}],"row-start":[{"row-start":M()}],"row-end":[{"row-end":M()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Ht]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Ht]}],gap:[{gap:[h]}],"gap-x":[{"gap-x":[h]}],"gap-y":[{"gap-y":[h]}],"justify-content":[{justify:["normal",...I()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...I(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...I(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[x]}],px:[{px:[x]}],py:[{py:[x]}],ps:[{ps:[x]}],pe:[{pe:[x]}],pt:[{pt:[x]}],pr:[{pr:[x]}],pb:[{pb:[x]}],pl:[{pl:[x]}],m:[{m:[y]}],mx:[{mx:[y]}],my:[{my:[y]}],ms:[{ms:[y]}],me:[{me:[y]}],mt:[{mt:[y]}],mr:[{mr:[y]}],mb:[{mb:[y]}],ml:[{ml:[y]}],"space-x":[{"space-x":[A]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[A]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Ht,e]}],"min-w":[{"min-w":[Ht,e,"min","max","fit"]}],"max-w":[{"max-w":[Ht,e,"none","full","min","max","fit","prose",{screen:[Xa]},Xa]}],h:[{h:[Ht,e,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Ht,e,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Ht,e,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Ht,e,"auto","min","max","fit"]}],"font-size":[{text:["base",Xa,Qa]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",PS]}],"font-family":[{font:[wh]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Ht]}],"line-clamp":[{"line-clamp":["none",bd,PS]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",na,Ht]}],"list-image":[{"list-image":["none",Ht]}],"list-style-type":[{list:["none","disc","decimal",Ht]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[t]}],"placeholder-opacity":[{"placeholder-opacity":[b]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[t]}],"text-opacity":[{"text-opacity":[b]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...L(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",na,Qa]}],"underline-offset":[{"underline-offset":["auto",na,Ht]}],"text-decoration-color":[{decoration:[t]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:E()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ht]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ht]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[b]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...G(),rX]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",nX]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},sX]}],"bg-color":[{bg:[t]}],"gradient-from-pos":[{from:[g]}],"gradient-via-pos":[{via:[g]}],"gradient-to-pos":[{to:[g]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[s]}],"rounded-s":[{"rounded-s":[s]}],"rounded-e":[{"rounded-e":[s]}],"rounded-t":[{"rounded-t":[s]}],"rounded-r":[{"rounded-r":[s]}],"rounded-b":[{"rounded-b":[s]}],"rounded-l":[{"rounded-l":[s]}],"rounded-ss":[{"rounded-ss":[s]}],"rounded-se":[{"rounded-se":[s]}],"rounded-ee":[{"rounded-ee":[s]}],"rounded-es":[{"rounded-es":[s]}],"rounded-tl":[{"rounded-tl":[s]}],"rounded-tr":[{"rounded-tr":[s]}],"rounded-br":[{"rounded-br":[s]}],"rounded-bl":[{"rounded-bl":[s]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[b]}],"border-style":[{border:[...L(),"hidden"]}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[b]}],"divide-style":[{divide:L()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...L()]}],"outline-offset":[{"outline-offset":[na,Ht]}],"outline-w":[{outline:[na,Qa]}],"outline-color":[{outline:[t]}],"ring-w":[{ring:R()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[t]}],"ring-opacity":[{"ring-opacity":[b]}],"ring-offset-w":[{"ring-offset":[na,Qa]}],"ring-offset-color":[{"ring-offset":[t]}],shadow:[{shadow:["","inner","none",Xa,oX]}],"shadow-color":[{shadow:[wh]}],opacity:[{opacity:[b]}],"mix-blend":[{"mix-blend":[...V(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":V()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Xa,Ht]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[f]}],saturate:[{saturate:[w]}],sepia:[{sepia:[C]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[b]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[C]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[o]}],"border-spacing-x":[{"border-spacing-x":[o]}],"border-spacing-y":[{"border-spacing-y":[o]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Ht]}],duration:[{duration:Q()}],ease:[{ease:["linear","in","out","in-out",Ht]}],delay:[{delay:Q()}],animate:[{animate:["none","spin","ping","pulse","bounce",Ht]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[bh,Ht]}],"translate-x":[{"translate-x":[j]}],"translate-y":[{"translate-y":[j]}],"skew-x":[{"skew-x":[_]}],"skew-y":[{"skew-y":[_]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Ht]}],accent:[{accent:["auto",t]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ht]}],"caret-color":[{caret:[t]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":E()}],"scroll-mx":[{"scroll-mx":E()}],"scroll-my":[{"scroll-my":E()}],"scroll-ms":[{"scroll-ms":E()}],"scroll-me":[{"scroll-me":E()}],"scroll-mt":[{"scroll-mt":E()}],"scroll-mr":[{"scroll-mr":E()}],"scroll-mb":[{"scroll-mb":E()}],"scroll-ml":[{"scroll-ml":E()}],"scroll-p":[{"scroll-p":E()}],"scroll-px":[{"scroll-px":E()}],"scroll-py":[{"scroll-py":E()}],"scroll-ps":[{"scroll-ps":E()}],"scroll-pe":[{"scroll-pe":E()}],"scroll-pt":[{"scroll-pt":E()}],"scroll-pr":[{"scroll-pr":E()}],"scroll-pb":[{"scroll-pb":E()}],"scroll-pl":[{"scroll-pl":E()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ht]}],fill:[{fill:[t,"none"]}],"stroke-w":[{stroke:[na,Qa,PS]}],stroke:[{stroke:[t,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},dX=KQ(uX);function Pe(...t){return dX(Mt(t))}const fX=IQ,hX=v.forwardRef(({className:t,sideOffset:e=4,...n},r)=>a.jsx(L4,{ref:r,sideOffset:e,className:Pe("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...n}));hX.displayName=L4.displayName;var m0=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},g0=typeof window>"u"||"Deno"in globalThis;function Ls(){}function pX(t,e){return typeof t=="function"?t(e):t}function mX(t){return typeof t=="number"&&t>=0&&t!==1/0}function gX(t,e){return Math.max(t+(e||0)-Date.now(),0)}function IO(t,e){return typeof t=="function"?t(e):t}function vX(t,e){return typeof t=="function"?t(e):t}function RO(t,e){const{type:n="all",exact:r,fetchStatus:i,predicate:s,queryKey:o,stale:c}=t;if(o){if(r){if(e.queryHash!==jE(o,e.options))return!1}else if(!Hp(e.queryKey,o))return!1}if(n!=="all"){const l=e.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof c=="boolean"&&e.isStale()!==c||i&&i!==e.state.fetchStatus||s&&!s(e))}function MO(t,e){const{exact:n,status:r,predicate:i,mutationKey:s}=t;if(s){if(!e.options.mutationKey)return!1;if(n){if(Bp(e.options.mutationKey)!==Bp(s))return!1}else if(!Hp(e.options.mutationKey,s))return!1}return!(r&&e.state.status!==r||i&&!i(e))}function jE(t,e){return((e==null?void 0:e.queryKeyHashFn)||Bp)(t)}function Bp(t){return JSON.stringify(t,(e,n)=>M_(n)?Object.keys(n).sort().reduce((r,i)=>(r[i]=n[i],r),{}):n)}function Hp(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?!Object.keys(e).some(n=>!Hp(t[n],e[n])):!1}function G4(t,e){if(t===e)return t;const n=DO(t)&&DO(e);if(n||M_(t)&&M_(e)){const r=n?t:Object.keys(t),i=r.length,s=n?e:Object.keys(e),o=s.length,c=n?[]:{};let l=0;for(let u=0;u{setTimeout(e,t)})}function xX(t,e,n){return typeof n.structuralSharing=="function"?n.structuralSharing(t,e):n.structuralSharing!==!1?G4(t,e):e}function bX(t,e,n=0){const r=[...t,e];return n&&r.length>n?r.slice(1):r}function wX(t,e,n=0){const r=[e,...t];return n&&r.length>n?r.slice(0,-1):r}var EE=Symbol();function K4(t,e){return!t.queryFn&&(e!=null&&e.initialPromise)?()=>e.initialPromise:!t.queryFn||t.queryFn===EE?()=>Promise.reject(new Error(`Missing queryFn: '${t.queryHash}'`)):t.queryFn}var zl,fc,Od,U$,SX=(U$=class extends m0{constructor(){super();fn(this,zl);fn(this,fc);fn(this,Od);Gt(this,Od,e=>{if(!g0&&window.addEventListener){const n=()=>e();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){xe(this,fc)||this.setEventListener(xe(this,Od))}onUnsubscribe(){var e;this.hasListeners()||((e=xe(this,fc))==null||e.call(this),Gt(this,fc,void 0))}setEventListener(e){var n;Gt(this,Od,e),(n=xe(this,fc))==null||n.call(this),Gt(this,fc,e(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(e){xe(this,zl)!==e&&(Gt(this,zl,e),this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(n=>{n(e)})}isFocused(){var e;return typeof xe(this,zl)=="boolean"?xe(this,zl):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},zl=new WeakMap,fc=new WeakMap,Od=new WeakMap,U$),W4=new SX,Id,hc,Rd,B$,CX=(B$=class extends m0{constructor(){super();fn(this,Id,!0);fn(this,hc);fn(this,Rd);Gt(this,Rd,e=>{if(!g0&&window.addEventListener){const n=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){xe(this,hc)||this.setEventListener(xe(this,Rd))}onUnsubscribe(){var e;this.hasListeners()||((e=xe(this,hc))==null||e.call(this),Gt(this,hc,void 0))}setEventListener(e){var n;Gt(this,Rd,e),(n=xe(this,hc))==null||n.call(this),Gt(this,hc,e(this.setOnline.bind(this)))}setOnline(e){xe(this,Id)!==e&&(Gt(this,Id,e),this.listeners.forEach(r=>{r(e)}))}isOnline(){return xe(this,Id)}},Id=new WeakMap,hc=new WeakMap,Rd=new WeakMap,B$),zy=new CX;function _X(){let t,e;const n=new Promise((i,s)=>{t=i,e=s});n.status="pending",n.catch(()=>{});function r(i){Object.assign(n,i),delete n.resolve,delete n.reject}return n.resolve=i=>{r({status:"fulfilled",value:i}),t(i)},n.reject=i=>{r({status:"rejected",reason:i}),e(i)},n}function AX(t){return Math.min(1e3*2**t,3e4)}function q4(t){return(t??"online")==="online"?zy.isOnline():!0}var Y4=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function kS(t){return t instanceof Y4}function Q4(t){let e=!1,n=0,r=!1,i;const s=_X(),o=m=>{var y;r||(h(new Y4(m)),(y=t.abort)==null||y.call(t))},c=()=>{e=!0},l=()=>{e=!1},u=()=>W4.isFocused()&&(t.networkMode==="always"||zy.isOnline())&&t.canRun(),d=()=>q4(t.networkMode)&&t.canRun(),f=m=>{var y;r||(r=!0,(y=t.onSuccess)==null||y.call(t,m),i==null||i(),s.resolve(m))},h=m=>{var y;r||(r=!0,(y=t.onError)==null||y.call(t,m),i==null||i(),s.reject(m))},p=()=>new Promise(m=>{var y;i=b=>{(r||u())&&m(b)},(y=t.onPause)==null||y.call(t)}).then(()=>{var m;i=void 0,r||(m=t.onContinue)==null||m.call(t)}),g=()=>{if(r)return;let m;const y=n===0?t.initialPromise:void 0;try{m=y??t.fn()}catch(b){m=Promise.reject(b)}Promise.resolve(m).then(f).catch(b=>{var _;if(r)return;const x=t.retry??(g0?0:3),w=t.retryDelay??AX,S=typeof w=="function"?w(n,b):w,C=x===!0||typeof x=="number"&&nu()?void 0:p()).then(()=>{e?h(b):g()})})};return{promise:s,cancel:o,continue:()=>(i==null||i(),s),cancelRetry:c,continueRetry:l,canStart:d,start:()=>(d()?g():p().then(g),s)}}function jX(){let t=[],e=0,n=c=>{c()},r=c=>{c()},i=c=>setTimeout(c,0);const s=c=>{e?t.push(c):i(()=>{n(c)})},o=()=>{const c=t;t=[],c.length&&i(()=>{r(()=>{c.forEach(l=>{n(l)})})})};return{batch:c=>{let l;e++;try{l=c()}finally{e--,e||o()}return l},batchCalls:c=>(...l)=>{s(()=>{c(...l)})},schedule:s,setNotifyFunction:c=>{n=c},setBatchNotifyFunction:c=>{r=c},setScheduler:c=>{i=c}}}var hi=jX(),Vl,H$,X4=(H$=class{constructor(){fn(this,Vl)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),mX(this.gcTime)&&Gt(this,Vl,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(g0?1/0:5*60*1e3))}clearGcTimeout(){xe(this,Vl)&&(clearTimeout(xe(this,Vl)),Gt(this,Vl,void 0))}},Vl=new WeakMap,H$),Md,Dd,ls,Qr,sg,Gl,Fs,oa,z$,EX=(z$=class extends X4{constructor(e){super();fn(this,Fs);fn(this,Md);fn(this,Dd);fn(this,ls);fn(this,Qr);fn(this,sg);fn(this,Gl);Gt(this,Gl,!1),Gt(this,sg,e.defaultOptions),this.setOptions(e.options),this.observers=[],Gt(this,ls,e.cache),this.queryKey=e.queryKey,this.queryHash=e.queryHash,Gt(this,Md,TX(this.options)),this.state=e.state??xe(this,Md),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var e;return(e=xe(this,Qr))==null?void 0:e.promise}setOptions(e){this.options={...xe(this,sg),...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&xe(this,ls).remove(this)}setData(e,n){const r=xX(this.state.data,e,this.options);return Wr(this,Fs,oa).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(e,n){Wr(this,Fs,oa).call(this,{type:"setState",state:e,setStateOptions:n})}cancel(e){var r,i;const n=(r=xe(this,Qr))==null?void 0:r.promise;return(i=xe(this,Qr))==null||i.cancel(e),n?n.then(Ls).catch(Ls):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(xe(this,Md))}isActive(){return this.observers.some(e=>vX(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===EE||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStale(){return this.state.isInvalidated?!0:this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0}isStaleByTime(e=0){return this.state.isInvalidated||this.state.data===void 0||!gX(this.state.dataUpdatedAt,e)}onFocus(){var n;const e=this.observers.find(r=>r.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(n=xe(this,Qr))==null||n.continue()}onOnline(){var n;const e=this.observers.find(r=>r.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(n=xe(this,Qr))==null||n.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),xe(this,ls).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(n=>n!==e),this.observers.length||(xe(this,Qr)&&(xe(this,Gl)?xe(this,Qr).cancel({revert:!0}):xe(this,Qr).cancelRetry()),this.scheduleGc()),xe(this,ls).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Wr(this,Fs,oa).call(this,{type:"invalidate"})}fetch(e,n){var l,u,d;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(xe(this,Qr))return xe(this,Qr).continueRetry(),xe(this,Qr).promise}if(e&&this.setOptions(e),!this.options.queryFn){const f=this.observers.find(h=>h.options.queryFn);f&&this.setOptions(f.options)}const r=new AbortController,i=f=>{Object.defineProperty(f,"signal",{enumerable:!0,get:()=>(Gt(this,Gl,!0),r.signal)})},s=()=>{const f=K4(this.options,n),h={queryKey:this.queryKey,meta:this.meta};return i(h),Gt(this,Gl,!1),this.options.persister?this.options.persister(f,h,this):f(h)},o={fetchOptions:n,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:s};i(o),(l=this.options.behavior)==null||l.onFetch(o,this),Gt(this,Dd,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((u=o.fetchOptions)==null?void 0:u.meta))&&Wr(this,Fs,oa).call(this,{type:"fetch",meta:(d=o.fetchOptions)==null?void 0:d.meta});const c=f=>{var h,p,g,m;kS(f)&&f.silent||Wr(this,Fs,oa).call(this,{type:"error",error:f}),kS(f)||((p=(h=xe(this,ls).config).onError)==null||p.call(h,f,this),(m=(g=xe(this,ls).config).onSettled)==null||m.call(g,this.state.data,f,this)),this.scheduleGc()};return Gt(this,Qr,Q4({initialPromise:n==null?void 0:n.initialPromise,fn:o.fetchFn,abort:r.abort.bind(r),onSuccess:f=>{var h,p,g,m;if(f===void 0){c(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(f)}catch(y){c(y);return}(p=(h=xe(this,ls).config).onSuccess)==null||p.call(h,f,this),(m=(g=xe(this,ls).config).onSettled)==null||m.call(g,f,this.state.error,this),this.scheduleGc()},onError:c,onFail:(f,h)=>{Wr(this,Fs,oa).call(this,{type:"failed",failureCount:f,error:h})},onPause:()=>{Wr(this,Fs,oa).call(this,{type:"pause"})},onContinue:()=>{Wr(this,Fs,oa).call(this,{type:"continue"})},retry:o.options.retry,retryDelay:o.options.retryDelay,networkMode:o.options.networkMode,canRun:()=>!0})),xe(this,Qr).start()}},Md=new WeakMap,Dd=new WeakMap,ls=new WeakMap,Qr=new WeakMap,sg=new WeakMap,Gl=new WeakMap,Fs=new WeakSet,oa=function(e){const n=r=>{switch(e.type){case"failed":return{...r,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...NX(r.data,this.options),fetchMeta:e.meta??null};case"success":return{...r,data:e.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const i=e.error;return kS(i)&&i.revert&&xe(this,Dd)?{...xe(this,Dd),fetchStatus:"idle"}:{...r,error:i,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...e.state}}};this.state=n(this.state),hi.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),xe(this,ls).notify({query:this,type:"updated",action:e})})},z$);function NX(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:q4(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function TX(t){const e=typeof t.initialData=="function"?t.initialData():t.initialData,n=e!==void 0,r=n?typeof t.initialDataUpdatedAt=="function"?t.initialDataUpdatedAt():t.initialDataUpdatedAt:0;return{data:e,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Co,V$,PX=(V$=class extends m0{constructor(e={}){super();fn(this,Co);this.config=e,Gt(this,Co,new Map)}build(e,n,r){const i=n.queryKey,s=n.queryHash??jE(i,n);let o=this.get(s);return o||(o=new EX({cache:this,queryKey:i,queryHash:s,options:e.defaultQueryOptions(n),state:r,defaultOptions:e.getQueryDefaults(i)}),this.add(o)),o}add(e){xe(this,Co).has(e.queryHash)||(xe(this,Co).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const n=xe(this,Co).get(e.queryHash);n&&(e.destroy(),n===e&&xe(this,Co).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){hi.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return xe(this,Co).get(e)}getAll(){return[...xe(this,Co).values()]}find(e){const n={exact:!0,...e};return this.getAll().find(r=>RO(n,r))}findAll(e={}){const n=this.getAll();return Object.keys(e).length>0?n.filter(r=>RO(e,r)):n}notify(e){hi.batch(()=>{this.listeners.forEach(n=>{n(e)})})}onFocus(){hi.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){hi.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Co=new WeakMap,V$),_o,ai,Kl,Ao,Ja,G$,kX=(G$=class extends X4{constructor(e){super();fn(this,Ao);fn(this,_o);fn(this,ai);fn(this,Kl);this.mutationId=e.mutationId,Gt(this,ai,e.mutationCache),Gt(this,_o,[]),this.state=e.state||OX(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){xe(this,_o).includes(e)||(xe(this,_o).push(e),this.clearGcTimeout(),xe(this,ai).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){Gt(this,_o,xe(this,_o).filter(n=>n!==e)),this.scheduleGc(),xe(this,ai).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){xe(this,_o).length||(this.state.status==="pending"?this.scheduleGc():xe(this,ai).remove(this))}continue(){var e;return((e=xe(this,Kl))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var i,s,o,c,l,u,d,f,h,p,g,m,y,b,x,w,S,C,_,A;Gt(this,Kl,Q4({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(j,P)=>{Wr(this,Ao,Ja).call(this,{type:"failed",failureCount:j,error:P})},onPause:()=>{Wr(this,Ao,Ja).call(this,{type:"pause"})},onContinue:()=>{Wr(this,Ao,Ja).call(this,{type:"continue"})},retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>xe(this,ai).canRun(this)}));const n=this.state.status==="pending",r=!xe(this,Kl).canStart();try{if(!n){Wr(this,Ao,Ja).call(this,{type:"pending",variables:e,isPaused:r}),await((s=(i=xe(this,ai).config).onMutate)==null?void 0:s.call(i,e,this));const P=await((c=(o=this.options).onMutate)==null?void 0:c.call(o,e));P!==this.state.context&&Wr(this,Ao,Ja).call(this,{type:"pending",context:P,variables:e,isPaused:r})}const j=await xe(this,Kl).start();return await((u=(l=xe(this,ai).config).onSuccess)==null?void 0:u.call(l,j,e,this.state.context,this)),await((f=(d=this.options).onSuccess)==null?void 0:f.call(d,j,e,this.state.context)),await((p=(h=xe(this,ai).config).onSettled)==null?void 0:p.call(h,j,null,this.state.variables,this.state.context,this)),await((m=(g=this.options).onSettled)==null?void 0:m.call(g,j,null,e,this.state.context)),Wr(this,Ao,Ja).call(this,{type:"success",data:j}),j}catch(j){try{throw await((b=(y=xe(this,ai).config).onError)==null?void 0:b.call(y,j,e,this.state.context,this)),await((w=(x=this.options).onError)==null?void 0:w.call(x,j,e,this.state.context)),await((C=(S=xe(this,ai).config).onSettled)==null?void 0:C.call(S,void 0,j,this.state.variables,this.state.context,this)),await((A=(_=this.options).onSettled)==null?void 0:A.call(_,void 0,j,e,this.state.context)),j}finally{Wr(this,Ao,Ja).call(this,{type:"error",error:j})}}finally{xe(this,ai).runNext(this)}}},_o=new WeakMap,ai=new WeakMap,Kl=new WeakMap,Ao=new WeakSet,Ja=function(e){const n=r=>{switch(e.type){case"failed":return{...r,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...r,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:e.error,failureCount:r.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=n(this.state),hi.batch(()=>{xe(this,_o).forEach(r=>{r.onMutationUpdate(e)}),xe(this,ai).notify({mutation:this,type:"updated",action:e})})},G$);function OX(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Vi,og,K$,IX=(K$=class extends m0{constructor(e={}){super();fn(this,Vi);fn(this,og);this.config=e,Gt(this,Vi,new Map),Gt(this,og,Date.now())}build(e,n,r){const i=new kX({mutationCache:this,mutationId:++Bg(this,og)._,options:e.defaultMutationOptions(n),state:r});return this.add(i),i}add(e){const n=lv(e),r=xe(this,Vi).get(n)??[];r.push(e),xe(this,Vi).set(n,r),this.notify({type:"added",mutation:e})}remove(e){var r;const n=lv(e);if(xe(this,Vi).has(n)){const i=(r=xe(this,Vi).get(n))==null?void 0:r.filter(s=>s!==e);i&&(i.length===0?xe(this,Vi).delete(n):xe(this,Vi).set(n,i))}this.notify({type:"removed",mutation:e})}canRun(e){var r;const n=(r=xe(this,Vi).get(lv(e)))==null?void 0:r.find(i=>i.state.status==="pending");return!n||n===e}runNext(e){var r;const n=(r=xe(this,Vi).get(lv(e)))==null?void 0:r.find(i=>i!==e&&i.state.isPaused);return(n==null?void 0:n.continue())??Promise.resolve()}clear(){hi.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}getAll(){return[...xe(this,Vi).values()].flat()}find(e){const n={exact:!0,...e};return this.getAll().find(r=>MO(n,r))}findAll(e={}){return this.getAll().filter(n=>MO(e,n))}notify(e){hi.batch(()=>{this.listeners.forEach(n=>{n(e)})})}resumePausedMutations(){const e=this.getAll().filter(n=>n.state.isPaused);return hi.batch(()=>Promise.all(e.map(n=>n.continue().catch(Ls))))}},Vi=new WeakMap,og=new WeakMap,K$);function lv(t){var e;return((e=t.options.scope)==null?void 0:e.id)??String(t.mutationId)}function LO(t){return{onFetch:(e,n)=>{var d,f,h,p,g;const r=e.options,i=(h=(f=(d=e.fetchOptions)==null?void 0:d.meta)==null?void 0:f.fetchMore)==null?void 0:h.direction,s=((p=e.state.data)==null?void 0:p.pages)||[],o=((g=e.state.data)==null?void 0:g.pageParams)||[];let c={pages:[],pageParams:[]},l=0;const u=async()=>{let m=!1;const y=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>(e.signal.aborted?m=!0:e.signal.addEventListener("abort",()=>{m=!0}),e.signal)})},b=K4(e.options,e.fetchOptions),x=async(w,S,C)=>{if(m)return Promise.reject();if(S==null&&w.pages.length)return Promise.resolve(w);const _={queryKey:e.queryKey,pageParam:S,direction:C?"backward":"forward",meta:e.options.meta};y(_);const A=await b(_),{maxPages:j}=e.options,P=C?wX:bX;return{pages:P(w.pages,A,j),pageParams:P(w.pageParams,S,j)}};if(i&&s.length){const w=i==="backward",S=w?RX:FO,C={pages:s,pageParams:o},_=S(r,C);c=await x(C,_,w)}else{const w=t??s.length;do{const S=l===0?o[0]??r.initialPageParam:FO(r,c);if(l>0&&S==null)break;c=await x(c,S),l++}while(l{var m,y;return(y=(m=e.options).persister)==null?void 0:y.call(m,u,{queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},n)}:e.fetchFn=u}}}function FO(t,{pages:e,pageParams:n}){const r=e.length-1;return e.length>0?t.getNextPageParam(e[r],e,n[r],n):void 0}function RX(t,{pages:e,pageParams:n}){var r;return e.length>0?(r=t.getPreviousPageParam)==null?void 0:r.call(t,e[0],e,n[0],n):void 0}var Jn,pc,mc,$d,Ld,gc,Fd,Ud,W$,MX=(W$=class{constructor(t={}){fn(this,Jn);fn(this,pc);fn(this,mc);fn(this,$d);fn(this,Ld);fn(this,gc);fn(this,Fd);fn(this,Ud);Gt(this,Jn,t.queryCache||new PX),Gt(this,pc,t.mutationCache||new IX),Gt(this,mc,t.defaultOptions||{}),Gt(this,$d,new Map),Gt(this,Ld,new Map),Gt(this,gc,0)}mount(){Bg(this,gc)._++,xe(this,gc)===1&&(Gt(this,Fd,W4.subscribe(async t=>{t&&(await this.resumePausedMutations(),xe(this,Jn).onFocus())})),Gt(this,Ud,zy.subscribe(async t=>{t&&(await this.resumePausedMutations(),xe(this,Jn).onOnline())})))}unmount(){var t,e;Bg(this,gc)._--,xe(this,gc)===0&&((t=xe(this,Fd))==null||t.call(this),Gt(this,Fd,void 0),(e=xe(this,Ud))==null||e.call(this),Gt(this,Ud,void 0))}isFetching(t){return xe(this,Jn).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return xe(this,pc).findAll({...t,status:"pending"}).length}getQueryData(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=xe(this,Jn).get(e.queryHash))==null?void 0:n.state.data}ensureQueryData(t){const e=this.getQueryData(t.queryKey);if(e===void 0)return this.fetchQuery(t);{const n=this.defaultQueryOptions(t),r=xe(this,Jn).build(this,n);return t.revalidateIfStale&&r.isStaleByTime(IO(n.staleTime,r))&&this.prefetchQuery(n),Promise.resolve(e)}}getQueriesData(t){return xe(this,Jn).findAll(t).map(({queryKey:e,state:n})=>{const r=n.data;return[e,r]})}setQueryData(t,e,n){const r=this.defaultQueryOptions({queryKey:t}),i=xe(this,Jn).get(r.queryHash),s=i==null?void 0:i.state.data,o=pX(e,s);if(o!==void 0)return xe(this,Jn).build(this,r).setData(o,{...n,manual:!0})}setQueriesData(t,e,n){return hi.batch(()=>xe(this,Jn).findAll(t).map(({queryKey:r})=>[r,this.setQueryData(r,e,n)]))}getQueryState(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=xe(this,Jn).get(e.queryHash))==null?void 0:n.state}removeQueries(t){const e=xe(this,Jn);hi.batch(()=>{e.findAll(t).forEach(n=>{e.remove(n)})})}resetQueries(t,e){const n=xe(this,Jn),r={type:"active",...t};return hi.batch(()=>(n.findAll(t).forEach(i=>{i.reset()}),this.refetchQueries(r,e)))}cancelQueries(t={},e={}){const n={revert:!0,...e},r=hi.batch(()=>xe(this,Jn).findAll(t).map(i=>i.cancel(n)));return Promise.all(r).then(Ls).catch(Ls)}invalidateQueries(t={},e={}){return hi.batch(()=>{if(xe(this,Jn).findAll(t).forEach(r=>{r.invalidate()}),t.refetchType==="none")return Promise.resolve();const n={...t,type:t.refetchType??t.type??"active"};return this.refetchQueries(n,e)})}refetchQueries(t={},e){const n={...e,cancelRefetch:(e==null?void 0:e.cancelRefetch)??!0},r=hi.batch(()=>xe(this,Jn).findAll(t).filter(i=>!i.isDisabled()).map(i=>{let s=i.fetch(void 0,n);return n.throwOnError||(s=s.catch(Ls)),i.state.fetchStatus==="paused"?Promise.resolve():s}));return Promise.all(r).then(Ls)}fetchQuery(t){const e=this.defaultQueryOptions(t);e.retry===void 0&&(e.retry=!1);const n=xe(this,Jn).build(this,e);return n.isStaleByTime(IO(e.staleTime,n))?n.fetch(e):Promise.resolve(n.state.data)}prefetchQuery(t){return this.fetchQuery(t).then(Ls).catch(Ls)}fetchInfiniteQuery(t){return t.behavior=LO(t.pages),this.fetchQuery(t)}prefetchInfiniteQuery(t){return this.fetchInfiniteQuery(t).then(Ls).catch(Ls)}ensureInfiniteQueryData(t){return t.behavior=LO(t.pages),this.ensureQueryData(t)}resumePausedMutations(){return zy.isOnline()?xe(this,pc).resumePausedMutations():Promise.resolve()}getQueryCache(){return xe(this,Jn)}getMutationCache(){return xe(this,pc)}getDefaultOptions(){return xe(this,mc)}setDefaultOptions(t){Gt(this,mc,t)}setQueryDefaults(t,e){xe(this,$d).set(Bp(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...xe(this,$d).values()];let n={};return e.forEach(r=>{Hp(t,r.queryKey)&&(n={...n,...r.defaultOptions})}),n}setMutationDefaults(t,e){xe(this,Ld).set(Bp(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...xe(this,Ld).values()];let n={};return e.forEach(r=>{Hp(t,r.mutationKey)&&(n={...n,...r.defaultOptions})}),n}defaultQueryOptions(t){if(t._defaulted)return t;const e={...xe(this,mc).queries,...this.getQueryDefaults(t.queryKey),...t,_defaulted:!0};return e.queryHash||(e.queryHash=jE(e.queryKey,e)),e.refetchOnReconnect===void 0&&(e.refetchOnReconnect=e.networkMode!=="always"),e.throwOnError===void 0&&(e.throwOnError=!!e.suspense),!e.networkMode&&e.persister&&(e.networkMode="offlineFirst"),e.enabled!==!0&&e.queryFn===EE&&(e.enabled=!1),e}defaultMutationOptions(t){return t!=null&&t._defaulted?t:{...xe(this,mc).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){xe(this,Jn).clear(),xe(this,pc).clear()}},Jn=new WeakMap,pc=new WeakMap,mc=new WeakMap,$d=new WeakMap,Ld=new WeakMap,gc=new WeakMap,Fd=new WeakMap,Ud=new WeakMap,W$),DX=v.createContext(void 0),$X=({client:t,children:e})=>(v.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),a.jsx(DX.Provider,{value:t,children:e}));/** - * @remix-run/router v1.20.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function zp(){return zp=Object.assign?Object.assign.bind():function(t){for(var e=1;e"u")throw new Error(e)}function J4(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function FX(){return Math.random().toString(36).substr(2,8)}function BO(t,e){return{usr:t.state,key:t.key,idx:e}}function D_(t,e,n,r){return n===void 0&&(n=null),zp({pathname:typeof t=="string"?t:t.pathname,search:"",hash:""},typeof e=="string"?$f(e):e,{state:n,key:e&&e.key||r||FX()})}function Vy(t){let{pathname:e="/",search:n="",hash:r=""}=t;return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(e+=r.charAt(0)==="#"?r:"#"+r),e}function $f(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substr(n),t=t.substr(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substr(r),t=t.substr(0,r)),t&&(e.pathname=t)}return e}function UX(t,e,n,r){r===void 0&&(r={});let{window:i=document.defaultView,v5Compat:s=!1}=r,o=i.history,c=xc.Pop,l=null,u=d();u==null&&(u=0,o.replaceState(zp({},o.state,{idx:u}),""));function d(){return(o.state||{idx:null}).idx}function f(){c=xc.Pop;let y=d(),b=y==null?null:y-u;u=y,l&&l({action:c,location:m.location,delta:b})}function h(y,b){c=xc.Push;let x=D_(m.location,y,b);u=d()+1;let w=BO(x,u),S=m.createHref(x);try{o.pushState(w,"",S)}catch(C){if(C instanceof DOMException&&C.name==="DataCloneError")throw C;i.location.assign(S)}s&&l&&l({action:c,location:m.location,delta:1})}function p(y,b){c=xc.Replace;let x=D_(m.location,y,b);u=d();let w=BO(x,u),S=m.createHref(x);o.replaceState(w,"",S),s&&l&&l({action:c,location:m.location,delta:0})}function g(y){let b=i.location.origin!=="null"?i.location.origin:i.location.href,x=typeof y=="string"?y:Vy(y);return x=x.replace(/ $/,"%20"),sr(b,"No window.location.(origin|href) available to create URL for href: "+x),new URL(x,b)}let m={get action(){return c},get location(){return t(i,o)},listen(y){if(l)throw new Error("A history only accepts one active listener");return i.addEventListener(UO,f),l=y,()=>{i.removeEventListener(UO,f),l=null}},createHref(y){return e(i,y)},createURL:g,encodeLocation(y){let b=g(y);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:h,replace:p,go(y){return o.go(y)}};return m}var HO;(function(t){t.data="data",t.deferred="deferred",t.redirect="redirect",t.error="error"})(HO||(HO={}));function BX(t,e,n){return n===void 0&&(n="/"),HX(t,e,n,!1)}function HX(t,e,n,r){let i=typeof e=="string"?$f(e):e,s=NE(i.pathname||"/",n);if(s==null)return null;let o=Z4(t);zX(o);let c=null;for(let l=0;c==null&&l{let l={relativePath:c===void 0?s.path||"":c,caseSensitive:s.caseSensitive===!0,childrenIndex:o,route:s};l.relativePath.startsWith("/")&&(sr(l.relativePath.startsWith(r),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(r.length));let u=Oc([r,l.relativePath]),d=n.concat(l);s.children&&s.children.length>0&&(sr(s.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),Z4(s.children,e,d,u)),!(s.path==null&&!s.index)&&e.push({path:u,score:QX(u,s.index),routesMeta:d})};return t.forEach((s,o)=>{var c;if(s.path===""||!((c=s.path)!=null&&c.includes("?")))i(s,o);else for(let l of e5(s.path))i(s,o,l)}),e}function e5(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,i=n.endsWith("?"),s=n.replace(/\?$/,"");if(r.length===0)return i?[s,""]:[s];let o=e5(r.join("/")),c=[];return c.push(...o.map(l=>l===""?s:[s,l].join("/"))),i&&c.push(...o),c.map(l=>t.startsWith("/")&&l===""?"/":l)}function zX(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:XX(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const VX=/^:[\w-]+$/,GX=3,KX=2,WX=1,qX=10,YX=-2,zO=t=>t==="*";function QX(t,e){let n=t.split("/"),r=n.length;return n.some(zO)&&(r+=YX),e&&(r+=KX),n.filter(i=>!zO(i)).reduce((i,s)=>i+(VX.test(s)?GX:s===""?WX:qX),r)}function XX(t,e){return t.length===e.length&&t.slice(0,-1).every((r,i)=>r===e[i])?t[t.length-1]-e[e.length-1]:0}function JX(t,e,n){let{routesMeta:r}=t,i={},s="/",o=[];for(let c=0;c{let{paramName:h,isOptional:p}=d;if(h==="*"){let m=c[f]||"";o=s.slice(0,s.length-m.length).replace(/(.)\/+$/,"$1")}const g=c[f];return p&&!g?u[h]=void 0:u[h]=(g||"").replace(/%2F/g,"/"),u},{}),pathname:s,pathnameBase:o,pattern:t}}function ZX(t,e,n){e===void 0&&(e=!1),n===void 0&&(n=!0),J4(t==="*"||!t.endsWith("*")||t.endsWith("/*"),'Route path "'+t+'" will be treated as if it were '+('"'+t.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+t.replace(/\*$/,"/*")+'".'));let r=[],i="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,c,l)=>(r.push({paramName:c,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return t.endsWith("*")?(r.push({paramName:"*"}),i+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":t!==""&&t!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,e?void 0:"i"),r]}function eJ(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return J4(!1,'The URL path "'+t+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+e+").")),t}}function NE(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}function tJ(t,e){e===void 0&&(e="/");let{pathname:n,search:r="",hash:i=""}=typeof t=="string"?$f(t):t;return{pathname:n?n.startsWith("/")?n:nJ(n,e):e,search:sJ(r),hash:oJ(i)}}function nJ(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function OS(t,e,n,r){return"Cannot include a '"+t+"' character in a manually specified "+("`to."+e+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function rJ(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function TE(t,e){let n=rJ(t);return e?n.map((r,i)=>i===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function PE(t,e,n,r){r===void 0&&(r=!1);let i;typeof t=="string"?i=$f(t):(i=zp({},t),sr(!i.pathname||!i.pathname.includes("?"),OS("?","pathname","search",i)),sr(!i.pathname||!i.pathname.includes("#"),OS("#","pathname","hash",i)),sr(!i.search||!i.search.includes("#"),OS("#","search","hash",i)));let s=t===""||i.pathname==="",o=s?"/":i.pathname,c;if(o==null)c=n;else{let f=e.length-1;if(!r&&o.startsWith("..")){let h=o.split("/");for(;h[0]==="..";)h.shift(),f-=1;i.pathname=h.join("/")}c=f>=0?e[f]:"/"}let l=tJ(i,c),u=o&&o!=="/"&&o.endsWith("/"),d=(s||o===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(u||d)&&(l.pathname+="/"),l}const Oc=t=>t.join("/").replace(/\/\/+/g,"/"),iJ=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),sJ=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,oJ=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function aJ(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}const t5=["post","put","patch","delete"];new Set(t5);const cJ=["get",...t5];new Set(cJ);/** - * React Router v6.27.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function Vp(){return Vp=Object.assign?Object.assign.bind():function(t){for(var e=1;e{c.current=!0}),v.useCallback(function(u,d){if(d===void 0&&(d={}),!c.current)return;if(typeof u=="number"){r.go(u);return}let f=PE(u,JSON.parse(o),s,d.relative==="path");t==null&&e!=="/"&&(f.pathname=f.pathname==="/"?e:Oc([e,f.pathname])),(d.replace?r.replace:r.push)(f,d.state,d)},[e,r,o,s,t])}function OE(){let{matches:t}=v.useContext(za),e=t[t.length-1];return e?e.params:{}}function i5(t,e){let{relative:n}=e===void 0?{}:e,{future:r}=v.useContext(ll),{matches:i}=v.useContext(za),{pathname:s}=Ui(),o=JSON.stringify(TE(i,r.v7_relativeSplatPath));return v.useMemo(()=>PE(t,JSON.parse(o),s,n==="path"),[t,o,s,n])}function fJ(t,e){return hJ(t,e)}function hJ(t,e,n,r){Lf()||sr(!1);let{navigator:i}=v.useContext(ll),{matches:s}=v.useContext(za),o=s[s.length-1],c=o?o.params:{};o&&o.pathname;let l=o?o.pathnameBase:"/";o&&o.route;let u=Ui(),d;if(e){var f;let y=typeof e=="string"?$f(e):e;l==="/"||(f=y.pathname)!=null&&f.startsWith(l)||sr(!1),d=y}else d=u;let h=d.pathname||"/",p=h;if(l!=="/"){let y=l.replace(/^\//,"").split("/");p="/"+h.replace(/^\//,"").split("/").slice(y.length).join("/")}let g=BX(t,{pathname:p}),m=yJ(g&&g.map(y=>Object.assign({},y,{params:Object.assign({},c,y.params),pathname:Oc([l,i.encodeLocation?i.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?l:Oc([l,i.encodeLocation?i.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),s,n,r);return e&&m?v.createElement(v0.Provider,{value:{location:Vp({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:xc.Pop}},m):m}function pJ(){let t=SJ(),e=aJ(t)?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return v.createElement(v.Fragment,null,v.createElement("h2",null,"Unexpected Application Error!"),v.createElement("h3",{style:{fontStyle:"italic"}},e),n?v.createElement("pre",{style:i},n):null,null)}const mJ=v.createElement(pJ,null);class gJ extends v.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){console.error("React Router caught the following error during render",e,n)}render(){return this.state.error!==void 0?v.createElement(za.Provider,{value:this.props.routeContext},v.createElement(n5.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function vJ(t){let{routeContext:e,match:n,children:r}=t,i=v.useContext(kE);return i&&i.static&&i.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=n.route.id),v.createElement(za.Provider,{value:e},r)}function yJ(t,e,n,r){var i;if(e===void 0&&(e=[]),n===void 0&&(n=null),r===void 0&&(r=null),t==null){var s;if(!n)return null;if(n.errors)t=n.matches;else if((s=r)!=null&&s.v7_partialHydration&&e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let o=t,c=(i=n)==null?void 0:i.errors;if(c!=null){let d=o.findIndex(f=>f.route.id&&(c==null?void 0:c[f.route.id])!==void 0);d>=0||sr(!1),o=o.slice(0,Math.min(o.length,d+1))}let l=!1,u=-1;if(n&&r&&r.v7_partialHydration)for(let d=0;d=0?o=o.slice(0,u+1):o=[o[0]];break}}}return o.reduceRight((d,f,h)=>{let p,g=!1,m=null,y=null;n&&(p=c&&f.route.id?c[f.route.id]:void 0,m=f.route.errorElement||mJ,l&&(u<0&&h===0?(g=!0,y=null):u===h&&(g=!0,y=f.route.hydrateFallbackElement||null)));let b=e.concat(o.slice(0,h+1)),x=()=>{let w;return p?w=m:g?w=y:f.route.Component?w=v.createElement(f.route.Component,null):f.route.element?w=f.route.element:w=d,v.createElement(vJ,{match:f,routeContext:{outlet:d,matches:b,isDataRoute:n!=null},children:w})};return n&&(f.route.ErrorBoundary||f.route.errorElement||h===0)?v.createElement(gJ,{location:n.location,revalidation:n.revalidation,component:m,error:p,children:x(),routeContext:{outlet:null,matches:b,isDataRoute:!0}}):x()},null)}var s5=function(t){return t.UseBlocker="useBlocker",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t}(s5||{}),Gy=function(t){return t.UseBlocker="useBlocker",t.UseLoaderData="useLoaderData",t.UseActionData="useActionData",t.UseRouteError="useRouteError",t.UseNavigation="useNavigation",t.UseRouteLoaderData="useRouteLoaderData",t.UseMatches="useMatches",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t.UseRouteId="useRouteId",t}(Gy||{});function xJ(t){let e=v.useContext(kE);return e||sr(!1),e}function bJ(t){let e=v.useContext(lJ);return e||sr(!1),e}function wJ(t){let e=v.useContext(za);return e||sr(!1),e}function o5(t){let e=wJ(),n=e.matches[e.matches.length-1];return n.route.id||sr(!1),n.route.id}function SJ(){var t;let e=v.useContext(n5),n=bJ(Gy.UseRouteError),r=o5(Gy.UseRouteError);return e!==void 0?e:(t=n.errors)==null?void 0:t[r]}function CJ(){let{router:t}=xJ(s5.UseNavigateStable),e=o5(Gy.UseNavigateStable),n=v.useRef(!1);return r5(()=>{n.current=!0}),v.useCallback(function(i,s){s===void 0&&(s={}),n.current&&(typeof i=="number"?t.navigate(i):t.navigate(i,Vp({fromRouteId:e},s)))},[t,e])}function a5(t){let{to:e,replace:n,state:r,relative:i}=t;Lf()||sr(!1);let{future:s,static:o}=v.useContext(ll),{matches:c}=v.useContext(za),{pathname:l}=Ui(),u=ar(),d=PE(e,TE(c,s.v7_relativeSplatPath),l,i==="path"),f=JSON.stringify(d);return v.useEffect(()=>u(JSON.parse(f),{replace:n,state:r,relative:i}),[u,f,i,n,r]),null}function Ms(t){sr(!1)}function _J(t){let{basename:e="/",children:n=null,location:r,navigationType:i=xc.Pop,navigator:s,static:o=!1,future:c}=t;Lf()&&sr(!1);let l=e.replace(/^\/*/,"/"),u=v.useMemo(()=>({basename:l,navigator:s,static:o,future:Vp({v7_relativeSplatPath:!1},c)}),[l,c,s,o]);typeof r=="string"&&(r=$f(r));let{pathname:d="/",search:f="",hash:h="",state:p=null,key:g="default"}=r,m=v.useMemo(()=>{let y=NE(d,l);return y==null?null:{location:{pathname:y,search:f,hash:h,state:p,key:g},navigationType:i}},[l,d,f,h,p,g,i]);return m==null?null:v.createElement(ll.Provider,{value:u},v.createElement(v0.Provider,{children:n,value:m}))}function AJ(t){let{children:e,location:n}=t;return fJ($_(e),n)}new Promise(()=>{});function $_(t,e){e===void 0&&(e=[]);let n=[];return v.Children.forEach(t,(r,i)=>{if(!v.isValidElement(r))return;let s=[...e,i];if(r.type===v.Fragment){n.push.apply(n,$_(r.props.children,s));return}r.type!==Ms&&sr(!1),!r.props.index||!r.props.children||sr(!1);let o={id:r.props.id||s.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(o.children=$_(r.props.children,s)),n.push(o)}),n}/** - * React Router DOM v6.27.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function L_(){return L_=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&(n[i]=t[i]);return n}function EJ(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function NJ(t,e){return t.button===0&&(!e||e==="_self")&&!EJ(t)}function F_(t){return t===void 0&&(t=""),new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,n)=>{let r=t[n];return e.concat(Array.isArray(r)?r.map(i=>[n,i]):[[n,r]])},[]))}function TJ(t,e){let n=F_(t);return e&&e.forEach((r,i)=>{n.has(i)||e.getAll(i).forEach(s=>{n.append(i,s)})}),n}const PJ=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],kJ="6";try{window.__reactRouterVersion=kJ}catch{}const OJ="startTransition",GO=iL[OJ];function IJ(t){let{basename:e,children:n,future:r,window:i}=t,s=v.useRef();s.current==null&&(s.current=LX({window:i,v5Compat:!0}));let o=s.current,[c,l]=v.useState({action:o.action,location:o.location}),{v7_startTransition:u}=r||{},d=v.useCallback(f=>{u&&GO?GO(()=>l(f)):l(f)},[l,u]);return v.useLayoutEffect(()=>o.listen(d),[o,d]),v.createElement(_J,{basename:e,children:n,location:c.location,navigationType:c.action,navigator:o,future:r})}const RJ=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",MJ=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,ys=v.forwardRef(function(e,n){let{onClick:r,relative:i,reloadDocument:s,replace:o,state:c,target:l,to:u,preventScrollReset:d,viewTransition:f}=e,h=jJ(e,PJ),{basename:p}=v.useContext(ll),g,m=!1;if(typeof u=="string"&&MJ.test(u)&&(g=u,RJ))try{let w=new URL(window.location.href),S=u.startsWith("//")?new URL(w.protocol+u):new URL(u),C=NE(S.pathname,p);S.origin===w.origin&&C!=null?u=C+S.search+S.hash:m=!0}catch{}let y=uJ(u,{relative:i}),b=DJ(u,{replace:o,state:c,target:l,preventScrollReset:d,relative:i,viewTransition:f});function x(w){r&&r(w),w.defaultPrevented||b(w)}return v.createElement("a",L_({},h,{href:g||y,onClick:m||s?r:x,ref:n,target:l}))});var KO;(function(t){t.UseScrollRestoration="useScrollRestoration",t.UseSubmit="useSubmit",t.UseSubmitFetcher="useSubmitFetcher",t.UseFetcher="useFetcher",t.useViewTransitionState="useViewTransitionState"})(KO||(KO={}));var WO;(function(t){t.UseFetcher="useFetcher",t.UseFetchers="useFetchers",t.UseScrollRestoration="useScrollRestoration"})(WO||(WO={}));function DJ(t,e){let{target:n,replace:r,state:i,preventScrollReset:s,relative:o,viewTransition:c}=e===void 0?{}:e,l=ar(),u=Ui(),d=i5(t,{relative:o});return v.useCallback(f=>{if(NJ(f,n)){f.preventDefault();let h=r!==void 0?r:Vy(u)===Vy(d);l(t,{replace:h,state:i,preventScrollReset:s,relative:o,viewTransition:c})}},[u,l,d,r,i,n,t,s,o,c])}function $J(t){let e=v.useRef(F_(t)),n=v.useRef(!1),r=Ui(),i=v.useMemo(()=>TJ(r.search,n.current?null:e.current),[r.search]),s=ar(),o=v.useCallback((c,l)=>{const u=F_(typeof c=="function"?c(i):c);n.current=!0,s("?"+u,l)},[s,i]);return[i,o]}/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const LJ=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),c5=(...t)=>t.filter((e,n,r)=>!!e&&e.trim()!==""&&r.indexOf(e)===n).join(" ").trim();/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var FJ={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const UJ=v.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i="",children:s,iconNode:o,...c},l)=>v.createElement("svg",{ref:l,...FJ,width:e,height:e,stroke:t,strokeWidth:r?Number(n)*24/Number(e):n,className:c5("lucide",i),...c},[...o.map(([u,d])=>v.createElement(u,d)),...Array.isArray(s)?s:[s]]));/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Me=(t,e)=>{const n=v.forwardRef(({className:r,...i},s)=>v.createElement(UJ,{ref:s,iconNode:e,className:c5(`lucide-${LJ(t)}`,r),...i}));return n.displayName=`${t}`,n};/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ha=Me("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qO=Me("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Gp=Me("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const IS=Me("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const va=Me("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const lu=Me("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const YO=Me("Briefcase",[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const BJ=Me("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const HJ=Me("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const U_=Me("ChartNoAxesColumnIncreasing",[["line",{x1:"12",x2:"12",y1:"20",y2:"10",key:"1vz5eb"}],["line",{x1:"18",x2:"18",y1:"20",y2:"4",key:"cun8e5"}],["line",{x1:"6",x2:"6",y1:"20",y2:"16",key:"hq0ia6"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zJ=Me("ChartPie",[["path",{d:"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",key:"pzmjnu"}],["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Es=Me("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ra=Me("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const us=Me("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uu=Me("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const VJ=Me("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const IE=Me("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Bh=Me("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const l5=Me("CirclePlay",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const GJ=Me("CircleUser",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662",key:"154egf"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const KJ=Me("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const RE=Me("Circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const WJ=Me("ClipboardList",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Kp=Me("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qJ=Me("CloudUpload",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const QO=Me("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Xc=Me("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const B_=Me("Ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const YJ=Me("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Wp=Me("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const QJ=Me("FileVideo",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m10 11 5 3-5 3v-6Z",key:"7ntvm4"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ME=Me("Filter",[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3",key:"1yg77f"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const u5=Me("FolderPlus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ds=Me("Folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const XJ=Me("Grid2x2",[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 12h18",key:"1i2n21"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const H_=Me("Heart",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ky=Me("House",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const op=Me("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const JJ=Me("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ZJ=Me("Laptop",[["path",{d:"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16",key:"tarvll"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const z_=Me("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const eZ=Me("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const du=Me("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uv=Me("ListChecks",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Js=Me("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tZ=Me("Loader",[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const XO=Me("LogIn",[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}],["polyline",{points:"10 17 15 12 10 7",key:"1ail0h"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const JO=Me("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nZ=Me("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rZ=Me("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jo=Me("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Vo=Me("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iZ=Me("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ZO=Me("Paperclip",[["path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48",key:"1u3ebp"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const V_=Me("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const sZ=Me("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const oZ=Me("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Br=Me("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const aZ=Me("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Yl=Me("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const DE=Me("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $E=Me("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const LE=Me("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cZ=Me("ShoppingBag",[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z",key:"hou9p0"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const lZ=Me("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uZ=Me("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dZ=Me("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const fZ=Me("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Wy=Me("StickyNote",[["path",{d:"M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z",key:"qazsjp"}],["path",{d:"M15 3v4a2 2 0 0 0 2 2h4",key:"40519r"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hZ=Me("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Xv=Me("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qn=Me("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const pZ=Me("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const mZ=Me("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gZ=Me("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qp=Me("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Dr=Me("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vZ=Me("WandSparkles",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ri=Me("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** - * @license lucide-react v0.462.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const d5=Me("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function f5(t,e){return function(){return t.apply(e,arguments)}}const{toString:yZ}=Object.prototype,{getPrototypeOf:FE}=Object,{iterator:y0,toStringTag:h5}=Symbol,x0=(t=>e=>{const n=yZ.call(e);return t[n]||(t[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),po=t=>(t=t.toLowerCase(),e=>x0(e)===t),b0=t=>e=>typeof e===t,{isArray:Ff}=Array,Yp=b0("undefined");function xZ(t){return t!==null&&!Yp(t)&&t.constructor!==null&&!Yp(t.constructor)&&Mi(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const p5=po("ArrayBuffer");function bZ(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&p5(t.buffer),e}const wZ=b0("string"),Mi=b0("function"),m5=b0("number"),w0=t=>t!==null&&typeof t=="object",SZ=t=>t===!0||t===!1,Jv=t=>{if(x0(t)!=="object")return!1;const e=FE(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(h5 in t)&&!(y0 in t)},CZ=po("Date"),_Z=po("File"),AZ=po("Blob"),jZ=po("FileList"),EZ=t=>w0(t)&&Mi(t.pipe),NZ=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||Mi(t.append)&&((e=x0(t))==="formdata"||e==="object"&&Mi(t.toString)&&t.toString()==="[object FormData]"))},TZ=po("URLSearchParams"),[PZ,kZ,OZ,IZ]=["ReadableStream","Request","Response","Headers"].map(po),RZ=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function mg(t,e,{allOwnKeys:n=!1}={}){if(t===null||typeof t>"u")return;let r,i;if(typeof t!="object"&&(t=[t]),Ff(t))for(r=0,i=t.length;r0;)if(i=n[r],e===i.toLowerCase())return i;return null}const Il=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,v5=t=>!Yp(t)&&t!==Il;function G_(){const{caseless:t}=v5(this)&&this||{},e={},n=(r,i)=>{const s=t&&g5(e,i)||i;Jv(e[s])&&Jv(r)?e[s]=G_(e[s],r):Jv(r)?e[s]=G_({},r):Ff(r)?e[s]=r.slice():e[s]=r};for(let r=0,i=arguments.length;r(mg(e,(i,s)=>{n&&Mi(i)?t[s]=f5(i,n):t[s]=i},{allOwnKeys:r}),t),DZ=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),$Z=(t,e,n,r)=>{t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},LZ=(t,e,n,r)=>{let i,s,o;const c={};if(e=e||{},t==null)return e;do{for(i=Object.getOwnPropertyNames(t),s=i.length;s-- >0;)o=i[s],(!r||r(o,t,e))&&!c[o]&&(e[o]=t[o],c[o]=!0);t=n!==!1&&FE(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},FZ=(t,e,n)=>{t=String(t),(n===void 0||n>t.length)&&(n=t.length),n-=e.length;const r=t.indexOf(e,n);return r!==-1&&r===n},UZ=t=>{if(!t)return null;if(Ff(t))return t;let e=t.length;if(!m5(e))return null;const n=new Array(e);for(;e-- >0;)n[e]=t[e];return n},BZ=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&FE(Uint8Array)),HZ=(t,e)=>{const r=(t&&t[y0]).call(t);let i;for(;(i=r.next())&&!i.done;){const s=i.value;e.call(t,s[0],s[1])}},zZ=(t,e)=>{let n;const r=[];for(;(n=t.exec(e))!==null;)r.push(n);return r},VZ=po("HTMLFormElement"),GZ=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,i){return r.toUpperCase()+i}),eI=(({hasOwnProperty:t})=>(e,n)=>t.call(e,n))(Object.prototype),KZ=po("RegExp"),y5=(t,e)=>{const n=Object.getOwnPropertyDescriptors(t),r={};mg(n,(i,s)=>{let o;(o=e(i,s,t))!==!1&&(r[s]=o||i)}),Object.defineProperties(t,r)},WZ=t=>{y5(t,(e,n)=>{if(Mi(t)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=t[n];if(Mi(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},qZ=(t,e)=>{const n={},r=i=>{i.forEach(s=>{n[s]=!0})};return Ff(t)?r(t):r(String(t).split(e)),n},YZ=()=>{},QZ=(t,e)=>t!=null&&Number.isFinite(t=+t)?t:e;function XZ(t){return!!(t&&Mi(t.append)&&t[h5]==="FormData"&&t[y0])}const JZ=t=>{const e=new Array(10),n=(r,i)=>{if(w0(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[i]=r;const s=Ff(r)?[]:{};return mg(r,(o,c)=>{const l=n(o,i+1);!Yp(l)&&(s[c]=l)}),e[i]=void 0,s}}return r};return n(t,0)},ZZ=po("AsyncFunction"),eee=t=>t&&(w0(t)||Mi(t))&&Mi(t.then)&&Mi(t.catch),x5=((t,e)=>t?setImmediate:e?((n,r)=>(Il.addEventListener("message",({source:i,data:s})=>{i===Il&&s===n&&r.length&&r.shift()()},!1),i=>{r.push(i),Il.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Mi(Il.postMessage)),tee=typeof queueMicrotask<"u"?queueMicrotask.bind(Il):typeof process<"u"&&process.nextTick||x5,nee=t=>t!=null&&Mi(t[y0]),oe={isArray:Ff,isArrayBuffer:p5,isBuffer:xZ,isFormData:NZ,isArrayBufferView:bZ,isString:wZ,isNumber:m5,isBoolean:SZ,isObject:w0,isPlainObject:Jv,isReadableStream:PZ,isRequest:kZ,isResponse:OZ,isHeaders:IZ,isUndefined:Yp,isDate:CZ,isFile:_Z,isBlob:AZ,isRegExp:KZ,isFunction:Mi,isStream:EZ,isURLSearchParams:TZ,isTypedArray:BZ,isFileList:jZ,forEach:mg,merge:G_,extend:MZ,trim:RZ,stripBOM:DZ,inherits:$Z,toFlatObject:LZ,kindOf:x0,kindOfTest:po,endsWith:FZ,toArray:UZ,forEachEntry:HZ,matchAll:zZ,isHTMLForm:VZ,hasOwnProperty:eI,hasOwnProp:eI,reduceDescriptors:y5,freezeMethods:WZ,toObjectSet:qZ,toCamelCase:GZ,noop:YZ,toFiniteNumber:QZ,findKey:g5,global:Il,isContextDefined:v5,isSpecCompliantForm:XZ,toJSONObject:JZ,isAsyncFn:ZZ,isThenable:eee,setImmediate:x5,asap:tee,isIterable:nee};function Ft(t,e,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status?i.status:null)}oe.inherits(Ft,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:oe.toJSONObject(this.config),code:this.code,status:this.status}}});const b5=Ft.prototype,w5={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{w5[t]={value:t}});Object.defineProperties(Ft,w5);Object.defineProperty(b5,"isAxiosError",{value:!0});Ft.from=(t,e,n,r,i,s)=>{const o=Object.create(b5);return oe.toFlatObject(t,o,function(l){return l!==Error.prototype},c=>c!=="isAxiosError"),Ft.call(o,t.message,e,n,r,i),o.cause=t,o.name=t.name,s&&Object.assign(o,s),o};const ree=null;function K_(t){return oe.isPlainObject(t)||oe.isArray(t)}function S5(t){return oe.endsWith(t,"[]")?t.slice(0,-2):t}function tI(t,e,n){return t?t.concat(e).map(function(i,s){return i=S5(i),!n&&s?"["+i+"]":i}).join(n?".":""):e}function iee(t){return oe.isArray(t)&&!t.some(K_)}const see=oe.toFlatObject(oe,{},null,function(e){return/^is[A-Z]/.test(e)});function S0(t,e,n){if(!oe.isObject(t))throw new TypeError("target must be an object");e=e||new FormData,n=oe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,y){return!oe.isUndefined(y[m])});const r=n.metaTokens,i=n.visitor||d,s=n.dots,o=n.indexes,l=(n.Blob||typeof Blob<"u"&&Blob)&&oe.isSpecCompliantForm(e);if(!oe.isFunction(i))throw new TypeError("visitor must be a function");function u(g){if(g===null)return"";if(oe.isDate(g))return g.toISOString();if(!l&&oe.isBlob(g))throw new Ft("Blob is not supported. Use a Buffer instead.");return oe.isArrayBuffer(g)||oe.isTypedArray(g)?l&&typeof Blob=="function"?new Blob([g]):Buffer.from(g):g}function d(g,m,y){let b=g;if(g&&!y&&typeof g=="object"){if(oe.endsWith(m,"{}"))m=r?m:m.slice(0,-2),g=JSON.stringify(g);else if(oe.isArray(g)&&iee(g)||(oe.isFileList(g)||oe.endsWith(m,"[]"))&&(b=oe.toArray(g)))return m=S5(m),b.forEach(function(w,S){!(oe.isUndefined(w)||w===null)&&e.append(o===!0?tI([m],S,s):o===null?m:m+"[]",u(w))}),!1}return K_(g)?!0:(e.append(tI(y,m,s),u(g)),!1)}const f=[],h=Object.assign(see,{defaultVisitor:d,convertValue:u,isVisitable:K_});function p(g,m){if(!oe.isUndefined(g)){if(f.indexOf(g)!==-1)throw Error("Circular reference detected in "+m.join("."));f.push(g),oe.forEach(g,function(b,x){(!(oe.isUndefined(b)||b===null)&&i.call(e,b,oe.isString(x)?x.trim():x,m,h))===!0&&p(b,m?m.concat(x):[x])}),f.pop()}}if(!oe.isObject(t))throw new TypeError("data must be an object");return p(t),e}function nI(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function UE(t,e){this._pairs=[],t&&S0(t,this,e)}const C5=UE.prototype;C5.append=function(e,n){this._pairs.push([e,n])};C5.toString=function(e){const n=e?function(r){return e.call(this,r,nI)}:nI;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function oee(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function _5(t,e,n){if(!e)return t;const r=n&&n.encode||oee;oe.isFunction(n)&&(n={serialize:n});const i=n&&n.serialize;let s;if(i?s=i(e,n):s=oe.isURLSearchParams(e)?e.toString():new UE(e,n).toString(r),s){const o=t.indexOf("#");o!==-1&&(t=t.slice(0,o)),t+=(t.indexOf("?")===-1?"?":"&")+s}return t}class rI{constructor(){this.handlers=[]}use(e,n,r){return this.handlers.push({fulfilled:e,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){oe.forEach(this.handlers,function(r){r!==null&&e(r)})}}const A5={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},aee=typeof URLSearchParams<"u"?URLSearchParams:UE,cee=typeof FormData<"u"?FormData:null,lee=typeof Blob<"u"?Blob:null,uee={isBrowser:!0,classes:{URLSearchParams:aee,FormData:cee,Blob:lee},protocols:["http","https","file","blob","url","data"]},BE=typeof window<"u"&&typeof document<"u",W_=typeof navigator=="object"&&navigator||void 0,dee=BE&&(!W_||["ReactNative","NativeScript","NS"].indexOf(W_.product)<0),fee=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",hee=BE&&window.location.href||"http://localhost",pee=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:BE,hasStandardBrowserEnv:dee,hasStandardBrowserWebWorkerEnv:fee,navigator:W_,origin:hee},Symbol.toStringTag,{value:"Module"})),ni={...pee,...uee};function mee(t,e){return S0(t,new ni.classes.URLSearchParams,Object.assign({visitor:function(n,r,i,s){return ni.isNode&&oe.isBuffer(n)?(this.append(r,n.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)}},e))}function gee(t){return oe.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function vee(t){const e={},n=Object.keys(t);let r;const i=n.length;let s;for(r=0;r=n.length;return o=!o&&oe.isArray(i)?i.length:o,l?(oe.hasOwnProp(i,o)?i[o]=[i[o],r]:i[o]=r,!c):((!i[o]||!oe.isObject(i[o]))&&(i[o]=[]),e(n,r,i[o],s)&&oe.isArray(i[o])&&(i[o]=vee(i[o])),!c)}if(oe.isFormData(t)&&oe.isFunction(t.entries)){const n={};return oe.forEachEntry(t,(r,i)=>{e(gee(r),i,n,0)}),n}return null}function yee(t,e,n){if(oe.isString(t))try{return(e||JSON.parse)(t),oe.trim(t)}catch(r){if(r.name!=="SyntaxError")throw r}return(0,JSON.stringify)(t)}const gg={transitional:A5,adapter:["xhr","http","fetch"],transformRequest:[function(e,n){const r=n.getContentType()||"",i=r.indexOf("application/json")>-1,s=oe.isObject(e);if(s&&oe.isHTMLForm(e)&&(e=new FormData(e)),oe.isFormData(e))return i?JSON.stringify(j5(e)):e;if(oe.isArrayBuffer(e)||oe.isBuffer(e)||oe.isStream(e)||oe.isFile(e)||oe.isBlob(e)||oe.isReadableStream(e))return e;if(oe.isArrayBufferView(e))return e.buffer;if(oe.isURLSearchParams(e))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let c;if(s){if(r.indexOf("application/x-www-form-urlencoded")>-1)return mee(e,this.formSerializer).toString();if((c=oe.isFileList(e))||r.indexOf("multipart/form-data")>-1){const l=this.env&&this.env.FormData;return S0(c?{"files[]":e}:e,l&&new l,this.formSerializer)}}return s||i?(n.setContentType("application/json",!1),yee(e)):e}],transformResponse:[function(e){const n=this.transitional||gg.transitional,r=n&&n.forcedJSONParsing,i=this.responseType==="json";if(oe.isResponse(e)||oe.isReadableStream(e))return e;if(e&&oe.isString(e)&&(r&&!this.responseType||i)){const o=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(c){if(o)throw c.name==="SyntaxError"?Ft.from(c,Ft.ERR_BAD_RESPONSE,this,null,this.response):c}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ni.classes.FormData,Blob:ni.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};oe.forEach(["delete","get","head","post","put","patch"],t=>{gg.headers[t]={}});const xee=oe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),bee=t=>{const e={};let n,r,i;return t&&t.split(` -`).forEach(function(o){i=o.indexOf(":"),n=o.substring(0,i).trim().toLowerCase(),r=o.substring(i+1).trim(),!(!n||e[n]&&xee[n])&&(n==="set-cookie"?e[n]?e[n].push(r):e[n]=[r]:e[n]=e[n]?e[n]+", "+r:r)}),e},iI=Symbol("internals");function Sh(t){return t&&String(t).trim().toLowerCase()}function Zv(t){return t===!1||t==null?t:oe.isArray(t)?t.map(Zv):String(t)}function wee(t){const e=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(t);)e[r[1]]=r[2];return e}const See=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function RS(t,e,n,r,i){if(oe.isFunction(r))return r.call(this,e,n);if(i&&(e=n),!!oe.isString(e)){if(oe.isString(r))return e.indexOf(r)!==-1;if(oe.isRegExp(r))return r.test(e)}}function Cee(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,n,r)=>n.toUpperCase()+r)}function _ee(t,e){const n=oe.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+n,{value:function(i,s,o){return this[r].call(this,e,i,s,o)},configurable:!0})})}class Di{constructor(e){e&&this.set(e)}set(e,n,r){const i=this;function s(c,l,u){const d=Sh(l);if(!d)throw new Error("header name must be a non-empty string");const f=oe.findKey(i,d);(!f||i[f]===void 0||u===!0||u===void 0&&i[f]!==!1)&&(i[f||l]=Zv(c))}const o=(c,l)=>oe.forEach(c,(u,d)=>s(u,d,l));if(oe.isPlainObject(e)||e instanceof this.constructor)o(e,n);else if(oe.isString(e)&&(e=e.trim())&&!See(e))o(bee(e),n);else if(oe.isObject(e)&&oe.isIterable(e)){let c={},l,u;for(const d of e){if(!oe.isArray(d))throw TypeError("Object iterator must return a key-value pair");c[u=d[0]]=(l=c[u])?oe.isArray(l)?[...l,d[1]]:[l,d[1]]:d[1]}o(c,n)}else e!=null&&s(n,e,r);return this}get(e,n){if(e=Sh(e),e){const r=oe.findKey(this,e);if(r){const i=this[r];if(!n)return i;if(n===!0)return wee(i);if(oe.isFunction(n))return n.call(this,i,r);if(oe.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,n){if(e=Sh(e),e){const r=oe.findKey(this,e);return!!(r&&this[r]!==void 0&&(!n||RS(this,this[r],r,n)))}return!1}delete(e,n){const r=this;let i=!1;function s(o){if(o=Sh(o),o){const c=oe.findKey(r,o);c&&(!n||RS(r,r[c],c,n))&&(delete r[c],i=!0)}}return oe.isArray(e)?e.forEach(s):s(e),i}clear(e){const n=Object.keys(this);let r=n.length,i=!1;for(;r--;){const s=n[r];(!e||RS(this,this[s],s,e,!0))&&(delete this[s],i=!0)}return i}normalize(e){const n=this,r={};return oe.forEach(this,(i,s)=>{const o=oe.findKey(r,s);if(o){n[o]=Zv(i),delete n[s];return}const c=e?Cee(s):String(s).trim();c!==s&&delete n[s],n[c]=Zv(i),r[c]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const n=Object.create(null);return oe.forEach(this,(r,i)=>{r!=null&&r!==!1&&(n[i]=e&&oe.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,n])=>e+": "+n).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...n){const r=new this(e);return n.forEach(i=>r.set(i)),r}static accessor(e){const r=(this[iI]=this[iI]={accessors:{}}).accessors,i=this.prototype;function s(o){const c=Sh(o);r[c]||(_ee(i,o),r[c]=!0)}return oe.isArray(e)?e.forEach(s):s(e),this}}Di.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);oe.reduceDescriptors(Di.prototype,({value:t},e)=>{let n=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(r){this[n]=r}}});oe.freezeMethods(Di);function MS(t,e){const n=this||gg,r=e||n,i=Di.from(r.headers);let s=r.data;return oe.forEach(t,function(c){s=c.call(n,s,i.normalize(),e?e.status:void 0)}),i.normalize(),s}function E5(t){return!!(t&&t.__CANCEL__)}function Uf(t,e,n){Ft.call(this,t??"canceled",Ft.ERR_CANCELED,e,n),this.name="CanceledError"}oe.inherits(Uf,Ft,{__CANCEL__:!0});function N5(t,e,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?t(n):e(new Ft("Request failed with status code "+n.status,[Ft.ERR_BAD_REQUEST,Ft.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Aee(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function jee(t,e){t=t||10;const n=new Array(t),r=new Array(t);let i=0,s=0,o;return e=e!==void 0?e:1e3,function(l){const u=Date.now(),d=r[s];o||(o=u),n[i]=l,r[i]=u;let f=s,h=0;for(;f!==i;)h+=n[f++],f=f%t;if(i=(i+1)%t,i===s&&(s=(s+1)%t),u-o{n=d,i=null,s&&(clearTimeout(s),s=null),t.apply(null,u)};return[(...u)=>{const d=Date.now(),f=d-n;f>=r?o(u,d):(i=u,s||(s=setTimeout(()=>{s=null,o(i)},r-f)))},()=>i&&o(i)]}const qy=(t,e,n=3)=>{let r=0;const i=jee(50,250);return Eee(s=>{const o=s.loaded,c=s.lengthComputable?s.total:void 0,l=o-r,u=i(l),d=o<=c;r=o;const f={loaded:o,total:c,progress:c?o/c:void 0,bytes:l,rate:u||void 0,estimated:u&&c&&d?(c-o)/u:void 0,event:s,lengthComputable:c!=null,[e?"download":"upload"]:!0};t(f)},n)},sI=(t,e)=>{const n=t!=null;return[r=>e[0]({lengthComputable:n,total:t,loaded:r}),e[1]]},oI=t=>(...e)=>oe.asap(()=>t(...e)),Nee=ni.hasStandardBrowserEnv?((t,e)=>n=>(n=new URL(n,ni.origin),t.protocol===n.protocol&&t.host===n.host&&(e||t.port===n.port)))(new URL(ni.origin),ni.navigator&&/(msie|trident)/i.test(ni.navigator.userAgent)):()=>!0,Tee=ni.hasStandardBrowserEnv?{write(t,e,n,r,i,s){const o=[t+"="+encodeURIComponent(e)];oe.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),oe.isString(r)&&o.push("path="+r),oe.isString(i)&&o.push("domain="+i),s===!0&&o.push("secure"),document.cookie=o.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Pee(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function kee(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}function T5(t,e,n){let r=!Pee(e);return t&&(r||n==!1)?kee(t,e):e}const aI=t=>t instanceof Di?{...t}:t;function fu(t,e){e=e||{};const n={};function r(u,d,f,h){return oe.isPlainObject(u)&&oe.isPlainObject(d)?oe.merge.call({caseless:h},u,d):oe.isPlainObject(d)?oe.merge({},d):oe.isArray(d)?d.slice():d}function i(u,d,f,h){if(oe.isUndefined(d)){if(!oe.isUndefined(u))return r(void 0,u,f,h)}else return r(u,d,f,h)}function s(u,d){if(!oe.isUndefined(d))return r(void 0,d)}function o(u,d){if(oe.isUndefined(d)){if(!oe.isUndefined(u))return r(void 0,u)}else return r(void 0,d)}function c(u,d,f){if(f in e)return r(u,d);if(f in t)return r(void 0,u)}const l={url:s,method:s,data:s,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:c,headers:(u,d,f)=>i(aI(u),aI(d),f,!0)};return oe.forEach(Object.keys(Object.assign({},t,e)),function(d){const f=l[d]||i,h=f(t[d],e[d],d);oe.isUndefined(h)&&f!==c||(n[d]=h)}),n}const P5=t=>{const e=fu({},t);let{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:s,headers:o,auth:c}=e;e.headers=o=Di.from(o),e.url=_5(T5(e.baseURL,e.url,e.allowAbsoluteUrls),t.params,t.paramsSerializer),c&&o.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let l;if(oe.isFormData(n)){if(ni.hasStandardBrowserEnv||ni.hasStandardBrowserWebWorkerEnv)o.setContentType(void 0);else if((l=o.getContentType())!==!1){const[u,...d]=l?l.split(";").map(f=>f.trim()).filter(Boolean):[];o.setContentType([u||"multipart/form-data",...d].join("; "))}}if(ni.hasStandardBrowserEnv&&(r&&oe.isFunction(r)&&(r=r(e)),r||r!==!1&&Nee(e.url))){const u=i&&s&&Tee.read(s);u&&o.set(i,u)}return e},Oee=typeof XMLHttpRequest<"u",Iee=Oee&&function(t){return new Promise(function(n,r){const i=P5(t);let s=i.data;const o=Di.from(i.headers).normalize();let{responseType:c,onUploadProgress:l,onDownloadProgress:u}=i,d,f,h,p,g;function m(){p&&p(),g&&g(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let y=new XMLHttpRequest;y.open(i.method.toUpperCase(),i.url,!0),y.timeout=i.timeout;function b(){if(!y)return;const w=Di.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),C={data:!c||c==="text"||c==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:w,config:t,request:y};N5(function(A){n(A),m()},function(A){r(A),m()},C),y=null}"onloadend"in y?y.onloadend=b:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(b)},y.onabort=function(){y&&(r(new Ft("Request aborted",Ft.ECONNABORTED,t,y)),y=null)},y.onerror=function(){r(new Ft("Network Error",Ft.ERR_NETWORK,t,y)),y=null},y.ontimeout=function(){let S=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const C=i.transitional||A5;i.timeoutErrorMessage&&(S=i.timeoutErrorMessage),r(new Ft(S,C.clarifyTimeoutError?Ft.ETIMEDOUT:Ft.ECONNABORTED,t,y)),y=null},s===void 0&&o.setContentType(null),"setRequestHeader"in y&&oe.forEach(o.toJSON(),function(S,C){y.setRequestHeader(C,S)}),oe.isUndefined(i.withCredentials)||(y.withCredentials=!!i.withCredentials),c&&c!=="json"&&(y.responseType=i.responseType),u&&([h,g]=qy(u,!0),y.addEventListener("progress",h)),l&&y.upload&&([f,p]=qy(l),y.upload.addEventListener("progress",f),y.upload.addEventListener("loadend",p)),(i.cancelToken||i.signal)&&(d=w=>{y&&(r(!w||w.type?new Uf(null,t,y):w),y.abort(),y=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const x=Aee(i.url);if(x&&ni.protocols.indexOf(x)===-1){r(new Ft("Unsupported protocol "+x+":",Ft.ERR_BAD_REQUEST,t));return}y.send(s||null)})},Ree=(t,e)=>{const{length:n}=t=t?t.filter(Boolean):[];if(e||n){let r=new AbortController,i;const s=function(u){if(!i){i=!0,c();const d=u instanceof Error?u:this.reason;r.abort(d instanceof Ft?d:new Uf(d instanceof Error?d.message:d))}};let o=e&&setTimeout(()=>{o=null,s(new Ft(`timeout ${e} of ms exceeded`,Ft.ETIMEDOUT))},e);const c=()=>{t&&(o&&clearTimeout(o),o=null,t.forEach(u=>{u.unsubscribe?u.unsubscribe(s):u.removeEventListener("abort",s)}),t=null)};t.forEach(u=>u.addEventListener("abort",s));const{signal:l}=r;return l.unsubscribe=()=>oe.asap(c),l}},Mee=function*(t,e){let n=t.byteLength;if(n{const i=Dee(t,e);let s=0,o,c=l=>{o||(o=!0,r&&r(l))};return new ReadableStream({async pull(l){try{const{done:u,value:d}=await i.next();if(u){c(),l.close();return}let f=d.byteLength;if(n){let h=s+=f;n(h)}l.enqueue(new Uint8Array(d))}catch(u){throw c(u),u}},cancel(l){return c(l),i.return()}},{highWaterMark:2})},C0=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",k5=C0&&typeof ReadableStream=="function",Lee=C0&&(typeof TextEncoder=="function"?(t=>e=>t.encode(e))(new TextEncoder):async t=>new Uint8Array(await new Response(t).arrayBuffer())),O5=(t,...e)=>{try{return!!t(...e)}catch{return!1}},Fee=k5&&O5(()=>{let t=!1;const e=new Request(ni.origin,{body:new ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!e}),lI=64*1024,q_=k5&&O5(()=>oe.isReadableStream(new Response("").body)),Yy={stream:q_&&(t=>t.body)};C0&&(t=>{["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Yy[e]&&(Yy[e]=oe.isFunction(t[e])?n=>n[e]():(n,r)=>{throw new Ft(`Response type '${e}' is not supported`,Ft.ERR_NOT_SUPPORT,r)})})})(new Response);const Uee=async t=>{if(t==null)return 0;if(oe.isBlob(t))return t.size;if(oe.isSpecCompliantForm(t))return(await new Request(ni.origin,{method:"POST",body:t}).arrayBuffer()).byteLength;if(oe.isArrayBufferView(t)||oe.isArrayBuffer(t))return t.byteLength;if(oe.isURLSearchParams(t)&&(t=t+""),oe.isString(t))return(await Lee(t)).byteLength},Bee=async(t,e)=>{const n=oe.toFiniteNumber(t.getContentLength());return n??Uee(e)},Hee=C0&&(async t=>{let{url:e,method:n,data:r,signal:i,cancelToken:s,timeout:o,onDownloadProgress:c,onUploadProgress:l,responseType:u,headers:d,withCredentials:f="same-origin",fetchOptions:h}=P5(t);u=u?(u+"").toLowerCase():"text";let p=Ree([i,s&&s.toAbortSignal()],o),g;const m=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let y;try{if(l&&Fee&&n!=="get"&&n!=="head"&&(y=await Bee(d,r))!==0){let C=new Request(e,{method:"POST",body:r,duplex:"half"}),_;if(oe.isFormData(r)&&(_=C.headers.get("content-type"))&&d.setContentType(_),C.body){const[A,j]=sI(y,qy(oI(l)));r=cI(C.body,lI,A,j)}}oe.isString(f)||(f=f?"include":"omit");const b="credentials"in Request.prototype;g=new Request(e,{...h,signal:p,method:n.toUpperCase(),headers:d.normalize().toJSON(),body:r,duplex:"half",credentials:b?f:void 0});let x=await fetch(g);const w=q_&&(u==="stream"||u==="response");if(q_&&(c||w&&m)){const C={};["status","statusText","headers"].forEach(P=>{C[P]=x[P]});const _=oe.toFiniteNumber(x.headers.get("content-length")),[A,j]=c&&sI(_,qy(oI(c),!0))||[];x=new Response(cI(x.body,lI,A,()=>{j&&j(),m&&m()}),C)}u=u||"text";let S=await Yy[oe.findKey(Yy,u)||"text"](x,t);return!w&&m&&m(),await new Promise((C,_)=>{N5(C,_,{data:S,headers:Di.from(x.headers),status:x.status,statusText:x.statusText,config:t,request:g})})}catch(b){throw m&&m(),b&&b.name==="TypeError"&&/Load failed|fetch/i.test(b.message)?Object.assign(new Ft("Network Error",Ft.ERR_NETWORK,t,g),{cause:b.cause||b}):Ft.from(b,b&&b.code,t,g)}}),Y_={http:ree,xhr:Iee,fetch:Hee};oe.forEach(Y_,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const uI=t=>`- ${t}`,zee=t=>oe.isFunction(t)||t===null||t===!1,I5={getAdapter:t=>{t=oe.isArray(t)?t:[t];const{length:e}=t;let n,r;const i={};for(let s=0;s`adapter ${c} `+(l===!1?"is not supported by the environment":"is not available in the build"));let o=e?s.length>1?`since : -`+s.map(uI).join(` -`):" "+uI(s[0]):"as no adapter specified";throw new Ft("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return r},adapters:Y_};function DS(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Uf(null,t)}function dI(t){return DS(t),t.headers=Di.from(t.headers),t.data=MS.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),I5.getAdapter(t.adapter||gg.adapter)(t).then(function(r){return DS(t),r.data=MS.call(t,t.transformResponse,r),r.headers=Di.from(r.headers),r},function(r){return E5(r)||(DS(t),r&&r.response&&(r.response.data=MS.call(t,t.transformResponse,r.response),r.response.headers=Di.from(r.response.headers))),Promise.reject(r)})}const R5="1.9.0",_0={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{_0[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}});const fI={};_0.transitional=function(e,n,r){function i(s,o){return"[Axios v"+R5+"] Transitional option '"+s+"'"+o+(r?". "+r:"")}return(s,o,c)=>{if(e===!1)throw new Ft(i(o," has been removed"+(n?" in "+n:"")),Ft.ERR_DEPRECATED);return n&&!fI[o]&&(fI[o]=!0,console.warn(i(o," has been deprecated since v"+n+" and will be removed in the near future"))),e?e(s,o,c):!0}};_0.spelling=function(e){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};function Vee(t,e,n){if(typeof t!="object")throw new Ft("options must be an object",Ft.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let i=r.length;for(;i-- >0;){const s=r[i],o=e[s];if(o){const c=t[s],l=c===void 0||o(c,s,t);if(l!==!0)throw new Ft("option "+s+" must be "+l,Ft.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Ft("Unknown option "+s,Ft.ERR_BAD_OPTION)}}const ey={assertOptions:Vee,validators:_0},xo=ey.validators;class Ql{constructor(e){this.defaults=e||{},this.interceptors={request:new rI,response:new rI}}async request(e,n){try{return await this._request(e,n)}catch(r){if(r instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const s=i.stack?i.stack.replace(/^.+\n/,""):"";try{r.stack?s&&!String(r.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(r.stack+=` -`+s):r.stack=s}catch{}}throw r}}_request(e,n){typeof e=="string"?(n=n||{},n.url=e):n=e||{},n=fu(this.defaults,n);const{transitional:r,paramsSerializer:i,headers:s}=n;r!==void 0&&ey.assertOptions(r,{silentJSONParsing:xo.transitional(xo.boolean),forcedJSONParsing:xo.transitional(xo.boolean),clarifyTimeoutError:xo.transitional(xo.boolean)},!1),i!=null&&(oe.isFunction(i)?n.paramsSerializer={serialize:i}:ey.assertOptions(i,{encode:xo.function,serialize:xo.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),ey.assertOptions(n,{baseUrl:xo.spelling("baseURL"),withXsrfToken:xo.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=s&&oe.merge(s.common,s[n.method]);s&&oe.forEach(["delete","get","head","post","put","patch","common"],g=>{delete s[g]}),n.headers=Di.concat(o,s);const c=[];let l=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(l=l&&m.synchronous,c.unshift(m.fulfilled,m.rejected))});const u=[];this.interceptors.response.forEach(function(m){u.push(m.fulfilled,m.rejected)});let d,f=0,h;if(!l){const g=[dI.bind(this),void 0];for(g.unshift.apply(g,c),g.push.apply(g,u),h=g.length,d=Promise.resolve(n);f{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](i);r._listeners=null}),this.promise.then=i=>{let s;const o=new Promise(c=>{r.subscribe(c),s=c}).then(i);return o.cancel=function(){r.unsubscribe(s)},o},e(function(s,o,c){r.reason||(r.reason=new Uf(s,o,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const n=this._listeners.indexOf(e);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const e=new AbortController,n=r=>{e.abort(r)};return this.subscribe(n),e.signal.unsubscribe=()=>this.unsubscribe(n),e.signal}static source(){let e;return{token:new HE(function(i){e=i}),cancel:e}}}function Gee(t){return function(n){return t.apply(null,n)}}function Kee(t){return oe.isObject(t)&&t.isAxiosError===!0}const Q_={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Q_).forEach(([t,e])=>{Q_[e]=t});function M5(t){const e=new Ql(t),n=f5(Ql.prototype.request,e);return oe.extend(n,Ql.prototype,e,{allOwnKeys:!0}),oe.extend(n,e,null,{allOwnKeys:!0}),n.create=function(i){return M5(fu(t,i))},n}const vr=M5(gg);vr.Axios=Ql;vr.CanceledError=Uf;vr.CancelToken=HE;vr.isCancel=E5;vr.VERSION=R5;vr.toFormData=S0;vr.AxiosError=Ft;vr.Cancel=vr.CanceledError;vr.all=function(e){return Promise.all(e)};vr.spread=Gee;vr.isAxiosError=Kee;vr.mergeConfig=fu;vr.AxiosHeaders=Di;vr.formToJSON=t=>j5(oe.isHTMLForm(t)?new FormData(t):t);vr.getAdapter=I5.getAdapter;vr.HttpStatusCode=Q_;vr.default=vr;const D5="https://ai-sandbox.oliver.solutions/semblance_back/api",Le=vr.create({baseURL:D5,headers:{"Content-Type":"application/json"},timeout:6e5});Le.interceptors.request.use(t=>{var n,r;const e=localStorage.getItem("auth_token");return e&&(t.headers.Authorization=`Bearer ${e}`),t.method==="put"&&((n=t.url)!=null&&n.includes("/focus-groups/"))&&console.log("🌐 API Request:",{method:t.method,url:t.url,baseURL:t.baseURL,fullURL:`${t.baseURL}${t.url}`,data:t.data}),(r=t.url)!=null&&r.includes("/folders/")&&console.log("🌐 API Folder Request:",{method:t.method,url:t.url,baseURL:t.baseURL,fullURL:`${t.baseURL}${t.url}`,data:t.data}),t},t=>Promise.reject(t));const X_="auth_error",Wee=t=>{t!=null&&t.isPersonaCreation||(localStorage.removeItem("auth_token"),localStorage.removeItem("user"));const e=new CustomEvent(X_,{detail:t||{}});window.dispatchEvent(e)};Le.interceptors.response.use(t=>t,t=>{var e,n,r,i,s,o;if(t.response&&t.response.status===401){const c=t.config&&(((e=t.config.url)==null?void 0:e.includes("/personas"))||((n=t.config.url)==null?void 0:n.includes("/personas/batch"))||t.config.method&&((r=t.config.url)==null?void 0:r.startsWith("/personas")));console.log("API Error:",{url:(i=t.config)==null?void 0:i.url,method:(s=t.config)==null?void 0:s.method,isPersonaRequest:c}),c?console.warn("Authentication error in persona request, letting component handle it"):Wee({source:(o=t.config)==null?void 0:o.url,isPersonaCreation:!1})}return Promise.reject(t)});const ty={login:(t,e)=>Le.post("/auth/login",{username:t,password:e}),loginWithMicrosoft:t=>Le.post("/auth/microsoft",{id_token:t}),register:(t,e,n)=>Le.post("/auth/register",{username:t,email:e,password:n}),getProfile:()=>Le.get("/auth/me")},Rr={getAll:()=>Le.get("/personas/all"),getById:t=>Le.get(`/personas/${t}`),create:t=>Le.post("/personas",t),update:(t,e)=>t&&t.startsWith("local-")?(console.log("Cannot update with local ID, creating new instead:",t),Le.post("/personas",e)):Le.put(`/personas/${t}`,e),delete:t=>{const e=typeof t=="object"&&t!==null&&t._id||t;return console.log(`Deleting persona with ID: ${e}`),Le.delete(`/personas/${e}`)},createBatch:t=>Le.post("/personas/batch",t),exportProfile:(t,e)=>Le.post(`/personas/${t}/export-profile`,e||{},{timeout:3e5})},la={generate:t=>Le.post("/ai-personas/generate",t||{},{timeout:6e5}),generateAndSave:t=>Le.post("/ai-personas/generate-and-save",t||{},{timeout:6e5}),batchGenerate:t=>Le.post("/ai-personas/batch-generate",t,{timeout:6e5}),batchGenerateAndSave:t=>Le.post("/ai-personas/batch-generate-and-save",t,{timeout:6e5}),generateBasicProfiles:(t,e=5,n=.8)=>Le.post("/ai-personas/generate-basic-profiles",{audience_brief:t,count:e,temperature:n},{timeout:6e5}),completePersona:(t,e=.7)=>Le.post("/ai-personas/complete-persona",{basic_profile:t,temperature:e},{timeout:6e5}),completeAndSavePersona:(t,e=.7)=>Le.post("/ai-personas/complete-and-save-persona",{basic_profile:t,temperature:e},{timeout:6e5}),generatePersonaSummary:(t,e=.7)=>Le.post("/ai-personas/generate-persona-summary",{persona_data:t,temperature:e},{timeout:6e5}),batchGenerateWithStages:async(t,e,n=5,r=.7,i,s)=>{var o;try{console.log(`📡 API call to generate-basic-profiles with model: ${s||"gemini-2.5-pro"}`);const l=(await Le.post("/ai-personas/generate-basic-profiles",{audience_brief:t,research_objective:e,count:n,temperature:.7,customer_data_session_id:i,llm_model:s||"gemini-2.5-pro"},{timeout:6e5})).data.profiles,u=[],d=[],f=[];console.log(`📡 API call to complete-and-save-persona with model: ${s||"gemini-2.5-pro"}`);const h=l.map(g=>Le.post("/ai-personas/complete-and-save-persona",{basic_profile:g,temperature:r,customer_data_session_id:i,llm_model:s||"gemini-2.5-pro"},{timeout:6e5}));if((await Promise.allSettled(h)).forEach((g,m)=>{if(g.status==="fulfilled")u.push(g.value.data.persona),d.push(g.value.data.persona_id);else{const y=l[m],b={index:m,name:y.name||`Persona ${m+1}`,error:g.reason};f.push(b),console.error(`Failed to complete persona ${m+1} (${y.name||"unnamed"}):`,g.reason)}}),u.length===0&&f.length>0)throw new Error(`Failed to generate any personas. ${f.length} profile(s) failed.`);return{data:{message:`Generated and saved ${u.length} personas${f.length>0?` (${f.length} failed)`:""}`,personas:u,persona_ids:d,errors:f.length>0?f:void 0,partial_success:f.length>0&&u.length>0}}}catch(c){throw((o=c.response)==null?void 0:o.status)===504||c.code==="ECONNABORTED"?new Error("Timeout error: The server took too long to generate personas. Please try with fewer personas or try again later."):c}},enhanceAudienceBrief:(t,e,n=.7)=>Le.post("/ai-personas/enhance-audience-brief",{audience_brief:t,research_objective:e,temperature:n},{timeout:6e5}),batchGenerateSummaries:(t,e=.7,n)=>(console.log(`📡 Frontend: API call to batch-generate-summaries with model: ${n||"gemini-2.5-pro"}`),Le.post("/ai-personas/batch-generate-summaries",{persona_ids:t,temperature:e,llm_model:n||"gemini-2.5-pro"},{timeout:9e5})),uploadCustomerData:t=>{const e=new FormData;for(let n=0;nLe.delete(`/ai-personas/cleanup-customer-data/${t}`)},pt={getAll:()=>Le.get("/focus-groups"),getById:t=>Le.get(`/focus-groups/${t}`),create:t=>Le.post("/focus-groups",t),update:(t,e)=>Le.put(`/focus-groups/${t}`,e),delete:t=>Le.delete(`/focus-groups/${t}`),addParticipant:(t,e)=>Le.post(`/focus-groups/${t}/participants`,{persona_id:e}),removeParticipant:(t,e)=>Le.delete(`/focus-groups/${t}/participants/${e}`),sendMessage:(t,e)=>Le.post(`/focus-groups/${t}/messages`,e),getMessages:t=>Le.get(`/focus-groups/${t}/messages`),updateMessageHighlight:(t,e,n)=>Le.patch(`/focus-groups/${t}/messages/${e}`,{highlighted:n}),describeAsset:(t,e)=>Le.post(`/focus-groups/${t}/describe-asset`,{asset_filename:e},{timeout:12e4}),generateDiscussionGuide:t=>Le.post("/focus-groups/generate-discussion-guide",t,{timeout:6e5}),generateDiscussionGuideForGroup:(t,e)=>Le.post(`/focus-groups/${t}/generate-discussion-guide`,e,{timeout:6e5}),downloadDiscussionGuide:async t=>{try{const e=await Le.get(`/focus-groups/${t}/discussion-guide/download`,{responseType:"blob",timeout:3e4}),n=e.headers["content-disposition"];let r="discussion-guide.md";if(n){const c=n.match(/filename="([^"]+)"/);c&&(r=c[1])}const i=new Blob([e.data],{type:"text/markdown"}),s=URL.createObjectURL(i),o=document.createElement("a");return o.href=s,o.download=r,o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(s),{success:!0,filename:r}}catch(e){throw console.error("Error downloading discussion guide:",e),new Error("Failed to download discussion guide")}},createNote:(t,e)=>Le.post(`/focus-groups/${t}/notes`,e),getNotes:t=>Le.get(`/focus-groups/${t}/notes`),deleteNote:(t,e)=>Le.delete(`/focus-groups/${t}/notes/${e}`),uploadAssets:(t,e,n)=>(n===!0&&e.append("replace","true"),Le.post(`/focus-groups/${t}/assets`,e,{headers:{"Content-Type":"multipart/form-data"},timeout:12e4})),getAssets:t=>Le.get(`/focus-groups/${t}/assets`),getAssetUrl:(t,e)=>`${D5}/focus-groups/${t}/assets/${e}`,updateAssetName:(t,e,n)=>Le.patch(`/focus-groups/${t}/assets/${e}`,{user_assigned_name:n}),deleteAsset:(t,e)=>Le.delete(`/focus-groups/${t}/assets/${e}`)},er={generateResponse:(t,e,n,r=.7)=>Le.post("/focus-group-ai/generate-response",{focus_group_id:t,persona_id:e,current_topic:n,temperature:r},{timeout:6e5}),generateKeyThemes:(t,e=.7)=>Le.post("/focus-group-ai/generate-key-themes",{focus_group_id:t,temperature:e},{timeout:6e5}),getKeyThemes:t=>Le.get(`/focus-group-ai/key-themes/${t}`),deleteKeyTheme:(t,e)=>Le.delete(`/focus-group-ai/key-themes/${t}/${e}`),getModeratorStatus:t=>Le.get(`/focus-group-ai/moderator/status/${t}`),advanceModeratorDiscussion:t=>Le.post(`/focus-group-ai/moderator/advance/${t}`,{},{timeout:6e5}),setModeratorPosition:(t,e,n)=>Le.put(`/focus-group-ai/moderator/position/${t}`,{section_id:e,item_id:n}),startAutonomousConversation:(t,e)=>Le.post(`/focus-group-ai/autonomous/start/${t}`,{initial_prompt:e},{timeout:6e5}),stopAutonomousConversation:(t,e)=>Le.post(`/focus-group-ai/autonomous/stop/${t}`,{reason:e}),getAutonomousConversationStatus:t=>Le.get(`/focus-group-ai/autonomous/status/${t}`),getConversationState:t=>Le.get(`/focus-group-ai/conversation/state/${t}`),getConversationAnalytics:t=>Le.get(`/focus-group-ai/conversation/analytics/${t}`),makeConversationDecision:(t,e=.7,n="ai")=>Le.post(`/focus-group-ai/conversation/decision/${t}`,{temperature:e,mode:n},{timeout:6e5}),getConversationInsights:t=>Le.get(`/focus-group-ai/conversation/insights/${t}`,{timeout:6e5}),manualIntervention:(t,e,n,r)=>Le.post(`/focus-group-ai/conversation/intervene/${t}`,{action:e,message:n,participant_id:r}),getReasoningHistory:t=>Le.get(`/focus-group-ai/conversation/reasoning-history/${t}`),endSession:(t,e)=>Le.post(`/focus-group-ai/moderator/end-session/${t}`,{reason:e||"session_ended"})},Eo={getAll:()=>Le.get("/folders"),getById:t=>Le.get(`/folders/${t}`),create:t=>Le.post("/folders",t),update:(t,e)=>Le.put(`/folders/${t}`,e),delete:t=>Le.delete(`/folders/${t}`),addPersona:(t,e)=>Le.post(`/folders/${t}/personas`,{persona_id:e}),removePersona:(t,e)=>Le.delete(`/folders/${t}/personas/${e}`),addPersonasBatch:(t,e)=>Le.post(`/folders/${t}/personas/batch`,{persona_ids:e}),removePersonasBatch:(t,e)=>(console.log(`🌐 API removePersonasBatch: Sending POST to /folders/${t}/personas/remove-batch with persona_ids:`,e),Le.post(`/folders/${t}/personas/remove-batch`,{persona_ids:e})),addPersonaToMultipleFolders:(t,e)=>{const n=e.map(r=>Le.post(`/folders/${r}/personas`,{persona_id:t}));return Promise.all(n)},removePersonaFromAllFolders:t=>{throw new Error("Use removePersona for specific folders")}};/*! @azure/msal-common v15.10.0 2025-08-05 */const ve={LIBRARY_NAME:"MSAL.JS",SKU:"msal.js.common",DEFAULT_AUTHORITY:"https://login.microsoftonline.com/common/",DEFAULT_AUTHORITY_HOST:"login.microsoftonline.com",DEFAULT_COMMON_TENANT:"common",ADFS:"adfs",DSTS:"dstsv2",AAD_INSTANCE_DISCOVERY_ENDPT:"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=",CIAM_AUTH_URL:".ciamlogin.com",AAD_TENANT_DOMAIN_SUFFIX:".onmicrosoft.com",RESOURCE_DELIM:"|",NO_ACCOUNT:"NO_ACCOUNT",CLAIMS:"claims",CONSUMER_UTID:"9188040d-6c67-4c5b-b112-36a304b66dad",OPENID_SCOPE:"openid",PROFILE_SCOPE:"profile",OFFLINE_ACCESS_SCOPE:"offline_access",EMAIL_SCOPE:"email",CODE_GRANT_TYPE:"authorization_code",RT_GRANT_TYPE:"refresh_token",S256_CODE_CHALLENGE_METHOD:"S256",URL_FORM_CONTENT_TYPE:"application/x-www-form-urlencoded;charset=utf-8",AUTHORIZATION_PENDING:"authorization_pending",NOT_DEFINED:"not_defined",EMPTY_STRING:"",NOT_APPLICABLE:"N/A",NOT_AVAILABLE:"Not Available",FORWARD_SLASH:"/",IMDS_ENDPOINT:"http://169.254.169.254/metadata/instance/compute/location",IMDS_VERSION:"2020-06-01",IMDS_TIMEOUT:2e3,AZURE_REGION_AUTO_DISCOVER_FLAG:"TryAutoDetect",REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX:"login.microsoft.com",KNOWN_PUBLIC_CLOUDS:["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"],SHR_NONCE_VALIDITY:240,INVALID_INSTANCE:"invalid_instance"},bc={SUCCESS:200,SUCCESS_RANGE_START:200,SUCCESS_RANGE_END:299,REDIRECT:302,CLIENT_ERROR:400,CLIENT_ERROR_RANGE_START:400,BAD_REQUEST:400,UNAUTHORIZED:401,NOT_FOUND:404,REQUEST_TIMEOUT:408,GONE:410,TOO_MANY_REQUESTS:429,CLIENT_ERROR_RANGE_END:499,SERVER_ERROR:500,SERVER_ERROR_RANGE_START:500,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,SERVER_ERROR_RANGE_END:599,MULTI_SIDED_ERROR:600},Rl={GET:"GET",POST:"POST"},vg=[ve.OPENID_SCOPE,ve.PROFILE_SCOPE,ve.OFFLINE_ACCESS_SCOPE],hI=[...vg,ve.EMAIL_SCOPE],di={CONTENT_TYPE:"Content-Type",CONTENT_LENGTH:"Content-Length",RETRY_AFTER:"Retry-After",CCS_HEADER:"X-AnchorMailbox",WWWAuthenticate:"WWW-Authenticate",AuthenticationInfo:"Authentication-Info",X_MS_REQUEST_ID:"x-ms-request-id",X_MS_HTTP_VERSION:"x-ms-httpver"},pI={ACTIVE_ACCOUNT_FILTERS:"active-account-filters"},Ic={COMMON:"common",ORGANIZATIONS:"organizations",CONSUMERS:"consumers"},dv={ACCESS_TOKEN:"access_token",XMS_CC:"xms_cc"},pi={LOGIN:"login",SELECT_ACCOUNT:"select_account",CONSENT:"consent",NONE:"none",CREATE:"create",NO_SESSION:"no_session"},zE={CODE:"code",IDTOKEN_TOKEN:"id_token token",IDTOKEN_TOKEN_REFRESHTOKEN:"id_token token refresh_token"},A0={QUERY:"query",FRAGMENT:"fragment"},qee={QUERY:"query",FRAGMENT:"fragment",FORM_POST:"form_post"},$5={IMPLICIT_GRANT:"implicit",AUTHORIZATION_CODE_GRANT:"authorization_code",CLIENT_CREDENTIALS_GRANT:"client_credentials",RESOURCE_OWNER_PASSWORD_GRANT:"password",REFRESH_TOKEN_GRANT:"refresh_token",DEVICE_CODE_GRANT:"device_code",JWT_BEARER:"urn:ietf:params:oauth:grant-type:jwt-bearer"},fv={MSSTS_ACCOUNT_TYPE:"MSSTS",ADFS_ACCOUNT_TYPE:"ADFS",MSAV1_ACCOUNT_TYPE:"MSA",GENERIC_ACCOUNT_TYPE:"Generic"},Qp={CACHE_KEY_SEPARATOR:"-",CLIENT_INFO_SEPARATOR:"."},Hr={ID_TOKEN:"IdToken",ACCESS_TOKEN:"AccessToken",ACCESS_TOKEN_WITH_AUTH_SCHEME:"AccessToken_With_AuthScheme",REFRESH_TOKEN:"RefreshToken"},VE="appmetadata",Yee="client_info",Qy="1",Xy={CACHE_KEY:"authority-metadata",REFRESH_TIME_SECONDS:3600*24},Hi={CONFIG:"config",CACHE:"cache",NETWORK:"network",HARDCODED_VALUES:"hardcoded_values"},Lr={SCHEMA_VERSION:5,MAX_LAST_HEADER_BYTES:330,MAX_CACHED_ERRORS:50,CACHE_KEY:"server-telemetry",CATEGORY_SEPARATOR:"|",VALUE_SEPARATOR:",",OVERFLOW_TRUE:"1",OVERFLOW_FALSE:"0",UNKNOWN_ERROR:"unknown_error"},yn={BEARER:"Bearer",POP:"pop",SSH:"ssh-cert"},ap={DEFAULT_THROTTLE_TIME_SECONDS:60,DEFAULT_MAX_THROTTLE_TIME_SECONDS:3600,THROTTLING_PREFIX:"throttling",X_MS_LIB_CAPABILITY_VALUE:"retry-after, h429"},mI={INVALID_GRANT_ERROR:"invalid_grant",CLIENT_MISMATCH_ERROR:"client_mismatch"},$u={FAILED_AUTO_DETECTION:"1",INTERNAL_CACHE:"2",ENVIRONMENT_VARIABLE:"3",IMDS:"4"},$S={CONFIGURED_NO_AUTO_DETECTION:"2",AUTO_DETECTION_REQUESTED_SUCCESSFUL:"4",AUTO_DETECTION_REQUESTED_FAILED:"5"},Al={NOT_APPLICABLE:"0",FORCE_REFRESH_OR_CLAIMS:"1",NO_CACHED_ACCESS_TOKEN:"2",CACHED_ACCESS_TOKEN_EXPIRED:"3",PROACTIVELY_REFRESHED:"4"},Qee={Jwt:"JWT",Jwk:"JWK",Pop:"pop"},L5=300;/*! @azure/msal-common v15.10.0 2025-08-05 */const Jy="unexpected_error",Xee="post_request_failed";/*! @azure/msal-common v15.10.0 2025-08-05 */const gI={[Jy]:"Unexpected error in authentication.",[Xee]:"Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details."};class Cn extends Error{constructor(e,n,r){const i=n?`${e}: ${n}`:e;super(i),Object.setPrototypeOf(this,Cn.prototype),this.errorCode=e||ve.EMPTY_STRING,this.errorMessage=n||ve.EMPTY_STRING,this.subError=r||ve.EMPTY_STRING,this.name="AuthError"}setCorrelationId(e){this.correlationId=e}}function J_(t,e){return new Cn(t,e?`${gI[t]} ${e}`:gI[t])}/*! @azure/msal-common v15.10.0 2025-08-05 */const GE="client_info_decoding_error",F5="client_info_empty_error",KE="token_parsing_error",U5="null_or_empty_token",ua="endpoints_resolution_error",B5="network_error",H5="openid_config_error",z5="hash_not_deserialized",Qd="invalid_state",V5="state_mismatch",Z_="state_not_found",G5="nonce_mismatch",WE="auth_time_not_found",K5="max_age_transpired",Jee="multiple_matching_tokens",Zee="multiple_matching_accounts",W5="multiple_matching_appMetadata",q5="request_cannot_be_made",Y5="cannot_remove_empty_scope",Q5="cannot_append_scopeset",e1="empty_input_scopeset",ete="device_code_polling_cancelled",tte="device_code_expired",nte="device_code_unknown_error",qE="no_account_in_silent_request",X5="invalid_cache_record",YE="invalid_cache_environment",t1="no_account_found",n1="no_crypto_object",rte="unexpected_credential_type",ite="invalid_assertion",ste="invalid_client_credential",Rc="token_refresh_required",ote="user_timeout_reached",J5="token_claims_cnf_required_for_signedjwt",Z5="authorization_code_missing_from_server_response",eU="binding_key_not_removed",tU="end_session_endpoint_not_supported",QE="key_id_missing",ate="no_network_connectivity",cte="user_canceled",lte="missing_tenant_id_error",Kt="method_not_implemented",ute="nested_app_auth_bridge_disabled";/*! @azure/msal-common v15.10.0 2025-08-05 */const vI={[GE]:"The client info could not be parsed/decoded correctly",[F5]:"The client info was empty",[KE]:"Token cannot be parsed",[U5]:"The token is null or empty",[ua]:"Endpoints cannot be resolved",[B5]:"Network request failed",[H5]:"Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.",[z5]:"The hash parameters could not be deserialized",[Qd]:"State was not the expected format",[V5]:"State mismatch error",[Z_]:"State not found",[G5]:"Nonce mismatch error",[WE]:"Max Age was requested and the ID token is missing the auth_time variable. auth_time is an optional claim and is not enabled by default - it must be enabled. See https://aka.ms/msaljs/optional-claims for more information.",[K5]:"Max Age is set to 0, or too much time has elapsed since the last end-user authentication.",[Jee]:"The cache contains multiple tokens satisfying the requirements. Call AcquireToken again providing more requirements such as authority or account.",[Zee]:"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account",[W5]:"The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata",[q5]:"Token request cannot be made without authorization code or refresh token.",[Y5]:"Cannot remove null or empty scope from ScopeSet",[Q5]:"Cannot append ScopeSet",[e1]:"Empty input ScopeSet cannot be processed",[ete]:"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.",[tte]:"Device code is expired.",[nte]:"Device code stopped polling for unknown reasons.",[qE]:"Please pass an account object, silent flow is not supported without account information",[X5]:"Cache record object was null or undefined.",[YE]:"Invalid environment when attempting to create cache entry",[t1]:"No account found in cache for given key.",[n1]:"No crypto object detected.",[rte]:"Unexpected credential type.",[ite]:"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515",[ste]:"Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential",[Rc]:"Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.",[ote]:"User defined timeout for device code polling reached",[J5]:"Cannot generate a POP jwt if the token_claims are not populated",[Z5]:"Server response does not contain an authorization code to proceed",[eU]:"Could not remove the credential's binding key from storage.",[tU]:"The provided authority does not support logout",[QE]:"A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.",[ate]:"No network connectivity. Check your internet connection.",[cte]:"User cancelled the flow.",[lte]:"A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.",[Kt]:"This method has not been implemented",[ute]:"The nested app auth bridge is disabled"};class XE extends Cn{constructor(e,n){super(e,n?`${vI[e]}: ${n}`:vI[e]),this.name="ClientAuthError",Object.setPrototypeOf(this,XE.prototype)}}function _e(t,e){return new XE(t,e)}/*! @azure/msal-common v15.10.0 2025-08-05 */const Zy={createNewGuid:()=>{throw _e(Kt)},base64Decode:()=>{throw _e(Kt)},base64Encode:()=>{throw _e(Kt)},base64UrlEncode:()=>{throw _e(Kt)},encodeKid:()=>{throw _e(Kt)},async getPublicKeyThumbprint(){throw _e(Kt)},async removeTokenBindingKey(){throw _e(Kt)},async clearKeystore(){throw _e(Kt)},async signJwt(){throw _e(Kt)},async hashString(){throw _e(Kt)}};/*! @azure/msal-common v15.10.0 2025-08-05 */var Rn;(function(t){t[t.Error=0]="Error",t[t.Warning=1]="Warning",t[t.Info=2]="Info",t[t.Verbose=3]="Verbose",t[t.Trace=4]="Trace"})(Rn||(Rn={}));class Ma{constructor(e,n,r){this.level=Rn.Info;const i=()=>{},s=e||Ma.createDefaultLoggerOptions();this.localCallback=s.loggerCallback||i,this.piiLoggingEnabled=s.piiLoggingEnabled||!1,this.level=typeof s.logLevel=="number"?s.logLevel:Rn.Info,this.correlationId=s.correlationId||ve.EMPTY_STRING,this.packageName=n||ve.EMPTY_STRING,this.packageVersion=r||ve.EMPTY_STRING}static createDefaultLoggerOptions(){return{loggerCallback:()=>{},piiLoggingEnabled:!1,logLevel:Rn.Info}}clone(e,n,r){return new Ma({loggerCallback:this.localCallback,piiLoggingEnabled:this.piiLoggingEnabled,logLevel:this.level,correlationId:r||this.correlationId},e,n)}logMessage(e,n){if(n.logLevel>this.level||!this.piiLoggingEnabled&&n.containsPii)return;const s=`${`[${new Date().toUTCString()}] : [${n.correlationId||this.correlationId||""}]`} : ${this.packageName}@${this.packageVersion} : ${Rn[n.logLevel]} - ${e}`;this.executeCallback(n.logLevel,s,n.containsPii||!1)}executeCallback(e,n,r){this.localCallback&&this.localCallback(e,n,r)}error(e,n){this.logMessage(e,{logLevel:Rn.Error,containsPii:!1,correlationId:n||ve.EMPTY_STRING})}errorPii(e,n){this.logMessage(e,{logLevel:Rn.Error,containsPii:!0,correlationId:n||ve.EMPTY_STRING})}warning(e,n){this.logMessage(e,{logLevel:Rn.Warning,containsPii:!1,correlationId:n||ve.EMPTY_STRING})}warningPii(e,n){this.logMessage(e,{logLevel:Rn.Warning,containsPii:!0,correlationId:n||ve.EMPTY_STRING})}info(e,n){this.logMessage(e,{logLevel:Rn.Info,containsPii:!1,correlationId:n||ve.EMPTY_STRING})}infoPii(e,n){this.logMessage(e,{logLevel:Rn.Info,containsPii:!0,correlationId:n||ve.EMPTY_STRING})}verbose(e,n){this.logMessage(e,{logLevel:Rn.Verbose,containsPii:!1,correlationId:n||ve.EMPTY_STRING})}verbosePii(e,n){this.logMessage(e,{logLevel:Rn.Verbose,containsPii:!0,correlationId:n||ve.EMPTY_STRING})}trace(e,n){this.logMessage(e,{logLevel:Rn.Trace,containsPii:!1,correlationId:n||ve.EMPTY_STRING})}tracePii(e,n){this.logMessage(e,{logLevel:Rn.Trace,containsPii:!0,correlationId:n||ve.EMPTY_STRING})}isPiiLoggingEnabled(){return this.piiLoggingEnabled||!1}}/*! @azure/msal-common v15.10.0 2025-08-05 */const nU="@azure/msal-common",JE="15.10.0";/*! @azure/msal-common v15.10.0 2025-08-05 */const ZE={None:"none",AzurePublic:"https://login.microsoftonline.com",AzurePpe:"https://login.windows-ppe.net",AzureChina:"https://login.chinacloudapi.cn",AzureGermany:"https://login.microsoftonline.de",AzureUsGovernment:"https://login.microsoftonline.us"};/*! @azure/msal-common v15.10.0 2025-08-05 */const rU="redirect_uri_empty",dte="claims_request_parsing_error",iU="authority_uri_insecure",Hh="url_parse_error",sU="empty_url_error",oU="empty_input_scopes_error",eN="invalid_claims",aU="token_request_empty",cU="logout_request_empty",fte="invalid_code_challenge_method",tN="pkce_params_missing",nN="invalid_cloud_discovery_metadata",lU="invalid_authority_metadata",uU="untrusted_authority",j0="missing_ssh_jwk",dU="missing_ssh_kid",hte="missing_nonce_authentication_header",pte="invalid_authentication_header",fU="cannot_set_OIDCOptions",hU="cannot_allow_platform_broker",pU="authority_mismatch",mU="invalid_request_method_for_EAR",gU="invalid_authorize_post_body_parameters";/*! @azure/msal-common v15.10.0 2025-08-05 */const mte={[rU]:"A redirect URI is required for all calls, and none has been set.",[dte]:"Could not parse the given claims request object.",[iU]:"Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options",[Hh]:"URL could not be parsed into appropriate segments.",[sU]:"URL was empty or null.",[oU]:"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.",[eN]:"Given claims parameter must be a stringified JSON object.",[aU]:"Token request was empty and not found in cache.",[cU]:"The logout request was null or undefined.",[fte]:'code_challenge_method passed is invalid. Valid values are "plain" and "S256".',[tN]:"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request",[nN]:"Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields",[lU]:"Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.",[uU]:"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.",[j0]:"Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.",[dU]:"Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.",[hte]:"Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.",[pte]:"Invalid authentication header provided",[fU]:"Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.",[hU]:"Cannot set allowPlatformBroker parameter to true when not in AAD protocol mode.",[pU]:"Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.",[gU]:"Invalid authorize post body parameters provided. If you are using authorizePostBodyParameters, the request method must be POST. Please check the request method and parameters.",[mU]:"Invalid request method for EAR protocol mode. The request method cannot be GET when using EAR protocol mode. Please change the request method to POST."};class rN extends Cn{constructor(e){super(e,mte[e]),this.name="ClientConfigurationError",Object.setPrototypeOf(this,rN.prototype)}}function jn(t){return new rN(t)}/*! @azure/msal-common v15.10.0 2025-08-05 */class $o{static isEmptyObj(e){if(e)try{const n=JSON.parse(e);return Object.keys(n).length===0}catch{}return!0}static startsWith(e,n){return e.indexOf(n)===0}static endsWith(e,n){return e.length>=n.length&&e.lastIndexOf(n)===e.length-n.length}static queryStringToObject(e){const n={},r=e.split("&"),i=s=>decodeURIComponent(s.replace(/\+/g," "));return r.forEach(s=>{if(s.trim()){const[o,c]=s.split(/=(.+)/g,2);o&&c&&(n[i(o)]=i(c))}}),n}static trimArrayEntries(e){return e.map(n=>n.trim())}static removeEmptyStringsFromArray(e){return e.filter(n=>!!n)}static jsonParseHelper(e){try{return JSON.parse(e)}catch{return null}}static matchPattern(e,n){return new RegExp(e.replace(/\\/g,"\\\\").replace(/\*/g,"[^ ]*").replace(/\?/g,"\\?")).test(n)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Ar{constructor(e){const n=e?$o.trimArrayEntries([...e]):[],r=n?$o.removeEmptyStringsFromArray(n):[];if(!r||!r.length)throw jn(oU);this.scopes=new Set,r.forEach(i=>this.scopes.add(i))}static fromString(e){const r=(e||ve.EMPTY_STRING).split(" ");return new Ar(r)}static createSearchScopes(e){const n=new Ar(e);return n.containsOnlyOIDCScopes()?n.removeScope(ve.OFFLINE_ACCESS_SCOPE):n.removeOIDCScopes(),n}containsScope(e){const n=this.printScopesLowerCase().split(" "),r=new Ar(n);return e?r.scopes.has(e.toLowerCase()):!1}containsScopeSet(e){return!e||e.scopes.size<=0?!1:this.scopes.size>=e.scopes.size&&e.asArray().every(n=>this.containsScope(n))}containsOnlyOIDCScopes(){let e=0;return hI.forEach(n=>{this.containsScope(n)&&(e+=1)}),this.scopes.size===e}appendScope(e){e&&this.scopes.add(e.trim())}appendScopes(e){try{e.forEach(n=>this.appendScope(n))}catch{throw _e(Q5)}}removeScope(e){if(!e)throw _e(Y5);this.scopes.delete(e.trim())}removeOIDCScopes(){hI.forEach(e=>{this.scopes.delete(e)})}unionScopeSets(e){if(!e)throw _e(e1);const n=new Set;return e.scopes.forEach(r=>n.add(r.toLowerCase())),this.scopes.forEach(r=>n.add(r.toLowerCase())),n}intersectingScopeSets(e){if(!e)throw _e(e1);e.containsOnlyOIDCScopes()||e.removeOIDCScopes();const n=this.unionScopeSets(e),r=e.getScopeCount(),i=this.getScopeCount();return n.sizee.push(n)),e}printScopes(){return this.scopes?this.asArray().join(" "):ve.EMPTY_STRING}printScopesLowerCase(){return this.printScopes().toLowerCase()}}/*! @azure/msal-common v15.10.0 2025-08-05 */function yI(t,e){return!!t&&!!e&&t===e.split(".")[1]}function iN(t,e,n,r){if(r){const{oid:i,sub:s,tid:o,name:c,tfp:l,acr:u,preferred_username:d,upn:f,login_hint:h}=r,p=o||l||u||"";return{tenantId:p,localAccountId:i||s||"",name:c,username:d||f||"",loginHint:h,isHomeTenant:yI(p,t)}}else return{tenantId:n,localAccountId:e,username:"",isHomeTenant:yI(n,t)}}function sN(t,e,n,r){let i=t;if(e){const{isHomeTenant:s,...o}=e;i={...t,...o}}if(n){const{isHomeTenant:s,...o}=iN(t.homeAccountId,t.localAccountId,t.tenantId,n);return i={...i,...o,idTokenClaims:n,idToken:r},i}return i}/*! @azure/msal-common v15.10.0 2025-08-05 */function Bf(t,e){const n=gte(t);try{const r=e(n);return JSON.parse(r)}catch{throw _e(KE)}}function gte(t){if(!t)throw _e(U5);const n=/^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/.exec(t);if(!n||n.length<4)throw _e(KE);return n[2]}function vU(t,e){if(e===0||Date.now()-3e5>t+e)throw _e(K5)}/*! @azure/msal-common v15.10.0 2025-08-05 */function yU(t){return t.startsWith("#/")?t.substring(2):t.startsWith("#")||t.startsWith("?")?t.substring(1):t}function ex(t){if(!t||t.indexOf("=")<0)return null;try{const e=yU(t),n=Object.fromEntries(new URLSearchParams(e));if(n.code||n.ear_jwe||n.error||n.error_description||n.state)return n}catch{throw _e(z5)}return null}function Xp(t,e=!0,n){const r=new Array;return t.forEach((i,s)=>{!e&&n&&s in n?r.push(`${s}=${i}`):r.push(`${s}=${encodeURIComponent(i)}`)}),r.join("&")}/*! @azure/msal-common v15.10.0 2025-08-05 */class en{get urlString(){return this._urlString}constructor(e){if(this._urlString=e,!this._urlString)throw jn(sU);e.includes("#")||(this._urlString=en.canonicalizeUri(e))}static canonicalizeUri(e){if(e){let n=e.toLowerCase();return $o.endsWith(n,"?")?n=n.slice(0,-1):$o.endsWith(n,"?/")&&(n=n.slice(0,-2)),$o.endsWith(n,"/")||(n+="/"),n}return e}validateAsUri(){let e;try{e=this.getUrlComponents()}catch{throw jn(Hh)}if(!e.HostNameAndPort||!e.PathSegments)throw jn(Hh);if(!e.Protocol||e.Protocol.toLowerCase()!=="https:")throw jn(iU)}static appendQueryString(e,n){return n?e.indexOf("?")<0?`${e}?${n}`:`${e}&${n}`:e}static removeHashFromUrl(e){return en.canonicalizeUri(e.split("#")[0])}replaceTenantPath(e){const n=this.getUrlComponents(),r=n.PathSegments;return e&&r.length!==0&&(r[0]===Ic.COMMON||r[0]===Ic.ORGANIZATIONS)&&(r[0]=e),en.constructAuthorityUriFromObject(n)}getUrlComponents(){const e=RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"),n=this.urlString.match(e);if(!n)throw jn(Hh);const r={Protocol:n[1],HostNameAndPort:n[4],AbsolutePath:n[5],QueryString:n[7]};let i=r.AbsolutePath.split("/");return i=i.filter(s=>s&&s.length>0),r.PathSegments=i,r.QueryString&&r.QueryString.endsWith("/")&&(r.QueryString=r.QueryString.substring(0,r.QueryString.length-1)),r}static getDomainFromUrl(e){const n=RegExp("^([^:/?#]+://)?([^/?#]*)"),r=e.match(n);if(!r)throw jn(Hh);return r[2]}static getAbsoluteUrl(e,n){if(e[0]===ve.FORWARD_SLASH){const i=new en(n).getUrlComponents();return i.Protocol+"//"+i.HostNameAndPort+e}return e}static constructAuthorityUriFromObject(e){return new en(e.Protocol+"//"+e.HostNameAndPort+"/"+e.PathSegments.join("/"))}static hashContainsKnownProperties(e){return!!ex(e)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const xU={endpointMetadata:{"login.microsoftonline.com":{token_endpoint:"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token",jwks_uri:"https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys",issuer:"https://login.microsoftonline.com/{tenantid}/v2.0",authorization_endpoint:"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize",end_session_endpoint:"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout"},"login.chinacloudapi.cn":{token_endpoint:"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token",jwks_uri:"https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys",issuer:"https://login.partner.microsoftonline.cn/{tenantid}/v2.0",authorization_endpoint:"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize",end_session_endpoint:"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout"},"login.microsoftonline.us":{token_endpoint:"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token",jwks_uri:"https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys",issuer:"https://login.microsoftonline.us/{tenantid}/v2.0",authorization_endpoint:"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize",end_session_endpoint:"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout"}},instanceDiscoveryMetadata:{metadata:[{preferred_network:"login.microsoftonline.com",preferred_cache:"login.windows.net",aliases:["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{preferred_network:"login.partner.microsoftonline.cn",preferred_cache:"login.partner.microsoftonline.cn",aliases:["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{preferred_network:"login.microsoftonline.de",preferred_cache:"login.microsoftonline.de",aliases:["login.microsoftonline.de"]},{preferred_network:"login.microsoftonline.us",preferred_cache:"login.microsoftonline.us",aliases:["login.microsoftonline.us","login.usgovcloudapi.net"]},{preferred_network:"login-us.microsoftonline.com",preferred_cache:"login-us.microsoftonline.com",aliases:["login-us.microsoftonline.com"]}]}},xI=xU.endpointMetadata,oN=xU.instanceDiscoveryMetadata,bU=new Set;oN.metadata.forEach(t=>{t.aliases.forEach(e=>{bU.add(e)})});function vte(t,e){var i;let n;const r=t.canonicalAuthority;if(r){const s=new en(r).getUrlComponents().HostNameAndPort;n=bI(s,(i=t.cloudDiscoveryMetadata)==null?void 0:i.metadata,Hi.CONFIG,e)||bI(s,oN.metadata,Hi.HARDCODED_VALUES,e)||t.knownAuthorities}return n||[]}function bI(t,e,n,r){if(r==null||r.trace(`getAliasesFromMetadata called with source: ${n}`),t&&e){const i=tx(e,t);if(i)return r==null||r.trace(`getAliasesFromMetadata: found cloud discovery metadata in ${n}, returning aliases`),i.aliases;r==null||r.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in ${n}`)}return null}function yte(t){return tx(oN.metadata,t)}function tx(t,e){for(let n=0;n1?r.sort(s=>s.idTokenClaims?-1:1)[0]:r.length===1?r[0]:null}getBaseAccountInfo(e,n){const r=this.getAccountsFilteredBy(e,n);return r.length>0?r[0].getAccountInfo():null}buildTenantProfiles(e,n,r){return e.flatMap(i=>this.getTenantProfilesFromAccountEntity(i,n,r==null?void 0:r.tenantId,r))}getTenantedAccountInfoByFilter(e,n,r,i,s){let o=null,c;if(s&&!this.tenantProfileMatchesFilter(r,s))return null;const l=this.getIdToken(e,i,n,r.tenantId);return l&&(c=Bf(l.secret,this.cryptoImpl.base64Decode),!this.idTokenClaimsMatchTenantProfileFilter(c,s))?null:(o=sN(e,r,c,l==null?void 0:l.secret),o)}getTenantProfilesFromAccountEntity(e,n,r,i){const s=e.getAccountInfo();let o=s.tenantProfiles||new Map;const c=this.getTokenKeys();if(r){const u=o.get(r);if(u)o=new Map([[r,u]]);else return[]}const l=[];return o.forEach(u=>{const d=this.getTenantedAccountInfoByFilter(s,c,u,n,i);d&&l.push(d)}),l}tenantProfileMatchesFilter(e,n){return!(n.localAccountId&&!this.matchLocalAccountIdFromTenantProfile(e,n.localAccountId)||n.name&&e.name!==n.name||n.isHomeTenant!==void 0&&e.isHomeTenant!==n.isHomeTenant)}idTokenClaimsMatchTenantProfileFilter(e,n){return!(n&&(n.localAccountId&&!this.matchLocalAccountIdFromTokenClaims(e,n.localAccountId)||n.loginHint&&!this.matchLoginHintFromTokenClaims(e,n.loginHint)||n.username&&!this.matchUsername(e.preferred_username,n.username)||n.name&&!this.matchName(e,n.name)||n.sid&&!this.matchSid(e,n.sid)))}async saveCacheRecord(e,n,r){var i;if(!e)throw _e(X5);try{e.account&&await this.setAccount(e.account,n),e.idToken&&(r==null?void 0:r.idToken)!==!1&&await this.setIdTokenCredential(e.idToken,n),e.accessToken&&(r==null?void 0:r.accessToken)!==!1&&await this.saveAccessToken(e.accessToken,n),e.refreshToken&&(r==null?void 0:r.refreshToken)!==!1&&await this.setRefreshTokenCredential(e.refreshToken,n),e.appMetadata&&this.setAppMetadata(e.appMetadata,n)}catch(s){throw(i=this.commonLogger)==null||i.error("CacheManager.saveCacheRecord: failed"),s instanceof Cn?s:r1(s)}}async saveAccessToken(e,n){const r={clientId:e.clientId,credentialType:e.credentialType,environment:e.environment,homeAccountId:e.homeAccountId,realm:e.realm,tokenType:e.tokenType,requestedClaimsHash:e.requestedClaimsHash},i=this.getTokenKeys(),s=Ar.fromString(e.target);i.accessToken.forEach(o=>{if(!this.accessTokenKeyMatchesFilter(o,r,!1))return;const c=this.getAccessTokenCredential(o,n);c&&this.credentialMatchesFilter(c,r)&&Ar.fromString(c.target).intersectingScopeSets(s)&&this.removeAccessToken(o,n)}),await this.setAccessTokenCredential(e,n)}getAccountsFilteredBy(e,n){const r=this.getAccountKeys(),i=[];return r.forEach(s=>{var u;const o=this.getAccount(s,n);if(!o||e.homeAccountId&&!this.matchHomeAccountId(o,e.homeAccountId)||e.username&&!this.matchUsername(o.username,e.username)||e.environment&&!this.matchEnvironment(o,e.environment)||e.realm&&!this.matchRealm(o,e.realm)||e.nativeAccountId&&!this.matchNativeAccountId(o,e.nativeAccountId)||e.authorityType&&!this.matchAuthorityType(o,e.authorityType))return;const c={localAccountId:e==null?void 0:e.localAccountId,name:e==null?void 0:e.name},l=(u=o.tenantProfiles)==null?void 0:u.filter(d=>this.tenantProfileMatchesFilter(d,c));l&&l.length===0||i.push(o)}),i}credentialMatchesFilter(e,n){return!(n.clientId&&!this.matchClientId(e,n.clientId)||n.userAssertionHash&&!this.matchUserAssertionHash(e,n.userAssertionHash)||typeof n.homeAccountId=="string"&&!this.matchHomeAccountId(e,n.homeAccountId)||n.environment&&!this.matchEnvironment(e,n.environment)||n.realm&&!this.matchRealm(e,n.realm)||n.credentialType&&!this.matchCredentialType(e,n.credentialType)||n.familyId&&!this.matchFamilyId(e,n.familyId)||n.target&&!this.matchTarget(e,n.target)||(n.requestedClaimsHash||e.requestedClaimsHash)&&e.requestedClaimsHash!==n.requestedClaimsHash||e.credentialType===Hr.ACCESS_TOKEN_WITH_AUTH_SCHEME&&(n.tokenType&&!this.matchTokenType(e,n.tokenType)||n.tokenType===yn.SSH&&n.keyId&&!this.matchKeyId(e,n.keyId)))}getAppMetadataFilteredBy(e){const n=this.getKeys(),r={};return n.forEach(i=>{if(!this.isAppMetadata(i))return;const s=this.getAppMetadata(i);s&&(e.environment&&!this.matchEnvironment(s,e.environment)||e.clientId&&!this.matchClientId(s,e.clientId)||(r[i]=s))}),r}getAuthorityMetadataByAlias(e){const n=this.getAuthorityMetadataKeys();let r=null;return n.forEach(i=>{if(!this.isAuthorityMetadata(i)||i.indexOf(this.clientId)===-1)return;const s=this.getAuthorityMetadata(i);s&&s.aliases.indexOf(e)!==-1&&(r=s)}),r}removeAllAccounts(e){this.getAllAccounts({},e).forEach(r=>{this.removeAccount(r,e)})}removeAccount(e,n){this.removeAccountContext(e,n);const r=this.getAccountKeys(),i=s=>s.includes(e.homeAccountId)&&s.includes(e.environment);r.filter(i).forEach(s=>{this.removeItem(s,n),this.performanceClient.incrementFields({accountsRemoved:1},n)})}removeAccountContext(e,n){const r=this.getTokenKeys(),i=s=>s.includes(e.homeAccountId)&&s.includes(e.environment);r.idToken.filter(i).forEach(s=>{this.removeIdToken(s,n)}),r.accessToken.filter(i).forEach(s=>{this.removeAccessToken(s,n)}),r.refreshToken.filter(i).forEach(s=>{this.removeRefreshToken(s,n)})}removeAccessToken(e,n){const r=this.getAccessTokenCredential(e,n);if(this.removeItem(e,n),this.performanceClient.incrementFields({accessTokensRemoved:1},n),!r||r.credentialType.toLowerCase()!==Hr.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()||r.tokenType!==yn.POP)return;const i=r.keyId;i&&this.cryptoImpl.removeTokenBindingKey(i).catch(()=>{var s;this.commonLogger.error(`Failed to remove token binding key ${i}`,n),(s=this.performanceClient)==null||s.incrementFields({removeTokenBindingKeyFailure:1},n)})}removeAppMetadata(e){return this.getKeys().forEach(r=>{this.isAppMetadata(r)&&this.removeItem(r,e)}),!0}getIdToken(e,n,r,i,s){this.commonLogger.trace("CacheManager - getIdToken called");const o={homeAccountId:e.homeAccountId,environment:e.environment,credentialType:Hr.ID_TOKEN,clientId:this.clientId,realm:i},c=this.getIdTokensByFilter(o,n,r),l=c.size;if(l<1)return this.commonLogger.info("CacheManager:getIdToken - No token found"),null;if(l>1){let u=c;if(!i){const d=new Map;c.forEach((h,p)=>{h.realm===e.tenantId&&d.set(p,h)});const f=d.size;if(f<1)return this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result"),c.values().next().value;if(f===1)return this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile"),d.values().next().value;u=d}return this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them"),u.forEach((d,f)=>{this.removeIdToken(f,n)}),s&&n&&s.addFields({multiMatchedID:c.size},n),null}return this.commonLogger.info("CacheManager:getIdToken - Returning ID token"),c.values().next().value}getIdTokensByFilter(e,n,r){const i=r&&r.idToken||this.getTokenKeys().idToken,s=new Map;return i.forEach(o=>{if(!this.idTokenKeyMatchesFilter(o,{clientId:this.clientId,...e}))return;const c=this.getIdTokenCredential(o,n);c&&this.credentialMatchesFilter(c,e)&&s.set(o,c)}),s}idTokenKeyMatchesFilter(e,n){const r=e.toLowerCase();return!(n.clientId&&r.indexOf(n.clientId.toLowerCase())===-1||n.homeAccountId&&r.indexOf(n.homeAccountId.toLowerCase())===-1)}removeIdToken(e,n){this.removeItem(e,n)}removeRefreshToken(e,n){this.removeItem(e,n)}getAccessToken(e,n,r,i){const s=n.correlationId;this.commonLogger.trace("CacheManager - getAccessToken called",s);const o=Ar.createSearchScopes(n.scopes),c=n.authenticationScheme||yn.BEARER,l=c&&c.toLowerCase()!==yn.BEARER.toLowerCase()?Hr.ACCESS_TOKEN_WITH_AUTH_SCHEME:Hr.ACCESS_TOKEN,u={homeAccountId:e.homeAccountId,environment:e.environment,credentialType:l,clientId:this.clientId,realm:i||e.tenantId,target:o,tokenType:c,keyId:n.sshKid,requestedClaimsHash:n.requestedClaimsHash},d=r&&r.accessToken||this.getTokenKeys().accessToken,f=[];d.forEach(p=>{if(this.accessTokenKeyMatchesFilter(p,u,!0)){const g=this.getAccessTokenCredential(p,s);g&&this.credentialMatchesFilter(g,u)&&f.push(g)}});const h=f.length;return h<1?(this.commonLogger.info("CacheManager:getAccessToken - No token found",s),null):h>1?(this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them",s),f.forEach(p=>{this.removeAccessToken(this.generateCredentialKey(p),s)}),this.performanceClient.addFields({multiMatchedAT:f.length},s),null):(this.commonLogger.info("CacheManager:getAccessToken - Returning access token",s),f[0])}accessTokenKeyMatchesFilter(e,n,r){const i=e.toLowerCase();if(n.clientId&&i.indexOf(n.clientId.toLowerCase())===-1||n.homeAccountId&&i.indexOf(n.homeAccountId.toLowerCase())===-1||n.realm&&i.indexOf(n.realm.toLowerCase())===-1||n.requestedClaimsHash&&i.indexOf(n.requestedClaimsHash.toLowerCase())===-1)return!1;if(n.target){const s=n.target.asArray();for(let o=0;o{if(!this.accessTokenKeyMatchesFilter(s,e,!0))return;const o=this.getAccessTokenCredential(s,n);o&&this.credentialMatchesFilter(o,e)&&i.push(o)}),i}getRefreshToken(e,n,r,i,s){this.commonLogger.trace("CacheManager - getRefreshToken called");const o=n?Qy:void 0,c={homeAccountId:e.homeAccountId,environment:e.environment,credentialType:Hr.REFRESH_TOKEN,clientId:this.clientId,familyId:o},l=i&&i.refreshToken||this.getTokenKeys().refreshToken,u=[];l.forEach(f=>{if(this.refreshTokenKeyMatchesFilter(f,c)){const h=this.getRefreshTokenCredential(f,r);h&&this.credentialMatchesFilter(h,c)&&u.push(h)}});const d=u.length;return d<1?(this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found."),null):(d>1&&s&&r&&s.addFields({multiMatchedRT:d},r),this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token"),u[0])}refreshTokenKeyMatchesFilter(e,n){const r=e.toLowerCase();return!(n.familyId&&r.indexOf(n.familyId.toLowerCase())===-1||!n.familyId&&n.clientId&&r.indexOf(n.clientId.toLowerCase())===-1||n.homeAccountId&&r.indexOf(n.homeAccountId.toLowerCase())===-1)}readAppMetadataFromCache(e){const n={environment:e,clientId:this.clientId},r=this.getAppMetadataFilteredBy(n),i=Object.keys(r).map(o=>r[o]),s=i.length;if(s<1)return null;if(s>1)throw _e(W5);return i[0]}isAppMetadataFOCI(e){const n=this.readAppMetadataFromCache(e);return!!(n&&n.familyId===Qy)}matchHomeAccountId(e,n){return typeof e.homeAccountId=="string"&&n===e.homeAccountId}matchLocalAccountIdFromTokenClaims(e,n){const r=e.oid||e.sub;return n===r}matchLocalAccountIdFromTenantProfile(e,n){return e.localAccountId===n}matchName(e,n){var r;return n.toLowerCase()===((r=e.name)==null?void 0:r.toLowerCase())}matchUsername(e,n){return!!(e&&typeof e=="string"&&(n==null?void 0:n.toLowerCase())===e.toLowerCase())}matchUserAssertionHash(e,n){return!!(e.userAssertionHash&&n===e.userAssertionHash)}matchEnvironment(e,n){if(this.staticAuthorityOptions){const i=vte(this.staticAuthorityOptions,this.commonLogger);if(i.includes(n)&&i.includes(e.environment))return!0}const r=this.getAuthorityMetadataByAlias(n);return!!(r&&r.aliases.indexOf(e.environment)>-1)}matchCredentialType(e,n){return e.credentialType&&n.toLowerCase()===e.credentialType.toLowerCase()}matchClientId(e,n){return!!(e.clientId&&n===e.clientId)}matchFamilyId(e,n){return!!(e.familyId&&n===e.familyId)}matchRealm(e,n){var r;return((r=e.realm)==null?void 0:r.toLowerCase())===n.toLowerCase()}matchNativeAccountId(e,n){return!!(e.nativeAccountId&&n===e.nativeAccountId)}matchLoginHintFromTokenClaims(e,n){return e.login_hint===n||e.preferred_username===n||e.upn===n}matchSid(e,n){return e.sid===n}matchAuthorityType(e,n){return!!(e.authorityType&&n.toLowerCase()===e.authorityType.toLowerCase())}matchTarget(e,n){return e.credentialType!==Hr.ACCESS_TOKEN&&e.credentialType!==Hr.ACCESS_TOKEN_WITH_AUTH_SCHEME||!e.target?!1:Ar.fromString(e.target).containsScopeSet(n)}matchTokenType(e,n){return!!(e.tokenType&&e.tokenType===n)}matchKeyId(e,n){return!!(e.keyId&&e.keyId===n)}isAppMetadata(e){return e.indexOf(VE)!==-1}isAuthorityMetadata(e){return e.indexOf(Xy.CACHE_KEY)!==-1}generateAuthorityMetadataCacheKey(e){return`${Xy.CACHE_KEY}-${this.clientId}-${e}`}static toObject(e,n){for(const r in n)e[r]=n[r];return e}}class xte extends i1{async setAccount(){throw _e(Kt)}getAccount(){throw _e(Kt)}async setIdTokenCredential(){throw _e(Kt)}getIdTokenCredential(){throw _e(Kt)}async setAccessTokenCredential(){throw _e(Kt)}getAccessTokenCredential(){throw _e(Kt)}async setRefreshTokenCredential(){throw _e(Kt)}getRefreshTokenCredential(){throw _e(Kt)}setAppMetadata(){throw _e(Kt)}getAppMetadata(){throw _e(Kt)}setServerTelemetry(){throw _e(Kt)}getServerTelemetry(){throw _e(Kt)}setAuthorityMetadata(){throw _e(Kt)}getAuthorityMetadata(){throw _e(Kt)}getAuthorityMetadataKeys(){throw _e(Kt)}setThrottlingCache(){throw _e(Kt)}getThrottlingCache(){throw _e(Kt)}removeItem(){throw _e(Kt)}getKeys(){throw _e(Kt)}getAccountKeys(){throw _e(Kt)}getTokenKeys(){throw _e(Kt)}generateCredentialKey(){throw _e(Kt)}generateAccountKey(){throw _e(Kt)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const $i={AAD:"AAD",OIDC:"OIDC",EAR:"EAR"};/*! @azure/msal-common v15.10.0 2025-08-05 */const W={AcquireTokenByCode:"acquireTokenByCode",AcquireTokenByRefreshToken:"acquireTokenByRefreshToken",AcquireTokenSilent:"acquireTokenSilent",AcquireTokenSilentAsync:"acquireTokenSilentAsync",AcquireTokenPopup:"acquireTokenPopup",AcquireTokenPreRedirect:"acquireTokenPreRedirect",AcquireTokenRedirect:"acquireTokenRedirect",CryptoOptsGetPublicKeyThumbprint:"cryptoOptsGetPublicKeyThumbprint",CryptoOptsSignJwt:"cryptoOptsSignJwt",SilentCacheClientAcquireToken:"silentCacheClientAcquireToken",SilentIframeClientAcquireToken:"silentIframeClientAcquireToken",AwaitConcurrentIframe:"awaitConcurrentIframe",SilentRefreshClientAcquireToken:"silentRefreshClientAcquireToken",SsoSilent:"ssoSilent",StandardInteractionClientGetDiscoveredAuthority:"standardInteractionClientGetDiscoveredAuthority",FetchAccountIdWithNativeBroker:"fetchAccountIdWithNativeBroker",NativeInteractionClientAcquireToken:"nativeInteractionClientAcquireToken",BaseClientCreateTokenRequestHeaders:"baseClientCreateTokenRequestHeaders",NetworkClientSendPostRequestAsync:"networkClientSendPostRequestAsync",RefreshTokenClientExecutePostToTokenEndpoint:"refreshTokenClientExecutePostToTokenEndpoint",AuthorizationCodeClientExecutePostToTokenEndpoint:"authorizationCodeClientExecutePostToTokenEndpoint",BrokerHandhshake:"brokerHandshake",AcquireTokenByRefreshTokenInBroker:"acquireTokenByRefreshTokenInBroker",AcquireTokenByBroker:"acquireTokenByBroker",RefreshTokenClientExecuteTokenRequest:"refreshTokenClientExecuteTokenRequest",RefreshTokenClientAcquireToken:"refreshTokenClientAcquireToken",RefreshTokenClientAcquireTokenWithCachedRefreshToken:"refreshTokenClientAcquireTokenWithCachedRefreshToken",RefreshTokenClientAcquireTokenByRefreshToken:"refreshTokenClientAcquireTokenByRefreshToken",RefreshTokenClientCreateTokenRequestBody:"refreshTokenClientCreateTokenRequestBody",AcquireTokenFromCache:"acquireTokenFromCache",SilentFlowClientAcquireCachedToken:"silentFlowClientAcquireCachedToken",SilentFlowClientGenerateResultFromCacheRecord:"silentFlowClientGenerateResultFromCacheRecord",AcquireTokenBySilentIframe:"acquireTokenBySilentIframe",InitializeBaseRequest:"initializeBaseRequest",InitializeSilentRequest:"initializeSilentRequest",InitializeClientApplication:"initializeClientApplication",InitializeCache:"initializeCache",SilentIframeClientTokenHelper:"silentIframeClientTokenHelper",SilentHandlerInitiateAuthRequest:"silentHandlerInitiateAuthRequest",SilentHandlerMonitorIframeForHash:"silentHandlerMonitorIframeForHash",SilentHandlerLoadFrame:"silentHandlerLoadFrame",SilentHandlerLoadFrameSync:"silentHandlerLoadFrameSync",StandardInteractionClientCreateAuthCodeClient:"standardInteractionClientCreateAuthCodeClient",StandardInteractionClientGetClientConfiguration:"standardInteractionClientGetClientConfiguration",StandardInteractionClientInitializeAuthorizationRequest:"standardInteractionClientInitializeAuthorizationRequest",GetAuthCodeUrl:"getAuthCodeUrl",GetStandardParams:"getStandardParams",HandleCodeResponseFromServer:"handleCodeResponseFromServer",HandleCodeResponse:"handleCodeResponse",HandleResponseEar:"handleResponseEar",HandleResponsePlatformBroker:"handleResponsePlatformBroker",HandleResponseCode:"handleResponseCode",UpdateTokenEndpointAuthority:"updateTokenEndpointAuthority",AuthClientAcquireToken:"authClientAcquireToken",AuthClientExecuteTokenRequest:"authClientExecuteTokenRequest",AuthClientCreateTokenRequestBody:"authClientCreateTokenRequestBody",PopTokenGenerateCnf:"popTokenGenerateCnf",PopTokenGenerateKid:"popTokenGenerateKid",HandleServerTokenResponse:"handleServerTokenResponse",DeserializeResponse:"deserializeResponse",AuthorityFactoryCreateDiscoveredInstance:"authorityFactoryCreateDiscoveredInstance",AuthorityResolveEndpointsAsync:"authorityResolveEndpointsAsync",AuthorityResolveEndpointsFromLocalSources:"authorityResolveEndpointsFromLocalSources",AuthorityGetCloudDiscoveryMetadataFromNetwork:"authorityGetCloudDiscoveryMetadataFromNetwork",AuthorityUpdateCloudDiscoveryMetadata:"authorityUpdateCloudDiscoveryMetadata",AuthorityGetEndpointMetadataFromNetwork:"authorityGetEndpointMetadataFromNetwork",AuthorityUpdateEndpointMetadata:"authorityUpdateEndpointMetadata",AuthorityUpdateMetadataWithRegionalInformation:"authorityUpdateMetadataWithRegionalInformation",RegionDiscoveryDetectRegion:"regionDiscoveryDetectRegion",RegionDiscoveryGetRegionFromIMDS:"regionDiscoveryGetRegionFromIMDS",RegionDiscoveryGetCurrentVersion:"regionDiscoveryGetCurrentVersion",AcquireTokenByCodeAsync:"acquireTokenByCodeAsync",GetEndpointMetadataFromNetwork:"getEndpointMetadataFromNetwork",GetCloudDiscoveryMetadataFromNetworkMeasurement:"getCloudDiscoveryMetadataFromNetworkMeasurement",HandleRedirectPromiseMeasurement:"handleRedirectPromise",HandleNativeRedirectPromiseMeasurement:"handleNativeRedirectPromise",UpdateCloudDiscoveryMetadataMeasurement:"updateCloudDiscoveryMetadataMeasurement",UsernamePasswordClientAcquireToken:"usernamePasswordClientAcquireToken",NativeMessageHandlerHandshake:"nativeMessageHandlerHandshake",NativeGenerateAuthResult:"nativeGenerateAuthResult",RemoveHiddenIframe:"removeHiddenIframe",ClearTokensAndKeysWithClaims:"clearTokensAndKeysWithClaims",CacheManagerGetRefreshToken:"cacheManagerGetRefreshToken",ImportExistingCache:"importExistingCache",SetUserData:"setUserData",LocalStorageUpdated:"localStorageUpdated",GeneratePkceCodes:"generatePkceCodes",GenerateCodeVerifier:"generateCodeVerifier",GenerateCodeChallengeFromVerifier:"generateCodeChallengeFromVerifier",Sha256Digest:"sha256Digest",GetRandomValues:"getRandomValues",GenerateHKDF:"generateHKDF",GenerateBaseKey:"generateBaseKey",Base64Decode:"base64Decode",UrlEncodeArr:"urlEncodeArr",Encrypt:"encrypt",Decrypt:"decrypt",GenerateEarKey:"generateEarKey",DecryptEarResponse:"decryptEarResponse"},bte={NotStarted:0,InProgress:1,Completed:2};/*! @azure/msal-common v15.10.0 2025-08-05 */class wI{startMeasurement(){}endMeasurement(){}flushMeasurement(){return null}}class wU{generateId(){return"callback-id"}startMeasurement(e,n){return{end:()=>null,discard:()=>{},add:()=>{},increment:()=>{},event:{eventId:this.generateId(),status:bte.InProgress,authority:"",libraryName:"",libraryVersion:"",clientId:"",name:e,startTimeMs:Date.now(),correlationId:n||""},measurement:new wI}}startPerformanceMeasurement(){return new wI}calculateQueuedTime(){return 0}addQueueMeasurement(){}setPreQueueTime(){}endMeasurement(){return null}discardMeasurements(){}removePerformanceCallback(){return!0}addPerformanceCallback(){return""}emitEvents(){}addFields(){}incrementFields(){}cacheEventByCorrelationId(){}}/*! @azure/msal-common v15.10.0 2025-08-05 */const SU={tokenRenewalOffsetSeconds:L5,preventCorsPreflight:!1},wte={loggerCallback:()=>{},piiLoggingEnabled:!1,logLevel:Rn.Info,correlationId:ve.EMPTY_STRING},Ste={claimsBasedCachingEnabled:!1},Cte={async sendGetRequestAsync(){throw _e(Kt)},async sendPostRequestAsync(){throw _e(Kt)}},_te={sku:ve.SKU,version:JE,cpu:ve.EMPTY_STRING,os:ve.EMPTY_STRING},Ate={clientSecret:ve.EMPTY_STRING,clientAssertion:void 0},jte={azureCloudInstance:ZE.None,tenant:`${ve.DEFAULT_COMMON_TENANT}`},Ete={application:{appName:"",appVersion:""}};function Nte({authOptions:t,systemOptions:e,loggerOptions:n,cacheOptions:r,storageInterface:i,networkInterface:s,cryptoInterface:o,clientCredentials:c,libraryInfo:l,telemetry:u,serverTelemetryManager:d,persistencePlugin:f,serializableCache:h}){const p={...wte,...n};return{authOptions:Tte(t),systemOptions:{...SU,...e},loggerOptions:p,cacheOptions:{...Ste,...r},storageInterface:i||new xte(t.clientId,Zy,new Ma(p),new wU),networkInterface:s||Cte,cryptoInterface:o||Zy,clientCredentials:c||Ate,libraryInfo:{..._te,...l},telemetry:{...Ete,...u},serverTelemetryManager:d||null,persistencePlugin:f||null,serializableCache:h||null}}function Tte(t){return{clientCapabilities:[],azureCloudOptions:jte,skipAuthorityMetadataCache:!1,instanceAware:!1,encodeExtraQueryParams:!1,...t}}function CU(t){return t.authOptions.authority.options.protocolMode===$i.OIDC}/*! @azure/msal-common v15.10.0 2025-08-05 */const Ws={HOME_ACCOUNT_ID:"home_account_id",UPN:"UPN"};/*! @azure/msal-common v15.10.0 2025-08-05 */function rx(t,e){if(!t)throw _e(F5);try{const n=e(t);return JSON.parse(n)}catch{throw _e(GE)}}function Sd(t){if(!t)throw _e(GE);const e=t.split(Qp.CLIENT_INFO_SEPARATOR,2);return{uid:e[0],utid:e.length<2?ve.EMPTY_STRING:e[1]}}/*! @azure/msal-common v15.10.0 2025-08-05 */const hu="client_id",_U="redirect_uri",Pte="response_type",kte="response_mode",Ote="grant_type",Ite="claims",Rte="scope",Mte="refresh_token",Dte="state",$te="nonce",Lte="prompt",Fte="code",Ute="code_challenge",Bte="code_challenge_method",Hte="code_verifier",zte="client-request-id",Vte="x-client-SKU",Gte="x-client-VER",Kte="x-client-OS",Wte="x-client-CPU",qte="x-client-current-telemetry",Yte="x-client-last-telemetry",Qte="x-ms-lib-capability",Xte="x-app-name",Jte="x-app-ver",Zte="post_logout_redirect_uri",ene="id_token_hint",tne="client_secret",nne="client_assertion",rne="client_assertion_type",AU="token_type",jU="req_cnf",SI="return_spa_code",ine="nativebroker",sne="logout_hint",one="sid",ane="login_hint",cne="domain_hint",lne="x-client-xtra-sku",ix="brk_client_id",sx="brk_redirect_uri",s1="instance_aware",une="ear_jwk",dne="ear_jwe_crypto";/*! @azure/msal-common v15.10.0 2025-08-05 */function E0(t,e,n){if(!e)return;const r=t.get(hu);r&&t.has(ix)&&(n==null||n.addFields({embeddedClientId:r,embeddedRedirectUri:t.get(_U)},e))}function cN(t,e){t.set(Pte,e)}function fne(t,e){t.set(kte,e||qee.QUERY)}function hne(t){t.set(ine,"1")}function lN(t,e,n=!0,r=vg){n&&!r.includes("openid")&&!e.includes("openid")&&r.push("openid");const i=n?[...e||[],...r]:e||[],s=new Ar(i);t.set(Rte,s.printScopes())}function uN(t,e){t.set(hu,e)}function dN(t,e){t.set(_U,e)}function pne(t,e){t.set(Zte,e)}function mne(t,e){t.set(ene,e)}function gne(t,e){t.set(cne,e)}function hv(t,e){t.set(ane,e)}function ox(t,e){t.set(di.CCS_HEADER,`UPN:${e}`)}function cp(t,e){t.set(di.CCS_HEADER,`Oid:${e.uid}@${e.utid}`)}function CI(t,e){t.set(one,e)}function fN(t,e,n){const r=Sne(e,n);try{JSON.parse(r)}catch{throw jn(eN)}t.set(Ite,r)}function hN(t,e){t.set(zte,e)}function pN(t,e){t.set(Vte,e.sku),t.set(Gte,e.version),e.os&&t.set(Kte,e.os),e.cpu&&t.set(Wte,e.cpu)}function mN(t,e){e!=null&&e.appName&&t.set(Xte,e.appName),e!=null&&e.appVersion&&t.set(Jte,e.appVersion)}function vne(t,e){t.set(Lte,e)}function EU(t,e){e&&t.set(Dte,e)}function yne(t,e){t.set($te,e)}function NU(t,e,n){if(e&&n)t.set(Ute,e),t.set(Bte,n);else throw jn(tN)}function xne(t,e){t.set(Fte,e)}function bne(t,e){t.set(Mte,e)}function wne(t,e){t.set(Hte,e)}function TU(t,e){t.set(tne,e)}function PU(t,e){e&&t.set(nne,e)}function kU(t,e){e&&t.set(rne,e)}function OU(t,e){t.set(Ote,e)}function gN(t){t.set(Yee,"1")}function IU(t){t.has(s1)||t.set(s1,"true")}function Mc(t,e){Object.entries(e).forEach(([n,r])=>{!t.has(n)&&r&&t.set(n,r)})}function Sne(t,e){let n;if(!t)n={};else try{n=JSON.parse(t)}catch{throw jn(eN)}return e&&e.length>0&&(n.hasOwnProperty(dv.ACCESS_TOKEN)||(n[dv.ACCESS_TOKEN]={}),n[dv.ACCESS_TOKEN][dv.XMS_CC]={values:e}),JSON.stringify(n)}function vN(t,e){e&&(t.set(AU,yn.POP),t.set(jU,e))}function RU(t,e){e&&(t.set(AU,yn.SSH),t.set(jU,e))}function MU(t,e){t.set(qte,e.generateCurrentRequestHeaderValue()),t.set(Yte,e.generateLastRequestHeaderValue())}function DU(t){t.set(Qte,ap.X_MS_LIB_CAPABILITY_VALUE)}function Cne(t,e){t.set(sne,e)}function N0(t,e,n){t.has(ix)||t.set(ix,e),t.has(sx)||t.set(sx,n)}function _ne(t,e){t.set(une,encodeURIComponent(e)),t.set(dne,"eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0")}function Ane(t,e){Object.entries(e).forEach(([n,r])=>{r&&t.set(n,r)})}/*! @azure/msal-common v15.10.0 2025-08-05 */const Bs={Default:0,Adfs:1,Dsts:2,Ciam:3};/*! @azure/msal-common v15.10.0 2025-08-05 */function jne(t){return t.hasOwnProperty("authorization_endpoint")&&t.hasOwnProperty("token_endpoint")&&t.hasOwnProperty("issuer")&&t.hasOwnProperty("jwks_uri")}/*! @azure/msal-common v15.10.0 2025-08-05 */function Ene(t){return t.hasOwnProperty("tenant_discovery_endpoint")&&t.hasOwnProperty("metadata")}/*! @azure/msal-common v15.10.0 2025-08-05 */function Nne(t){return t.hasOwnProperty("error")&&t.hasOwnProperty("error_description")}/*! @azure/msal-common v15.10.0 2025-08-05 */const es=(t,e,n,r,i)=>(...s)=>{n.trace(`Executing function ${e}`);const o=r==null?void 0:r.startMeasurement(e,i);if(i){const c=e+"CallCount";r==null||r.incrementFields({[c]:1},i)}try{const c=t(...s);return o==null||o.end({success:!0}),n.trace(`Returning result from ${e}`),c}catch(c){n.trace(`Error occurred in ${e}`);try{n.trace(JSON.stringify(c))}catch{n.trace("Unable to print error message.")}throw o==null||o.end({success:!1},c),c}},ge=(t,e,n,r,i)=>(...s)=>{n.trace(`Executing function ${e}`);const o=r==null?void 0:r.startMeasurement(e,i);if(i){const c=e+"CallCount";r==null||r.incrementFields({[c]:1},i)}return r==null||r.setPreQueueTime(e,i),t(...s).then(c=>(n.trace(`Returning result from ${e}`),o==null||o.end({success:!0}),c)).catch(c=>{n.trace(`Error occurred in ${e}`);try{n.trace(JSON.stringify(c))}catch{n.trace("Unable to print error message.")}throw o==null||o.end({success:!1},c),c})};/*! @azure/msal-common v15.10.0 2025-08-05 */class T0{constructor(e,n,r,i){this.networkInterface=e,this.logger=n,this.performanceClient=r,this.correlationId=i}async detectRegion(e,n){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.RegionDiscoveryDetectRegion,this.correlationId);let r=e;if(r)n.region_source=$u.ENVIRONMENT_VARIABLE;else{const s=T0.IMDS_OPTIONS;try{const o=await ge(this.getRegionFromIMDS.bind(this),W.RegionDiscoveryGetRegionFromIMDS,this.logger,this.performanceClient,this.correlationId)(ve.IMDS_VERSION,s);if(o.status===bc.SUCCESS&&(r=o.body,n.region_source=$u.IMDS),o.status===bc.BAD_REQUEST){const c=await ge(this.getCurrentVersion.bind(this),W.RegionDiscoveryGetCurrentVersion,this.logger,this.performanceClient,this.correlationId)(s);if(!c)return n.region_source=$u.FAILED_AUTO_DETECTION,null;const l=await ge(this.getRegionFromIMDS.bind(this),W.RegionDiscoveryGetRegionFromIMDS,this.logger,this.performanceClient,this.correlationId)(c,s);l.status===bc.SUCCESS&&(r=l.body,n.region_source=$u.IMDS)}}catch{return n.region_source=$u.FAILED_AUTO_DETECTION,null}}return r||(n.region_source=$u.FAILED_AUTO_DETECTION),r||null}async getRegionFromIMDS(e,n){var r;return(r=this.performanceClient)==null||r.addQueueMeasurement(W.RegionDiscoveryGetRegionFromIMDS,this.correlationId),this.networkInterface.sendGetRequestAsync(`${ve.IMDS_ENDPOINT}?api-version=${e}&format=text`,n,ve.IMDS_TIMEOUT)}async getCurrentVersion(e){var n;(n=this.performanceClient)==null||n.addQueueMeasurement(W.RegionDiscoveryGetCurrentVersion,this.correlationId);try{const r=await this.networkInterface.sendGetRequestAsync(`${ve.IMDS_ENDPOINT}?format=json`,e);return r.status===bc.BAD_REQUEST&&r.body&&r.body["newest-versions"]&&r.body["newest-versions"].length>0?r.body["newest-versions"][0]:null}catch{return null}}}T0.IMDS_OPTIONS={headers:{Metadata:"true"}};/*! @azure/msal-common v15.10.0 2025-08-05 */function Li(){return Math.round(new Date().getTime()/1e3)}function _I(t){return t.getTime()/1e3}function Cd(t){return t?new Date(Number(t)*1e3):new Date}function ax(t,e){const n=Number(t)||0;return Li()+e>n}function Tne(t,e){const n=Number(t)+e*24*60*60*1e3;return Date.now()>n}function Pne(t){return Number(t)>Li()}/*! @azure/msal-common v15.10.0 2025-08-05 */function P0(t,e,n,r,i){return{credentialType:Hr.ID_TOKEN,homeAccountId:t,environment:e,clientId:r,secret:n,realm:i,lastUpdatedAt:Date.now().toString()}}function k0(t,e,n,r,i,s,o,c,l,u,d,f,h,p,g){var y,b;const m={homeAccountId:t,credentialType:Hr.ACCESS_TOKEN,secret:n,cachedAt:Li().toString(),expiresOn:o.toString(),extendedExpiresOn:c.toString(),environment:e,clientId:r,realm:i,target:s,tokenType:d||yn.BEARER,lastUpdatedAt:Date.now().toString()};if(f&&(m.userAssertionHash=f),u&&(m.refreshOn=u.toString()),p&&(m.requestedClaims=p,m.requestedClaimsHash=g),((y=m.tokenType)==null?void 0:y.toLowerCase())!==yn.BEARER.toLowerCase())switch(m.credentialType=Hr.ACCESS_TOKEN_WITH_AUTH_SCHEME,m.tokenType){case yn.POP:const x=Bf(n,l);if(!((b=x==null?void 0:x.cnf)!=null&&b.kid))throw _e(J5);m.keyId=x.cnf.kid;break;case yn.SSH:m.keyId=h}return m}function $U(t,e,n,r,i,s,o){const c={credentialType:Hr.REFRESH_TOKEN,homeAccountId:t,environment:e,clientId:r,secret:n,lastUpdatedAt:Date.now().toString()};return s&&(c.userAssertionHash=s),i&&(c.familyId=i),o&&(c.expiresOn=o.toString()),c}function yN(t){return t.hasOwnProperty("homeAccountId")&&t.hasOwnProperty("environment")&&t.hasOwnProperty("credentialType")&&t.hasOwnProperty("clientId")&&t.hasOwnProperty("secret")}function AI(t){return t?yN(t)&&t.hasOwnProperty("realm")&&t.hasOwnProperty("target")&&(t.credentialType===Hr.ACCESS_TOKEN||t.credentialType===Hr.ACCESS_TOKEN_WITH_AUTH_SCHEME):!1}function kne(t){return t?yN(t)&&t.hasOwnProperty("realm")&&t.credentialType===Hr.ID_TOKEN:!1}function jI(t){return t?yN(t)&&t.credentialType===Hr.REFRESH_TOKEN:!1}function One(t,e){const n=t.indexOf(Lr.CACHE_KEY)===0;let r=!0;return e&&(r=e.hasOwnProperty("failedRequests")&&e.hasOwnProperty("errors")&&e.hasOwnProperty("cacheHits")),n&&r}function Ine(t,e){let n=!1;t&&(n=t.indexOf(ap.THROTTLING_PREFIX)===0);let r=!0;return e&&(r=e.hasOwnProperty("throttleTime")),n&&r}function Rne({environment:t,clientId:e}){return[VE,t,e].join(Qp.CACHE_KEY_SEPARATOR).toLowerCase()}function Mne(t,e){return e?t.indexOf(VE)===0&&e.hasOwnProperty("clientId")&&e.hasOwnProperty("environment"):!1}function Dne(t,e){return e?t.indexOf(Xy.CACHE_KEY)===0&&e.hasOwnProperty("aliases")&&e.hasOwnProperty("preferred_cache")&&e.hasOwnProperty("preferred_network")&&e.hasOwnProperty("canonical_authority")&&e.hasOwnProperty("authorization_endpoint")&&e.hasOwnProperty("token_endpoint")&&e.hasOwnProperty("issuer")&&e.hasOwnProperty("aliasesFromNetwork")&&e.hasOwnProperty("endpointsFromNetwork")&&e.hasOwnProperty("expiresAt")&&e.hasOwnProperty("jwks_uri"):!1}function EI(){return Li()+Xy.REFRESH_TIME_SECONDS}function pv(t,e,n){t.authorization_endpoint=e.authorization_endpoint,t.token_endpoint=e.token_endpoint,t.end_session_endpoint=e.end_session_endpoint,t.issuer=e.issuer,t.endpointsFromNetwork=n,t.jwks_uri=e.jwks_uri}function FS(t,e,n){t.aliases=e.aliases,t.preferred_cache=e.preferred_cache,t.preferred_network=e.preferred_network,t.aliasesFromNetwork=n}function NI(t){return t.expiresAt<=Li()}/*! @azure/msal-common v15.10.0 2025-08-05 */class Jr{constructor(e,n,r,i,s,o,c,l){this.canonicalAuthority=e,this._canonicalAuthority.validateAsUri(),this.networkInterface=n,this.cacheManager=r,this.authorityOptions=i,this.regionDiscoveryMetadata={region_used:void 0,region_source:void 0,region_outcome:void 0},this.logger=s,this.performanceClient=c,this.correlationId=o,this.managedIdentity=l||!1,this.regionDiscovery=new T0(n,this.logger,this.performanceClient,this.correlationId)}getAuthorityType(e){if(e.HostNameAndPort.endsWith(ve.CIAM_AUTH_URL))return Bs.Ciam;const n=e.PathSegments;if(n.length)switch(n[0].toLowerCase()){case ve.ADFS:return Bs.Adfs;case ve.DSTS:return Bs.Dsts}return Bs.Default}get authorityType(){return this.getAuthorityType(this.canonicalAuthorityUrlComponents)}get protocolMode(){return this.authorityOptions.protocolMode}get options(){return this.authorityOptions}get canonicalAuthority(){return this._canonicalAuthority.urlString}set canonicalAuthority(e){this._canonicalAuthority=new en(e),this._canonicalAuthority.validateAsUri(),this._canonicalAuthorityUrlComponents=null}get canonicalAuthorityUrlComponents(){return this._canonicalAuthorityUrlComponents||(this._canonicalAuthorityUrlComponents=this._canonicalAuthority.getUrlComponents()),this._canonicalAuthorityUrlComponents}get hostnameAndPort(){return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase()}get tenant(){return this.canonicalAuthorityUrlComponents.PathSegments[0]}get authorizationEndpoint(){if(this.discoveryComplete())return this.replacePath(this.metadata.authorization_endpoint);throw _e(ua)}get tokenEndpoint(){if(this.discoveryComplete())return this.replacePath(this.metadata.token_endpoint);throw _e(ua)}get deviceCodeEndpoint(){if(this.discoveryComplete())return this.replacePath(this.metadata.token_endpoint.replace("/token","/devicecode"));throw _e(ua)}get endSessionEndpoint(){if(this.discoveryComplete()){if(!this.metadata.end_session_endpoint)throw _e(tU);return this.replacePath(this.metadata.end_session_endpoint)}else throw _e(ua)}get selfSignedJwtAudience(){if(this.discoveryComplete())return this.replacePath(this.metadata.issuer);throw _e(ua)}get jwksUri(){if(this.discoveryComplete())return this.replacePath(this.metadata.jwks_uri);throw _e(ua)}canReplaceTenant(e){return e.PathSegments.length===1&&!Jr.reservedTenantDomains.has(e.PathSegments[0])&&this.getAuthorityType(e)===Bs.Default&&this.protocolMode!==$i.OIDC}replaceTenant(e){return e.replace(/{tenant}|{tenantid}/g,this.tenant)}replacePath(e){let n=e;const i=new en(this.metadata.canonical_authority).getUrlComponents(),s=i.PathSegments;return this.canonicalAuthorityUrlComponents.PathSegments.forEach((c,l)=>{let u=s[l];if(l===0&&this.canReplaceTenant(i)){const d=new en(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0];u!==d&&(this.logger.verbose(`Replacing tenant domain name ${u} with id ${d}`),u=d)}c!==u&&(n=n.replace(`/${u}/`,`/${c}/`))}),this.replaceTenant(n)}get defaultOpenIdConfigurationEndpoint(){const e=this.hostnameAndPort;return this.canonicalAuthority.endsWith("v2.0/")||this.authorityType===Bs.Adfs||this.protocolMode===$i.OIDC&&!this.isAliasOfKnownMicrosoftAuthority(e)?`${this.canonicalAuthority}.well-known/openid-configuration`:`${this.canonicalAuthority}v2.0/.well-known/openid-configuration`}discoveryComplete(){return!!this.metadata}async resolveEndpointsAsync(){var i,s;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityResolveEndpointsAsync,this.correlationId);const e=this.getCurrentMetadataEntity(),n=await ge(this.updateCloudDiscoveryMetadata.bind(this),W.AuthorityUpdateCloudDiscoveryMetadata,this.logger,this.performanceClient,this.correlationId)(e);this.canonicalAuthority=this.canonicalAuthority.replace(this.hostnameAndPort,e.preferred_network);const r=await ge(this.updateEndpointMetadata.bind(this),W.AuthorityUpdateEndpointMetadata,this.logger,this.performanceClient,this.correlationId)(e);this.updateCachedMetadata(e,n,{source:r}),(s=this.performanceClient)==null||s.addFields({cloudDiscoverySource:n,authorityEndpointSource:r},this.correlationId)}getCurrentMetadataEntity(){let e=this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);return e||(e={aliases:[],preferred_cache:this.hostnameAndPort,preferred_network:this.hostnameAndPort,canonical_authority:this.canonicalAuthority,authorization_endpoint:"",token_endpoint:"",end_session_endpoint:"",issuer:"",aliasesFromNetwork:!1,endpointsFromNetwork:!1,expiresAt:EI(),jwks_uri:""}),e}updateCachedMetadata(e,n,r){n!==Hi.CACHE&&(r==null?void 0:r.source)!==Hi.CACHE&&(e.expiresAt=EI(),e.canonical_authority=this.canonicalAuthority);const i=this.cacheManager.generateAuthorityMetadataCacheKey(e.preferred_cache);this.cacheManager.setAuthorityMetadata(i,e),this.metadata=e}async updateEndpointMetadata(e){var i,s,o;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityUpdateEndpointMetadata,this.correlationId);const n=this.updateEndpointMetadataFromLocalSources(e);if(n){if(n.source===Hi.HARDCODED_VALUES&&(s=this.authorityOptions.azureRegionConfiguration)!=null&&s.azureRegion&&n.metadata){const c=await ge(this.updateMetadataWithRegionalInformation.bind(this),W.AuthorityUpdateMetadataWithRegionalInformation,this.logger,this.performanceClient,this.correlationId)(n.metadata);pv(e,c,!1),e.canonical_authority=this.canonicalAuthority}return n.source}let r=await ge(this.getEndpointMetadataFromNetwork.bind(this),W.AuthorityGetEndpointMetadataFromNetwork,this.logger,this.performanceClient,this.correlationId)();if(r)return(o=this.authorityOptions.azureRegionConfiguration)!=null&&o.azureRegion&&(r=await ge(this.updateMetadataWithRegionalInformation.bind(this),W.AuthorityUpdateMetadataWithRegionalInformation,this.logger,this.performanceClient,this.correlationId)(r)),pv(e,r,!0),Hi.NETWORK;throw _e(H5,this.defaultOpenIdConfigurationEndpoint)}updateEndpointMetadataFromLocalSources(e){this.logger.verbose("Attempting to get endpoint metadata from authority configuration");const n=this.getEndpointMetadataFromConfig();if(n)return this.logger.verbose("Found endpoint metadata in authority configuration"),pv(e,n,!1),{source:Hi.CONFIG};if(this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values."),this.authorityOptions.skipAuthorityMetadataCache)this.logger.verbose("Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache.");else{const i=this.getEndpointMetadataFromHardcodedValues();if(i)return pv(e,i,!1),{source:Hi.HARDCODED_VALUES,metadata:i};this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.")}const r=NI(e);return this.isAuthoritySameType(e)&&e.endpointsFromNetwork&&!r?(this.logger.verbose("Found endpoint metadata in the cache."),{source:Hi.CACHE}):(r&&this.logger.verbose("The metadata entity is expired."),null)}isAuthoritySameType(e){return new en(e.canonical_authority).getUrlComponents().PathSegments.length===this.canonicalAuthorityUrlComponents.PathSegments.length}getEndpointMetadataFromConfig(){if(this.authorityOptions.authorityMetadata)try{return JSON.parse(this.authorityOptions.authorityMetadata)}catch{throw jn(lU)}return null}async getEndpointMetadataFromNetwork(){var r;(r=this.performanceClient)==null||r.addQueueMeasurement(W.AuthorityGetEndpointMetadataFromNetwork,this.correlationId);const e={},n=this.defaultOpenIdConfigurationEndpoint;this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${n}`);try{const i=await this.networkInterface.sendGetRequestAsync(n,e);return jne(i.body)?i.body:(this.logger.verbose("Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration"),null)}catch(i){return this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: ${i}`),null}}getEndpointMetadataFromHardcodedValues(){return this.hostnameAndPort in xI?xI[this.hostnameAndPort]:null}async updateMetadataWithRegionalInformation(e){var r,i,s;(r=this.performanceClient)==null||r.addQueueMeasurement(W.AuthorityUpdateMetadataWithRegionalInformation,this.correlationId);const n=(i=this.authorityOptions.azureRegionConfiguration)==null?void 0:i.azureRegion;if(n){if(n!==ve.AZURE_REGION_AUTO_DISCOVER_FLAG)return this.regionDiscoveryMetadata.region_outcome=$S.CONFIGURED_NO_AUTO_DETECTION,this.regionDiscoveryMetadata.region_used=n,Jr.replaceWithRegionalInformation(e,n);const o=await ge(this.regionDiscovery.detectRegion.bind(this.regionDiscovery),W.RegionDiscoveryDetectRegion,this.logger,this.performanceClient,this.correlationId)((s=this.authorityOptions.azureRegionConfiguration)==null?void 0:s.environmentRegion,this.regionDiscoveryMetadata);if(o)return this.regionDiscoveryMetadata.region_outcome=$S.AUTO_DETECTION_REQUESTED_SUCCESSFUL,this.regionDiscoveryMetadata.region_used=o,Jr.replaceWithRegionalInformation(e,o);this.regionDiscoveryMetadata.region_outcome=$S.AUTO_DETECTION_REQUESTED_FAILED}return e}async updateCloudDiscoveryMetadata(e){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityUpdateCloudDiscoveryMetadata,this.correlationId);const n=this.updateCloudDiscoveryMetadataFromLocalSources(e);if(n)return n;const r=await ge(this.getCloudDiscoveryMetadataFromNetwork.bind(this),W.AuthorityGetCloudDiscoveryMetadataFromNetwork,this.logger,this.performanceClient,this.correlationId)();if(r)return FS(e,r,!0),Hi.NETWORK;throw jn(uU)}updateCloudDiscoveryMetadataFromLocalSources(e){this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration"),this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities||ve.NOT_APPLICABLE}`),this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata||ve.NOT_APPLICABLE}`),this.logger.verbosePii(`Canonical Authority: ${e.canonical_authority||ve.NOT_APPLICABLE}`);const n=this.getCloudDiscoveryMetadataFromConfig();if(n)return this.logger.verbose("Found cloud discovery metadata in authority configuration"),FS(e,n,!1),Hi.CONFIG;if(this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values."),this.options.skipAuthorityMetadataCache)this.logger.verbose("Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache.");else{const i=yte(this.hostnameAndPort);if(i)return this.logger.verbose("Found cloud discovery metadata from hardcoded values."),FS(e,i,!1),Hi.HARDCODED_VALUES;this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.")}const r=NI(e);return this.isAuthoritySameType(e)&&e.aliasesFromNetwork&&!r?(this.logger.verbose("Found cloud discovery metadata in the cache."),Hi.CACHE):(r&&this.logger.verbose("The metadata entity is expired."),null)}getCloudDiscoveryMetadataFromConfig(){if(this.authorityType===Bs.Ciam)return this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host."),Jr.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);if(this.authorityOptions.cloudDiscoveryMetadata){this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config.");try{this.logger.verbose("Attempting to parse the cloud discovery metadata.");const e=JSON.parse(this.authorityOptions.cloudDiscoveryMetadata),n=tx(e.metadata,this.hostnameAndPort);if(this.logger.verbose("Parsed the cloud discovery metadata."),n)return this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata."),n;this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata.")}catch{throw this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error."),jn(nN)}}return this.isInKnownAuthorities()?(this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host."),Jr.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort)):null}async getCloudDiscoveryMetadataFromNetwork(){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityGetCloudDiscoveryMetadataFromNetwork,this.correlationId);const e=`${ve.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`,n={};let r=null;try{const s=await this.networkInterface.sendGetRequestAsync(e,n);let o,c;if(Ene(s.body))o=s.body,c=o.metadata,this.logger.verbosePii(`tenant_discovery_endpoint is: ${o.tenant_discovery_endpoint}`);else if(Nne(s.body)){if(this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${s.status}`),o=s.body,o.error===ve.INVALID_INSTANCE)return this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance."),null;this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${o.error}`),this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${o.error_description}`),this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []"),c=[]}else return this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse"),null;this.logger.verbose("Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request."),r=tx(c,this.hostnameAndPort)}catch(s){if(s instanceof Cn)this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata. -Error: ${s.errorCode} -Error Description: ${s.errorMessage}`);else{const o=s;this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata. -Error: ${o.name} -Error Description: ${o.message}`)}return null}return r||(this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request."),this.logger.verbose("Creating custom Authority for custom domain scenario."),r=Jr.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort)),r}isInKnownAuthorities(){return this.authorityOptions.knownAuthorities.filter(n=>n&&en.getDomainFromUrl(n).toLowerCase()===this.hostnameAndPort).length>0}static generateAuthority(e,n){let r;if(n&&n.azureCloudInstance!==ZE.None){const i=n.tenant?n.tenant:ve.DEFAULT_COMMON_TENANT;r=`${n.azureCloudInstance}/${i}/`}return r||e}static createCloudDiscoveryMetadataFromHost(e){return{preferred_network:e,preferred_cache:e,aliases:[e]}}getPreferredCache(){if(this.managedIdentity)return ve.DEFAULT_AUTHORITY_HOST;if(this.discoveryComplete())return this.metadata.preferred_cache;throw _e(ua)}isAlias(e){return this.metadata.aliases.indexOf(e)>-1}isAliasOfKnownMicrosoftAuthority(e){return bU.has(e)}static isPublicCloudAuthority(e){return ve.KNOWN_PUBLIC_CLOUDS.indexOf(e)>=0}static buildRegionalAuthorityString(e,n,r){const i=new en(e);i.validateAsUri();const s=i.getUrlComponents();let o=`${n}.${s.HostNameAndPort}`;this.isPublicCloudAuthority(s.HostNameAndPort)&&(o=`${n}.${ve.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`);const c=en.constructAuthorityUriFromObject({...i.getUrlComponents(),HostNameAndPort:o}).urlString;return r?`${c}?${r}`:c}static replaceWithRegionalInformation(e,n){const r={...e};return r.authorization_endpoint=Jr.buildRegionalAuthorityString(r.authorization_endpoint,n),r.token_endpoint=Jr.buildRegionalAuthorityString(r.token_endpoint,n),r.end_session_endpoint&&(r.end_session_endpoint=Jr.buildRegionalAuthorityString(r.end_session_endpoint,n)),r}static transformCIAMAuthority(e){let n=e;const i=new en(e).getUrlComponents();if(i.PathSegments.length===0&&i.HostNameAndPort.endsWith(ve.CIAM_AUTH_URL)){const s=i.HostNameAndPort.split(".")[0];n=`${n}${s}${ve.AAD_TENANT_DOMAIN_SUFFIX}`}return n}}Jr.reservedTenantDomains=new Set(["{tenant}","{tenantid}",Ic.COMMON,Ic.CONSUMERS,Ic.ORGANIZATIONS]);function $ne(t){var i;const r=(i=new en(t).getUrlComponents().PathSegments.slice(-1)[0])==null?void 0:i.toLowerCase();switch(r){case Ic.COMMON:case Ic.ORGANIZATIONS:case Ic.CONSUMERS:return;default:return r}}function LU(t){return t.endsWith(ve.FORWARD_SLASH)?t:`${t}${ve.FORWARD_SLASH}`}function Lne(t){const e=t.cloudDiscoveryMetadata;let n;if(e)try{n=JSON.parse(e)}catch{throw jn(nN)}return{canonicalAuthority:t.authority?LU(t.authority):void 0,knownAuthorities:t.knownAuthorities,cloudDiscoveryMetadata:n}}/*! @azure/msal-common v15.10.0 2025-08-05 */async function FU(t,e,n,r,i,s,o){o==null||o.addQueueMeasurement(W.AuthorityFactoryCreateDiscoveredInstance,s);const c=Jr.transformCIAMAuthority(LU(t)),l=new Jr(c,e,n,r,i,s,o);try{return await ge(l.resolveEndpointsAsync.bind(l),W.AuthorityResolveEndpointsAsync,i,o,s)(),l}catch{throw _e(ua)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Tu extends Cn{constructor(e,n,r,i,s){super(e,n,r),this.name="ServerError",this.errorNo=i,this.status=s,Object.setPrototypeOf(this,Tu.prototype)}}/*! @azure/msal-common v15.10.0 2025-08-05 */function O0(t,e,n){var r;return{clientId:t,authority:e.authority,scopes:e.scopes,homeAccountIdentifier:n,claims:e.claims,authenticationScheme:e.authenticationScheme,resourceRequestMethod:e.resourceRequestMethod,resourceRequestUri:e.resourceRequestUri,shrClaims:e.shrClaims,sshKid:e.sshKid,embeddedClientId:e.embeddedClientId||((r=e.tokenBodyParameters)==null?void 0:r.clientId)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class To{static generateThrottlingStorageKey(e){return`${ap.THROTTLING_PREFIX}.${JSON.stringify(e)}`}static preProcess(e,n,r){var o;const i=To.generateThrottlingStorageKey(n),s=e.getThrottlingCache(i);if(s){if(s.throttleTime=500&&e.status<600}static checkResponseForRetryAfter(e){return e.headers?e.headers.hasOwnProperty(di.RETRY_AFTER)&&(e.status<200||e.status>=300):!1}static calculateThrottleTime(e){const n=e<=0?0:e,r=Date.now()/1e3;return Math.floor(Math.min(r+(n||ap.DEFAULT_THROTTLE_TIME_SECONDS),r+ap.DEFAULT_MAX_THROTTLE_TIME_SECONDS)*1e3)}static removeThrottle(e,n,r,i){const s=O0(n,r,i),o=this.generateThrottlingStorageKey(s);e.removeItem(o,r.correlationId)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class I0 extends Cn{constructor(e,n,r){super(e.errorCode,e.errorMessage,e.subError),Object.setPrototypeOf(this,I0.prototype),this.name="NetworkError",this.error=e,this.httpStatus=n,this.responseHeaders=r}}function zh(t,e,n,r){return t.errorMessage=`${t.errorMessage}, additionalErrorInfo: error.name:${r==null?void 0:r.name}, error.message:${r==null?void 0:r.message}`,new I0(t,e,n)}/*! @azure/msal-common v15.10.0 2025-08-05 */class xN{constructor(e,n){this.config=Nte(e),this.logger=new Ma(this.config.loggerOptions,nU,JE),this.cryptoUtils=this.config.cryptoInterface,this.cacheManager=this.config.storageInterface,this.networkClient=this.config.networkInterface,this.serverTelemetryManager=this.config.serverTelemetryManager,this.authority=this.config.authOptions.authority,this.performanceClient=n}createTokenRequestHeaders(e){const n={};if(n[di.CONTENT_TYPE]=ve.URL_FORM_CONTENT_TYPE,!this.config.systemOptions.preventCorsPreflight&&e)switch(e.type){case Ws.HOME_ACCOUNT_ID:try{const r=Sd(e.credential);n[di.CCS_HEADER]=`Oid:${r.uid}@${r.utid}`}catch(r){this.logger.verbose("Could not parse home account ID for CCS Header: "+r)}break;case Ws.UPN:n[di.CCS_HEADER]=`UPN: ${e.credential}`;break}return n}async executePostToTokenEndpoint(e,n,r,i,s,o){var l;o&&((l=this.performanceClient)==null||l.addQueueMeasurement(o,s));const c=await this.sendPostRequest(i,e,{body:n,headers:r},s);return this.config.serverTelemetryManager&&c.status<500&&c.status!==429&&this.config.serverTelemetryManager.clearTelemetryCache(),c}async sendPostRequest(e,n,r,i){var o,c,l;To.preProcess(this.cacheManager,e,i);let s;try{s=await ge(this.networkClient.sendPostRequestAsync.bind(this.networkClient),W.NetworkClientSendPostRequestAsync,this.logger,this.performanceClient,i)(n,r);const u=s.headers||{};(c=this.performanceClient)==null||c.addFields({refreshTokenSize:((o=s.body.refresh_token)==null?void 0:o.length)||0,httpVerToken:u[di.X_MS_HTTP_VERSION]||"",requestId:u[di.X_MS_REQUEST_ID]||""},i)}catch(u){if(u instanceof I0){const d=u.responseHeaders;throw d&&((l=this.performanceClient)==null||l.addFields({httpVerToken:d[di.X_MS_HTTP_VERSION]||"",requestId:d[di.X_MS_REQUEST_ID]||"",contentTypeHeader:d[di.CONTENT_TYPE]||void 0,contentLengthHeader:d[di.CONTENT_LENGTH]||void 0,httpStatus:u.httpStatus},i)),u.error}throw u instanceof Cn?u:_e(B5)}return To.postProcess(this.cacheManager,e,s,i),s}async updateAuthority(e,n){var s;(s=this.performanceClient)==null||s.addQueueMeasurement(W.UpdateTokenEndpointAuthority,n);const r=`https://${e}/${this.authority.tenant}/`,i=await FU(r,this.networkClient,this.cacheManager,this.authority.options,this.logger,n,this.performanceClient);this.authority=i}createTokenQueryParameters(e){const n=new Map;return e.embeddedClientId&&N0(n,this.config.authOptions.clientId,this.config.authOptions.redirectUri),e.tokenQueryParameters&&Mc(n,e.tokenQueryParameters),hN(n,e.correlationId),E0(n,e.correlationId,this.performanceClient),Xp(n)}}/*! @azure/msal-common v15.10.0 2025-08-05 */function UU(t){return t&&(t.tid||t.tfp||t.acr)||null}/*! @azure/msal-common v15.10.0 2025-08-05 */class co{getAccountInfo(){return{homeAccountId:this.homeAccountId,environment:this.environment,tenantId:this.realm,username:this.username,localAccountId:this.localAccountId,loginHint:this.loginHint,name:this.name,nativeAccountId:this.nativeAccountId,authorityType:this.authorityType,tenantProfiles:new Map((this.tenantProfiles||[]).map(e=>[e.tenantId,e]))}}isSingleTenant(){return!this.tenantProfiles}static createAccount(e,n,r){var u,d,f,h,p,g,m;const i=new co;n.authorityType===Bs.Adfs?i.authorityType=fv.ADFS_ACCOUNT_TYPE:n.protocolMode===$i.OIDC?i.authorityType=fv.GENERIC_ACCOUNT_TYPE:i.authorityType=fv.MSSTS_ACCOUNT_TYPE;let s;e.clientInfo&&r&&(s=rx(e.clientInfo,r)),i.clientInfo=e.clientInfo,i.homeAccountId=e.homeAccountId,i.nativeAccountId=e.nativeAccountId;const o=e.environment||n&&n.getPreferredCache();if(!o)throw _e(YE);i.environment=o,i.realm=(s==null?void 0:s.utid)||UU(e.idTokenClaims)||"",i.localAccountId=(s==null?void 0:s.uid)||((u=e.idTokenClaims)==null?void 0:u.oid)||((d=e.idTokenClaims)==null?void 0:d.sub)||"";const c=((f=e.idTokenClaims)==null?void 0:f.preferred_username)||((h=e.idTokenClaims)==null?void 0:h.upn),l=(p=e.idTokenClaims)!=null&&p.emails?e.idTokenClaims.emails[0]:null;if(i.username=c||l||"",i.loginHint=(g=e.idTokenClaims)==null?void 0:g.login_hint,i.name=((m=e.idTokenClaims)==null?void 0:m.name)||"",i.cloudGraphHostName=e.cloudGraphHostName,i.msGraphHost=e.msGraphHost,e.tenantProfiles)i.tenantProfiles=e.tenantProfiles;else{const y=iN(e.homeAccountId,i.localAccountId,i.realm,e.idTokenClaims);i.tenantProfiles=[y]}return i}static createFromAccountInfo(e,n,r){var s;const i=new co;return i.authorityType=e.authorityType||fv.GENERIC_ACCOUNT_TYPE,i.homeAccountId=e.homeAccountId,i.localAccountId=e.localAccountId,i.nativeAccountId=e.nativeAccountId,i.realm=e.tenantId,i.environment=e.environment,i.username=e.username,i.name=e.name,i.loginHint=e.loginHint,i.cloudGraphHostName=n,i.msGraphHost=r,i.tenantProfiles=Array.from(((s=e.tenantProfiles)==null?void 0:s.values())||[]),i}static generateHomeAccountId(e,n,r,i,s){if(!(n===Bs.Adfs||n===Bs.Dsts)){if(e)try{const o=rx(e,i.base64Decode);if(o.uid&&o.utid)return`${o.uid}.${o.utid}`}catch{}r.warning("No client info in response")}return(s==null?void 0:s.sub)||""}static isAccountEntity(e){return e?e.hasOwnProperty("homeAccountId")&&e.hasOwnProperty("environment")&&e.hasOwnProperty("realm")&&e.hasOwnProperty("localAccountId")&&e.hasOwnProperty("username")&&e.hasOwnProperty("authorityType"):!1}static accountInfoIsEqual(e,n,r){if(!e||!n)return!1;let i=!0;if(r){const s=e.idTokenClaims||{},o=n.idTokenClaims||{};i=s.iat===o.iat&&s.nonce===o.nonce}return e.homeAccountId===n.homeAccountId&&e.localAccountId===n.localAccountId&&e.username===n.username&&e.tenantId===n.tenantId&&e.loginHint===n.loginHint&&e.environment===n.environment&&e.nativeAccountId===n.nativeAccountId&&i}}/*! @azure/msal-common v15.10.0 2025-08-05 */const cx="no_tokens_found",BU="native_account_unavailable",bN="refresh_token_expired",wN="ux_not_allowed",Fne="interaction_required",Une="consent_required",Bne="login_required",R0="bad_token";/*! @azure/msal-common v15.10.0 2025-08-05 */const TI=[Fne,Une,Bne,R0,wN],Hne=["message_only","additional_action","basic_action","user_password_expired","consent_required","bad_token"],zne={[cx]:"No refresh token found in the cache. Please sign-in.",[BU]:"The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.",[bN]:"Refresh token has expired.",[R0]:"Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.",[wN]:"`canShowUI` flag in Edge was set to false. User interaction required on web page. Please invoke an interactive API to resolve."};class lo extends Cn{constructor(e,n,r,i,s,o,c,l){super(e,n,r),Object.setPrototypeOf(this,lo.prototype),this.timestamp=i||ve.EMPTY_STRING,this.traceId=s||ve.EMPTY_STRING,this.correlationId=o||ve.EMPTY_STRING,this.claims=c||ve.EMPTY_STRING,this.name="InteractionRequiredAuthError",this.errorNo=l}}function HU(t,e,n){const r=!!t&&TI.indexOf(t)>-1,i=!!n&&Hne.indexOf(n)>-1,s=!!e&&TI.some(o=>e.indexOf(o)>-1);return r||s||i}function lx(t){return new lo(t,zne[t])}/*! @azure/msal-common v15.10.0 2025-08-05 */class Hf{static setRequestState(e,n,r){const i=Hf.generateLibraryState(e,r);return n?`${i}${ve.RESOURCE_DELIM}${n}`:i}static generateLibraryState(e,n){if(!e)throw _e(n1);const r={id:e.createNewGuid()};n&&(r.meta=n);const i=JSON.stringify(r);return e.base64Encode(i)}static parseRequestState(e,n){if(!e)throw _e(n1);if(!n)throw _e(Qd);try{const r=n.split(ve.RESOURCE_DELIM),i=r[0],s=r.length>1?r.slice(1).join(ve.RESOURCE_DELIM):ve.EMPTY_STRING,o=e.base64Decode(i),c=JSON.parse(o);return{userRequestState:s||ve.EMPTY_STRING,libraryState:c}}catch{throw _e(Qd)}}}/*! @azure/msal-common v15.10.0 2025-08-05 */const Vne={SW:"sw"};class Xd{constructor(e,n){this.cryptoUtils=e,this.performanceClient=n}async generateCnf(e,n){var s;(s=this.performanceClient)==null||s.addQueueMeasurement(W.PopTokenGenerateCnf,e.correlationId);const r=await ge(this.generateKid.bind(this),W.PopTokenGenerateCnf,n,this.performanceClient,e.correlationId)(e),i=this.cryptoUtils.base64UrlEncode(JSON.stringify(r));return{kid:r.kid,reqCnfString:i}}async generateKid(e){var r;return(r=this.performanceClient)==null||r.addQueueMeasurement(W.PopTokenGenerateKid,e.correlationId),{kid:await this.cryptoUtils.getPublicKeyThumbprint(e),xms_ksl:Vne.SW}}async signPopToken(e,n,r){return this.signPayload(e,n,r)}async signPayload(e,n,r,i){const{resourceRequestMethod:s,resourceRequestUri:o,shrClaims:c,shrNonce:l,shrOptions:u}=r,d=o?new en(o):void 0,f=d==null?void 0:d.getUrlComponents();return this.cryptoUtils.signJwt({at:e,ts:Li(),m:s==null?void 0:s.toUpperCase(),u:f==null?void 0:f.HostNameAndPort,nonce:l||this.cryptoUtils.createNewGuid(),p:f==null?void 0:f.AbsolutePath,q:f!=null&&f.QueryString?[[],f.QueryString]:void 0,client_claims:c||void 0,...i},n,u,r.correlationId)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Gne{constructor(e,n){this.cache=e,this.hasChanged=n}get cacheHasChanged(){return this.hasChanged}get tokenCache(){return this.cache}}/*! @azure/msal-common v15.10.0 2025-08-05 */class pu{constructor(e,n,r,i,s,o,c){this.clientId=e,this.cacheStorage=n,this.cryptoObj=r,this.logger=i,this.serializableCache=s,this.persistencePlugin=o,this.performanceClient=c}validateTokenResponse(e,n){var r;if(e.error||e.error_description||e.suberror){const i=`Error(s): ${e.error_codes||ve.NOT_AVAILABLE} - Timestamp: ${e.timestamp||ve.NOT_AVAILABLE} - Description: ${e.error_description||ve.NOT_AVAILABLE} - Correlation ID: ${e.correlation_id||ve.NOT_AVAILABLE} - Trace ID: ${e.trace_id||ve.NOT_AVAILABLE}`,s=(r=e.error_codes)!=null&&r.length?e.error_codes[0]:void 0,o=new Tu(e.error,i,e.suberror,s,e.status);if(n&&e.status&&e.status>=bc.SERVER_ERROR_RANGE_START&&e.status<=bc.SERVER_ERROR_RANGE_END){this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed. -${o}`);return}else if(n&&e.status&&e.status>=bc.CLIENT_ERROR_RANGE_START&&e.status<=bc.CLIENT_ERROR_RANGE_END){this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token. -${o}`);return}throw HU(e.error,e.error_description,e.suberror)?new lo(e.error,e.error_description,e.suberror,e.timestamp||ve.EMPTY_STRING,e.trace_id||ve.EMPTY_STRING,e.correlation_id||ve.EMPTY_STRING,e.claims||ve.EMPTY_STRING,s):o}}async handleServerTokenResponse(e,n,r,i,s,o,c,l,u){var g;(g=this.performanceClient)==null||g.addQueueMeasurement(W.HandleServerTokenResponse,e.correlation_id);let d;if(e.id_token){if(d=Bf(e.id_token||ve.EMPTY_STRING,this.cryptoObj.base64Decode),s&&s.nonce&&d.nonce!==s.nonce)throw _e(G5);if(i.maxAge||i.maxAge===0){const m=d.auth_time;if(!m)throw _e(WE);vU(m,i.maxAge)}}this.homeAccountIdentifier=co.generateHomeAccountId(e.client_info||ve.EMPTY_STRING,n.authorityType,this.logger,this.cryptoObj,d);let f;s&&s.state&&(f=Hf.parseRequestState(this.cryptoObj,s.state)),e.key_id=e.key_id||i.sshKid||void 0;const h=this.generateCacheRecord(e,n,r,i,d,o,s);let p;try{if(this.persistencePlugin&&this.serializableCache&&(this.logger.verbose("Persistence enabled, calling beforeCacheAccess"),p=new Gne(this.serializableCache,!0),await this.persistencePlugin.beforeCacheAccess(p)),c&&!l&&h.account){const m=this.cacheStorage.generateAccountKey(h.account.getAccountInfo());if(!this.cacheStorage.getAccount(m,i.correlationId))return this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache"),await pu.generateAuthenticationResult(this.cryptoObj,n,h,!1,i,d,f,void 0,u)}await this.cacheStorage.saveCacheRecord(h,i.correlationId,i.storeInCache)}finally{this.persistencePlugin&&this.serializableCache&&p&&(this.logger.verbose("Persistence enabled, calling afterCacheAccess"),await this.persistencePlugin.afterCacheAccess(p))}return pu.generateAuthenticationResult(this.cryptoObj,n,h,!1,i,d,f,e,u)}generateCacheRecord(e,n,r,i,s,o,c){const l=n.getPreferredCache();if(!l)throw _e(YE);const u=UU(s);let d,f;e.id_token&&s&&(d=P0(this.homeAccountIdentifier,l,e.id_token,this.clientId,u||""),f=SN(this.cacheStorage,n,this.homeAccountIdentifier,this.cryptoObj.base64Decode,i.correlationId,s,e.client_info,l,u,c,void 0,this.logger));let h=null;if(e.access_token){const m=e.scope?Ar.fromString(e.scope):new Ar(i.scopes||[]),y=(typeof e.expires_in=="string"?parseInt(e.expires_in,10):e.expires_in)||0,b=(typeof e.ext_expires_in=="string"?parseInt(e.ext_expires_in,10):e.ext_expires_in)||0,x=(typeof e.refresh_in=="string"?parseInt(e.refresh_in,10):e.refresh_in)||void 0,w=r+y,S=w+b,C=x&&x>0?r+x:void 0;h=k0(this.homeAccountIdentifier,l,e.access_token,this.clientId,u||n.tenant||"",m.printScopes(),w,S,this.cryptoObj.base64Decode,C,e.token_type,o,e.key_id,i.claims,i.requestedClaimsHash)}let p=null;if(e.refresh_token){let m;if(e.refresh_token_expires_in){const y=typeof e.refresh_token_expires_in=="string"?parseInt(e.refresh_token_expires_in,10):e.refresh_token_expires_in;m=r+y}p=$U(this.homeAccountIdentifier,l,e.refresh_token,this.clientId,e.foci,o,m)}let g=null;return e.foci&&(g={clientId:this.clientId,environment:l,familyId:e.foci}),{account:f,idToken:d,accessToken:h,refreshToken:p,appMetadata:g}}static async generateAuthenticationResult(e,n,r,i,s,o,c,l,u){var w,S,C,_,A;let d=ve.EMPTY_STRING,f=[],h=null,p,g,m=ve.EMPTY_STRING;if(r.accessToken){if(r.accessToken.tokenType===yn.POP&&!s.popKid){const j=new Xd(e),{secret:P,keyId:k}=r.accessToken;if(!k)throw _e(QE);d=await j.signPopToken(P,k,s)}else d=r.accessToken.secret;f=Ar.fromString(r.accessToken.target).asArray(),h=Cd(r.accessToken.expiresOn),p=Cd(r.accessToken.extendedExpiresOn),r.accessToken.refreshOn&&(g=Cd(r.accessToken.refreshOn))}r.appMetadata&&(m=r.appMetadata.familyId===Qy?Qy:"");const y=(o==null?void 0:o.oid)||(o==null?void 0:o.sub)||"",b=(o==null?void 0:o.tid)||"";l!=null&&l.spa_accountid&&r.account&&(r.account.nativeAccountId=l==null?void 0:l.spa_accountid);const x=r.account?sN(r.account.getAccountInfo(),void 0,o,(w=r.idToken)==null?void 0:w.secret):null;return{authority:n.canonicalAuthority,uniqueId:y,tenantId:b,scopes:f,account:x,idToken:((S=r==null?void 0:r.idToken)==null?void 0:S.secret)||"",idTokenClaims:o||{},accessToken:d,fromCache:i,expiresOn:h,extExpiresOn:p,refreshOn:g,correlationId:s.correlationId,requestId:u||ve.EMPTY_STRING,familyId:m,tokenType:((C=r.accessToken)==null?void 0:C.tokenType)||ve.EMPTY_STRING,state:c?c.userRequestState:ve.EMPTY_STRING,cloudGraphHostName:((_=r.account)==null?void 0:_.cloudGraphHostName)||ve.EMPTY_STRING,msGraphHost:((A=r.account)==null?void 0:A.msGraphHost)||ve.EMPTY_STRING,code:l==null?void 0:l.spa_code,fromNativeBroker:!1}}}function SN(t,e,n,r,i,s,o,c,l,u,d,f){f==null||f.verbose("setCachedAccount called");const p=t.getAccountKeys().find(x=>x.startsWith(n));let g=null;p&&(g=t.getAccount(p,i));const m=g||co.createAccount({homeAccountId:n,idTokenClaims:s,clientInfo:o,environment:c,cloudGraphHostName:u==null?void 0:u.cloud_graph_host_name,msGraphHost:u==null?void 0:u.msgraph_host,nativeAccountId:d},e,r),y=m.tenantProfiles||[],b=l||m.realm;if(b&&!y.find(x=>x.tenantId===b)){const x=iN(n,m.localAccountId,b,s);y.push(x)}return m.tenantProfiles=y,m}/*! @azure/msal-common v15.10.0 2025-08-05 */async function zU(t,e,n){return typeof t=="string"?t:t({clientId:e,tokenEndpoint:n})}/*! @azure/msal-common v15.10.0 2025-08-05 */class VU extends xN{constructor(e,n){var r;super(e,n),this.includeRedirectUri=!0,this.oidcDefaultScopes=(r=this.config.authOptions.authority.options.OIDCOptions)==null?void 0:r.defaultScopes}async acquireToken(e,n){var c,l;if((c=this.performanceClient)==null||c.addQueueMeasurement(W.AuthClientAcquireToken,e.correlationId),!e.code)throw _e(q5);const r=Li(),i=await ge(this.executeTokenRequest.bind(this),W.AuthClientExecuteTokenRequest,this.logger,this.performanceClient,e.correlationId)(this.authority,e),s=(l=i.headers)==null?void 0:l[di.X_MS_REQUEST_ID],o=new pu(this.config.authOptions.clientId,this.cacheManager,this.cryptoUtils,this.logger,this.config.serializableCache,this.config.persistencePlugin,this.performanceClient);return o.validateTokenResponse(i.body),ge(o.handleServerTokenResponse.bind(o),W.HandleServerTokenResponse,this.logger,this.performanceClient,e.correlationId)(i.body,this.authority,r,e,n,void 0,void 0,void 0,s)}getLogoutUri(e){if(!e)throw jn(cU);const n=this.createLogoutUrlQueryString(e);return en.appendQueryString(this.authority.endSessionEndpoint,n)}async executeTokenRequest(e,n){var u;(u=this.performanceClient)==null||u.addQueueMeasurement(W.AuthClientExecuteTokenRequest,n.correlationId);const r=this.createTokenQueryParameters(n),i=en.appendQueryString(e.tokenEndpoint,r),s=await ge(this.createTokenRequestBody.bind(this),W.AuthClientCreateTokenRequestBody,this.logger,this.performanceClient,n.correlationId)(n);let o;if(n.clientInfo)try{const d=rx(n.clientInfo,this.cryptoUtils.base64Decode);o={credential:`${d.uid}${Qp.CLIENT_INFO_SEPARATOR}${d.utid}`,type:Ws.HOME_ACCOUNT_ID}}catch(d){this.logger.verbose("Could not parse client info for CCS Header: "+d)}const c=this.createTokenRequestHeaders(o||n.ccsCredential),l=O0(this.config.authOptions.clientId,n);return ge(this.executePostToTokenEndpoint.bind(this),W.AuthorizationCodeClientExecutePostToTokenEndpoint,this.logger,this.performanceClient,n.correlationId)(i,s,c,l,n.correlationId,W.AuthorizationCodeClientExecutePostToTokenEndpoint)}async createTokenRequestBody(e){var i,s;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthClientCreateTokenRequestBody,e.correlationId);const n=new Map;if(uN(n,e.embeddedClientId||((s=e.tokenBodyParameters)==null?void 0:s[hu])||this.config.authOptions.clientId),this.includeRedirectUri)dN(n,e.redirectUri);else if(!e.redirectUri)throw jn(rU);if(lN(n,e.scopes,!0,this.oidcDefaultScopes),xne(n,e.code),pN(n,this.config.libraryInfo),mN(n,this.config.telemetry.application),DU(n),this.serverTelemetryManager&&!CU(this.config)&&MU(n,this.serverTelemetryManager),e.codeVerifier&&wne(n,e.codeVerifier),this.config.clientCredentials.clientSecret&&TU(n,this.config.clientCredentials.clientSecret),this.config.clientCredentials.clientAssertion){const o=this.config.clientCredentials.clientAssertion;PU(n,await zU(o.assertion,this.config.authOptions.clientId,e.resourceRequestUri)),kU(n,o.assertionType)}if(OU(n,$5.AUTHORIZATION_CODE_GRANT),gN(n),e.authenticationScheme===yn.POP){const o=new Xd(this.cryptoUtils,this.performanceClient);let c;e.popKid?c=this.cryptoUtils.encodeKid(e.popKid):c=(await ge(o.generateCnf.bind(o),W.PopTokenGenerateCnf,this.logger,this.performanceClient,e.correlationId)(e,this.logger)).reqCnfString,vN(n,c)}else if(e.authenticationScheme===yn.SSH)if(e.sshJwk)RU(n,e.sshJwk);else throw jn(j0);(!$o.isEmptyObj(e.claims)||this.config.authOptions.clientCapabilities&&this.config.authOptions.clientCapabilities.length>0)&&fN(n,e.claims,this.config.authOptions.clientCapabilities);let r;if(e.clientInfo)try{const o=rx(e.clientInfo,this.cryptoUtils.base64Decode);r={credential:`${o.uid}${Qp.CLIENT_INFO_SEPARATOR}${o.utid}`,type:Ws.HOME_ACCOUNT_ID}}catch(o){this.logger.verbose("Could not parse client info for CCS Header: "+o)}else r=e.ccsCredential;if(this.config.systemOptions.preventCorsPreflight&&r)switch(r.type){case Ws.HOME_ACCOUNT_ID:try{const o=Sd(r.credential);cp(n,o)}catch(o){this.logger.verbose("Could not parse home account ID for CCS Header: "+o)}break;case Ws.UPN:ox(n,r.credential);break}return e.embeddedClientId&&N0(n,this.config.authOptions.clientId,this.config.authOptions.redirectUri),e.tokenBodyParameters&&Mc(n,e.tokenBodyParameters),e.enableSpaAuthorizationCode&&(!e.tokenBodyParameters||!e.tokenBodyParameters[SI])&&Mc(n,{[SI]:"1"}),E0(n,e.correlationId,this.performanceClient),Xp(n)}createLogoutUrlQueryString(e){const n=new Map;return e.postLogoutRedirectUri&&pne(n,e.postLogoutRedirectUri),e.correlationId&&hN(n,e.correlationId),e.idTokenHint&&mne(n,e.idTokenHint),e.state&&EU(n,e.state),e.logoutHint&&Cne(n,e.logoutHint),e.extraQueryParameters&&Mc(n,e.extraQueryParameters),this.config.authOptions.instanceAware&&IU(n),Xp(n,this.config.authOptions.encodeExtraQueryParams,e.extraQueryParameters)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const Kne=300;class Wne extends xN{constructor(e,n){super(e,n)}async acquireToken(e){var o,c;(o=this.performanceClient)==null||o.addQueueMeasurement(W.RefreshTokenClientAcquireToken,e.correlationId);const n=Li(),r=await ge(this.executeTokenRequest.bind(this),W.RefreshTokenClientExecuteTokenRequest,this.logger,this.performanceClient,e.correlationId)(e,this.authority),i=(c=r.headers)==null?void 0:c[di.X_MS_REQUEST_ID],s=new pu(this.config.authOptions.clientId,this.cacheManager,this.cryptoUtils,this.logger,this.config.serializableCache,this.config.persistencePlugin);return s.validateTokenResponse(r.body),ge(s.handleServerTokenResponse.bind(s),W.HandleServerTokenResponse,this.logger,this.performanceClient,e.correlationId)(r.body,this.authority,n,e,void 0,void 0,!0,e.forceCache,i)}async acquireTokenByRefreshToken(e){var r;if(!e)throw jn(aU);if((r=this.performanceClient)==null||r.addQueueMeasurement(W.RefreshTokenClientAcquireTokenByRefreshToken,e.correlationId),!e.account)throw _e(qE);if(this.cacheManager.isAppMetadataFOCI(e.account.environment))try{return await ge(this.acquireTokenWithCachedRefreshToken.bind(this),W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,!0)}catch(i){const s=i instanceof lo&&i.errorCode===cx,o=i instanceof Tu&&i.errorCode===mI.INVALID_GRANT_ERROR&&i.subError===mI.CLIENT_MISMATCH_ERROR;if(s||o)return ge(this.acquireTokenWithCachedRefreshToken.bind(this),W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,!1);throw i}return ge(this.acquireTokenWithCachedRefreshToken.bind(this),W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,!1)}async acquireTokenWithCachedRefreshToken(e,n){var s,o,c;(s=this.performanceClient)==null||s.addQueueMeasurement(W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,e.correlationId);const r=es(this.cacheManager.getRefreshToken.bind(this.cacheManager),W.CacheManagerGetRefreshToken,this.logger,this.performanceClient,e.correlationId)(e.account,n,e.correlationId,void 0,this.performanceClient);if(!r)throw lx(cx);if(r.expiresOn&&ax(r.expiresOn,e.refreshTokenExpirationOffsetSeconds||Kne))throw(o=this.performanceClient)==null||o.addFields({rtExpiresOnMs:Number(r.expiresOn)},e.correlationId),lx(bN);const i={...e,refreshToken:r.secret,authenticationScheme:e.authenticationScheme||yn.BEARER,ccsCredential:{credential:e.account.homeAccountId,type:Ws.HOME_ACCOUNT_ID}};try{return await ge(this.acquireToken.bind(this),W.RefreshTokenClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(i)}catch(l){if(l instanceof lo&&((c=this.performanceClient)==null||c.addFields({rtExpiresOnMs:Number(r.expiresOn)},e.correlationId),l.subError===R0)){this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache");const u=this.cacheManager.generateCredentialKey(r);this.cacheManager.removeRefreshToken(u,e.correlationId)}throw l}}async executeTokenRequest(e,n){var l;(l=this.performanceClient)==null||l.addQueueMeasurement(W.RefreshTokenClientExecuteTokenRequest,e.correlationId);const r=this.createTokenQueryParameters(e),i=en.appendQueryString(n.tokenEndpoint,r),s=await ge(this.createTokenRequestBody.bind(this),W.RefreshTokenClientCreateTokenRequestBody,this.logger,this.performanceClient,e.correlationId)(e),o=this.createTokenRequestHeaders(e.ccsCredential),c=O0(this.config.authOptions.clientId,e);return ge(this.executePostToTokenEndpoint.bind(this),W.RefreshTokenClientExecutePostToTokenEndpoint,this.logger,this.performanceClient,e.correlationId)(i,s,o,c,e.correlationId,W.RefreshTokenClientExecutePostToTokenEndpoint)}async createTokenRequestBody(e){var r,i,s;(r=this.performanceClient)==null||r.addQueueMeasurement(W.RefreshTokenClientCreateTokenRequestBody,e.correlationId);const n=new Map;if(uN(n,e.embeddedClientId||((i=e.tokenBodyParameters)==null?void 0:i[hu])||this.config.authOptions.clientId),e.redirectUri&&dN(n,e.redirectUri),lN(n,e.scopes,!0,(s=this.config.authOptions.authority.options.OIDCOptions)==null?void 0:s.defaultScopes),OU(n,$5.REFRESH_TOKEN_GRANT),gN(n),pN(n,this.config.libraryInfo),mN(n,this.config.telemetry.application),DU(n),this.serverTelemetryManager&&!CU(this.config)&&MU(n,this.serverTelemetryManager),bne(n,e.refreshToken),this.config.clientCredentials.clientSecret&&TU(n,this.config.clientCredentials.clientSecret),this.config.clientCredentials.clientAssertion){const o=this.config.clientCredentials.clientAssertion;PU(n,await zU(o.assertion,this.config.authOptions.clientId,e.resourceRequestUri)),kU(n,o.assertionType)}if(e.authenticationScheme===yn.POP){const o=new Xd(this.cryptoUtils,this.performanceClient);let c;e.popKid?c=this.cryptoUtils.encodeKid(e.popKid):c=(await ge(o.generateCnf.bind(o),W.PopTokenGenerateCnf,this.logger,this.performanceClient,e.correlationId)(e,this.logger)).reqCnfString,vN(n,c)}else if(e.authenticationScheme===yn.SSH)if(e.sshJwk)RU(n,e.sshJwk);else throw jn(j0);if((!$o.isEmptyObj(e.claims)||this.config.authOptions.clientCapabilities&&this.config.authOptions.clientCapabilities.length>0)&&fN(n,e.claims,this.config.authOptions.clientCapabilities),this.config.systemOptions.preventCorsPreflight&&e.ccsCredential)switch(e.ccsCredential.type){case Ws.HOME_ACCOUNT_ID:try{const o=Sd(e.ccsCredential.credential);cp(n,o)}catch(o){this.logger.verbose("Could not parse home account ID for CCS Header: "+o)}break;case Ws.UPN:ox(n,e.ccsCredential.credential);break}return e.embeddedClientId&&N0(n,this.config.authOptions.clientId,this.config.authOptions.redirectUri),e.tokenBodyParameters&&Mc(n,e.tokenBodyParameters),E0(n,e.correlationId,this.performanceClient),Xp(n)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class qne extends xN{constructor(e,n){super(e,n)}async acquireCachedToken(e){var l;(l=this.performanceClient)==null||l.addQueueMeasurement(W.SilentFlowClientAcquireCachedToken,e.correlationId);let n=Al.NOT_APPLICABLE;if(e.forceRefresh||!this.config.cacheOptions.claimsBasedCachingEnabled&&!$o.isEmptyObj(e.claims))throw this.setCacheOutcome(Al.FORCE_REFRESH_OR_CLAIMS,e.correlationId),_e(Rc);if(!e.account)throw _e(qE);const r=e.account.tenantId||$ne(e.authority),i=this.cacheManager.getTokenKeys(),s=this.cacheManager.getAccessToken(e.account,e,i,r);if(s){if(Pne(s.cachedAt)||ax(s.expiresOn,this.config.systemOptions.tokenRenewalOffsetSeconds))throw this.setCacheOutcome(Al.CACHED_ACCESS_TOKEN_EXPIRED,e.correlationId),_e(Rc);s.refreshOn&&ax(s.refreshOn,0)&&(n=Al.PROACTIVELY_REFRESHED)}else throw this.setCacheOutcome(Al.NO_CACHED_ACCESS_TOKEN,e.correlationId),_e(Rc);const o=e.authority||this.authority.getPreferredCache(),c={account:this.cacheManager.getAccount(this.cacheManager.generateAccountKey(e.account),e.correlationId),accessToken:s,idToken:this.cacheManager.getIdToken(e.account,e.correlationId,i,r,this.performanceClient),refreshToken:null,appMetadata:this.cacheManager.readAppMetadataFromCache(o)};return this.setCacheOutcome(n,e.correlationId),this.config.serverTelemetryManager&&this.config.serverTelemetryManager.incrementCacheHits(),[await ge(this.generateResultFromCacheRecord.bind(this),W.SilentFlowClientGenerateResultFromCacheRecord,this.logger,this.performanceClient,e.correlationId)(c,e),n]}setCacheOutcome(e,n){var r,i;(r=this.serverTelemetryManager)==null||r.setCacheOutcome(e),(i=this.performanceClient)==null||i.addFields({cacheOutcome:e},n),e!==Al.NOT_APPLICABLE&&this.logger.info(`Token refresh is required due to cache outcome: ${e}`)}async generateResultFromCacheRecord(e,n){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.SilentFlowClientGenerateResultFromCacheRecord,n.correlationId);let r;if(e.idToken&&(r=Bf(e.idToken.secret,this.config.cryptoInterface.base64Decode)),n.maxAge||n.maxAge===0){const s=r==null?void 0:r.auth_time;if(!s)throw _e(WE);vU(s,n.maxAge)}return pu.generateAuthenticationResult(this.cryptoUtils,this.authority,e,!0,n,r)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const Yne={sendGetRequestAsync:()=>Promise.reject(_e(Kt)),sendPostRequestAsync:()=>Promise.reject(_e(Kt))};/*! @azure/msal-common v15.10.0 2025-08-05 */function Qne(t,e,n,r){var c,l;const i=e.correlationId,s=new Map;uN(s,e.embeddedClientId||((c=e.extraQueryParameters)==null?void 0:c[hu])||t.clientId);const o=[...e.scopes||[],...e.extraScopesToConsent||[]];if(lN(s,o,!0,(l=t.authority.options.OIDCOptions)==null?void 0:l.defaultScopes),dN(s,e.redirectUri),hN(s,i),fne(s,e.responseMode),gN(s),e.prompt&&(vne(s,e.prompt),r==null||r.addFields({prompt:e.prompt},i)),e.domainHint&&(gne(s,e.domainHint),r==null||r.addFields({domainHintFromRequest:!0},i)),e.prompt!==pi.SELECT_ACCOUNT)if(e.sid&&e.prompt===pi.NONE)n.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request"),CI(s,e.sid),r==null||r.addFields({sidFromRequest:!0},i);else if(e.account){const u=Zne(e.account);let d=ere(e.account);if(d&&e.domainHint&&(n.warning('AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint'),d=null),d){n.verbose("createAuthCodeUrlQueryString: login_hint claim present on account"),hv(s,d),r==null||r.addFields({loginHintFromClaim:!0},i);try{const f=Sd(e.account.homeAccountId);cp(s,f)}catch{n.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header")}}else if(u&&e.prompt===pi.NONE){n.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account"),CI(s,u),r==null||r.addFields({sidFromClaim:!0},i);try{const f=Sd(e.account.homeAccountId);cp(s,f)}catch{n.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header")}}else if(e.loginHint)n.verbose("createAuthCodeUrlQueryString: Adding login_hint from request"),hv(s,e.loginHint),ox(s,e.loginHint),r==null||r.addFields({loginHintFromRequest:!0},i);else if(e.account.username){n.verbose("createAuthCodeUrlQueryString: Adding login_hint from account"),hv(s,e.account.username),r==null||r.addFields({loginHintFromUpn:!0},i);try{const f=Sd(e.account.homeAccountId);cp(s,f)}catch{n.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header")}}}else e.loginHint&&(n.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request"),hv(s,e.loginHint),ox(s,e.loginHint),r==null||r.addFields({loginHintFromRequest:!0},i));else n.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints");return e.nonce&&yne(s,e.nonce),e.state&&EU(s,e.state),(e.claims||t.clientCapabilities&&t.clientCapabilities.length>0)&&fN(s,e.claims,t.clientCapabilities),e.embeddedClientId&&N0(s,t.clientId,t.redirectUri),t.instanceAware&&(!e.extraQueryParameters||!Object.keys(e.extraQueryParameters).includes(s1))&&IU(s),s}function CN(t,e,n,r){const i=Xp(e,n,r);return en.appendQueryString(t.authorizationEndpoint,i)}function Xne(t,e){if(GU(t,e),!t.code)throw _e(Z5);return t}function GU(t,e){if(!t.state||!e)throw t.state?_e(Z_,"Cached State"):_e(Z_,"Server State");let n,r;try{n=decodeURIComponent(t.state)}catch{throw _e(Qd,t.state)}try{r=decodeURIComponent(e)}catch{throw _e(Qd,t.state)}if(n!==r)throw _e(V5);if(t.error||t.error_description||t.suberror){const i=Jne(t);throw HU(t.error,t.error_description,t.suberror)?new lo(t.error||"",t.error_description,t.suberror,t.timestamp||"",t.trace_id||"",t.correlation_id||"",t.claims||"",i):new Tu(t.error||"",t.error_description,t.suberror,i)}}function Jne(t){var r,i;const e="code=",n=(r=t.error_uri)==null?void 0:r.lastIndexOf(e);return n&&n>=0?(i=t.error_uri)==null?void 0:i.substring(n+e.length):void 0}function Zne(t){var e;return((e=t.idTokenClaims)==null?void 0:e.sid)||null}function ere(t){var e;return t.loginHint||((e=t.idTokenClaims)==null?void 0:e.login_hint)||null}/*! @azure/msal-common v15.10.0 2025-08-05 */const PI=",",KU="|";function tre(t){const{skus:e,libraryName:n,libraryVersion:r,extensionName:i,extensionVersion:s}=t,o=new Map([[0,[n,r]],[2,[i,s]]]);let c=[];if(e!=null&&e.length){if(c=e.split(PI),c.length<4)return e}else c=Array.from({length:4},()=>KU);return o.forEach((l,u)=>{var d,f;l.length===2&&((d=l[0])!=null&&d.length)&&((f=l[1])!=null&&f.length)&&nre({skuArr:c,index:u,skuName:l[0],skuVersion:l[1]})}),c.join(PI)}function nre(t){const{skuArr:e,index:n,skuName:r,skuVersion:i}=t;n>=e.length||(e[n]=[r,i].join(KU))}class Jp{constructor(e,n){this.cacheOutcome=Al.NOT_APPLICABLE,this.cacheManager=n,this.apiId=e.apiId,this.correlationId=e.correlationId,this.wrapperSKU=e.wrapperSKU||ve.EMPTY_STRING,this.wrapperVer=e.wrapperVer||ve.EMPTY_STRING,this.telemetryCacheKey=Lr.CACHE_KEY+Qp.CACHE_KEY_SEPARATOR+e.clientId}generateCurrentRequestHeaderValue(){const e=`${this.apiId}${Lr.VALUE_SEPARATOR}${this.cacheOutcome}`,n=[this.wrapperSKU,this.wrapperVer],r=this.getNativeBrokerErrorCode();r!=null&&r.length&&n.push(`broker_error=${r}`);const i=n.join(Lr.VALUE_SEPARATOR),s=this.getRegionDiscoveryFields(),o=[e,s].join(Lr.VALUE_SEPARATOR);return[Lr.SCHEMA_VERSION,o,i].join(Lr.CATEGORY_SEPARATOR)}generateLastRequestHeaderValue(){const e=this.getLastRequests(),n=Jp.maxErrorsToSend(e),r=e.failedRequests.slice(0,2*n).join(Lr.VALUE_SEPARATOR),i=e.errors.slice(0,n).join(Lr.VALUE_SEPARATOR),s=e.errors.length,o=n=Lr.MAX_CACHED_ERRORS&&(n.failedRequests.shift(),n.failedRequests.shift(),n.errors.shift()),n.failedRequests.push(this.apiId,this.correlationId),e instanceof Error&&e&&e.toString()?e instanceof Cn?e.subError?n.errors.push(e.subError):e.errorCode?n.errors.push(e.errorCode):n.errors.push(e.toString()):n.errors.push(e.toString()):n.errors.push(Lr.UNKNOWN_ERROR),this.cacheManager.setServerTelemetry(this.telemetryCacheKey,n,this.correlationId)}incrementCacheHits(){const e=this.getLastRequests();return e.cacheHits+=1,this.cacheManager.setServerTelemetry(this.telemetryCacheKey,e,this.correlationId),e.cacheHits}getLastRequests(){const e={failedRequests:[],errors:[],cacheHits:0};return this.cacheManager.getServerTelemetry(this.telemetryCacheKey)||e}clearTelemetryCache(){const e=this.getLastRequests(),n=Jp.maxErrorsToSend(e),r=e.errors.length;if(n===r)this.cacheManager.removeItem(this.telemetryCacheKey,this.correlationId);else{const i={failedRequests:e.failedRequests.slice(n*2),errors:e.errors.slice(n),cacheHits:0};this.cacheManager.setServerTelemetry(this.telemetryCacheKey,i,this.correlationId)}}static maxErrorsToSend(e){let n,r=0,i=0;const s=e.errors.length;for(n=0;nString.fromCodePoint(n)).join("");return btoa(e)}/*! @azure/msal-browser v4.19.0 2025-08-05 */function Zs(t){return new TextDecoder().decode(Dc(t))}function Dc(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw Ve(bB)}const n=atob(e);return Uint8Array.from(n,r=>r.codePointAt(0)||0)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const pre="RSASSA-PKCS1-v1_5",zf="AES-GCM",jB="HKDF",ON="SHA-256",mre=2048,gre=new Uint8Array([1,0,1]),RI="0123456789abcdef",MI=new Uint32Array(1),IN="raw",EB="encrypt",RN="decrypt",vre="deriveKey",yre="crypto_subtle_undefined",MN={name:pre,hash:ON,modulusLength:mre,publicExponent:gre};function xre(t){if(!window)throw Ve($0);if(!window.crypto)throw Ve(o1);if(!t&&!window.crypto.subtle)throw Ve(o1,yre)}async function NB(t,e,n){e==null||e.addQueueMeasurement(W.Sha256Digest,n);const i=new TextEncoder().encode(t);return window.crypto.subtle.digest(ON,i)}function bre(t){return window.crypto.getRandomValues(t)}function US(){return window.crypto.getRandomValues(MI),MI[0]}function uo(){const t=Date.now(),e=US()*1024+(US()&1023),n=new Uint8Array(16),r=Math.trunc(e/2**30),i=e&2**30-1,s=US();n[0]=t/2**40,n[1]=t/2**32,n[2]=t/2**24,n[3]=t/2**16,n[4]=t/2**8,n[5]=t,n[6]=112|r>>>8,n[7]=r,n[8]=128|i>>>24,n[9]=i>>>16,n[10]=i>>>8,n[11]=i,n[12]=s>>>24,n[13]=s>>>16,n[14]=s>>>8,n[15]=s;let o="";for(let c=0;c>>4),o+=RI.charAt(n[c]&15),(c===3||c===5||c===7||c===9)&&(o+="-");return o}async function wre(t,e){return window.crypto.subtle.generateKey(MN,t,e)}async function BS(t){return window.crypto.subtle.exportKey(_B,t)}async function Sre(t,e,n){return window.crypto.subtle.importKey(_B,t,MN,e,n)}async function Cre(t,e){return window.crypto.subtle.sign(MN,t,e)}async function DN(){const t=await TB(),n={alg:"dir",kty:"oct",k:Jc(new Uint8Array(t))};return em(JSON.stringify(n))}async function _re(t){const e=Zs(t),r=JSON.parse(e).k,i=Dc(r);return window.crypto.subtle.importKey(IN,i,zf,!1,[RN])}async function Are(t,e){const n=e.split(".");if(n.length!==5)throw Ve(ny,"jwe_length");const r=await _re(t).catch(()=>{throw Ve(ny,"import_key")});try{const i=new TextEncoder().encode(n[0]),s=Dc(n[2]),o=Dc(n[3]),c=Dc(n[4]),l=c.byteLength*8,u=new Uint8Array(o.length+c.length);u.set(o),u.set(c,o.length);const d=await window.crypto.subtle.decrypt({name:zf,iv:s,tagLength:l,additionalData:i},r,u);return new TextDecoder().decode(d)}catch{throw Ve(ny,"decrypt")}}async function TB(){const t=await window.crypto.subtle.generateKey({name:zf,length:256},!0,[EB,RN]);return window.crypto.subtle.exportKey(IN,t)}async function DI(t){return window.crypto.subtle.importKey(IN,t,jB,!1,[vre])}async function PB(t,e,n){return window.crypto.subtle.deriveKey({name:jB,salt:e,hash:ON,info:new TextEncoder().encode(n)},t,{name:zf,length:256},!1,[EB,RN])}async function jre(t,e,n){const r=new TextEncoder().encode(e),i=window.crypto.getRandomValues(new Uint8Array(16)),s=await PB(t,i,n),o=await window.crypto.subtle.encrypt({name:zf,iv:new Uint8Array(12)},s,r);return{data:Jc(new Uint8Array(o)),nonce:Jc(i)}}async function $I(t,e,n,r){const i=Dc(r),s=await PB(t,Dc(e),n),o=await window.crypto.subtle.decrypt({name:zf,iv:new Uint8Array(12)},s,i);return new TextDecoder().decode(o)}async function kB(t){const e=await NB(t),n=new Uint8Array(e);return Jc(n)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const tm="storage_not_supported",ur="stubbed_public_client_application_called",fx="in_mem_redirect_unavailable";/*! @azure/msal-browser v4.19.0 2025-08-05 */const ry={[tm]:"Given storage configuration option was not supported.",[ur]:"Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors",[fx]:"Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true."};ry[tm],ry[ur],ry[fx];class $N extends Cn{constructor(e,n){super(e,n),this.name="BrowserConfigurationAuthError",Object.setPrototypeOf(this,$N.prototype)}}function dr(t){return new $N(t,ry[t])}/*! @azure/msal-browser v4.19.0 2025-08-05 */function OB(t){t.location.hash="",typeof t.history.replaceState=="function"&&t.history.replaceState(null,"",`${t.location.origin}${t.location.pathname}${t.location.search}`)}function Ere(t){const e=t.split("#");e.shift(),window.location.hash=e.length>0?e.join("#"):""}function LN(){return window.parent!==window}function Nre(){return typeof window<"u"&&!!window.opener&&window.opener!==window&&typeof window.name=="string"&&window.name.indexOf(`${Ni.POPUP_NAME_PREFIX}.`)===0}function ya(){return typeof window<"u"&&window.location?window.location.href.split("?")[0].split("#")[0]:""}function Tre(){const e=new en(window.location.href).getUrlComponents();return`${e.Protocol}//${e.HostNameAndPort}/`}function Pre(){if(en.hashContainsKnownProperties(window.location.hash)&&LN())throw Ve(sB)}function kre(t){if(LN()&&!t)throw Ve(iB)}function Ore(){if(Nre())throw Ve(oB)}function IB(){if(typeof window>"u")throw Ve($0)}function RB(t){if(!t)throw Ve(lp)}function FN(t){IB(),Pre(),Ore(),RB(t)}function LI(t,e){if(FN(t),kre(e.system.allowRedirectInIframe),e.cache.cacheLocation===jr.MemoryStorage&&!e.cache.storeAuthStateInCookie)throw dr(fx)}function MB(t){const e=document.createElement("link");e.rel="preconnect",e.href=new URL(t).origin,e.crossOrigin="anonymous",document.head.appendChild(e),window.setTimeout(()=>{try{document.head.removeChild(e)}catch{}},1e4)}function Ire(){return uo()}/*! @azure/msal-browser v4.19.0 2025-08-05 */class hx{navigateInternal(e,n){return hx.defaultNavigateWindow(e,n)}navigateExternal(e,n){return hx.defaultNavigateWindow(e,n)}static defaultNavigateWindow(e,n){return n.noHistory?window.location.replace(e):window.location.assign(e),new Promise((r,i)=>{setTimeout(()=>{i(Ve(dx,"failed_to_redirect"))},n.timeout)})}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Rre{async sendGetRequestAsync(e,n){let r,i={},s=0;const o=FI(n);try{r=await fetch(e,{method:OI.GET,headers:o})}catch(c){throw zh(Ve(window.navigator.onLine?dB:ux),void 0,void 0,c)}i=UI(r.headers);try{return s=r.status,{headers:i,body:await r.json(),status:s}}catch(c){throw zh(Ve(a1),s,i,c)}}async sendPostRequestAsync(e,n){const r=n&&n.body||"",i=FI(n);let s,o=0,c={};try{s=await fetch(e,{method:OI.POST,headers:i,body:r})}catch(l){throw zh(Ve(window.navigator.onLine?uB:ux),void 0,void 0,l)}c=UI(s.headers);try{return o=s.status,{headers:c,body:await s.json(),status:o}}catch(l){throw zh(Ve(a1),o,c,l)}}}function FI(t){try{const e=new Headers;if(!(t&&t.headers))return e;const n=t.headers;return Object.entries(n).forEach(([r,i])=>{e.append(r,i)}),e}catch(e){throw zh(Ve(SB),void 0,void 0,e)}}function UI(t){try{const e={};return t.forEach((n,r)=>{e[r]=n}),e}catch{throw Ve(CB)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Mre=6e4,l1=1e4,Dre=3e4,DB=2e3;function $re({auth:t,cache:e,system:n,telemetry:r},i){const s={clientId:ve.EMPTY_STRING,authority:`${ve.DEFAULT_AUTHORITY}`,knownAuthorities:[],cloudDiscoveryMetadata:ve.EMPTY_STRING,authorityMetadata:ve.EMPTY_STRING,redirectUri:typeof window<"u"?ya():"",postLogoutRedirectUri:ve.EMPTY_STRING,navigateToLoginRequestUrl:!0,clientCapabilities:[],protocolMode:$i.AAD,OIDCOptions:{serverResponseType:A0.FRAGMENT,defaultScopes:[ve.OPENID_SCOPE,ve.PROFILE_SCOPE,ve.OFFLINE_ACCESS_SCOPE]},azureCloudOptions:{azureCloudInstance:ZE.None,tenant:ve.EMPTY_STRING},skipAuthorityMetadataCache:!1,supportsNestedAppAuth:!1,instanceAware:!1,encodeExtraQueryParams:!1},o={cacheLocation:jr.SessionStorage,cacheRetentionDays:5,temporaryCacheLocation:jr.SessionStorage,storeAuthStateInCookie:!1,secureCookies:!1,cacheMigrationEnabled:!!(e&&e.cacheLocation===jr.LocalStorage),claimsBasedCachingEnabled:!1},c={loggerCallback:()=>{},logLevel:Rn.Info,piiLoggingEnabled:!1},u={...{...SU,loggerOptions:c,networkClient:i?new Rre:Yne,navigationClient:new hx,loadFrameTimeout:0,windowHashTimeout:(n==null?void 0:n.loadFrameTimeout)||Mre,iframeHashTimeout:(n==null?void 0:n.loadFrameTimeout)||l1,navigateFrameWait:0,redirectNavigationTimeout:Dre,asyncPopups:!1,allowRedirectInIframe:!1,allowPlatformBroker:!1,nativeBrokerHandshakeTimeout:(n==null?void 0:n.nativeBrokerHandshakeTimeout)||DB,pollIntervalMilliseconds:Ni.DEFAULT_POLL_INTERVAL_MS},...n,loggerOptions:(n==null?void 0:n.loggerOptions)||c},d={application:{appName:ve.EMPTY_STRING,appVersion:ve.EMPTY_STRING},client:new wU};if((t==null?void 0:t.protocolMode)!==$i.OIDC&&(t!=null&&t.OIDCOptions)&&new Ma(u.loggerOptions).warning(JSON.stringify(jn(fU))),t!=null&&t.protocolMode&&t.protocolMode===$i.OIDC&&(u!=null&&u.allowPlatformBroker))throw jn(hU);return{auth:{...s,...t,OIDCOptions:{...s.OIDCOptions,...t==null?void 0:t.OIDCOptions}},cache:{...o,...e},system:u,telemetry:{...d,...r}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Lre="@azure/msal-browser",mu="4.19.0";/*! @azure/msal-browser v4.19.0 2025-08-05 */const Tr="msal",UN="browser",HS="-",Za=1,u1=1,Fre=`${Tr}.${UN}.log.level`,Ure=`${Tr}.${UN}.log.pii`,Bre=`${Tr}.${UN}.platform.auth.dom`,BI=`${Tr}.version`,HI="account.keys",zI="token.keys";function So(t=u1){return t<1?`${Tr}.${HI}`:`${Tr}.${t}.${HI}`}function Ml(t,e=Za){return e<1?`${Tr}.${zI}.${t}`:`${Tr}.${e}.${zI}.${t}`}/*! @azure/msal-browser v4.19.0 2025-08-05 */class BN{static loggerCallback(e,n){switch(e){case Rn.Error:console.error(n);return;case Rn.Info:console.info(n);return;case Rn.Verbose:console.debug(n);return;case Rn.Warning:console.warn(n);return;default:console.log(n);return}}constructor(e){var l;this.browserEnvironment=typeof window<"u",this.config=$re(e,this.browserEnvironment);let n;try{n=window[jr.SessionStorage]}catch{}const r=n==null?void 0:n.getItem(Fre),i=(l=n==null?void 0:n.getItem(Ure))==null?void 0:l.toLowerCase(),s=i==="true"?!0:i==="false"?!1:void 0,o={...this.config.system.loggerOptions},c=r&&Object.keys(Rn).includes(r)?Rn[r]:void 0;c&&(o.loggerCallback=BN.loggerCallback,o.logLevel=c),s!==void 0&&(o.piiLoggingEnabled=s),this.logger=new Ma(o,Lre,mu),this.available=!1}getConfig(){return this.config}getLogger(){return this.logger}isAvailable(){return this.available}isBrowserEnvironment(){return this.browserEnvironment}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class gu extends BN{getModuleName(){return gu.MODULE_NAME}getId(){return gu.ID}async initialize(){return this.available=typeof window<"u",this.available}}gu.MODULE_NAME="";gu.ID="StandardOperatingContext";/*! @azure/msal-browser v4.19.0 2025-08-05 */class Hre{constructor(){this.dbName=c1,this.version=dre,this.tableName=fre,this.dbOpen=!1}async open(){return new Promise((e,n)=>{const r=window.indexedDB.open(this.dbName,this.version);r.addEventListener("upgradeneeded",i=>{i.target.result.createObjectStore(this.tableName)}),r.addEventListener("success",i=>{const s=i;this.db=s.target.result,this.dbOpen=!0,e()}),r.addEventListener("error",()=>n(Ve(PN)))})}closeConnection(){const e=this.db;e&&this.dbOpen&&(e.close(),this.dbOpen=!1)}async validateDbIsOpen(){if(!this.dbOpen)return this.open()}async getItem(e){return await this.validateDbIsOpen(),new Promise((n,r)=>{if(!this.db)return r(Ve(Wu));const o=this.db.transaction([this.tableName],"readonly").objectStore(this.tableName).get(e);o.addEventListener("success",c=>{const l=c;this.closeConnection(),n(l.target.result)}),o.addEventListener("error",c=>{this.closeConnection(),r(c)})})}async setItem(e,n){return await this.validateDbIsOpen(),new Promise((r,i)=>{if(!this.db)return i(Ve(Wu));const c=this.db.transaction([this.tableName],"readwrite").objectStore(this.tableName).put(n,e);c.addEventListener("success",()=>{this.closeConnection(),r()}),c.addEventListener("error",l=>{this.closeConnection(),i(l)})})}async removeItem(e){return await this.validateDbIsOpen(),new Promise((n,r)=>{if(!this.db)return r(Ve(Wu));const o=this.db.transaction([this.tableName],"readwrite").objectStore(this.tableName).delete(e);o.addEventListener("success",()=>{this.closeConnection(),n()}),o.addEventListener("error",c=>{this.closeConnection(),r(c)})})}async getKeys(){return await this.validateDbIsOpen(),new Promise((e,n)=>{if(!this.db)return n(Ve(Wu));const s=this.db.transaction([this.tableName],"readonly").objectStore(this.tableName).getAllKeys();s.addEventListener("success",o=>{const c=o;this.closeConnection(),e(c.target.result)}),s.addEventListener("error",o=>{this.closeConnection(),n(o)})})}async containsKey(e){return await this.validateDbIsOpen(),new Promise((n,r)=>{if(!this.db)return r(Ve(Wu));const o=this.db.transaction([this.tableName],"readonly").objectStore(this.tableName).count(e);o.addEventListener("success",c=>{const l=c;this.closeConnection(),n(l.target.result===1)}),o.addEventListener("error",c=>{this.closeConnection(),r(c)})})}async deleteDatabase(){return this.db&&this.dbOpen&&this.closeConnection(),new Promise((e,n)=>{const r=window.indexedDB.deleteDatabase(c1),i=setTimeout(()=>n(!1),200);r.addEventListener("success",()=>(clearTimeout(i),e(!0))),r.addEventListener("blocked",()=>(clearTimeout(i),e(!0))),r.addEventListener("error",()=>(clearTimeout(i),n(!1)))})}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class L0{constructor(){this.cache=new Map}async initialize(){}getItem(e){return this.cache.get(e)||null}getUserData(e){return this.getItem(e)}setItem(e,n){this.cache.set(e,n)}async setUserData(e,n){this.setItem(e,n)}removeItem(e){this.cache.delete(e)}getKeys(){const e=[];return this.cache.forEach((n,r)=>{e.push(r)}),e}containsKey(e){return this.cache.has(e)}clear(){this.cache.clear()}decryptData(){return Promise.resolve(null)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class zre{constructor(e){this.inMemoryCache=new L0,this.indexedDBCache=new Hre,this.logger=e}handleDatabaseAccessError(e){if(e instanceof yg&&e.errorCode===PN)this.logger.error("Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.");else throw e}async getItem(e){const n=this.inMemoryCache.getItem(e);if(!n)try{return this.logger.verbose("Queried item not found in in-memory cache, now querying persistent storage."),await this.indexedDBCache.getItem(e)}catch(r){this.handleDatabaseAccessError(r)}return n}async setItem(e,n){this.inMemoryCache.setItem(e,n);try{await this.indexedDBCache.setItem(e,n)}catch(r){this.handleDatabaseAccessError(r)}}async removeItem(e){this.inMemoryCache.removeItem(e);try{await this.indexedDBCache.removeItem(e)}catch(n){this.handleDatabaseAccessError(n)}}async getKeys(){const e=this.inMemoryCache.getKeys();if(e.length===0)try{return this.logger.verbose("In-memory cache is empty, now querying persistent storage."),await this.indexedDBCache.getKeys()}catch(n){this.handleDatabaseAccessError(n)}return e}async containsKey(e){const n=this.inMemoryCache.containsKey(e);if(!n)try{return this.logger.verbose("Key not found in in-memory cache, now querying persistent storage."),await this.indexedDBCache.containsKey(e)}catch(r){this.handleDatabaseAccessError(r)}return n}clearInMemory(){this.logger.verbose("Deleting in-memory keystore"),this.inMemoryCache.clear(),this.logger.verbose("In-memory keystore deleted")}async clearPersistent(){try{this.logger.verbose("Deleting persistent keystore");const e=await this.indexedDBCache.deleteDatabase();return e&&this.logger.verbose("Persistent keystore deleted"),e}catch(e){return this.handleDatabaseAccessError(e),!1}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Da{constructor(e,n,r){this.logger=e,xre(r??!1),this.cache=new zre(this.logger),this.performanceClient=n}createNewGuid(){return uo()}base64Encode(e){return em(e)}base64Decode(e){return Zs(e)}base64UrlEncode(e){return gv(e)}encodeKid(e){return this.base64UrlEncode(JSON.stringify({kid:e}))}async getPublicKeyThumbprint(e){var d;const n=(d=this.performanceClient)==null?void 0:d.startMeasurement(W.CryptoOptsGetPublicKeyThumbprint,e.correlationId),r=await wre(Da.EXTRACTABLE,Da.POP_KEY_USAGES),i=await BS(r.publicKey),s={e:i.e,kty:i.kty,n:i.n},o=VI(s),c=await this.hashString(o),l=await BS(r.privateKey),u=await Sre(l,!1,["sign"]);return await this.cache.setItem(c,{privateKey:u,publicKey:r.publicKey,requestMethod:e.resourceRequestMethod,requestUri:e.resourceRequestUri}),n&&n.end({success:!0}),c}async removeTokenBindingKey(e){if(await this.cache.removeItem(e),await this.cache.containsKey(e))throw _e(eU)}async clearKeystore(){this.cache.clearInMemory();try{return await this.cache.clearPersistent(),!0}catch(e){return e instanceof Error?this.logger.error(`Clearing keystore failed with error: ${e.message}`):this.logger.error("Clearing keystore failed with unknown error"),!1}}async signJwt(e,n,r,i){var w;const s=(w=this.performanceClient)==null?void 0:w.startMeasurement(W.CryptoOptsSignJwt,i),o=await this.cache.getItem(n);if(!o)throw Ve(TN);const c=await BS(o.publicKey),l=VI(c),u=gv(JSON.stringify({kid:n})),d=AN.getShrHeaderString({...r==null?void 0:r.header,alg:c.alg,kid:u}),f=gv(d);e.cnf={jwk:JSON.parse(l)};const h=gv(JSON.stringify(e)),p=`${f}.${h}`,m=new TextEncoder().encode(p),y=await Cre(o.privateKey,m),b=Jc(new Uint8Array(y)),x=`${p}.${b}`;return s&&s.end({success:!0}),x}async hashString(e){return kB(e)}}Da.POP_KEY_USAGES=["sign","verify"];Da.EXTRACTABLE=!0;function VI(t){return JSON.stringify(t,Object.keys(t).sort())}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Vre=24*60*60*1e3,d1={Lax:"Lax",None:"None"};class $B{initialize(){return Promise.resolve()}getItem(e){const n=`${encodeURIComponent(e)}`,r=document.cookie.split(";");for(let i=0;i{const i=decodeURIComponent(r).trim().split("=");n.push(i[0])}),n}containsKey(e){return this.getKeys().includes(e)}decryptData(){return Promise.resolve(null)}}function Gre(t){const e=new Date;return new Date(e.getTime()+t*Vre).toUTCString()}/*! @azure/msal-browser v4.19.0 2025-08-05 */function up(t,e){const n=t.getItem(So(e));return n?JSON.parse(n):[]}function dp(t,e,n){const r=e.getItem(Ml(t,n));if(r){const i=JSON.parse(r);if(i&&i.hasOwnProperty("idToken")&&i.hasOwnProperty("accessToken")&&i.hasOwnProperty("refreshToken"))return i}return{idToken:[],accessToken:[],refreshToken:[]}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function f1(t){return t.hasOwnProperty("id")&&t.hasOwnProperty("nonce")&&t.hasOwnProperty("data")}/*! @azure/msal-browser v4.19.0 2025-08-05 */const GI="msal.cache.encryption",Kre="msal.broadcast.cache";class Wre{constructor(e,n,r){if(!window.localStorage)throw dr(tm);this.memoryStorage=new L0,this.initialized=!1,this.clientId=e,this.logger=n,this.performanceClient=r,this.broadcast=new BroadcastChannel(Kre)}async initialize(e){const n=new $B,r=n.getItem(GI);let i={key:"",id:""};if(r)try{i=JSON.parse(r)}catch{}if(i.key&&i.id){const s=es(Dc,W.Base64Decode,this.logger,this.performanceClient,e)(i.key);this.encryptionCookie={id:i.id,key:await ge(DI,W.GenerateHKDF,this.logger,this.performanceClient,e)(s)}}else{const s=uo(),o=await ge(TB,W.GenerateBaseKey,this.logger,this.performanceClient,e)(),c=es(Jc,W.UrlEncodeArr,this.logger,this.performanceClient,e)(new Uint8Array(o));this.encryptionCookie={id:s,key:await ge(DI,W.GenerateHKDF,this.logger,this.performanceClient,e)(o)};const l={id:s,key:c};n.setItem(GI,JSON.stringify(l),0,!0,d1.None)}await ge(this.importExistingCache.bind(this),W.ImportExistingCache,this.logger,this.performanceClient,e)(e),this.broadcast.addEventListener("message",this.updateCache.bind(this)),this.initialized=!0}getItem(e){return window.localStorage.getItem(e)}getUserData(e){if(!this.initialized)throw Ve(lp);return this.memoryStorage.getItem(e)}async decryptData(e,n,r){if(!this.initialized||!this.encryptionCookie)throw Ve(lp);if(n.id!==this.encryptionCookie.id)return this.performanceClient.incrementFields({encryptedCacheExpiredCount:1},r),null;const i=await ge($I,W.Decrypt,this.logger,this.performanceClient,r)(this.encryptionCookie.key,n.nonce,this.getContext(e),n.data);if(!i)return null;try{return JSON.parse(i)}catch{return this.performanceClient.incrementFields({encryptedCacheCorruptionCount:1},r),null}}setItem(e,n){window.localStorage.setItem(e,n)}async setUserData(e,n,r,i){if(!this.initialized||!this.encryptionCookie)throw Ve(lp);const{data:s,nonce:o}=await ge(jre,W.Encrypt,this.logger,this.performanceClient,r)(this.encryptionCookie.key,n,this.getContext(e)),c={id:this.encryptionCookie.id,nonce:o,data:s,lastUpdatedAt:i};this.memoryStorage.setItem(e,n),this.setItem(e,JSON.stringify(c)),this.broadcast.postMessage({key:e,value:n,context:this.getContext(e)})}removeItem(e){this.memoryStorage.containsKey(e)&&(this.memoryStorage.removeItem(e),this.broadcast.postMessage({key:e,value:null,context:this.getContext(e)})),window.localStorage.removeItem(e)}getKeys(){return Object.keys(window.localStorage)}containsKey(e){return window.localStorage.hasOwnProperty(e)}clear(){this.memoryStorage.clear(),up(this).forEach(r=>this.removeItem(r));const n=dp(this.clientId,this);n.idToken.forEach(r=>this.removeItem(r)),n.accessToken.forEach(r=>this.removeItem(r)),n.refreshToken.forEach(r=>this.removeItem(r)),this.getKeys().forEach(r=>{(r.startsWith(Tr)||r.indexOf(this.clientId)!==-1)&&this.removeItem(r)})}async importExistingCache(e){if(!this.encryptionCookie)return;let n=up(this);n=await this.importArray(n,e),n.length?this.setItem(So(),JSON.stringify(n)):this.removeItem(So());const r=dp(this.clientId,this);r.idToken=await this.importArray(r.idToken,e),r.accessToken=await this.importArray(r.accessToken,e),r.refreshToken=await this.importArray(r.refreshToken,e),r.idToken.length||r.accessToken.length||r.refreshToken.length?this.setItem(Ml(this.clientId),JSON.stringify(r)):this.removeItem(Ml(this.clientId))}async getItemFromEncryptedCache(e,n){if(!this.encryptionCookie)return null;const r=this.getItem(e);if(!r)return null;let i;try{i=JSON.parse(r)}catch{return null}return f1(i)?i.id!==this.encryptionCookie.id?(this.performanceClient.incrementFields({encryptedCacheExpiredCount:1},n),null):ge($I,W.Decrypt,this.logger,this.performanceClient,n)(this.encryptionCookie.key,i.nonce,this.getContext(e),i.data):(this.performanceClient.incrementFields({unencryptedCacheCount:1},n),i)}async importArray(e,n){const r=[],i=[];return e.forEach(s=>{const o=this.getItemFromEncryptedCache(s,n).then(c=>{c?(this.memoryStorage.setItem(s,c),r.push(s)):this.removeItem(s)});i.push(o)}),await Promise.all(i),r}getContext(e){let n="";return e.includes(this.clientId)&&(n=this.clientId),n}updateCache(e){this.logger.trace("Updating internal cache from broadcast event");const n=this.performanceClient.startMeasurement(W.LocalStorageUpdated);n.add({isBackground:!0});const{key:r,value:i,context:s}=e.data;if(!r){this.logger.error("Broadcast event missing key"),n.end({success:!1,errorCode:"noKey"});return}if(s&&s!==this.clientId){this.logger.trace(`Ignoring broadcast event from clientId: ${s}`),n.end({success:!1,errorCode:"contextMismatch"});return}i?(this.memoryStorage.setItem(r,i),this.logger.verbose("Updated item in internal cache")):(this.memoryStorage.removeItem(r),this.logger.verbose("Removed item from internal cache")),n.end({success:!0})}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class qre{constructor(){if(!window.sessionStorage)throw dr(tm)}async initialize(){}getItem(e){return window.sessionStorage.getItem(e)}getUserData(e){return this.getItem(e)}setItem(e,n){window.sessionStorage.setItem(e,n)}async setUserData(e,n){this.setItem(e,n)}removeItem(e){window.sessionStorage.removeItem(e)}getKeys(){return Object.keys(window.sessionStorage)}containsKey(e){return window.sessionStorage.hasOwnProperty(e)}decryptData(){return Promise.resolve(null)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Ye={INITIALIZE_START:"msal:initializeStart",INITIALIZE_END:"msal:initializeEnd",ACCOUNT_ADDED:"msal:accountAdded",ACCOUNT_REMOVED:"msal:accountRemoved",ACTIVE_ACCOUNT_CHANGED:"msal:activeAccountChanged",LOGIN_START:"msal:loginStart",LOGIN_SUCCESS:"msal:loginSuccess",LOGIN_FAILURE:"msal:loginFailure",ACQUIRE_TOKEN_START:"msal:acquireTokenStart",ACQUIRE_TOKEN_SUCCESS:"msal:acquireTokenSuccess",ACQUIRE_TOKEN_FAILURE:"msal:acquireTokenFailure",ACQUIRE_TOKEN_NETWORK_START:"msal:acquireTokenFromNetworkStart",SSO_SILENT_START:"msal:ssoSilentStart",SSO_SILENT_SUCCESS:"msal:ssoSilentSuccess",SSO_SILENT_FAILURE:"msal:ssoSilentFailure",ACQUIRE_TOKEN_BY_CODE_START:"msal:acquireTokenByCodeStart",ACQUIRE_TOKEN_BY_CODE_SUCCESS:"msal:acquireTokenByCodeSuccess",ACQUIRE_TOKEN_BY_CODE_FAILURE:"msal:acquireTokenByCodeFailure",HANDLE_REDIRECT_START:"msal:handleRedirectStart",HANDLE_REDIRECT_END:"msal:handleRedirectEnd",POPUP_OPENED:"msal:popupOpened",LOGOUT_START:"msal:logoutStart",LOGOUT_SUCCESS:"msal:logoutSuccess",LOGOUT_FAILURE:"msal:logoutFailure",LOGOUT_END:"msal:logoutEnd",RESTORE_FROM_BFCACHE:"msal:restoreFromBFCache",BROKER_CONNECTION_ESTABLISHED:"msal:brokerConnectionEstablished"};/*! @azure/msal-browser v4.19.0 2025-08-05 */function KI(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class h1 extends i1{constructor(e,n,r,i,s,o,c){super(e,r,i,s,c),this.cacheConfig=n,this.logger=i,this.internalStorage=new L0,this.browserStorage=WI(e,n.cacheLocation,i,s),this.temporaryCacheStorage=WI(e,n.temporaryCacheLocation,i,s),this.cookieStorage=new $B,this.eventHandler=o}async initialize(e){this.performanceClient.addFields({cacheLocation:this.cacheConfig.cacheLocation,cacheRetentionDays:this.cacheConfig.cacheRetentionDays},e),await this.browserStorage.initialize(e),await this.migrateExistingCache(e),this.trackVersionChanges(e)}async migrateExistingCache(e){const n=up(this.browserStorage,0),r=dp(this.clientId,this.browserStorage,0);this.performanceClient.addFields({oldAccountCount:n.length,oldAccessCount:r.accessToken.length,oldIdCount:r.idToken.length,oldRefreshCount:r.refreshToken.length},e);const i=up(this.browserStorage,1),s=dp(this.clientId,this.browserStorage,1);this.performanceClient.addFields({currAccountCount:i.length,currAccessCount:s.accessToken.length,currIdCount:s.idToken.length,currRefreshCount:s.refreshToken.length},e),await Promise.all([this.updateV0ToCurrent(u1,n,i,e),this.updateV0ToCurrent(Za,r.idToken,s.idToken,e),this.updateV0ToCurrent(Za,r.accessToken,s.accessToken,e),this.updateV0ToCurrent(Za,r.refreshToken,s.refreshToken,e)]),n.length>0?this.browserStorage.setItem(So(0),JSON.stringify(n)):this.browserStorage.removeItem(So(0)),i.length>0?this.browserStorage.setItem(So(1),JSON.stringify(i)):this.browserStorage.removeItem(So(1)),this.setTokenKeys(r,e,0),this.setTokenKeys(s,e,1)}async updateV0ToCurrent(e,n,r,i){const s=[];for(const o of[...n]){const c=this.browserStorage.getItem(o),l=this.validateAndParseJson(c||"");if(!l){KI(n,o);continue}l.lastUpdatedAt||(l.lastUpdatedAt=Date.now().toString(),this.setItem(o,JSON.stringify(l),i));const u=f1(l)?await this.browserStorage.decryptData(o,l,i):l;let d;if(u&&(AI(u)||jI(u))&&(d=u.expiresOn),!u||Tne(l.lastUpdatedAt,this.cacheConfig.cacheRetentionDays)||d&&ax(d,L5)){this.browserStorage.removeItem(o),KI(n,o),this.performanceClient.incrementFields({expiredCacheRemovedCount:1},i);continue}if(this.cacheConfig.cacheLocation!==jr.LocalStorage||f1(l)){const f=`${Tr}.${e}${HS}${o}`,h=this.browserStorage.getItem(f);if(h){const p=this.validateAndParseJson(h);if(Number(l.lastUpdatedAt)>Number(p.lastUpdatedAt)){s.push(this.setUserData(f,JSON.stringify(u),i,l.lastUpdatedAt).then(()=>{this.performanceClient.incrementFields({updatedCacheFromV0Count:1},i)}));continue}}else{s.push(this.setUserData(f,JSON.stringify(u),i,l.lastUpdatedAt).then(()=>{r.push(f),this.performanceClient.incrementFields({upgradedCacheCount:1},i)}));continue}}}return Promise.all(s)}trackVersionChanges(e){const n=this.browserStorage.getItem(BI);n&&(this.logger.info(`MSAL.js was last initialized by version: ${n}`),this.performanceClient.addFields({previousLibraryVersion:n},e)),n!==mu&&this.setItem(BI,mu,e)}validateAndParseJson(e){if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"?n:null}catch{return null}}setItem(e,n,r){let i=0,s=[];const o=20;for(let c=0;c<=o;c++)try{this.browserStorage.setItem(e,n),c>0&&(c<=i?this.removeAccessTokenKeys(s.slice(0,c),r,0):(this.removeAccessTokenKeys(s.slice(0,i),r,0),this.removeAccessTokenKeys(s.slice(i,c),r)));break}catch(l){const u=r1(l);if(u.errorCode===nx&&c0&&(l<=s?this.removeAccessTokenKeys(o.slice(0,l),r,0):(this.removeAccessTokenKeys(o.slice(0,s),r,0),this.removeAccessTokenKeys(o.slice(s,l),r)));break}catch(u){const d=r1(u);if(d.errorCode===nx&&l-1){if(r.splice(i,1),r.length===0){this.removeItem(So());return}else this.setItem(So(),JSON.stringify(r),n);this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap account key removed")}else this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap key not found in existing map")}removeAccount(e,n){const r=this.getActiveAccount(n);(r==null?void 0:r.homeAccountId)===e.homeAccountId&&(r==null?void 0:r.environment)===e.environment&&this.setActiveAccount(null,n),super.removeAccount(e,n),this.removeAccountKeyFromMap(this.generateAccountKey(e),n),this.browserStorage.getKeys().forEach(i=>{i.includes(e.homeAccountId)&&i.includes(e.environment)&&this.browserStorage.removeItem(i)}),this.cacheConfig.cacheLocation===jr.LocalStorage&&this.eventHandler.emitEvent(Ye.ACCOUNT_REMOVED,void 0,e)}removeIdToken(e,n){super.removeIdToken(e,n);const r=this.getTokenKeys(),i=r.idToken.indexOf(e);i>-1&&(this.logger.info("idToken removed from tokenKeys map"),r.idToken.splice(i,1),this.setTokenKeys(r,n))}removeAccessToken(e,n,r=!0){super.removeAccessToken(e,n),r&&this.removeAccessTokenKeys([e],n)}removeAccessTokenKeys(e,n,r=Za){this.logger.trace("removeAccessTokenKey called");const i=this.getTokenKeys(r);let s=0;if(e.forEach(o=>{const c=i.accessToken.indexOf(o);c>-1&&(i.accessToken.splice(c,1),s++)}),s>0){this.logger.info(`removed ${s} accessToken keys from tokenKeys map`),this.setTokenKeys(i,n,r);return}}removeRefreshToken(e,n){super.removeRefreshToken(e,n);const r=this.getTokenKeys(),i=r.refreshToken.indexOf(e);i>-1&&(this.logger.info("refreshToken removed from tokenKeys map"),r.refreshToken.splice(i,1),this.setTokenKeys(r,n))}getTokenKeys(e=Za){return dp(this.clientId,this.browserStorage,e)}setTokenKeys(e,n,r=Za){if(e.idToken.length===0&&e.accessToken.length===0&&e.refreshToken.length===0){this.removeItem(Ml(this.clientId,r));return}else this.setItem(Ml(this.clientId,r),JSON.stringify(e),n)}getIdTokenCredential(e,n){const r=this.browserStorage.getUserData(e);if(!r)return this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit"),this.removeIdToken(e,n),null;const i=this.validateAndParseJson(r);return!i||!kne(i)?(this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getIdTokenCredential: cache hit"),i)}async setIdTokenCredential(e,n){this.logger.trace("BrowserCacheManager.setIdTokenCredential called");const r=this.generateCredentialKey(e),i=Date.now().toString();e.lastUpdatedAt=i,await this.setUserData(r,JSON.stringify(e),n,i);const s=this.getTokenKeys();s.idToken.indexOf(r)===-1&&(this.logger.info("BrowserCacheManager: addTokenKey - idToken added to map"),s.idToken.push(r),this.setTokenKeys(s,n))}getAccessTokenCredential(e,n){const r=this.browserStorage.getUserData(e);if(!r)return this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit"),this.removeAccessTokenKeys([e],n),null;const i=this.validateAndParseJson(r);return!i||!AI(i)?(this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getAccessTokenCredential: cache hit"),i)}async setAccessTokenCredential(e,n){this.logger.trace("BrowserCacheManager.setAccessTokenCredential called");const r=this.generateCredentialKey(e),i=Date.now().toString();e.lastUpdatedAt=i,await this.setUserData(r,JSON.stringify(e),n,i);const s=this.getTokenKeys(),o=s.accessToken.indexOf(r);o!==-1&&s.accessToken.splice(o,1),this.logger.trace(`access token ${o===-1?"added to":"updated in"} map`),s.accessToken.push(r),this.setTokenKeys(s,n)}getRefreshTokenCredential(e,n){const r=this.browserStorage.getUserData(e);if(!r)return this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit"),this.removeRefreshToken(e,n),null;const i=this.validateAndParseJson(r);return!i||!jI(i)?(this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: cache hit"),i)}async setRefreshTokenCredential(e,n){this.logger.trace("BrowserCacheManager.setRefreshTokenCredential called");const r=this.generateCredentialKey(e),i=Date.now().toString();e.lastUpdatedAt=i,await this.setUserData(r,JSON.stringify(e),n,i);const s=this.getTokenKeys();s.refreshToken.indexOf(r)===-1&&(this.logger.info("BrowserCacheManager: addTokenKey - refreshToken added to map"),s.refreshToken.push(r),this.setTokenKeys(s,n))}getAppMetadata(e){const n=this.browserStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit"),null;const r=this.validateAndParseJson(n);return!r||!Mne(e,r)?(this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getAppMetadata: cache hit"),r)}setAppMetadata(e,n){this.logger.trace("BrowserCacheManager.setAppMetadata called");const r=Rne(e);this.setItem(r,JSON.stringify(e),n)}getServerTelemetry(e){const n=this.browserStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit"),null;const r=this.validateAndParseJson(n);return!r||!One(e,r)?(this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getServerTelemetry: cache hit"),r)}setServerTelemetry(e,n,r){this.logger.trace("BrowserCacheManager.setServerTelemetry called"),this.setItem(e,JSON.stringify(n),r)}getAuthorityMetadata(e){const n=this.internalStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getAuthorityMetadata: called, no cache hit"),null;const r=this.validateAndParseJson(n);return r&&Dne(e,r)?(this.logger.trace("BrowserCacheManager.getAuthorityMetadata: cache hit"),r):null}getAuthorityMetadataKeys(){return this.internalStorage.getKeys().filter(n=>this.isAuthorityMetadata(n))}setWrapperMetadata(e,n){this.internalStorage.setItem(mv.WRAPPER_SKU,e),this.internalStorage.setItem(mv.WRAPPER_VER,n)}getWrapperMetadata(){const e=this.internalStorage.getItem(mv.WRAPPER_SKU)||ve.EMPTY_STRING,n=this.internalStorage.getItem(mv.WRAPPER_VER)||ve.EMPTY_STRING;return[e,n]}setAuthorityMetadata(e,n){this.logger.trace("BrowserCacheManager.setAuthorityMetadata called"),this.internalStorage.setItem(e,JSON.stringify(n))}getActiveAccount(e){const n=this.generateCacheKey(pI.ACTIVE_ACCOUNT_FILTERS),r=this.browserStorage.getItem(n);if(!r)return this.logger.trace("BrowserCacheManager.getActiveAccount: No active account filters found"),null;const i=this.validateAndParseJson(r);return i?(this.logger.trace("BrowserCacheManager.getActiveAccount: Active account filters schema found"),this.getAccountInfoFilteredBy({homeAccountId:i.homeAccountId,localAccountId:i.localAccountId,tenantId:i.tenantId},e)):(this.logger.trace("BrowserCacheManager.getActiveAccount: No active account found"),null)}setActiveAccount(e,n){const r=this.generateCacheKey(pI.ACTIVE_ACCOUNT_FILTERS);if(e){this.logger.verbose("setActiveAccount: Active account set");const i={homeAccountId:e.homeAccountId,localAccountId:e.localAccountId,tenantId:e.tenantId,lastUpdatedAt:Li().toString()};this.setItem(r,JSON.stringify(i),n)}else this.logger.verbose("setActiveAccount: No account passed, active account not set"),this.browserStorage.removeItem(r);this.eventHandler.emitEvent(Ye.ACTIVE_ACCOUNT_CHANGED)}getThrottlingCache(e){const n=this.browserStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit"),null;const r=this.validateAndParseJson(n);return!r||!Ine(e,r)?(this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getThrottlingCache: cache hit"),r)}setThrottlingCache(e,n,r){this.logger.trace("BrowserCacheManager.setThrottlingCache called"),this.setItem(e,JSON.stringify(n),r)}getTemporaryCache(e,n){const r=n?this.generateCacheKey(e):e;if(this.cacheConfig.storeAuthStateInCookie){const s=this.cookieStorage.getItem(r);if(s)return this.logger.trace("BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies"),s}const i=this.temporaryCacheStorage.getItem(r);if(!i){if(this.cacheConfig.cacheLocation===jr.LocalStorage){const s=this.browserStorage.getItem(r);if(s)return this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage"),s}return this.logger.trace("BrowserCacheManager.getTemporaryCache: No cache item found in local storage"),null}return this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item returned"),i}setTemporaryCache(e,n,r){const i=r?this.generateCacheKey(e):e;this.temporaryCacheStorage.setItem(i,n),this.cacheConfig.storeAuthStateInCookie&&(this.logger.trace("BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie"),this.cookieStorage.setItem(i,n,void 0,this.cacheConfig.secureCookies))}removeItem(e){this.browserStorage.removeItem(e)}removeTemporaryItem(e){this.temporaryCacheStorage.removeItem(e),this.cacheConfig.storeAuthStateInCookie&&(this.logger.trace("BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie"),this.cookieStorage.removeItem(e))}getKeys(){return this.browserStorage.getKeys()}clear(e){this.removeAllAccounts(e),this.removeAppMetadata(e),this.temporaryCacheStorage.getKeys().forEach(n=>{(n.indexOf(Tr)!==-1||n.indexOf(this.clientId)!==-1)&&this.removeTemporaryItem(n)}),this.browserStorage.getKeys().forEach(n=>{(n.indexOf(Tr)!==-1||n.indexOf(this.clientId)!==-1)&&this.browserStorage.removeItem(n)}),this.internalStorage.clear()}clearTokensAndKeysWithClaims(e){this.performanceClient.addQueueMeasurement(W.ClearTokensAndKeysWithClaims,e);const n=this.getTokenKeys();let r=0;n.accessToken.forEach(i=>{const s=this.getAccessTokenCredential(i,e);s!=null&&s.requestedClaimsHash&&i.includes(s.requestedClaimsHash.toLowerCase())&&(this.removeAccessToken(i,e),r++)}),r>0&&this.logger.warning(`${r} access tokens with claims in the cache keys have been removed from the cache.`)}generateCacheKey(e){return $o.startsWith(e,Tr)?e:`${Tr}.${this.clientId}.${e}`}generateCredentialKey(e){const n=e.credentialType===Hr.REFRESH_TOKEN&&e.familyId||e.clientId,r=e.tokenType&&e.tokenType.toLowerCase()!==yn.BEARER.toLowerCase()?e.tokenType.toLowerCase():"";return[`${Tr}.${Za}`,e.homeAccountId,e.environment,e.credentialType,n,e.realm||"",e.target||"",e.requestedClaimsHash||"",r].join(HS).toLowerCase()}generateAccountKey(e){const n=e.homeAccountId.split(".")[1];return[`${Tr}.${u1}`,e.homeAccountId,e.environment,n||e.tenantId||""].join(HS).toLowerCase()}resetRequestCache(){this.logger.trace("BrowserCacheManager.resetRequestCache called"),this.removeTemporaryItem(this.generateCacheKey(hr.REQUEST_PARAMS)),this.removeTemporaryItem(this.generateCacheKey(hr.VERIFIER)),this.removeTemporaryItem(this.generateCacheKey(hr.ORIGIN_URI)),this.removeTemporaryItem(this.generateCacheKey(hr.URL_HASH)),this.removeTemporaryItem(this.generateCacheKey(hr.NATIVE_REQUEST)),this.setInteractionInProgress(!1)}cacheAuthorizeRequest(e,n){this.logger.trace("BrowserCacheManager.cacheAuthorizeRequest called");const r=em(JSON.stringify(e));if(this.setTemporaryCache(hr.REQUEST_PARAMS,r,!0),n){const i=em(n);this.setTemporaryCache(hr.VERIFIER,i,!0)}}getCachedRequest(){this.logger.trace("BrowserCacheManager.getCachedRequest called");const e=this.getTemporaryCache(hr.REQUEST_PARAMS,!0);if(!e)throw Ve(cB);const n=this.getTemporaryCache(hr.VERIFIER,!0);let r,i="";try{r=JSON.parse(Zs(e)),n&&(i=Zs(n))}catch(s){throw this.logger.errorPii(`Attempted to parse: ${e}`),this.logger.error(`Parsing cached token request threw with error: ${s}`),Ve(lB)}return[r,i]}getCachedNativeRequest(){this.logger.trace("BrowserCacheManager.getCachedNativeRequest called");const e=this.getTemporaryCache(hr.NATIVE_REQUEST,!0);if(!e)return this.logger.trace("BrowserCacheManager.getCachedNativeRequest: No cached native request found"),null;const n=this.validateAndParseJson(e);return n||(this.logger.error("BrowserCacheManager.getCachedNativeRequest: Unable to parse native request"),null)}isInteractionInProgress(e){var r;const n=(r=this.getInteractionInProgress())==null?void 0:r.clientId;return e?n===this.clientId:!!n}getInteractionInProgress(){const e=`${Tr}.${hr.INTERACTION_STATUS_KEY}`,n=this.getTemporaryCache(e,!1);try{return n?JSON.parse(n):null}catch{return this.logger.error("Cannot parse interaction status. Removing temporary cache items and clearing url hash. Retrying interaction should fix the error"),this.removeTemporaryItem(e),this.resetRequestCache(),OB(window),null}}setInteractionInProgress(e,n=cc.SIGNIN){var i;const r=`${Tr}.${hr.INTERACTION_STATUS_KEY}`;if(e){if(this.getInteractionInProgress())throw Ve(eB);this.setTemporaryCache(r,JSON.stringify({clientId:this.clientId,type:n}),!1)}else!e&&((i=this.getInteractionInProgress())==null?void 0:i.clientId)===this.clientId&&this.removeTemporaryItem(r)}async hydrateCache(e,n){var c,l,u;const r=P0((c=e.account)==null?void 0:c.homeAccountId,(l=e.account)==null?void 0:l.environment,e.idToken,this.clientId,e.tenantId);let i;n.claims&&(i=await this.cryptoImpl.hashString(n.claims));const s=k0((u=e.account)==null?void 0:u.homeAccountId,e.account.environment,e.accessToken,this.clientId,e.tenantId,e.scopes.join(" "),e.expiresOn?_I(e.expiresOn):0,e.extExpiresOn?_I(e.extExpiresOn):0,Zs,void 0,e.tokenType,void 0,n.sshKid,n.claims,i),o={idToken:r,accessToken:s};return this.saveCacheRecord(o,e.correlationId)}async saveCacheRecord(e,n,r){try{await super.saveCacheRecord(e,n,r)}catch(i){if(i instanceof wd&&this.performanceClient&&n)try{const s=this.getTokenKeys();this.performanceClient.addFields({cacheRtCount:s.refreshToken.length,cacheIdCount:s.idToken.length,cacheAtCount:s.accessToken.length},n)}catch{}throw i}}}function WI(t,e,n,r){try{switch(e){case jr.LocalStorage:return new Wre(t,n,r);case jr.SessionStorage:return new qre;case jr.MemoryStorage:default:break}}catch(i){n.error(i)}return new L0}const Yre=(t,e,n,r)=>{const i={cacheLocation:jr.MemoryStorage,cacheRetentionDays:5,temporaryCacheLocation:jr.MemoryStorage,storeAuthStateInCookie:!1,secureCookies:!1,cacheMigrationEnabled:!1,claimsBasedCachingEnabled:!1};return new h1(t,i,Zy,e,n,r)};/*! @azure/msal-browser v4.19.0 2025-08-05 */function Qre(t,e,n,r,i){return t.verbose("getAllAccounts called"),n?e.getAllAccounts(i||{},r):[]}function Xre(t,e,n,r){if(e.trace("getAccount called"),Object.keys(t).length===0)return e.warning("getAccount: No accountFilter provided"),null;const i=n.getAccountInfoFilteredBy(t,r);return i?(e.verbose("getAccount: Account matching provided filter found, returning"),i):(e.verbose("getAccount: No matching account found, returning null"),null)}function Jre(t,e,n,r){if(e.trace("getAccountByUsername called"),!t)return e.warning("getAccountByUsername: No username provided"),null;const i=n.getAccountInfoFilteredBy({username:t},r);return i?(e.verbose("getAccountByUsername: Account matching username found, returning"),e.verbosePii(`getAccountByUsername: Returning signed-in accounts matching username: ${t}`),i):(e.verbose("getAccountByUsername: No matching account found, returning null"),null)}function Zre(t,e,n,r){if(e.trace("getAccountByHomeId called"),!t)return e.warning("getAccountByHomeId: No homeAccountId provided"),null;const i=n.getAccountInfoFilteredBy({homeAccountId:t},r);return i?(e.verbose("getAccountByHomeId: Account matching homeAccountId found, returning"),e.verbosePii(`getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${t}`),i):(e.verbose("getAccountByHomeId: No matching account found, returning null"),null)}function eie(t,e,n,r){if(e.trace("getAccountByLocalId called"),!t)return e.warning("getAccountByLocalId: No localAccountId provided"),null;const i=n.getAccountInfoFilteredBy({localAccountId:t},r);return i?(e.verbose("getAccountByLocalId: Account matching localAccountId found, returning"),e.verbosePii(`getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${t}`),i):(e.verbose("getAccountByLocalId: No matching account found, returning null"),null)}function tie(t,e,n){e.setActiveAccount(t,n)}function nie(t,e){return t.getActiveAccount(e)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const rie="msal.broadcast.event";class iie{constructor(e){this.eventCallbacks=new Map,this.logger=e||new Ma({}),typeof BroadcastChannel<"u"&&(this.broadcastChannel=new BroadcastChannel(rie)),this.invokeCrossTabCallbacks=this.invokeCrossTabCallbacks.bind(this)}addEventCallback(e,n,r){if(typeof window<"u"){const i=r||Ire();return this.eventCallbacks.has(i)?(this.logger.error(`Event callback with id: ${i} is already registered. Please provide a unique id or remove the existing callback and try again.`),null):(this.eventCallbacks.set(i,[e,n||[]]),this.logger.verbose(`Event callback registered with id: ${i}`),i)}return null}removeEventCallback(e){this.eventCallbacks.delete(e),this.logger.verbose(`Event callback ${e} removed.`)}emitEvent(e,n,r,i){var o;const s={eventType:e,interactionType:n||null,payload:r||null,error:i||null,timestamp:Date.now()};switch(e){case Ye.ACCOUNT_ADDED:case Ye.ACCOUNT_REMOVED:case Ye.ACTIVE_ACCOUNT_CHANGED:(o=this.broadcastChannel)==null||o.postMessage(s);break;default:this.invokeCallbacks(s);break}}invokeCallbacks(e){this.eventCallbacks.forEach(([n,r],i)=>{(r.length===0||r.includes(e.eventType))&&(this.logger.verbose(`Emitting event to callback ${i}: ${e.eventType}`),n.apply(null,[e]))})}invokeCrossTabCallbacks(e){const n=e.data;this.invokeCallbacks(n)}subscribeCrossTab(){var e;(e=this.broadcastChannel)==null||e.addEventListener("message",this.invokeCrossTabCallbacks)}unsubscribeCrossTab(){var e;(e=this.broadcastChannel)==null||e.removeEventListener("message",this.invokeCrossTabCallbacks)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class LB{constructor(e,n,r,i,s,o,c,l,u){this.config=e,this.browserStorage=n,this.browserCrypto=r,this.networkClient=this.config.system.networkClient,this.eventHandler=s,this.navigationClient=o,this.platformAuthProvider=l,this.correlationId=u||uo(),this.logger=i.clone(Ni.MSAL_SKU,mu,this.correlationId),this.performanceClient=c}async clearCacheOnLogout(e,n){if(n)try{this.browserStorage.removeAccount(n,e),this.logger.verbose("Cleared cache items belonging to the account provided in the logout request.")}catch{this.logger.error("Account provided in logout request was not found. Local cache unchanged.")}else try{this.logger.verbose("No account provided in logout request, clearing all cache items.",this.correlationId),this.browserStorage.clear(e),await this.browserCrypto.clearKeystore()}catch{this.logger.error("Attempted to clear all MSAL cache items and failed. Local cache unchanged.")}}getRedirectUri(e){this.logger.verbose("getRedirectUri called");const n=e||this.config.auth.redirectUri;return en.getAbsoluteUrl(n,ya())}initializeServerTelemetryManager(e,n){this.logger.verbose("initializeServerTelemetryManager called");const r={clientId:this.config.auth.clientId,correlationId:this.correlationId,apiId:e,forceRefresh:n||!1,wrapperSKU:this.browserStorage.getWrapperMetadata()[0],wrapperVer:this.browserStorage.getWrapperMetadata()[1]};return new Jp(r,this.browserStorage)}async getDiscoveredAuthority(e){const{account:n}=e,r=e.requestExtraQueryParameters&&e.requestExtraQueryParameters.hasOwnProperty("instance_aware")?e.requestExtraQueryParameters.instance_aware:void 0;this.performanceClient.addQueueMeasurement(W.StandardInteractionClientGetDiscoveredAuthority,this.correlationId);const i={protocolMode:this.config.auth.protocolMode,OIDCOptions:this.config.auth.OIDCOptions,knownAuthorities:this.config.auth.knownAuthorities,cloudDiscoveryMetadata:this.config.auth.cloudDiscoveryMetadata,authorityMetadata:this.config.auth.authorityMetadata,skipAuthorityMetadataCache:this.config.auth.skipAuthorityMetadataCache},s=e.requestAuthority||this.config.auth.authority,o=r!=null&&r.length?r==="true":this.config.auth.instanceAware,c=n&&o?this.config.auth.authority.replace(en.getDomainFromUrl(s),n.environment):s,l=Jr.generateAuthority(c,e.requestAzureCloudOptions||this.config.auth.azureCloudOptions),u=await ge(FU,W.AuthorityFactoryCreateDiscoveredInstance,this.logger,this.performanceClient,this.correlationId)(l,this.config.system.networkClient,this.browserStorage,i,this.logger,this.correlationId,this.performanceClient);if(n&&!u.isAlias(n.environment))throw jn(pU);return u}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function HN(t,e,n,r){n.addQueueMeasurement(W.InitializeBaseRequest,t.correlationId);const i=t.authority||e.auth.authority,s=[...t&&t.scopes||[]],o={...t,correlationId:t.correlationId,authority:i,scopes:s};if(!o.authenticationScheme)o.authenticationScheme=yn.BEARER,r.verbose(`Authentication Scheme wasn't explicitly set in request, defaulting to "Bearer" request`);else{if(o.authenticationScheme===yn.SSH){if(!t.sshJwk)throw jn(j0);if(!t.sshKid)throw jn(dU)}r.verbose(`Authentication Scheme set to "${o.authenticationScheme}" as configured in Auth request`)}return e.cache.claimsBasedCachingEnabled&&t.claims&&!$o.isEmptyObj(t.claims)&&(o.requestedClaimsHash=await kB(t.claims)),o}async function sie(t,e,n,r,i){r.addQueueMeasurement(W.InitializeSilentRequest,t.correlationId);const s=await ge(HN,W.InitializeBaseRequest,i,r,t.correlationId)(t,n,r,i);return{...t,...s,account:e,forceRefresh:t.forceRefresh||!1}}function FB(t,e){let n;const r=t.httpMethod;if(e===$i.EAR){if(n=r||Rl.POST,n!==Rl.POST)throw jn(mU)}else n=r||Rl.GET;if(t.authorizePostBodyParameters&&n!==Rl.POST)throw jn(gU);return n}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Vf extends LB{initializeLogoutRequest(e){this.logger.verbose("initializeLogoutRequest called",e==null?void 0:e.correlationId);const n={correlationId:this.correlationId||uo(),...e};if(e)if(e.logoutHint)this.logger.verbose("logoutHint has already been set in logoutRequest");else if(e.account){const r=this.getLogoutHintFromIdTokenClaims(e.account);r&&(this.logger.verbose("Setting logoutHint to login_hint ID Token Claim value for the account provided"),n.logoutHint=r)}else this.logger.verbose("logoutHint was not set and account was not passed into logout request, logoutHint will not be set");else this.logger.verbose("logoutHint will not be set since no logout request was configured");return!e||e.postLogoutRedirectUri!==null?e&&e.postLogoutRedirectUri?(this.logger.verbose("Setting postLogoutRedirectUri to uri set on logout request",n.correlationId),n.postLogoutRedirectUri=en.getAbsoluteUrl(e.postLogoutRedirectUri,ya())):this.config.auth.postLogoutRedirectUri===null?this.logger.verbose("postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect",n.correlationId):this.config.auth.postLogoutRedirectUri?(this.logger.verbose("Setting postLogoutRedirectUri to configured uri",n.correlationId),n.postLogoutRedirectUri=en.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri,ya())):(this.logger.verbose("Setting postLogoutRedirectUri to current page",n.correlationId),n.postLogoutRedirectUri=en.getAbsoluteUrl(ya(),ya())):this.logger.verbose("postLogoutRedirectUri passed as null, not setting post logout redirect uri",n.correlationId),n}getLogoutHintFromIdTokenClaims(e){const n=e.idTokenClaims;if(n){if(n.login_hint)return n.login_hint;this.logger.verbose("The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request")}else this.logger.verbose("The provided account does not contain ID Token Claims, logoutHint will not be added to logout request");return null}async createAuthCodeClient(e){this.performanceClient.addQueueMeasurement(W.StandardInteractionClientCreateAuthCodeClient,this.correlationId);const n=await ge(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,this.correlationId)(e);return new VU(n,this.performanceClient)}async getClientConfiguration(e){const{serverTelemetryManager:n,requestAuthority:r,requestAzureCloudOptions:i,requestExtraQueryParameters:s,account:o}=e;this.performanceClient.addQueueMeasurement(W.StandardInteractionClientGetClientConfiguration,this.correlationId);const c=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,this.correlationId)({requestAuthority:r,requestAzureCloudOptions:i,requestExtraQueryParameters:s,account:o}),l=this.config.system.loggerOptions;return{authOptions:{clientId:this.config.auth.clientId,authority:c,clientCapabilities:this.config.auth.clientCapabilities,redirectUri:this.config.auth.redirectUri},systemOptions:{tokenRenewalOffsetSeconds:this.config.system.tokenRenewalOffsetSeconds,preventCorsPreflight:!0},loggerOptions:{loggerCallback:l.loggerCallback,piiLoggingEnabled:l.piiLoggingEnabled,logLevel:l.logLevel,correlationId:this.correlationId},cacheOptions:{claimsBasedCachingEnabled:this.config.cache.claimsBasedCachingEnabled},cryptoInterface:this.browserCrypto,networkInterface:this.networkClient,storageInterface:this.browserStorage,serverTelemetryManager:n,libraryInfo:{sku:Ni.MSAL_SKU,version:mu,cpu:ve.EMPTY_STRING,os:ve.EMPTY_STRING},telemetry:this.config.telemetry}}async initializeAuthorizationRequest(e,n){this.performanceClient.addQueueMeasurement(W.StandardInteractionClientInitializeAuthorizationRequest,this.correlationId);const r=this.getRedirectUri(e.redirectUri),i={interactionType:n},s=Hf.setRequestState(this.browserCrypto,e&&e.state||ve.EMPTY_STRING,i),c={...await ge(HN,W.InitializeBaseRequest,this.logger,this.performanceClient,this.correlationId)({...e,correlationId:this.correlationId},this.config,this.performanceClient,this.logger),redirectUri:r,state:s,nonce:e.nonce||uo(),responseMode:this.config.auth.OIDCOptions.serverResponseType},l={...c,httpMethod:FB(c,this.config.auth.protocolMode)};if(e.loginHint||e.sid)return l;const u=e.account||this.browserStorage.getActiveAccount(this.correlationId);return u&&(this.logger.verbose("Setting validated request account",this.correlationId),this.logger.verbosePii(`Setting validated request account: ${u.homeAccountId}`,this.correlationId),l.account=u),l}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function oie(t,e){if(!e)return null;try{return Hf.parseRequestState(t,e).libraryState.meta}catch{throw _e(Qd)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function fp(t,e,n){const r=ex(t);if(!r)throw yU(t)?(n.error(`A ${e} is present in the iframe but it does not contain known properties. It's likely that the ${e} has been replaced by code running on the redirectUri page.`),n.errorPii(`The ${e} detected is: ${t}`),Ve(XU)):(n.error(`The request has returned to the redirectUri but a ${e} is not present. It's likely that the ${e} has been removed or the page has been redirected by code running on the redirectUri page.`),Ve(QU));return r}function aie(t,e,n){if(!t.state)throw Ve(NN);const r=oie(e,t.state);if(!r)throw Ve(JU);if(r.interactionType!==n)throw Ve(ZU)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class UB{constructor(e,n,r,i,s){this.authModule=e,this.browserStorage=n,this.authCodeRequest=r,this.logger=i,this.performanceClient=s}async handleCodeResponse(e,n){this.performanceClient.addQueueMeasurement(W.HandleCodeResponse,n.correlationId);let r;try{r=Xne(e,n.state)}catch(i){throw i instanceof Tu&&i.subError===Zp?Ve(Zp):i}return ge(this.handleCodeResponseFromServer.bind(this),W.HandleCodeResponseFromServer,this.logger,this.performanceClient,n.correlationId)(r,n)}async handleCodeResponseFromServer(e,n,r=!0){if(this.performanceClient.addQueueMeasurement(W.HandleCodeResponseFromServer,n.correlationId),this.logger.trace("InteractionHandler.handleCodeResponseFromServer called"),this.authCodeRequest.code=e.code,e.cloud_instance_host_name&&await ge(this.authModule.updateAuthority.bind(this.authModule),W.UpdateTokenEndpointAuthority,this.logger,this.performanceClient,n.correlationId)(e.cloud_instance_host_name,n.correlationId),r&&(e.nonce=n.nonce||void 0),e.state=n.state,e.client_info)this.authCodeRequest.clientInfo=e.client_info;else{const s=this.createCcsCredentials(n);s&&(this.authCodeRequest.ccsCredential=s)}return await ge(this.authModule.acquireToken.bind(this.authModule),W.AuthClientAcquireToken,this.logger,this.performanceClient,n.correlationId)(this.authCodeRequest,e)}createCcsCredentials(e){return e.account?{credential:e.account.homeAccountId,type:Ws.HOME_ACCOUNT_ID}:e.loginHint?{credential:e.loginHint,type:Ws.UPN}:null}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const cie="ContentError",BB="user_switch";/*! @azure/msal-browser v4.19.0 2025-08-05 */const lie="USER_INTERACTION_REQUIRED",uie="USER_CANCEL",die="NO_NETWORK",fie="PERSISTENT_ERROR",hie="DISABLED",pie="ACCOUNT_UNAVAILABLE",mie="UX_NOT_ALLOWED";/*! @azure/msal-browser v4.19.0 2025-08-05 */const gie=-2147186943,vie={[BB]:"User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again."};class Po extends Cn{constructor(e,n,r){super(e,n),Object.setPrototypeOf(this,Po.prototype),this.name="NativeAuthError",this.ext=r}}function qu(t){if(t.ext&&t.ext.status&&(t.ext.status===fie||t.ext.status===hie)||t.ext&&t.ext.error&&t.ext.error===gie)return!0;switch(t.errorCode){case cie:return!0;default:return!1}}function px(t,e,n){if(n&&n.status)switch(n.status){case pie:return lx(BU);case lie:return new lo(t,e);case uie:return Ve(Zp);case die:return Ve(ux);case mie:return lx(wN)}return new Po(t,vie[t]||e,n)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class HB extends Vf{async acquireToken(e){this.performanceClient.addQueueMeasurement(W.SilentCacheClientAcquireToken,e.correlationId);const n=this.initializeServerTelemetryManager(Sn.acquireTokenSilent_silentFlow),r=await ge(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:n,requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,account:e.account}),i=new qne(r,this.performanceClient);this.logger.verbose("Silent auth client created");try{const o=(await ge(i.acquireCachedToken.bind(i),W.SilentFlowClientAcquireCachedToken,this.logger,this.performanceClient,e.correlationId)(e))[0];return this.performanceClient.addFields({fromCache:!0},e.correlationId),o}catch(s){throw s instanceof yg&&s.errorCode===TN&&this.logger.verbose("Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair."),s}}logout(e){this.logger.verbose("logoutRedirect called");const n=this.initializeLogoutRequest(e);return this.clearCacheOnLogout(n.correlationId,n==null?void 0:n.account)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class iy extends LB{constructor(e,n,r,i,s,o,c,l,u,d,f,h){super(e,n,r,i,s,o,l,u,h),this.apiId=c,this.accountId=d,this.platformAuthProvider=u,this.nativeStorageManager=f,this.silentCacheClient=new HB(e,this.nativeStorageManager,r,i,s,o,l,u,h);const p=this.platformAuthProvider.getExtensionName();this.skus=Jp.makeExtraSkuString({libraryName:Ni.MSAL_SKU,libraryVersion:mu,extensionName:p,extensionVersion:this.platformAuthProvider.getExtensionVersion()})}addRequestSKUs(e){e.extraParameters={...e.extraParameters,[lne]:this.skus}}async acquireToken(e,n){this.performanceClient.addQueueMeasurement(W.NativeInteractionClientAcquireToken,e.correlationId),this.logger.trace("NativeInteractionClient - acquireToken called.");const r=this.performanceClient.startMeasurement(W.NativeInteractionClientAcquireToken,e.correlationId),i=Li(),s=this.initializeServerTelemetryManager(this.apiId);try{const o=await this.initializeNativeRequest(e);try{const l=await this.acquireTokensFromCache(this.accountId,o);return r.end({success:!0,isNativeBroker:!1,fromCache:!0}),l}catch(l){if(n===ci.AccessToken)throw this.logger.info("MSAL internal Cache does not contain tokens, return error as per cache policy"),l;this.logger.info("MSAL internal Cache does not contain tokens, proceed to make a native call")}const c=await this.platformAuthProvider.sendMessage(o);return await this.handleNativeResponse(c,o,i).then(l=>(r.end({success:!0,isNativeBroker:!0,requestId:l.requestId}),s.clearNativeBrokerErrorCode(),l)).catch(l=>{throw r.end({success:!1,errorCode:l.errorCode,subErrorCode:l.subError,isNativeBroker:!0}),l})}catch(o){throw o instanceof Po&&s.setNativeBrokerErrorCode(o.errorCode),o}}createSilentCacheRequest(e,n){return{authority:e.authority,correlationId:this.correlationId,scopes:Ar.fromString(e.scope).asArray(),account:n,forceRefresh:!1}}async acquireTokensFromCache(e,n){if(!e)throw this.logger.warning("NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided"),_e(t1);const r=this.browserStorage.getBaseAccountInfo({nativeAccountId:e},this.correlationId);if(!r)throw _e(t1);try{const i=this.createSilentCacheRequest(n,r),s=await this.silentCacheClient.acquireToken(i),o={...r,idTokenClaims:s==null?void 0:s.idTokenClaims,idToken:s==null?void 0:s.idToken};return{...s,account:o}}catch(i){throw i}}async acquireTokenRedirect(e,n){this.logger.trace("NativeInteractionClient - acquireTokenRedirect called.");const{...r}=e;delete r.onRedirectNavigate;const i=await this.initializeNativeRequest(r);try{await this.platformAuthProvider.sendMessage(i)}catch(c){if(c instanceof Po&&(this.initializeServerTelemetryManager(this.apiId).setNativeBrokerErrorCode(c.errorCode),qu(c)))throw c}this.browserStorage.setTemporaryCache(hr.NATIVE_REQUEST,JSON.stringify(i),!0);const s={apiId:Sn.acquireTokenRedirect,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},o=this.config.auth.navigateToLoginRequestUrl?window.location.href:this.getRedirectUri(e.redirectUri);n.end({success:!0}),await this.navigationClient.navigateExternal(o,s)}async handleRedirectPromise(e,n){if(this.logger.trace("NativeInteractionClient - handleRedirectPromise called."),!this.browserStorage.isInteractionInProgress(!0))return this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null."),null;const r=this.browserStorage.getCachedNativeRequest();if(!r)return this.logger.verbose("NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null."),e&&n&&(e==null||e.addFields({errorCode:"no_cached_request"},n)),null;const{prompt:i,...s}=r;i&&this.logger.verbose("NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window."),this.browserStorage.removeItem(this.browserStorage.generateCacheKey(hr.NATIVE_REQUEST));const o=Li();try{this.logger.verbose("NativeInteractionClient - handleRedirectPromise sending message to native broker.");const c=await this.platformAuthProvider.sendMessage(s),l=await this.handleNativeResponse(c,s,o);return this.initializeServerTelemetryManager(this.apiId).clearNativeBrokerErrorCode(),l}catch(c){throw c}}logout(){return this.logger.trace("NativeInteractionClient - logout called."),Promise.reject("Logout not implemented yet")}async handleNativeResponse(e,n,r){var d,f;this.logger.trace("NativeInteractionClient - handleNativeResponse called.");const i=Bf(e.id_token,Zs),s=this.createHomeAccountIdentifier(e,i),o=(d=this.browserStorage.getAccountInfoFilteredBy({nativeAccountId:n.accountId},this.correlationId))==null?void 0:d.homeAccountId;if((f=n.extraParameters)!=null&&f.child_client_id&&e.account.id!==n.accountId)this.logger.info("handleNativeServerResponse: Double broker flow detected, ignoring accountId mismatch");else if(s!==o&&e.account.id!==n.accountId)throw px(BB);const c=await this.getDiscoveredAuthority({requestAuthority:n.authority}),l=SN(this.browserStorage,c,s,Zs,this.correlationId,i,e.client_info,void 0,i.tid,void 0,e.account.id,this.logger);e.expires_in=Number(e.expires_in);const u=await this.generateAuthenticationResult(e,n,i,l,c.canonicalAuthority,r);return await this.cacheAccount(l,this.correlationId),await this.cacheNativeTokens(e,n,s,i,e.access_token,u.tenantId,r),u}createHomeAccountIdentifier(e,n){return co.generateHomeAccountId(e.client_info||ve.EMPTY_STRING,Bs.Default,this.logger,this.browserCrypto,n)}generateScopes(e,n){return n?Ar.fromString(n):Ar.fromString(e)}async generatePopAccessToken(e,n){if(n.tokenType===yn.POP&&n.signPopToken){if(e.shr)return this.logger.trace("handleNativeServerResponse: SHR is enabled in native layer"),e.shr;const r=new Xd(this.browserCrypto),i={resourceRequestMethod:n.resourceRequestMethod,resourceRequestUri:n.resourceRequestUri,shrClaims:n.shrClaims,shrNonce:n.shrNonce};if(!n.keyId)throw _e(QE);return r.signPopToken(e.access_token,n.keyId,i)}else return e.access_token}async generateAuthenticationResult(e,n,r,i,s,o){const c=this.addTelemetryFromNativeResponse(e.properties.MATS),l=this.generateScopes(n.scope,e.scope),u=e.account.properties||{},d=u.UID||r.oid||r.sub||ve.EMPTY_STRING,f=u.TenantId||r.tid||ve.EMPTY_STRING,h=sN(i.getAccountInfo(),void 0,r,e.id_token);h.nativeAccountId!==e.account.id&&(h.nativeAccountId=e.account.id);const p=await this.generatePopAccessToken(e,n),g=n.tokenType===yn.POP?yn.POP:yn.BEARER;return{authority:s,uniqueId:d,tenantId:f,scopes:l.asArray(),account:h,idToken:e.id_token,idTokenClaims:r,accessToken:p,fromCache:c?this.isResponseFromCache(c):!1,expiresOn:Cd(o+e.expires_in),tokenType:g,correlationId:this.correlationId,state:e.state,fromNativeBroker:!0}}async cacheAccount(e,n){await this.browserStorage.setAccount(e,this.correlationId),this.browserStorage.removeAccountContext(e.getAccountInfo(),n)}cacheNativeTokens(e,n,r,i,s,o,c){const l=P0(r,n.authority,e.id_token||"",n.clientId,i.tid||""),u=n.tokenType===yn.POP?ve.SHR_NONCE_VALIDITY:(typeof e.expires_in=="string"?parseInt(e.expires_in,10):e.expires_in)||0,d=c+u,f=this.generateScopes(e.scope,n.scope),h=k0(r,n.authority,s,n.clientId,i.tid||o,f.printScopes(),d,0,Zs,void 0,n.tokenType,void 0,n.keyId),p={idToken:l,accessToken:h};return this.nativeStorageManager.saveCacheRecord(p,this.correlationId,n.storeInCache)}getExpiresInValue(e,n){return e===yn.POP?ve.SHR_NONCE_VALIDITY:(typeof n=="string"?parseInt(n,10):n)||0}addTelemetryFromNativeResponse(e){const n=this.getMATSFromResponse(e);return n?(this.performanceClient.addFields({extensionId:this.platformAuthProvider.getExtensionId(),extensionVersion:this.platformAuthProvider.getExtensionVersion(),matsBrokerVersion:n.broker_version,matsAccountJoinOnStart:n.account_join_on_start,matsAccountJoinOnEnd:n.account_join_on_end,matsDeviceJoin:n.device_join,matsPromptBehavior:n.prompt_behavior,matsApiErrorCode:n.api_error_code,matsUiVisible:n.ui_visible,matsSilentCode:n.silent_code,matsSilentBiSubCode:n.silent_bi_sub_code,matsSilentMessage:n.silent_message,matsSilentStatus:n.silent_status,matsHttpStatus:n.http_status,matsHttpEventCount:n.http_event_count},this.correlationId),n):null}getMATSFromResponse(e){if(e)try{return JSON.parse(e)}catch{this.logger.error("NativeInteractionClient - Error parsing MATS telemetry, returning null instead")}return null}isResponseFromCache(e){return typeof e.is_cached>"u"?(this.logger.verbose("NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false."),!1):!!e.is_cached}async initializeNativeRequest(e){this.logger.trace("NativeInteractionClient - initializeNativeRequest called");const n=await this.getCanonicalAuthority(e),{scopes:r,...i}=e,s=new Ar(r||[]);s.appendScopes(vg);const o={...i,accountId:this.accountId,clientId:this.config.auth.clientId,authority:n.urlString,scope:s.printScopes(),redirectUri:this.getRedirectUri(e.redirectUri),prompt:this.getPrompt(e.prompt),correlationId:this.correlationId,tokenType:e.authenticationScheme,windowTitleSubstring:document.title,extraParameters:{...e.extraQueryParameters,...e.tokenQueryParameters},extendedExpiryToken:!1,keyId:e.popKid};if(o.signPopToken&&e.popKid)throw Ve(wB);if(this.handleExtraBrokerParams(o),o.extraParameters=o.extraParameters||{},o.extraParameters.telemetry=gs.MATS_TELEMETRY,e.authenticationScheme===yn.POP){const c={resourceRequestUri:e.resourceRequestUri,resourceRequestMethod:e.resourceRequestMethod,shrClaims:e.shrClaims,shrNonce:e.shrNonce},l=new Xd(this.browserCrypto);let u;if(o.keyId)u=this.browserCrypto.base64UrlEncode(JSON.stringify({kid:o.keyId})),o.signPopToken=!1;else{const d=await ge(l.generateCnf.bind(l),W.PopTokenGenerateCnf,this.logger,this.performanceClient,e.correlationId)(c,this.logger);u=d.reqCnfString,o.keyId=d.kid,o.signPopToken=!0}o.reqCnf=u}return this.addRequestSKUs(o),o}async getCanonicalAuthority(e){const n=e.authority||this.config.auth.authority;e.account&&await this.getDiscoveredAuthority({requestAuthority:n,requestAzureCloudOptions:e.azureCloudOptions,account:e.account});const r=new en(n);return r.validateAsUri(),r}getPrompt(e){switch(this.apiId){case Sn.ssoSilent:case Sn.acquireTokenSilent_silentFlow:return this.logger.trace("initializeNativeRequest: silent request sets prompt to none"),pi.NONE}if(!e){this.logger.trace("initializeNativeRequest: prompt was not provided");return}switch(e){case pi.NONE:case pi.CONSENT:case pi.LOGIN:return this.logger.trace("initializeNativeRequest: prompt is compatible with native flow"),e;default:throw this.logger.trace(`initializeNativeRequest: prompt = ${e} is not compatible with native flow`),Ve(xB)}}handleExtraBrokerParams(e){var s;const n=e.extraParameters&&e.extraParameters.hasOwnProperty(ix)&&e.extraParameters.hasOwnProperty(sx)&&e.extraParameters.hasOwnProperty(hu);if(!e.embeddedClientId&&!n)return;let r="";const i=e.redirectUri;e.embeddedClientId?(e.redirectUri=this.config.auth.redirectUri,r=e.embeddedClientId):e.extraParameters&&(e.redirectUri=e.extraParameters[sx],r=e.extraParameters[hu]),e.extraParameters={child_client_id:r,child_redirect_uri:i},(s=this.performanceClient)==null||s.addFields({embeddedClientId:r,embeddedRedirectUri:i},e.correlationId)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function zN(t,e,n,r,i){const s=Qne({...t.auth,authority:e},n,r,i);if(pN(s,{sku:Ni.MSAL_SKU,version:mu,os:"",cpu:""}),t.auth.protocolMode!==$i.OIDC&&mN(s,t.telemetry.application),n.platformBroker&&(hne(s),n.authenticationScheme===yn.POP)){const o=new Da(r,i),c=new Xd(o);let l;n.popKid?l=o.encodeKid(n.popKid):l=(await ge(c.generateCnf.bind(c),W.PopTokenGenerateCnf,r,i,n.correlationId)(n,r)).reqCnfString,vN(s,l)}return E0(s,n.correlationId,i),s}async function VN(t,e,n,r,i){if(!n.codeChallenge)throw jn(tN);const s=await ge(zN,W.GetStandardParams,r,i,n.correlationId)(t,e,n,r,i);return cN(s,zE.CODE),NU(s,n.codeChallenge,ve.S256_CODE_CHALLENGE_METHOD),Mc(s,n.extraQueryParameters||{}),CN(e,s,t.auth.encodeExtraQueryParams,n.extraQueryParameters)}async function GN(t,e,n,r,i,s){if(!r.earJwk)throw Ve(EN);const o=await zN(e,n,r,i,s);cN(o,zE.IDTOKEN_TOKEN_REFRESHTOKEN),_ne(o,r.earJwk);const c=new Map;Mc(c,r.extraQueryParameters||{});const l=CN(n,c,e.auth.encodeExtraQueryParams,r.extraQueryParameters);return zB(t,l,o)}async function KN(t,e,n,r,i,s){const o=await zN(e,n,r,i,s);cN(o,zE.CODE),NU(o,r.codeChallenge,r.codeChallengeMethod||ve.S256_CODE_CHALLENGE_METHOD),Ane(o,r.authorizePostBodyParameters||{});const c=new Map;Mc(c,r.extraQueryParameters||{});const l=CN(n,c,e.auth.encodeExtraQueryParams,r.extraQueryParameters);return zB(t,l,o)}function zB(t,e,n){const r=t.createElement("form");return r.method="post",r.action=e,n.forEach((i,s)=>{const o=t.createElement("input");o.hidden=!0,o.name=s,o.value=i,r.appendChild(o)}),t.body.appendChild(r),r}async function VB(t,e,n,r,i,s,o,c,l,u){if(c.verbose("Account id found, calling WAM for token"),!u)throw Ve(kN);const d=new Da(c,l),f=new iy(r,i,d,c,o,r.system.navigationClient,n,l,u,e,s,t.correlationId),{userRequestState:h}=Hf.parseRequestState(d,t.state);return ge(f.acquireToken.bind(f),W.NativeInteractionClientAcquireToken,c,l,t.correlationId)({...t,state:h,prompt:void 0})}async function mx(t,e,n,r,i,s,o,c,l,u,d,f){if(To.removeThrottle(o,i.auth.clientId,t),e.accountId)return ge(VB,W.HandleResponsePlatformBroker,u,d,t.correlationId)(t,e.accountId,r,i,o,c,l,u,d,f);const h={...t,code:e.code||"",codeVerifier:n},p=new UB(s,o,h,u,d);return await ge(p.handleCodeResponse.bind(p),W.HandleCodeResponse,u,d,t.correlationId)(e,t)}async function WN(t,e,n,r,i,s,o,c,l,u,d){if(To.removeThrottle(s,r.auth.clientId,t),GU(e,t.state),!e.ear_jwe)throw Ve(YU);if(!t.earJwk)throw Ve(EN);const f=JSON.parse(await ge(Are,W.DecryptEarResponse,l,u,t.correlationId)(t.earJwk,e.ear_jwe));if(f.accountId)return ge(VB,W.HandleResponsePlatformBroker,l,u,t.correlationId)(t,f.accountId,n,r,s,o,c,l,u,d);const h=new pu(r.auth.clientId,s,new Da(l,u),l,null,null,u);h.validateTokenResponse(f);const p={code:"",state:t.state,nonce:t.nonce,client_info:f.client_info,cloud_graph_host_name:f.cloud_graph_host_name,cloud_instance_host_name:f.cloud_instance_host_name,cloud_instance_name:f.cloud_instance_name,msgraph_host:f.msgraph_host};return await ge(h.handleServerTokenResponse.bind(h),W.HandleServerTokenResponse,l,u,t.correlationId)(f,i,Li(),t,p,void 0,void 0,void 0,void 0)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const yie=32;async function F0(t,e,n){t.addQueueMeasurement(W.GeneratePkceCodes,n);const r=es(xie,W.GenerateCodeVerifier,e,t,n)(t,e,n),i=await ge(bie,W.GenerateCodeChallengeFromVerifier,e,t,n)(r,t,e,n);return{verifier:r,challenge:i}}function xie(t,e,n){try{const r=new Uint8Array(yie);return es(bre,W.GetRandomValues,e,t,n)(r),Jc(r)}catch{throw Ve(jN)}}async function bie(t,e,n,r){e.addQueueMeasurement(W.GenerateCodeChallengeFromVerifier,r);try{const i=await ge(NB,W.Sha256Digest,n,e,r)(t,e,r);return Jc(new Uint8Array(i))}catch{throw Ve(jN)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class gx{constructor(e,n,r,i){this.logger=e,this.handshakeTimeoutMs=n,this.extensionId=i,this.resolvers=new Map,this.handshakeResolvers=new Map,this.messageChannel=new MessageChannel,this.windowListener=this.onWindowMessage.bind(this),this.performanceClient=r,this.handshakeEvent=r.startMeasurement(W.NativeMessageHandlerHandshake),this.platformAuthType=gs.PLATFORM_EXTENSION_PROVIDER}async sendMessage(e){this.logger.trace(this.platformAuthType+" - sendMessage called.");const n={method:Ch.GetToken,request:e},r={channel:gs.CHANNEL_ID,extensionId:this.extensionId,responseId:uo(),body:n};this.logger.trace(this.platformAuthType+" - Sending request to browser extension"),this.logger.tracePii(this.platformAuthType+` - Sending request to browser extension: ${JSON.stringify(r)}`),this.messageChannel.port1.postMessage(r);const i=await new Promise((o,c)=>{this.resolvers.set(r.responseId,{resolve:o,reject:c})});return this.validatePlatformBrokerResponse(i)}static async createProvider(e,n,r){e.trace("PlatformAuthExtensionHandler - createProvider called.");try{const i=new gx(e,n,r,gs.PREFERRED_EXTENSION_ID);return await i.sendHandshakeRequest(),i}catch{const s=new gx(e,n,r);return await s.sendHandshakeRequest(),s}}async sendHandshakeRequest(){this.logger.trace(this.platformAuthType+" - sendHandshakeRequest called."),window.addEventListener("message",this.windowListener,!1);const e={channel:gs.CHANNEL_ID,extensionId:this.extensionId,responseId:uo(),body:{method:Ch.HandshakeRequest}};return this.handshakeEvent.add({extensionId:this.extensionId,extensionHandshakeTimeoutMs:this.handshakeTimeoutMs}),this.messageChannel.port1.onmessage=n=>{this.onChannelMessage(n)},window.postMessage(e,window.origin,[this.messageChannel.port2]),new Promise((n,r)=>{this.handshakeResolvers.set(e.responseId,{resolve:n,reject:r}),this.timeoutId=window.setTimeout(()=>{window.removeEventListener("message",this.windowListener,!1),this.messageChannel.port1.close(),this.messageChannel.port2.close(),this.handshakeEvent.end({extensionHandshakeTimedOut:!0,success:!1}),r(Ve(vB)),this.handshakeResolvers.delete(e.responseId)},this.handshakeTimeoutMs)})}onWindowMessage(e){if(this.logger.trace(this.platformAuthType+" - onWindowMessage called"),e.source!==window)return;const n=e.data;if(!(!n.channel||n.channel!==gs.CHANNEL_ID)&&!(n.extensionId&&n.extensionId!==this.extensionId)&&n.body.method===Ch.HandshakeRequest){const r=this.handshakeResolvers.get(n.responseId);if(!r){this.logger.trace(this.platformAuthType+`.onWindowMessage - resolver can't be found for request ${n.responseId}`);return}this.logger.verbose(n.extensionId?`Extension with id: ${n.extensionId} not installed`:"No extension installed"),clearTimeout(this.timeoutId),this.messageChannel.port1.close(),this.messageChannel.port2.close(),window.removeEventListener("message",this.windowListener,!1),this.handshakeEvent.end({success:!1,extensionInstalled:!1}),r.reject(Ve(yB))}}onChannelMessage(e){this.logger.trace(this.platformAuthType+" - onChannelMessage called.");const n=e.data,r=this.resolvers.get(n.responseId),i=this.handshakeResolvers.get(n.responseId);try{const s=n.body.method;if(s===Ch.Response){if(!r)return;const o=n.body.response;if(this.logger.trace(this.platformAuthType+" - Received response from browser extension"),this.logger.tracePii(this.platformAuthType+` - Received response from browser extension: ${JSON.stringify(o)}`),o.status!=="Success")r.reject(px(o.code,o.description,o.ext));else if(o.result)o.result.code&&o.result.description?r.reject(px(o.result.code,o.result.description,o.result.ext)):r.resolve(o.result);else throw J_(Jy,"Event does not contain result.");this.resolvers.delete(n.responseId)}else if(s===Ch.HandshakeResponse){if(!i){this.logger.trace(this.platformAuthType+`.onChannelMessage - resolver can't be found for request ${n.responseId}`);return}clearTimeout(this.timeoutId),window.removeEventListener("message",this.windowListener,!1),this.extensionId=n.extensionId,this.extensionVersion=n.body.version,this.logger.verbose(this.platformAuthType+` - Received HandshakeResponse from extension: ${this.extensionId}`),this.handshakeEvent.end({extensionInstalled:!0,success:!0}),i.resolve(),this.handshakeResolvers.delete(n.responseId)}}catch(s){this.logger.error("Error parsing response from WAM Extension"),this.logger.errorPii(`Error parsing response from WAM Extension: ${s}`),this.logger.errorPii(`Unable to parse ${e}`),r?r.reject(s):i&&i.reject(s)}}validatePlatformBrokerResponse(e){if(e.hasOwnProperty("access_token")&&e.hasOwnProperty("id_token")&&e.hasOwnProperty("client_info")&&e.hasOwnProperty("account")&&e.hasOwnProperty("scope")&&e.hasOwnProperty("expires_in"))return e;throw J_(Jy,"Response missing expected properties.")}getExtensionId(){return this.extensionId}getExtensionVersion(){return this.extensionVersion}getExtensionName(){var e;return this.getExtensionId()===gs.PREFERRED_EXTENSION_ID?"chrome":(e=this.getExtensionId())!=null&&e.length?"unknown":void 0}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class qN{constructor(e,n,r){this.logger=e,this.performanceClient=n,this.correlationId=r,this.platformAuthType=gs.PLATFORM_DOM_PROVIDER}static async createProvider(e,n,r){var i;if(e.trace("PlatformAuthDOMHandler: createProvider called"),(i=window.navigator)!=null&&i.platformAuthentication){const s=await window.navigator.platformAuthentication.getSupportedContracts(gs.MICROSOFT_ENTRA_BROKERID);if(s!=null&&s.includes(gs.PLATFORM_DOM_APIS))return e.trace("Platform auth api available in DOM"),new qN(e,n,r)}}getExtensionId(){return gs.MICROSOFT_ENTRA_BROKERID}getExtensionVersion(){return""}getExtensionName(){return gs.DOM_API_NAME}async sendMessage(e){this.logger.trace(this.platformAuthType+" - Sending request to browser DOM API");try{const n=this.initializePlatformDOMRequest(e),r=await window.navigator.platformAuthentication.executeGetToken(n);return this.validatePlatformBrokerResponse(r)}catch(n){throw this.logger.error(this.platformAuthType+" - executeGetToken DOM API error"),n}}initializePlatformDOMRequest(e){this.logger.trace(this.platformAuthType+" - initializeNativeDOMRequest called");const{accountId:n,clientId:r,authority:i,scope:s,redirectUri:o,correlationId:c,state:l,storeInCache:u,embeddedClientId:d,extraParameters:f,...h}=e,p=this.getDOMExtraParams(h);return{accountId:n,brokerId:this.getExtensionId(),authority:i,clientId:r,correlationId:c||this.correlationId,extraParameters:{...f,...p},isSecurityTokenService:!1,redirectUri:o,scope:s,state:l,storeInCache:u,embeddedClientId:d}}validatePlatformBrokerResponse(e){if(e.hasOwnProperty("isSuccess")){if(e.hasOwnProperty("accessToken")&&e.hasOwnProperty("idToken")&&e.hasOwnProperty("clientInfo")&&e.hasOwnProperty("account")&&e.hasOwnProperty("scopes")&&e.hasOwnProperty("expiresIn"))return this.logger.trace(this.platformAuthType+" - platform broker returned successful and valid response"),this.convertToPlatformBrokerResponse(e);if(e.hasOwnProperty("error")){const n=e;if(n.isSuccess===!1&&n.error&&n.error.code)throw this.logger.trace(this.platformAuthType+" - platform broker returned error response"),px(n.error.code,n.error.description,{error:parseInt(n.error.errorCode),protocol_error:n.error.protocolError,status:n.error.status,properties:n.error.properties})}}throw J_(Jy,"Response missing expected properties.")}convertToPlatformBrokerResponse(e){return this.logger.trace(this.platformAuthType+" - convertToNativeResponse called"),{access_token:e.accessToken,id_token:e.idToken,client_info:e.clientInfo,account:e.account,expires_in:e.expiresIn,scope:e.scopes,state:e.state||"",properties:e.properties||{},extendedLifetimeToken:e.extendedLifetimeToken??!1,shr:e.proofOfPossessionPayload}}getDOMExtraParams(e){return{...Object.entries(e).reduce((i,[s,o])=>(i[s]=String(o),i),{})}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function wie(t,e,n,r){t.trace("getPlatformAuthProvider called",n);const i=Sie();t.trace("Has client allowed platform auth via DOM API: "+i);let s;try{i&&(s=await qN.createProvider(t,e,n)),s||(t.trace("Platform auth via DOM API not available, checking for extension"),s=await gx.createProvider(t,r||DB,e))}catch(o){t.trace("Platform auth not available",o)}return s}function Sie(){let t;try{return t=window[jr.SessionStorage],(t==null?void 0:t.getItem(Bre))==="true"}catch{return!1}}function nm(t,e,n,r){if(e.trace("isPlatformAuthAllowed called"),!t.system.allowPlatformBroker)return e.trace("isPlatformAuthAllowed: allowPlatformBroker is not enabled, returning false"),!1;if(!n)return e.trace("isPlatformAuthAllowed: Platform auth provider is not initialized, returning false"),!1;if(r)switch(r){case yn.BEARER:case yn.POP:return e.trace("isPlatformAuthAllowed: authenticationScheme is supported, returning true"),!0;default:return e.trace("isPlatformAuthAllowed: authenticationScheme is not supported, returning false"),!1}return!0}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Cie extends Vf{constructor(e,n,r,i,s,o,c,l,u,d){super(e,n,r,i,s,o,c,u,d),this.unloadWindow=this.unloadWindow.bind(this),this.nativeStorage=l,this.eventHandler=s}acquireToken(e,n){let r;try{if(r={popupName:this.generatePopupName(e.scopes||vg,e.authority||this.config.auth.authority),popupWindowAttributes:e.popupWindowAttributes||{},popupWindowParent:e.popupWindowParent??window},this.performanceClient.addFields({isAsyncPopup:this.config.system.asyncPopups},this.correlationId),this.config.system.asyncPopups)return this.logger.verbose("asyncPopups set to true, acquiring token"),this.acquireTokenPopupAsync(e,r,n);{const s={...e,httpMethod:FB(e,this.config.auth.protocolMode)};return this.logger.verbose("asyncPopup set to false, opening popup before acquiring token"),r.popup=this.openSizedPopup("about:blank",r),this.acquireTokenPopupAsync(s,r,n)}}catch(i){return Promise.reject(i)}}logout(e){try{this.logger.verbose("logoutPopup called");const n=this.initializeLogoutRequest(e),r={popupName:this.generateLogoutPopupName(n),popupWindowAttributes:(e==null?void 0:e.popupWindowAttributes)||{},popupWindowParent:(e==null?void 0:e.popupWindowParent)??window},i=e&&e.authority,s=e&&e.mainWindowRedirectUri;return this.config.system.asyncPopups?(this.logger.verbose("asyncPopups set to true"),this.logoutPopupAsync(n,r,i,s)):(this.logger.verbose("asyncPopup set to false, opening popup"),r.popup=this.openSizedPopup("about:blank",r),this.logoutPopupAsync(n,r,i,s))}catch(n){return Promise.reject(n)}}async acquireTokenPopupAsync(e,n,r){this.logger.verbose("acquireTokenPopupAsync called");const i=await ge(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,this.correlationId)(e,bt.Popup);n.popup&&MB(i.authority);const s=nm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme);return i.platformBroker=s,this.config.auth.protocolMode===$i.EAR?this.executeEarFlow(i,n):this.executeCodeFlow(i,n,r)}async executeCodeFlow(e,n,r){var l;const i=e.correlationId,s=this.initializeServerTelemetryManager(Sn.acquireTokenPopup),o=r||await ge(F0,W.GeneratePkceCodes,this.logger,this.performanceClient,i)(this.performanceClient,this.logger,i),c={...e,codeChallenge:o.challenge};try{const u=await ge(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,i)({serverTelemetryManager:s,requestAuthority:c.authority,requestAzureCloudOptions:c.azureCloudOptions,requestExtraQueryParameters:c.extraQueryParameters,account:c.account});if(c.httpMethod===Rl.POST)return await this.executeCodeFlowWithPost(c,n,u,o.verifier);{const d=await ge(VN,W.GetAuthCodeUrl,this.logger,this.performanceClient,i)(this.config,u.authority,c,this.logger,this.performanceClient),f=this.initiateAuthRequest(d,n);this.eventHandler.emitEvent(Ye.POPUP_OPENED,bt.Popup,{popupWindow:f},null);const h=await this.monitorPopupForHash(f,n.popupWindowParent),p=es(fp,W.DeserializeResponse,this.logger,this.performanceClient,this.correlationId)(h,this.config.auth.OIDCOptions.serverResponseType,this.logger);return await ge(mx,W.HandleResponseCode,this.logger,this.performanceClient,i)(e,p,o.verifier,Sn.acquireTokenPopup,this.config,u,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}}catch(u){throw(l=n.popup)==null||l.close(),u instanceof Cn&&(u.setCorrelationId(this.correlationId),s.cacheFailedRequest(u)),u}}async executeEarFlow(e,n){const r=e.correlationId,i=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,r)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),s=await ge(DN,W.GenerateEarKey,this.logger,this.performanceClient,r)(),o={...e,earJwk:s},c=n.popup||this.openPopup("about:blank",n);(await GN(c.document,this.config,i,o,this.logger,this.performanceClient)).submit();const u=await ge(this.monitorPopupForHash.bind(this),W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,r)(c,n.popupWindowParent),d=es(fp,W.DeserializeResponse,this.logger,this.performanceClient,this.correlationId)(u,this.config.auth.OIDCOptions.serverResponseType,this.logger);return ge(WN,W.HandleResponseEar,this.logger,this.performanceClient,r)(o,d,Sn.acquireTokenPopup,this.config,i,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}async executeCodeFlowWithPost(e,n,r,i){const s=e.correlationId,o=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,s)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),c=n.popup||this.openPopup("about:blank",n);(await KN(c.document,this.config,o,e,this.logger,this.performanceClient)).submit();const u=await ge(this.monitorPopupForHash.bind(this),W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,s)(c,n.popupWindowParent),d=es(fp,W.DeserializeResponse,this.logger,this.performanceClient,this.correlationId)(u,this.config.auth.OIDCOptions.serverResponseType,this.logger);return ge(mx,W.HandleResponseCode,this.logger,this.performanceClient,s)(e,d,i,Sn.acquireTokenPopup,this.config,r,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}async logoutPopupAsync(e,n,r,i){var o,c,l;this.logger.verbose("logoutPopupAsync called"),this.eventHandler.emitEvent(Ye.LOGOUT_START,bt.Popup,e);const s=this.initializeServerTelemetryManager(Sn.logoutPopup);try{await this.clearCacheOnLogout(this.correlationId,e.account);const u=await ge(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:s,requestAuthority:r,account:e.account||void 0});try{u.authority.endSessionEndpoint}catch{if((o=e.account)!=null&&o.homeAccountId&&e.postLogoutRedirectUri&&u.authority.protocolMode===$i.OIDC){if(this.eventHandler.emitEvent(Ye.LOGOUT_SUCCESS,bt.Popup,e),i){const h={apiId:Sn.logoutPopup,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},p=en.getAbsoluteUrl(i,ya());await this.navigationClient.navigateInternal(p,h)}(c=n.popup)==null||c.close();return}}const d=u.getLogoutUri(e);this.eventHandler.emitEvent(Ye.LOGOUT_SUCCESS,bt.Popup,e);const f=this.openPopup(d,n);if(this.eventHandler.emitEvent(Ye.POPUP_OPENED,bt.Popup,{popupWindow:f},null),await this.monitorPopupForHash(f,n.popupWindowParent).catch(()=>{}),i){const h={apiId:Sn.logoutPopup,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},p=en.getAbsoluteUrl(i,ya());this.logger.verbose("Redirecting main window to url specified in the request"),this.logger.verbosePii(`Redirecting main window to: ${p}`),await this.navigationClient.navigateInternal(p,h)}else this.logger.verbose("No main window navigation requested")}catch(u){throw(l=n.popup)==null||l.close(),u instanceof Cn&&(u.setCorrelationId(this.correlationId),s.cacheFailedRequest(u)),this.eventHandler.emitEvent(Ye.LOGOUT_FAILURE,bt.Popup,null,u),this.eventHandler.emitEvent(Ye.LOGOUT_END,bt.Popup),u}this.eventHandler.emitEvent(Ye.LOGOUT_END,bt.Popup)}initiateAuthRequest(e,n){if(e)return this.logger.infoPii(`Navigate to: ${e}`),this.openPopup(e,n);throw this.logger.error("Navigate url is empty"),Ve(M0)}monitorPopupForHash(e,n){return new Promise((r,i)=>{this.logger.verbose("PopupHandler.monitorPopupForHash - polling started");const s=setInterval(()=>{if(e.closed){this.logger.error("PopupHandler.monitorPopupForHash - window closed"),clearInterval(s),i(Ve(Zp));return}let o="";try{o=e.location.href}catch{}if(!o||o==="about:blank")return;clearInterval(s);let c="";const l=this.config.auth.OIDCOptions.serverResponseType;e&&(l===A0.QUERY?c=e.location.search:c=e.location.hash),this.logger.verbose("PopupHandler.monitorPopupForHash - popup window is on same origin as caller"),r(c)},this.config.system.pollIntervalMilliseconds)}).finally(()=>{this.cleanPopup(e,n)})}openPopup(e,n){try{let r;if(n.popup?(r=n.popup,this.logger.verbosePii(`Navigating popup window to: ${e}`),r.location.assign(e)):typeof n.popup>"u"&&(this.logger.verbosePii(`Opening popup window to: ${e}`),r=this.openSizedPopup(e,n)),!r)throw Ve(nB);return r.focus&&r.focus(),this.currentWindow=r,n.popupWindowParent.addEventListener("beforeunload",this.unloadWindow),r}catch(r){throw this.logger.error("error opening popup "+r.message),Ve(tB)}}openSizedPopup(e,{popupName:n,popupWindowAttributes:r,popupWindowParent:i}){var p,g,m,y;const s=i.screenLeft?i.screenLeft:i.screenX,o=i.screenTop?i.screenTop:i.screenY,c=i.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,l=i.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;let u=(p=r.popupSize)==null?void 0:p.width,d=(g=r.popupSize)==null?void 0:g.height,f=(m=r.popupPosition)==null?void 0:m.top,h=(y=r.popupPosition)==null?void 0:y.left;return(!u||u<0||u>c)&&(this.logger.verbose("Default popup window width used. Window width not configured or invalid."),u=Ni.POPUP_WIDTH),(!d||d<0||d>l)&&(this.logger.verbose("Default popup window height used. Window height not configured or invalid."),d=Ni.POPUP_HEIGHT),(!f||f<0||f>l)&&(this.logger.verbose("Default popup window top position used. Window top not configured or invalid."),f=Math.max(0,l/2-Ni.POPUP_HEIGHT/2+o)),(!h||h<0||h>c)&&(this.logger.verbose("Default popup window left position used. Window left not configured or invalid."),h=Math.max(0,c/2-Ni.POPUP_WIDTH/2+s)),i.open(e,n,`width=${u}, height=${d}, top=${f}, left=${h}, scrollbars=yes`)}unloadWindow(e){this.currentWindow&&this.currentWindow.close(),e.preventDefault()}cleanPopup(e,n){e.close(),n.removeEventListener("beforeunload",this.unloadWindow)}generatePopupName(e,n){return`${Ni.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${e.join("-")}.${n}.${this.correlationId}`}generateLogoutPopupName(e){const n=e.account&&e.account.homeAccountId;return`${Ni.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${n}.${this.correlationId}`}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function _ie(){if(typeof window>"u"||typeof window.performance>"u"||typeof window.performance.getEntriesByType!="function")return;const t=window.performance.getEntriesByType("navigation"),e=t.length?t[0]:void 0;return e==null?void 0:e.type}class Aie extends Vf{constructor(e,n,r,i,s,o,c,l,u,d){super(e,n,r,i,s,o,c,u,d),this.nativeStorage=l}async acquireToken(e){const n=await ge(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,this.correlationId)(e,bt.Redirect);n.platformBroker=nm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme);const r=s=>{s.persisted&&(this.logger.verbose("Page was restored from back/forward cache. Clearing temporary cache."),this.browserStorage.resetRequestCache(),this.eventHandler.emitEvent(Ye.RESTORE_FROM_BFCACHE,bt.Redirect))},i=this.getRedirectStartPage(e.redirectStartPage);this.logger.verbosePii(`Redirect start page: ${i}`),this.browserStorage.setTemporaryCache(hr.ORIGIN_URI,i,!0),window.addEventListener("pageshow",r);try{this.config.auth.protocolMode===$i.EAR?await this.executeEarFlow(n):await this.executeCodeFlow(n,e.onRedirectNavigate)}catch(s){throw s instanceof Cn&&s.setCorrelationId(this.correlationId),window.removeEventListener("pageshow",r),s}}async executeCodeFlow(e,n){const r=e.correlationId,i=this.initializeServerTelemetryManager(Sn.acquireTokenRedirect),s=await ge(F0,W.GeneratePkceCodes,this.logger,this.performanceClient,r)(this.performanceClient,this.logger,r),o={...e,codeChallenge:s.challenge};this.browserStorage.cacheAuthorizeRequest(o,s.verifier);try{if(o.httpMethod===Rl.POST)return await this.executeCodeFlowWithPost(o);{const c=await ge(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:i,requestAuthority:o.authority,requestAzureCloudOptions:o.azureCloudOptions,requestExtraQueryParameters:o.extraQueryParameters,account:o.account}),l=await ge(VN,W.GetAuthCodeUrl,this.logger,this.performanceClient,e.correlationId)(this.config,c.authority,o,this.logger,this.performanceClient);return await this.initiateAuthRequest(l,n)}}catch(c){throw c instanceof Cn&&(c.setCorrelationId(this.correlationId),i.cacheFailedRequest(c)),c}}async executeEarFlow(e){const n=e.correlationId,r=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),i=await ge(DN,W.GenerateEarKey,this.logger,this.performanceClient,n)(),s={...e,earJwk:i};return this.browserStorage.cacheAuthorizeRequest(s),(await GN(document,this.config,r,s,this.logger,this.performanceClient)).submit(),new Promise((c,l)=>{setTimeout(()=>{l(Ve(dx,"failed_to_redirect"))},this.config.system.redirectNavigationTimeout)})}async executeCodeFlowWithPost(e){const n=e.correlationId,r=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account});return this.browserStorage.cacheAuthorizeRequest(e),(await KN(document,this.config,r,e,this.logger,this.performanceClient)).submit(),new Promise((s,o)=>{setTimeout(()=>{o(Ve(dx,"failed_to_redirect"))},this.config.system.redirectNavigationTimeout)})}async handleRedirectPromise(e="",n,r,i){const s=this.initializeServerTelemetryManager(Sn.handleRedirectPromise);try{const[o,c]=this.getRedirectResponse(e||"");if(!o)return this.logger.info("handleRedirectPromise did not detect a response as a result of a redirect. Cleaning temporary cache."),this.browserStorage.resetRequestCache(),_ie()!=="back_forward"?i.event.errorCode="no_server_response":this.logger.verbose("Back navigation event detected. Muting no_server_response error"),null;const l=this.browserStorage.getTemporaryCache(hr.ORIGIN_URI,!0)||ve.EMPTY_STRING,u=en.removeHashFromUrl(l),d=en.removeHashFromUrl(window.location.href);if(u===d&&this.config.auth.navigateToLoginRequestUrl)return this.logger.verbose("Current page is loginRequestUrl, handling response"),l.indexOf("#")>-1&&Ere(l),await this.handleResponse(o,n,r,s);if(this.config.auth.navigateToLoginRequestUrl){if(!LN()||this.config.system.allowRedirectInIframe){this.browserStorage.setTemporaryCache(hr.URL_HASH,c,!0);const f={apiId:Sn.handleRedirectPromise,timeout:this.config.system.redirectNavigationTimeout,noHistory:!0};let h=!0;if(!l||l==="null"){const p=Tre();this.browserStorage.setTemporaryCache(hr.ORIGIN_URI,p,!0),this.logger.warning("Unable to get valid login request url from cache, redirecting to home page"),h=await this.navigationClient.navigateInternal(p,f)}else this.logger.verbose(`Navigating to loginRequestUrl: ${l}`),h=await this.navigationClient.navigateInternal(l,f);if(!h)return await this.handleResponse(o,n,r,s)}}else return this.logger.verbose("NavigateToLoginRequestUrl set to false, handling response"),await this.handleResponse(o,n,r,s);return null}catch(o){throw o instanceof Cn&&(o.setCorrelationId(this.correlationId),s.cacheFailedRequest(o)),o}}getRedirectResponse(e){this.logger.verbose("getRedirectResponseHash called");let n=e;n||(this.config.auth.OIDCOptions.serverResponseType===A0.QUERY?n=window.location.search:n=window.location.hash);let r=ex(n);if(r){try{aie(r,this.browserCrypto,bt.Redirect)}catch(s){return s instanceof Cn&&this.logger.error(`Interaction type validation failed due to ${s.errorCode}: ${s.errorMessage}`),[null,""]}return OB(window),this.logger.verbose("Hash contains known properties, returning response hash"),[r,n]}const i=this.browserStorage.getTemporaryCache(hr.URL_HASH,!0);return this.browserStorage.removeItem(this.browserStorage.generateCacheKey(hr.URL_HASH)),i&&(r=ex(i),r)?(this.logger.verbose("Hash does not contain known properties, returning cached hash"),[r,i]):[null,""]}async handleResponse(e,n,r,i){if(!e.state)throw Ve(NN);if(e.ear_jwe){const c=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n.correlationId)({requestAuthority:n.authority,requestAzureCloudOptions:n.azureCloudOptions,requestExtraQueryParameters:n.extraQueryParameters,account:n.account});return ge(WN,W.HandleResponseEar,this.logger,this.performanceClient,n.correlationId)(n,e,Sn.acquireTokenRedirect,this.config,c,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}const o=await ge(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:i,requestAuthority:n.authority});return ge(mx,W.HandleResponseCode,this.logger,this.performanceClient,n.correlationId)(n,e,r,Sn.acquireTokenRedirect,this.config,o,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}async initiateAuthRequest(e,n){if(this.logger.verbose("RedirectHandler.initiateAuthRequest called"),e){this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${e}`);const r={apiId:Sn.acquireTokenRedirect,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},i=n||this.config.auth.onRedirectNavigate;if(typeof i=="function")if(this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback"),i(e)!==!1){this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating"),await this.navigationClient.navigateExternal(e,r);return}else{this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");return}else{this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url"),await this.navigationClient.navigateExternal(e,r);return}}else throw this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty"),Ve(M0)}async logout(e){var i;this.logger.verbose("logoutRedirect called");const n=this.initializeLogoutRequest(e),r=this.initializeServerTelemetryManager(Sn.logout);try{this.eventHandler.emitEvent(Ye.LOGOUT_START,bt.Redirect,e),await this.clearCacheOnLogout(this.correlationId,n.account);const s={apiId:Sn.logout,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},o=await ge(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:r,requestAuthority:e&&e.authority,requestExtraQueryParameters:e==null?void 0:e.extraQueryParameters,account:e&&e.account||void 0});if(o.authority.protocolMode===$i.OIDC)try{o.authority.endSessionEndpoint}catch{if((i=n.account)!=null&&i.homeAccountId){this.eventHandler.emitEvent(Ye.LOGOUT_SUCCESS,bt.Redirect,n);return}}const c=o.getLogoutUri(n);if(this.eventHandler.emitEvent(Ye.LOGOUT_SUCCESS,bt.Redirect,n),e&&typeof e.onRedirectNavigate=="function")if(e.onRedirectNavigate(c)!==!1){this.logger.verbose("Logout onRedirectNavigate did not return false, navigating"),this.browserStorage.getInteractionInProgress()||this.browserStorage.setInteractionInProgress(!0,cc.SIGNOUT),await this.navigationClient.navigateExternal(c,s);return}else this.browserStorage.setInteractionInProgress(!1),this.logger.verbose("Logout onRedirectNavigate returned false, stopping navigation");else{this.browserStorage.getInteractionInProgress()||this.browserStorage.setInteractionInProgress(!0,cc.SIGNOUT),await this.navigationClient.navigateExternal(c,s);return}}catch(s){throw s instanceof Cn&&(s.setCorrelationId(this.correlationId),r.cacheFailedRequest(s)),this.eventHandler.emitEvent(Ye.LOGOUT_FAILURE,bt.Redirect,null,s),this.eventHandler.emitEvent(Ye.LOGOUT_END,bt.Redirect),s}this.eventHandler.emitEvent(Ye.LOGOUT_END,bt.Redirect)}getRedirectStartPage(e){const n=e||window.location.href;return en.getAbsoluteUrl(n,ya())}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function jie(t,e,n,r,i){if(e.addQueueMeasurement(W.SilentHandlerInitiateAuthRequest,r),!t)throw n.info("Navigate url is empty"),Ve(M0);return i?ge(Tie,W.SilentHandlerLoadFrame,n,e,r)(t,i,e,r):es(Pie,W.SilentHandlerLoadFrameSync,n,e,r)(t)}async function Eie(t,e,n,r,i){const s=U0();if(!s.contentDocument)throw"No document associated with iframe!";return(await KN(s.contentDocument,t,e,n,r,i)).submit(),s}async function Nie(t,e,n,r,i){const s=U0();if(!s.contentDocument)throw"No document associated with iframe!";return(await GN(s.contentDocument,t,e,n,r,i)).submit(),s}async function qI(t,e,n,r,i,s,o){return r.addQueueMeasurement(W.SilentHandlerMonitorIframeForHash,s),new Promise((c,l)=>{e{window.clearInterval(d),l(Ve(rB))},e),d=window.setInterval(()=>{let f="";const h=t.contentWindow;try{f=h?h.location.href:""}catch{}if(!f||f==="about:blank")return;let p="";h&&(o===A0.QUERY?p=h.location.search:p=h.location.hash),window.clearTimeout(u),window.clearInterval(d),c(p)},n)}).finally(()=>{es(kie,W.RemoveHiddenIframe,i,r,s)(t)})}function Tie(t,e,n,r){return n.addQueueMeasurement(W.SilentHandlerLoadFrame,r),new Promise((i,s)=>{const o=U0();window.setTimeout(()=>{if(!o){s("Unable to load iframe");return}o.src=t,i(o)},e)})}function Pie(t){const e=U0();return e.src=t,e}function U0(){const t=document.createElement("iframe");return t.className="msalSilentIframe",t.style.visibility="hidden",t.style.position="absolute",t.style.width=t.style.height="0",t.style.border="0",t.setAttribute("sandbox","allow-scripts allow-same-origin allow-forms"),document.body.appendChild(t),t}function kie(t){document.body===t.parentNode&&document.body.removeChild(t)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Oie extends Vf{constructor(e,n,r,i,s,o,c,l,u,d,f){super(e,n,r,i,s,o,l,d,f),this.apiId=c,this.nativeStorage=u}async acquireToken(e){this.performanceClient.addQueueMeasurement(W.SilentIframeClientAcquireToken,e.correlationId),!e.loginHint&&!e.sid&&(!e.account||!e.account.username)&&this.logger.warning("No user hint provided. The authorization server may need more information to complete this request.");const n={...e};n.prompt?n.prompt!==pi.NONE&&n.prompt!==pi.NO_SESSION&&(this.logger.warning(`SilentIframeClient. Replacing invalid prompt ${n.prompt} with ${pi.NONE}`),n.prompt=pi.NONE):n.prompt=pi.NONE;const r=await ge(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,e.correlationId)(n,bt.Silent);return r.platformBroker=nm(this.config,this.logger,this.platformAuthProvider,r.authenticationScheme),MB(r.authority),this.config.auth.protocolMode===$i.EAR?this.executeEarFlow(r):this.executeCodeFlow(r)}async executeCodeFlow(e){let n;const r=this.initializeServerTelemetryManager(this.apiId);try{return n=await ge(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,e.correlationId)({serverTelemetryManager:r,requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),await ge(this.silentTokenHelper.bind(this),W.SilentIframeClientTokenHelper,this.logger,this.performanceClient,e.correlationId)(n,e)}catch(i){if(i instanceof Cn&&(i.setCorrelationId(this.correlationId),r.cacheFailedRequest(i)),!n||!(i instanceof Cn)||i.errorCode!==Ni.INVALID_GRANT_ERROR)throw i;return this.performanceClient.addFields({retryError:i.errorCode},this.correlationId),await ge(this.silentTokenHelper.bind(this),W.SilentIframeClientTokenHelper,this.logger,this.performanceClient,this.correlationId)(n,e)}}async executeEarFlow(e){const n=e.correlationId,r=await ge(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),i=await ge(DN,W.GenerateEarKey,this.logger,this.performanceClient,n)(),s={...e,earJwk:i},o=await ge(Nie,W.SilentHandlerInitiateAuthRequest,this.logger,this.performanceClient,n)(this.config,r,s,this.logger,this.performanceClient),c=this.config.auth.OIDCOptions.serverResponseType,l=await ge(qI,W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,n)(o,this.config.system.iframeHashTimeout,this.config.system.pollIntervalMilliseconds,this.performanceClient,this.logger,n,c),u=es(fp,W.DeserializeResponse,this.logger,this.performanceClient,n)(l,c,this.logger);return ge(WN,W.HandleResponseEar,this.logger,this.performanceClient,n)(s,u,this.apiId,this.config,r,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}logout(){return Promise.reject(Ve(D0))}async silentTokenHelper(e,n){const r=n.correlationId;this.performanceClient.addQueueMeasurement(W.SilentIframeClientTokenHelper,r);const i=await ge(F0,W.GeneratePkceCodes,this.logger,this.performanceClient,r)(this.performanceClient,this.logger,r),s={...n,codeChallenge:i.challenge};let o;if(n.httpMethod===Rl.POST)o=await ge(Eie,W.SilentHandlerInitiateAuthRequest,this.logger,this.performanceClient,r)(this.config,e.authority,s,this.logger,this.performanceClient);else{const d=await ge(VN,W.GetAuthCodeUrl,this.logger,this.performanceClient,r)(this.config,e.authority,s,this.logger,this.performanceClient);o=await ge(jie,W.SilentHandlerInitiateAuthRequest,this.logger,this.performanceClient,r)(d,this.performanceClient,this.logger,r,this.config.system.navigateFrameWait)}const c=this.config.auth.OIDCOptions.serverResponseType,l=await ge(qI,W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,r)(o,this.config.system.iframeHashTimeout,this.config.system.pollIntervalMilliseconds,this.performanceClient,this.logger,r,c),u=es(fp,W.DeserializeResponse,this.logger,this.performanceClient,r)(l,c,this.logger);return ge(mx,W.HandleResponseCode,this.logger,this.performanceClient,r)(n,u,i.verifier,this.apiId,this.config,e,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Iie extends Vf{async acquireToken(e){this.performanceClient.addQueueMeasurement(W.SilentRefreshClientAcquireToken,e.correlationId);const n=await ge(HN,W.InitializeBaseRequest,this.logger,this.performanceClient,e.correlationId)(e,this.config,this.performanceClient,this.logger),r={...e,...n};e.redirectUri&&(r.redirectUri=this.getRedirectUri(e.redirectUri));const i=this.initializeServerTelemetryManager(Sn.acquireTokenSilent_silentFlow),s=await this.createRefreshTokenClient({serverTelemetryManager:i,authorityUrl:r.authority,azureCloudOptions:r.azureCloudOptions,account:r.account});return ge(s.acquireTokenByRefreshToken.bind(s),W.RefreshTokenClientAcquireTokenByRefreshToken,this.logger,this.performanceClient,e.correlationId)(r).catch(o=>{throw o.setCorrelationId(this.correlationId),i.cacheFailedRequest(o),o})}logout(){return Promise.reject(Ve(D0))}async createRefreshTokenClient(e){const n=await ge(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:e.serverTelemetryManager,requestAuthority:e.authorityUrl,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account});return new Wne(n,this.performanceClient)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Rie{constructor(e,n,r,i){this.isBrowserEnvironment=typeof window<"u",this.config=e,this.storage=n,this.logger=r,this.cryptoObj=i}async loadExternalTokens(e,n,r){if(!this.isBrowserEnvironment)throw Ve($0);const i=e.correlationId||uo(),s=n.id_token?Bf(n.id_token,Zs):void 0,o={protocolMode:this.config.auth.protocolMode,knownAuthorities:this.config.auth.knownAuthorities,cloudDiscoveryMetadata:this.config.auth.cloudDiscoveryMetadata,authorityMetadata:this.config.auth.authorityMetadata,skipAuthorityMetadataCache:this.config.auth.skipAuthorityMetadataCache},c=e.authority?new Jr(Jr.generateAuthority(e.authority,e.azureCloudOptions),this.config.system.networkClient,this.storage,o,this.logger,e.correlationId||uo()):void 0,l=await this.loadAccount(e,r.clientInfo||n.client_info||"",i,s,c),u=await this.loadIdToken(n,l.homeAccountId,l.environment,l.realm,i),d=await this.loadAccessToken(e,n,l.homeAccountId,l.environment,l.realm,r,i),f=await this.loadRefreshToken(n,l.homeAccountId,l.environment,i);return this.generateAuthenticationResult(e,{account:l,idToken:u,accessToken:d,refreshToken:f},s,c)}async loadAccount(e,n,r,i,s){if(this.logger.verbose("TokenCache - loading account"),e.account){const u=co.createFromAccountInfo(e.account);return await this.storage.setAccount(u,r),u}else if(!s||!n&&!i)throw this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead."),Ve(fB);const o=co.generateHomeAccountId(n,s.authorityType,this.logger,this.cryptoObj,i),c=i==null?void 0:i.tid,l=SN(this.storage,s,o,Zs,r,i,n,s.hostnameAndPort,c,void 0,void 0,this.logger);return await this.storage.setAccount(l,r),l}async loadIdToken(e,n,r,i,s){if(!e.id_token)return this.logger.verbose("TokenCache - no id token found in response"),null;this.logger.verbose("TokenCache - loading id token");const o=P0(n,r,e.id_token,this.config.auth.clientId,i);return await this.storage.setIdTokenCredential(o,s),o}async loadAccessToken(e,n,r,i,s,o,c){if(n.access_token)if(n.expires_in){if(!n.scope&&(!e.scopes||!e.scopes.length))return this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache."),null}else return this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache."),null;else return this.logger.verbose("TokenCache - no access token found in response"),null;this.logger.verbose("TokenCache - loading access token");const l=n.scope?Ar.fromString(n.scope):new Ar(e.scopes),u=o.expiresOn||n.expires_in+Li(),d=o.extendedExpiresOn||(n.ext_expires_in||n.expires_in)+Li(),f=k0(r,i,n.access_token,this.config.auth.clientId,s,l.printScopes(),u,d,Zs);return await this.storage.setAccessTokenCredential(f,c),f}async loadRefreshToken(e,n,r,i){if(!e.refresh_token)return this.logger.verbose("TokenCache - no refresh token found in response"),null;this.logger.verbose("TokenCache - loading refresh token");const s=$U(n,r,e.refresh_token,this.config.auth.clientId,e.foci,void 0,e.refresh_token_expires_in);return await this.storage.setRefreshTokenCredential(s,i),s}generateAuthenticationResult(e,n,r,i){var d,f,h;let s="",o=[],c=null,l;n!=null&&n.accessToken&&(s=n.accessToken.secret,o=Ar.fromString(n.accessToken.target).asArray(),c=Cd(n.accessToken.expiresOn),l=Cd(n.accessToken.extendedExpiresOn));const u=n.account;return{authority:i?i.canonicalAuthority:"",uniqueId:n.account.localAccountId,tenantId:n.account.realm,scopes:o,account:u.getAccountInfo(),idToken:((d=n.idToken)==null?void 0:d.secret)||"",idTokenClaims:r||{},accessToken:s,fromCache:!0,expiresOn:c,correlationId:e.correlationId||"",requestId:"",extExpiresOn:l,familyId:((f=n.refreshToken)==null?void 0:f.familyId)||"",tokenType:((h=n==null?void 0:n.accessToken)==null?void 0:h.tokenType)||"",state:e.state||"",cloudGraphHostName:u.cloudGraphHostName||"",msGraphHost:u.msGraphHost||"",fromNativeBroker:!1}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Mie extends VU{constructor(e){super(e),this.includeRedirectUri=!1}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Die extends Vf{constructor(e,n,r,i,s,o,c,l,u,d){super(e,n,r,i,s,o,l,u,d),this.apiId=c}async acquireToken(e){if(!e.code)throw Ve(hB);const n=await ge(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,e.correlationId)(e,bt.Silent),r=this.initializeServerTelemetryManager(this.apiId);try{const i={...n,code:e.code},s=await ge(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,e.correlationId)({serverTelemetryManager:r,requestAuthority:n.authority,requestAzureCloudOptions:n.azureCloudOptions,requestExtraQueryParameters:n.extraQueryParameters,account:n.account}),o=new Mie(s);this.logger.verbose("Auth code client created");const c=new UB(o,this.browserStorage,i,this.logger,this.performanceClient);return await ge(c.handleCodeResponseFromServer.bind(c),W.HandleCodeResponseFromServer,this.logger,this.performanceClient,e.correlationId)({code:e.code,msgraph_host:e.msGraphHost,cloud_graph_host_name:e.cloudGraphHostName,cloud_instance_host_name:e.cloudInstanceHostName},n,!1)}catch(i){throw i instanceof Cn&&(i.setCorrelationId(this.correlationId),r.cacheFailedRequest(i)),i}}logout(){return Promise.reject(Ve(D0))}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function $ie(t,e,n){var o;const r=((o=window.msal)==null?void 0:o.clientIds)||[],i=r.length,s=r.filter(c=>c===t).length;s>1&&n.warning("There is already an instance of MSAL.js in the window with the same client id."),e.add({msalInstanceCount:i,sameClientIdInstanceCount:s})}/*! @azure/msal-browser v4.19.0 2025-08-05 */function bo(t){const e=t==null?void 0:t.idTokenClaims;if(e!=null&&e.tfp||e!=null&&e.acr)return"B2C";if(e!=null&&e.tid){if((e==null?void 0:e.tid)==="9188040d-6c67-4c5b-b112-36a304b66dad")return"MSA"}else return;return"AAD"}function vv(t,e){try{FN(t)}catch(n){throw e.end({success:!1},n),n}}class B0{constructor(e){this.operatingContext=e,this.isBrowserEnvironment=this.operatingContext.isBrowserEnvironment(),this.config=e.getConfig(),this.initialized=!1,this.logger=this.operatingContext.getLogger(),this.networkClient=this.config.system.networkClient,this.navigationClient=this.config.system.navigationClient,this.redirectResponse=new Map,this.hybridAuthCodeResponses=new Map,this.performanceClient=this.config.telemetry.client,this.browserCrypto=this.isBrowserEnvironment?new Da(this.logger,this.performanceClient):Zy,this.eventHandler=new iie(this.logger),this.browserStorage=this.isBrowserEnvironment?new h1(this.config.auth.clientId,this.config.cache,this.browserCrypto,this.logger,this.performanceClient,this.eventHandler,Lne(this.config.auth)):Yre(this.config.auth.clientId,this.logger,this.performanceClient,this.eventHandler);const n={cacheLocation:jr.MemoryStorage,cacheRetentionDays:5,temporaryCacheLocation:jr.MemoryStorage,storeAuthStateInCookie:!1,secureCookies:!1,cacheMigrationEnabled:!1,claimsBasedCachingEnabled:!1};this.nativeInternalStorage=new h1(this.config.auth.clientId,n,this.browserCrypto,this.logger,this.performanceClient,this.eventHandler),this.tokenCache=new Rie(this.config,this.browserStorage,this.logger,this.browserCrypto),this.activeSilentTokenRequests=new Map,this.trackPageVisibility=this.trackPageVisibility.bind(this),this.trackPageVisibilityWithMeasurement=this.trackPageVisibilityWithMeasurement.bind(this)}static async createController(e,n){const r=new B0(e);return await r.initialize(n),r}trackPageVisibility(e){e&&(this.logger.info("Perf: Visibility change detected"),this.performanceClient.incrementFields({visibilityChangeCount:1},e))}async initialize(e,n){if(this.logger.trace("initialize called"),this.initialized){this.logger.info("initialize has already been called, exiting early.");return}if(!this.isBrowserEnvironment){this.logger.info("in non-browser environment, exiting early."),this.initialized=!0,this.eventHandler.emitEvent(Ye.INITIALIZE_END);return}const r=(e==null?void 0:e.correlationId)||this.getRequestCorrelationId(),i=this.config.system.allowPlatformBroker,s=this.performanceClient.startMeasurement(W.InitializeClientApplication,r);if(this.eventHandler.emitEvent(Ye.INITIALIZE_START),!n)try{this.logMultipleInstances(s)}catch{}if(await ge(this.browserStorage.initialize.bind(this.browserStorage),W.InitializeCache,this.logger,this.performanceClient,r)(r),i)try{this.platformAuthProvider=await wie(this.logger,this.performanceClient,r,this.config.system.nativeBrokerHandshakeTimeout)}catch(o){this.logger.verbose(o)}this.config.cache.claimsBasedCachingEnabled||(this.logger.verbose("Claims-based caching is disabled. Clearing the previous cache with claims"),es(this.browserStorage.clearTokensAndKeysWithClaims.bind(this.browserStorage),W.ClearTokensAndKeysWithClaims,this.logger,this.performanceClient,r)(r)),this.config.system.asyncPopups&&await this.preGeneratePkceCodes(r),this.initialized=!0,this.eventHandler.emitEvent(Ye.INITIALIZE_END),s.end({allowPlatformBroker:i,success:!0})}async handleRedirectPromise(e){if(this.logger.verbose("handleRedirectPromise called"),RB(this.initialized),this.isBrowserEnvironment){const n=e||"";let r=this.redirectResponse.get(n);return typeof r>"u"?(r=this.handleRedirectPromiseInternal(e),this.redirectResponse.set(n,r),this.logger.verbose("handleRedirectPromise has been called for the first time, storing the promise")):this.logger.verbose("handleRedirectPromise has been called previously, returning the result from the first call"),r}return this.logger.verbose("handleRedirectPromise returns null, not browser environment"),null}async handleRedirectPromiseInternal(e){var l;if(!this.browserStorage.isInteractionInProgress(!0))return this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null."),null;if(((l=this.browserStorage.getInteractionInProgress())==null?void 0:l.type)===cc.SIGNOUT)return this.logger.verbose("handleRedirectPromise removing interaction_in_progress flag and returning null after sign-out"),this.browserStorage.setInteractionInProgress(!1),Promise.resolve(null);const r=this.getAllAccounts(),i=this.browserStorage.getCachedNativeRequest(),s=i&&this.platformAuthProvider&&!e;let o;this.eventHandler.emitEvent(Ye.HANDLE_REDIRECT_START,bt.Redirect);let c;try{if(s&&this.platformAuthProvider){o=this.performanceClient.startMeasurement(W.AcquireTokenRedirect,(i==null?void 0:i.correlationId)||""),this.logger.trace("handleRedirectPromise - acquiring token from native platform");const u=new iy(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Sn.handleRedirectPromise,this.performanceClient,this.platformAuthProvider,i.accountId,this.nativeInternalStorage,i.correlationId);c=ge(u.handleRedirectPromise.bind(u),W.HandleNativeRedirectPromiseMeasurement,this.logger,this.performanceClient,o.event.correlationId)(this.performanceClient,o.event.correlationId)}else{const[u,d]=this.browserStorage.getCachedRequest(),f=u.correlationId;o=this.performanceClient.startMeasurement(W.AcquireTokenRedirect,f),this.logger.trace("handleRedirectPromise - acquiring token from web flow");const h=this.createRedirectClient(f);c=ge(h.handleRedirectPromise.bind(h),W.HandleRedirectPromiseMeasurement,this.logger,this.performanceClient,o.event.correlationId)(e,u,d,o)}}catch(u){throw this.browserStorage.resetRequestCache(),u}return c.then(u=>(u?(this.browserStorage.resetRequestCache(),r.length{this.browserStorage.resetRequestCache();const d=u;throw r.length>0?this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_FAILURE,bt.Redirect,null,d):this.eventHandler.emitEvent(Ye.LOGIN_FAILURE,bt.Redirect,null,d),this.eventHandler.emitEvent(Ye.HANDLE_REDIRECT_END,bt.Redirect),o.end({success:!1},d),u})}async acquireTokenRedirect(e){const n=this.getRequestCorrelationId(e);this.logger.verbose("acquireTokenRedirect called",n);const r=this.performanceClient.startMeasurement(W.AcquireTokenPreRedirect,n);r.add({accountType:bo(e.account),scenarioId:e.scenarioId});const i=e.onRedirectNavigate;if(i)e.onRedirectNavigate=o=>{const c=typeof i=="function"?i(o):void 0;return c!==!1?r.end({success:!0}):r.discard(),c};else{const o=this.config.auth.onRedirectNavigate;this.config.auth.onRedirectNavigate=c=>{const l=typeof o=="function"?o(c):void 0;return l!==!1?r.end({success:!0}):r.discard(),l}}const s=this.getAllAccounts().length>0;try{LI(this.initialized,this.config),this.browserStorage.setInteractionInProgress(!0,cc.SIGNIN),s?this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_START,bt.Redirect,e):this.eventHandler.emitEvent(Ye.LOGIN_START,bt.Redirect,e);let o;return this.platformAuthProvider&&this.canUsePlatformBroker(e)?o=new iy(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Sn.acquireTokenRedirect,this.performanceClient,this.platformAuthProvider,this.getNativeAccountId(e),this.nativeInternalStorage,n).acquireTokenRedirect(e,r).catch(l=>{if(l instanceof Po&&qu(l))return this.platformAuthProvider=void 0,this.createRedirectClient(n).acquireToken(e);if(l instanceof lo)return this.logger.verbose("acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow"),this.createRedirectClient(n).acquireToken(e);throw l}):o=this.createRedirectClient(n).acquireToken(e),await o}catch(o){throw this.browserStorage.resetRequestCache(),r.end({success:!1},o),s?this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_FAILURE,bt.Redirect,null,o):this.eventHandler.emitEvent(Ye.LOGIN_FAILURE,bt.Redirect,null,o),o}}acquireTokenPopup(e){const n=this.getRequestCorrelationId(e),r=this.performanceClient.startMeasurement(W.AcquireTokenPopup,n);r.add({scenarioId:e.scenarioId,accountType:bo(e.account)});try{this.logger.verbose("acquireTokenPopup called",n),vv(this.initialized,r),this.browserStorage.setInteractionInProgress(!0,cc.SIGNIN)}catch(c){return Promise.reject(c)}const i=this.getAllAccounts();i.length>0?this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_START,bt.Popup,e):this.eventHandler.emitEvent(Ye.LOGIN_START,bt.Popup,e);let s;const o=this.getPreGeneratedPkceCodes(n);return this.canUsePlatformBroker(e)?s=this.acquireTokenNative({...e,correlationId:n},Sn.acquireTokenPopup).then(c=>(r.end({success:!0,isNativeBroker:!0,accountType:bo(c.account)}),c)).catch(c=>{if(c instanceof Po&&qu(c))return this.platformAuthProvider=void 0,this.createPopupClient(n).acquireToken(e,o);if(c instanceof lo)return this.logger.verbose("acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow"),this.createPopupClient(n).acquireToken(e,o);throw c}):s=this.createPopupClient(n).acquireToken(e,o),s.then(c=>(i.length(i.length>0?this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_FAILURE,bt.Popup,null,c):this.eventHandler.emitEvent(Ye.LOGIN_FAILURE,bt.Popup,null,c),r.end({success:!1},c),Promise.reject(c))).finally(async()=>{this.browserStorage.setInteractionInProgress(!1),this.config.system.asyncPopups&&await this.preGeneratePkceCodes(n)})}trackPageVisibilityWithMeasurement(){const e=this.ssoSilentMeasurement||this.acquireTokenByCodeAsyncMeasurement;e&&(this.logger.info("Perf: Visibility change detected in ",e.event.name),e.increment({visibilityChangeCount:1}))}async ssoSilent(e){var s,o;const n=this.getRequestCorrelationId(e),r={...e,prompt:e.prompt,correlationId:n};this.ssoSilentMeasurement=this.performanceClient.startMeasurement(W.SsoSilent,n),(s=this.ssoSilentMeasurement)==null||s.add({scenarioId:e.scenarioId,accountType:bo(e.account)}),vv(this.initialized,this.ssoSilentMeasurement),(o=this.ssoSilentMeasurement)==null||o.increment({visibilityChangeCount:0}),document.addEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement),this.logger.verbose("ssoSilent called",n),this.eventHandler.emitEvent(Ye.SSO_SILENT_START,bt.Silent,r);let i;return this.canUsePlatformBroker(r)?i=this.acquireTokenNative(r,Sn.ssoSilent).catch(c=>{if(c instanceof Po&&qu(c))return this.platformAuthProvider=void 0,this.createSilentIframeClient(r.correlationId).acquireToken(r);throw c}):i=this.createSilentIframeClient(r.correlationId).acquireToken(r),i.then(c=>{var l;return this.eventHandler.emitEvent(Ye.SSO_SILENT_SUCCESS,bt.Silent,c),(l=this.ssoSilentMeasurement)==null||l.end({success:!0,isNativeBroker:c.fromNativeBroker,accessTokenSize:c.accessToken.length,idTokenSize:c.idToken.length,accountType:bo(c.account)}),c}).catch(c=>{var l;throw this.eventHandler.emitEvent(Ye.SSO_SILENT_FAILURE,bt.Silent,null,c),(l=this.ssoSilentMeasurement)==null||l.end({success:!1},c),c}).finally(()=>{document.removeEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement)})}async acquireTokenByCode(e){const n=this.getRequestCorrelationId(e);this.logger.trace("acquireTokenByCode called",n);const r=this.performanceClient.startMeasurement(W.AcquireTokenByCode,n);vv(this.initialized,r),this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_BY_CODE_START,bt.Silent,e),r.add({scenarioId:e.scenarioId});try{if(e.code&&e.nativeAccountId)throw Ve(mB);if(e.code){const i=e.code;let s=this.hybridAuthCodeResponses.get(i);return s?(this.logger.verbose("Existing acquireTokenByCode request found",n),r.discard()):(this.logger.verbose("Initiating new acquireTokenByCode request",n),s=this.acquireTokenByCodeAsync({...e,correlationId:n}).then(o=>(this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_BY_CODE_SUCCESS,bt.Silent,o),this.hybridAuthCodeResponses.delete(i),r.end({success:!0,isNativeBroker:o.fromNativeBroker,accessTokenSize:o.accessToken.length,idTokenSize:o.idToken.length,accountType:bo(o.account)}),o)).catch(o=>{throw this.hybridAuthCodeResponses.delete(i),this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_BY_CODE_FAILURE,bt.Silent,null,o),r.end({success:!1},o),o}),this.hybridAuthCodeResponses.set(i,s)),await s}else if(e.nativeAccountId)if(this.canUsePlatformBroker(e,e.nativeAccountId)){const i=await this.acquireTokenNative({...e,correlationId:n},Sn.acquireTokenByCode,e.nativeAccountId).catch(s=>{throw s instanceof Po&&qu(s)&&(this.platformAuthProvider=void 0),s});return r.end({accountType:bo(i.account),success:!0}),i}else throw Ve(gB);else throw Ve(pB)}catch(i){throw this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_BY_CODE_FAILURE,bt.Silent,null,i),r.end({success:!1},i),i}}async acquireTokenByCodeAsync(e){var i;return this.logger.trace("acquireTokenByCodeAsync called",e.correlationId),this.acquireTokenByCodeAsyncMeasurement=this.performanceClient.startMeasurement(W.AcquireTokenByCodeAsync,e.correlationId),(i=this.acquireTokenByCodeAsyncMeasurement)==null||i.increment({visibilityChangeCount:0}),document.addEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement),await this.createSilentAuthCodeClient(e.correlationId).acquireToken(e).then(s=>{var o;return(o=this.acquireTokenByCodeAsyncMeasurement)==null||o.end({success:!0,fromCache:s.fromCache,isNativeBroker:s.fromNativeBroker}),s}).catch(s=>{var o;throw(o=this.acquireTokenByCodeAsyncMeasurement)==null||o.end({success:!1},s),s}).finally(()=>{document.removeEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement)})}async acquireTokenFromCache(e,n){switch(this.performanceClient.addQueueMeasurement(W.AcquireTokenFromCache,e.correlationId),n){case ci.Default:case ci.AccessToken:case ci.AccessTokenAndRefreshToken:const r=this.createSilentCacheClient(e.correlationId);return ge(r.acquireToken.bind(r),W.SilentCacheClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(e);default:throw _e(Rc)}}async acquireTokenByRefreshToken(e,n){switch(this.performanceClient.addQueueMeasurement(W.AcquireTokenByRefreshToken,e.correlationId),n){case ci.Default:case ci.AccessTokenAndRefreshToken:case ci.RefreshToken:case ci.RefreshTokenAndNetwork:const r=this.createSilentRefreshClient(e.correlationId);return ge(r.acquireToken.bind(r),W.SilentRefreshClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(e);default:throw _e(Rc)}}async acquireTokenBySilentIframe(e){this.performanceClient.addQueueMeasurement(W.AcquireTokenBySilentIframe,e.correlationId);const n=this.createSilentIframeClient(e.correlationId);return ge(n.acquireToken.bind(n),W.SilentIframeClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(e)}async logout(e){const n=this.getRequestCorrelationId(e);return this.logger.warning("logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.",n),this.logoutRedirect({correlationId:n,...e})}async logoutRedirect(e){const n=this.getRequestCorrelationId(e);return LI(this.initialized,this.config),this.browserStorage.setInteractionInProgress(!0,cc.SIGNOUT),this.createRedirectClient(n).logout(e)}logoutPopup(e){try{const n=this.getRequestCorrelationId(e);return FN(this.initialized),this.browserStorage.setInteractionInProgress(!0,cc.SIGNOUT),this.createPopupClient(n).logout(e).finally(()=>{this.browserStorage.setInteractionInProgress(!1)})}catch(n){return Promise.reject(n)}}async clearCache(e){if(!this.isBrowserEnvironment){this.logger.info("in non-browser environment, returning early.");return}const n=this.getRequestCorrelationId(e);return this.createSilentCacheClient(n).logout(e)}getAllAccounts(e){const n=this.getRequestCorrelationId();return Qre(this.logger,this.browserStorage,this.isBrowserEnvironment,n,e)}getAccount(e){const n=this.getRequestCorrelationId();return Xre(e,this.logger,this.browserStorage,n)}getAccountByUsername(e){const n=this.getRequestCorrelationId();return Jre(e,this.logger,this.browserStorage,n)}getAccountByHomeId(e){const n=this.getRequestCorrelationId();return Zre(e,this.logger,this.browserStorage,n)}getAccountByLocalId(e){const n=this.getRequestCorrelationId();return eie(e,this.logger,this.browserStorage,n)}setActiveAccount(e){const n=this.getRequestCorrelationId();tie(e,this.browserStorage,n)}getActiveAccount(){const e=this.getRequestCorrelationId();return nie(this.browserStorage,e)}async hydrateCache(e,n){this.logger.verbose("hydrateCache called");const r=co.createFromAccountInfo(e.account,e.cloudGraphHostName,e.msGraphHost);return await this.browserStorage.setAccount(r,e.correlationId),e.fromNativeBroker?(this.logger.verbose("Response was from native broker, storing in-memory"),this.nativeInternalStorage.hydrateCache(e,n)):this.browserStorage.hydrateCache(e,n)}async acquireTokenNative(e,n,r,i){if(this.logger.trace("acquireTokenNative called"),!this.platformAuthProvider)throw Ve(kN);return new iy(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,n,this.performanceClient,this.platformAuthProvider,r||this.getNativeAccountId(e),this.nativeInternalStorage,e.correlationId).acquireToken(e,i)}canUsePlatformBroker(e,n){if(this.logger.trace("canUsePlatformBroker called"),!this.platformAuthProvider)return this.logger.trace("canUsePlatformBroker: platform broker unavilable, returning false"),!1;if(!nm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme))return this.logger.trace("canUsePlatformBroker: isBrokerAvailable returned false, returning false"),!1;if(e.prompt)switch(e.prompt){case pi.NONE:case pi.CONSENT:case pi.LOGIN:this.logger.trace("canUsePlatformBroker: prompt is compatible with platform broker flow");break;default:return this.logger.trace(`canUsePlatformBroker: prompt = ${e.prompt} is not compatible with platform broker flow, returning false`),!1}return!n&&!this.getNativeAccountId(e)?(this.logger.trace("canUsePlatformBroker: nativeAccountId is not available, returning false"),!1):!0}getNativeAccountId(e){const n=e.account||this.getAccount({loginHint:e.loginHint,sid:e.sid})||this.getActiveAccount();return n&&n.nativeAccountId||""}createPopupClient(e){return new Cie(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.nativeInternalStorage,this.platformAuthProvider,e)}createRedirectClient(e){return new Aie(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.nativeInternalStorage,this.platformAuthProvider,e)}createSilentIframeClient(e){return new Oie(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Sn.ssoSilent,this.performanceClient,this.nativeInternalStorage,this.platformAuthProvider,e)}createSilentCacheClient(e){return new HB(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.platformAuthProvider,e)}createSilentRefreshClient(e){return new Iie(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.platformAuthProvider,e)}createSilentAuthCodeClient(e){return new Die(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Sn.acquireTokenByCode,this.performanceClient,this.platformAuthProvider,e)}addEventCallback(e,n){return this.eventHandler.addEventCallback(e,n)}removeEventCallback(e){this.eventHandler.removeEventCallback(e)}addPerformanceCallback(e){return IB(),this.performanceClient.addPerformanceCallback(e)}removePerformanceCallback(e){return this.performanceClient.removePerformanceCallback(e)}enableAccountStorageEvents(){if(this.config.cache.cacheLocation!==jr.LocalStorage){this.logger.info("Account storage events are only available when cacheLocation is set to localStorage");return}this.eventHandler.subscribeCrossTab()}disableAccountStorageEvents(){if(this.config.cache.cacheLocation!==jr.LocalStorage){this.logger.info("Account storage events are only available when cacheLocation is set to localStorage");return}this.eventHandler.unsubscribeCrossTab()}getTokenCache(){return this.tokenCache}getLogger(){return this.logger}setLogger(e){this.logger=e}initializeWrapperLibrary(e,n){this.browserStorage.setWrapperMetadata(e,n)}setNavigationClient(e){this.navigationClient=e}getConfiguration(){return this.config}getPerformanceClient(){return this.performanceClient}isBrowserEnv(){return this.isBrowserEnvironment}getRequestCorrelationId(e){return e!=null&&e.correlationId?e.correlationId:this.isBrowserEnvironment?uo():ve.EMPTY_STRING}async loginRedirect(e){const n=this.getRequestCorrelationId(e);return this.logger.verbose("loginRedirect called",n),this.acquireTokenRedirect({correlationId:n,...e||II})}loginPopup(e){const n=this.getRequestCorrelationId(e);return this.logger.verbose("loginPopup called",n),this.acquireTokenPopup({correlationId:n,...e||II})}async acquireTokenSilent(e){const n=this.getRequestCorrelationId(e),r=this.performanceClient.startMeasurement(W.AcquireTokenSilent,n);r.add({cacheLookupPolicy:e.cacheLookupPolicy,scenarioId:e.scenarioId}),vv(this.initialized,r),this.logger.verbose("acquireTokenSilent called",n);const i=e.account||this.getActiveAccount();if(!i)throw Ve(aB);return r.add({accountType:bo(i)}),this.acquireTokenSilentDeduped(e,i,n).then(s=>(r.end({success:!0,fromCache:s.fromCache,isNativeBroker:s.fromNativeBroker,accessTokenSize:s.accessToken.length,idTokenSize:s.idToken.length}),{...s,state:e.state,correlationId:n})).catch(s=>{throw s instanceof Cn&&s.setCorrelationId(n),r.end({success:!1},s),s})}async acquireTokenSilentDeduped(e,n,r){const i=O0(this.config.auth.clientId,{...e,authority:e.authority||this.config.auth.authority,correlationId:r},n.homeAccountId),s=JSON.stringify(i),o=this.activeSilentTokenRequests.get(s);if(typeof o>"u"){this.logger.verbose("acquireTokenSilent called for the first time, storing active request",r),this.performanceClient.addFields({deduped:!1},r);const c=ge(this.acquireTokenSilentAsync.bind(this),W.AcquireTokenSilentAsync,this.logger,this.performanceClient,r)({...e,correlationId:r},n);return this.activeSilentTokenRequests.set(s,c),c.finally(()=>{this.activeSilentTokenRequests.delete(s)})}else return this.logger.verbose("acquireTokenSilent has been called previously, returning the result from the first call",r),this.performanceClient.addFields({deduped:!0},r),o}async acquireTokenSilentAsync(e,n){const r=()=>this.trackPageVisibility(e.correlationId);this.performanceClient.addQueueMeasurement(W.AcquireTokenSilentAsync,e.correlationId),this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_START,bt.Silent,e),e.correlationId&&this.performanceClient.incrementFields({visibilityChangeCount:0},e.correlationId),document.addEventListener("visibilitychange",r);const i=await ge(sie,W.InitializeSilentRequest,this.logger,this.performanceClient,e.correlationId)(e,n,this.config,this.performanceClient,this.logger),s=e.cacheLookupPolicy||ci.Default;return this.acquireTokenSilentNoIframe(i,s).catch(async c=>{if(Lie(c,s))if(this.activeIframeRequest)if(s!==ci.Skip){const[u,d]=this.activeIframeRequest;this.logger.verbose(`Iframe request is already in progress, awaiting resolution for request with correlationId: ${d}`,i.correlationId);const f=this.performanceClient.startMeasurement(W.AwaitConcurrentIframe,i.correlationId);f.add({awaitIframeCorrelationId:d});const h=await u;if(f.end({success:h}),h)return this.logger.verbose(`Parallel iframe request with correlationId: ${d} succeeded. Retrying cache and/or RT redemption`,i.correlationId),this.acquireTokenSilentNoIframe(i,s);throw this.logger.info(`Iframe request with correlationId: ${d} failed. Interaction is required.`),c}else return this.logger.warning("Another iframe request is currently in progress and CacheLookupPolicy is set to Skip. This may result in degraded performance and/or reliability for both calls. Please consider changing the CacheLookupPolicy to take advantage of request queuing and token cache.",i.correlationId),ge(this.acquireTokenBySilentIframe.bind(this),W.AcquireTokenBySilentIframe,this.logger,this.performanceClient,i.correlationId)(i);else{let u;return this.activeIframeRequest=[new Promise(d=>{u=d}),i.correlationId],this.logger.verbose("Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.",i.correlationId),ge(this.acquireTokenBySilentIframe.bind(this),W.AcquireTokenBySilentIframe,this.logger,this.performanceClient,i.correlationId)(i).then(d=>(u(!0),d)).catch(d=>{throw u(!1),d}).finally(()=>{this.activeIframeRequest=void 0})}else throw c}).then(c=>(this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_SUCCESS,bt.Silent,c),e.correlationId&&this.performanceClient.addFields({fromCache:c.fromCache,isNativeBroker:c.fromNativeBroker},e.correlationId),c)).catch(c=>{throw this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_FAILURE,bt.Silent,null,c),c}).finally(()=>{document.removeEventListener("visibilitychange",r)})}async acquireTokenSilentNoIframe(e,n){return nm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme)&&e.account.nativeAccountId?(this.logger.verbose("acquireTokenSilent - attempting to acquire token from native platform"),this.acquireTokenNative(e,Sn.acquireTokenSilent_silentFlow,e.account.nativeAccountId,n).catch(async r=>{throw r instanceof Po&&qu(r)?(this.logger.verbose("acquireTokenSilent - native platform unavailable, falling back to web flow"),this.platformAuthProvider=void 0,_e(Rc)):r})):(this.logger.verbose("acquireTokenSilent - attempting to acquire token from web flow"),n===ci.AccessToken&&this.logger.verbose("acquireTokenSilent - cache lookup policy set to AccessToken, attempting to acquire token from local cache"),ge(this.acquireTokenFromCache.bind(this),W.AcquireTokenFromCache,this.logger,this.performanceClient,e.correlationId)(e,n).catch(r=>{if(n===ci.AccessToken)throw r;return this.eventHandler.emitEvent(Ye.ACQUIRE_TOKEN_NETWORK_START,bt.Silent,e),ge(this.acquireTokenByRefreshToken.bind(this),W.AcquireTokenByRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,n)}))}async preGeneratePkceCodes(e){return this.logger.verbose("Generating new PKCE codes"),this.pkceCode=await ge(F0,W.GeneratePkceCodes,this.logger,this.performanceClient,e)(this.performanceClient,this.logger,e),Promise.resolve()}getPreGeneratedPkceCodes(e){this.logger.verbose("Attempting to pick up pre-generated PKCE codes");const n=this.pkceCode?{...this.pkceCode}:void 0;return this.pkceCode=void 0,this.logger.verbose(`${n?"Found":"Did not find"} pre-generated PKCE codes`),this.performanceClient.addFields({usePreGeneratedPkce:!!n},e),n}logMultipleInstances(e){const n=this.config.auth.clientId;if(!window)return;window.msal=window.msal||{},window.msal.clientIds=window.msal.clientIds||[],window.msal.clientIds.length>0&&this.logger.verbose("There is already an instance of MSAL.js in the window."),window.msal.clientIds.push(n),$ie(n,e,this.logger)}}function Lie(t,e){const n=!(t instanceof lo&&t.subError!==R0),r=t.errorCode===Ni.INVALID_GRANT_ERROR||t.errorCode===Rc,i=n&&r||t.errorCode===cx||t.errorCode===bN,s=hre.includes(e);return i&&s}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function Fie(t,e){const n=new gu(t);return await n.initialize(),B0.createController(n,e)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class YN{static async createPublicClientApplication(e){const n=await Fie(e);return new YN(e,n)}constructor(e,n){this.isBroker=!1,this.controller=n||new B0(new gu(e))}async initialize(e){return this.controller.initialize(e,this.isBroker)}async acquireTokenPopup(e){return this.controller.acquireTokenPopup(e)}acquireTokenRedirect(e){return this.controller.acquireTokenRedirect(e)}acquireTokenSilent(e){return this.controller.acquireTokenSilent(e)}acquireTokenByCode(e){return this.controller.acquireTokenByCode(e)}addEventCallback(e,n){return this.controller.addEventCallback(e,n)}removeEventCallback(e){return this.controller.removeEventCallback(e)}addPerformanceCallback(e){return this.controller.addPerformanceCallback(e)}removePerformanceCallback(e){return this.controller.removePerformanceCallback(e)}enableAccountStorageEvents(){this.controller.enableAccountStorageEvents()}disableAccountStorageEvents(){this.controller.disableAccountStorageEvents()}getAccount(e){return this.controller.getAccount(e)}getAccountByHomeId(e){return this.controller.getAccountByHomeId(e)}getAccountByLocalId(e){return this.controller.getAccountByLocalId(e)}getAccountByUsername(e){return this.controller.getAccountByUsername(e)}getAllAccounts(e){return this.controller.getAllAccounts(e)}handleRedirectPromise(e){return this.controller.handleRedirectPromise(e)}loginPopup(e){return this.controller.loginPopup(e)}loginRedirect(e){return this.controller.loginRedirect(e)}logout(e){return this.controller.logout(e)}logoutRedirect(e){return this.controller.logoutRedirect(e)}logoutPopup(e){return this.controller.logoutPopup(e)}ssoSilent(e){return this.controller.ssoSilent(e)}getTokenCache(){return this.controller.getTokenCache()}getLogger(){return this.controller.getLogger()}setLogger(e){this.controller.setLogger(e)}setActiveAccount(e){this.controller.setActiveAccount(e)}getActiveAccount(){return this.controller.getActiveAccount()}initializeWrapperLibrary(e,n){return this.controller.initializeWrapperLibrary(e,n)}setNavigationClient(e){this.controller.setNavigationClient(e)}getConfiguration(){return this.controller.getConfiguration()}async hydrateCache(e,n){return this.controller.hydrateCache(e,n)}clearCache(e){return this.controller.clearCache(e)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Uie={initialize:()=>Promise.reject(dr(ur)),acquireTokenPopup:()=>Promise.reject(dr(ur)),acquireTokenRedirect:()=>Promise.reject(dr(ur)),acquireTokenSilent:()=>Promise.reject(dr(ur)),acquireTokenByCode:()=>Promise.reject(dr(ur)),getAllAccounts:()=>[],getAccount:()=>null,getAccountByHomeId:()=>null,getAccountByUsername:()=>null,getAccountByLocalId:()=>null,handleRedirectPromise:()=>Promise.reject(dr(ur)),loginPopup:()=>Promise.reject(dr(ur)),loginRedirect:()=>Promise.reject(dr(ur)),logout:()=>Promise.reject(dr(ur)),logoutRedirect:()=>Promise.reject(dr(ur)),logoutPopup:()=>Promise.reject(dr(ur)),ssoSilent:()=>Promise.reject(dr(ur)),addEventCallback:()=>null,removeEventCallback:()=>{},addPerformanceCallback:()=>"",removePerformanceCallback:()=>!1,enableAccountStorageEvents:()=>{},disableAccountStorageEvents:()=>{},getTokenCache:()=>{throw dr(ur)},getLogger:()=>{throw dr(ur)},setLogger:()=>{},setActiveAccount:()=>{},getActiveAccount:()=>null,initializeWrapperLibrary:()=>{},setNavigationClient:()=>{},getConfiguration:()=>{throw dr(ur)},hydrateCache:()=>Promise.reject(dr(ur)),clearCache:()=>Promise.reject(dr(ur))};/*! @azure/msal-browser v4.19.0 2025-08-05 */class Bie{static getInteractionStatusFromEvent(e,n){switch(e.eventType){case Ye.LOGIN_START:return br.Login;case Ye.SSO_SILENT_START:return br.SsoSilent;case Ye.ACQUIRE_TOKEN_START:if(e.interactionType===bt.Redirect||e.interactionType===bt.Popup)return br.AcquireToken;break;case Ye.HANDLE_REDIRECT_START:return br.HandleRedirect;case Ye.LOGOUT_START:return br.Logout;case Ye.SSO_SILENT_SUCCESS:case Ye.SSO_SILENT_FAILURE:if(n&&n!==br.SsoSilent)break;return br.None;case Ye.LOGOUT_END:if(n&&n!==br.Logout)break;return br.None;case Ye.HANDLE_REDIRECT_END:if(n&&n!==br.HandleRedirect)break;return br.None;case Ye.LOGIN_SUCCESS:case Ye.LOGIN_FAILURE:case Ye.ACQUIRE_TOKEN_SUCCESS:case Ye.ACQUIRE_TOKEN_FAILURE:case Ye.RESTORE_FROM_BFCACHE:if(e.interactionType===bt.Redirect||e.interactionType===bt.Popup){if(n&&n!==br.Login&&n!==br.AcquireToken)break;return br.None}break}return null}}const Hie="modulepreload",zie=function(t){return"/semblance/"+t},YI={},Vie=function(e,n,r){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),c=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));i=Promise.allSettled(n.map(l=>{if(l=zie(l),l in YI)return;YI[l]=!0;const u=l.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":Hie,u||(f.as="script"),f.crossOrigin="",f.href=l,c&&f.setAttribute("nonce",c),document.head.appendChild(f),u)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}function s(o){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=o,window.dispatchEvent(c),!c.defaultPrevented)throw o}return i.then(o=>{for(const c of o||[])c.status==="rejected"&&s(c.reason);return e().catch(s)})};/*! @azure/msal-react v3.0.17 2025-08-05 */const Gie={instance:Uie,inProgress:br.None,accounts:[],logger:new Ma({})},QN=v.createContext(Gie);QN.Consumer;/*! @azure/msal-react v3.0.17 2025-08-05 */function QI(t,e){if(t.length!==e.length)return!1;const n=[...e];return t.every(r=>{const i=n.shift();return!r||!i?!1:r.homeAccountId===i.homeAccountId&&r.localAccountId===i.localAccountId&&r.username===i.username})}/*! @azure/msal-react v3.0.17 2025-08-05 */const Kie="@azure/msal-react",XI="3.0.17";/*! @azure/msal-react v3.0.17 2025-08-05 */const vx={UNBLOCK_INPROGRESS:"UNBLOCK_INPROGRESS",EVENT:"EVENT"},Wie=(t,e)=>{const{type:n,payload:r}=e;let i=t.inProgress;switch(n){case vx.UNBLOCK_INPROGRESS:t.inProgress===br.Startup&&(i=br.None,r.logger.info("MsalProvider - handleRedirectPromise resolved, setting inProgress to 'none'"));break;case vx.EVENT:const o=r.message,c=Bie.getInteractionStatusFromEvent(o,t.inProgress);c&&(r.logger.info(`MsalProvider - ${o.eventType} results in setting inProgress from ${t.inProgress} to ${c}`),i=c);break;default:throw new Error(`Unknown action type: ${n}`)}if(i===br.Startup)return t;const s=r.instance.getAllAccounts();return i!==t.inProgress&&!QI(s,t.accounts)?{...t,inProgress:i,accounts:s}:i!==t.inProgress?{...t,inProgress:i}:QI(s,t.accounts)?t:{...t,accounts:s}};function qie({instance:t,children:e}){v.useEffect(()=>{t.initializeWrapperLibrary(ure.React,XI)},[t]);const n=v.useMemo(()=>t.getLogger().clone(Kie,XI),[t]),[r,i]=v.useReducer(Wie,void 0,()=>({inProgress:br.Startup,accounts:[]}));v.useEffect(()=>{const o=t.addEventCallback(c=>{i({payload:{instance:t,logger:n,message:c},type:vx.EVENT})});return n.verbose(`MsalProvider - Registered event callback with id: ${o}`),t.initialize().then(()=>{t.handleRedirectPromise().catch(()=>{}).finally(()=>{i({payload:{instance:t,logger:n},type:vx.UNBLOCK_INPROGRESS})})}).catch(()=>{}),()=>{o&&(n.verbose(`MsalProvider - Removing event callback ${o}`),t.removeEventCallback(o))}},[t,n]);const s={instance:t,inProgress:r.inProgress,accounts:r.accounts,logger:n};return T.createElement(QN.Provider,{value:s},e)}/*! @azure/msal-react v3.0.17 2025-08-05 */const Yie=()=>v.useContext(QN),Qie={auth:{clientId:"7e9b250a-d984-4fba-8e1c-a0622242a595",authority:"https://login.microsoftonline.com/e519c2e6-bc6d-4fdf-8d9c-923c2f002385",redirectUri:"https://ai-sandbox.oliver.solutions/semblance",postLogoutRedirectUri:"https://ai-sandbox.oliver.solutions/semblance"},cache:{cacheLocation:"localStorage",storeAuthStateInCookie:!1},system:{loggerOptions:{loggerCallback:(t,e,n)=>{n||console.log(e)},logLevel:Rn.Verbose,piiLoggingEnabled:!1},allowNativeBroker:!1}},Xie={scopes:["openid","profile","email"],prompt:"select_account",extraQueryParameters:{code_challenge_method:"S256"}},GB=v.createContext(void 0);function Jie({children:t}){const[e,n]=v.useState(null),[r,i]=v.useState(null),[s,o]=v.useState(!0),[c,l]=v.useState(!1),u=ar(),{instance:d,accounts:f,inProgress:h}=Yie();v.useEffect(()=>{const w=S=>{const _=S.detail||{};if(_.isPersonaCreation){console.log("Ignoring auth error from persona creation",_);return}i(null),n(null),se.error("Session expired",{description:"Please log in again"}),u("/login")};return window.addEventListener(X_,w),()=>{window.removeEventListener(X_,w)}},[u]),v.useEffect(()=>{const w=localStorage.getItem("auth_token"),S=localStorage.getItem("user");if(console.log("AuthContext initializing - stored data check:",{hasToken:!!w,hasUser:!!S}),w&&S)try{i(w),n(JSON.parse(S)),console.log("User session restored from localStorage")}catch(C){console.error("Failed to parse stored user data:",C),localStorage.removeItem("auth_token"),localStorage.removeItem("user")}else console.log("No stored authentication data found");o(!1)},[]),v.useEffect(()=>{if(r){console.log("Verifying token...");const w=`token_validated_${r.substring(0,10)}`;if(sessionStorage.getItem(w)==="true"&&e){console.log("Token already validated this session, skipping validation");return}ty.getProfile().then(C=>{C&&"data"in C&&(console.log("Profile verified successfully"),n(C.data),sessionStorage.setItem(w,"true"))}).catch(C=>{C.response&&C.response.status===401?(console.error("Token invalid (401):",C),localStorage.removeItem("auth_token"),localStorage.removeItem("user"),i(null),n(null)):(console.warn("Profile validation error (not clearing token):",C),sessionStorage.setItem(w,"true"))})}else console.log("No token available, not validating profile")},[r,e]);const p=async(w,S)=>{var C,_;o(!0),console.log("Attempting login for user:",w);try{const A=await ty.login(w,S);if(console.log("Login API response received"),!A.data.access_token)throw new Error("No access token received from server");return localStorage.setItem("auth_token",A.data.access_token),localStorage.setItem("user",JSON.stringify(A.data.user)),i(A.data.access_token),n(A.data.user),console.log("Authentication state updated"),se.success("Login successful!"),A.data.access_token}catch(A){throw console.error("Login failed:",A),se.error("Login failed",{description:((_=(C=A.response)==null?void 0:C.data)==null?void 0:_.message)||"Invalid username or password"}),A}finally{o(!1)}},g=async()=>{l(!0);try{console.log("Starting Microsoft authentication...");const w=await d.loginPopup(Xie);if(w&&w.account&&w.idToken){console.log("Microsoft authentication successful",w.account);const S=await ty.loginWithMicrosoft(w.idToken);S.data.access_token&&(localStorage.setItem("auth_token",S.data.access_token),localStorage.setItem("user",JSON.stringify(S.data.user)),localStorage.setItem("auth_type","microsoft"),i(S.data.access_token),n(S.data.user),console.log("Microsoft user authenticated and stored"),se.success("Successfully signed in with Microsoft!"))}}catch(w){throw console.error("Microsoft login failed:",w),w.name==="BrowserAuthError"&&w.errorCode==="popup_window_error"?se.error("Sign-in cancelled",{description:"The sign-in popup was closed before completing authentication."}):w.name==="InteractionRequiredAuthError"?se.error("Authentication required",{description:"Please complete the authentication process."}):se.error("Microsoft sign-in failed",{description:w.message||"An error occurred during authentication"}),w}finally{l(!1)}},m=async()=>{const w=localStorage.getItem("auth_type");if(localStorage.removeItem("auth_token"),localStorage.removeItem("user"),localStorage.removeItem("auth_type"),i(null),n(null),w==="microsoft"&&f.length>0)try{await d.logoutPopup({account:f[0],postLogoutRedirectUri:window.location.origin+"/semblance/"})}catch(S){console.error("Microsoft logout error:",S)}se.info("You have been logged out")},y=!!localStorage.getItem("auth_token"),x={user:e,token:r,isLoading:s,login:p,loginWithMicrosoft:g,logout:m,isAuthenticated:!!r||y,isMsalLoading:c};return a.jsx(GB.Provider,{value:x,children:t})}function Qo(){const t=v.useContext(GB);if(t===void 0)throw new Error("useAuth must be used within an AuthProvider");return t}function _a(){const[t,e]=v.useState(!1),n=Ui(),r=ar(),{isAuthenticated:i,logout:s}=Qo(),o=[{name:"Home",href:"/",icon:Ky},{name:"Synthetic Personas",href:"/synthetic-users",icon:Dr},{name:"Focus Groups",href:"/focus-groups",icon:Vo},{name:"Dashboard",href:"/dashboard",icon:z_}],c=()=>{e(!t)},l=d=>n.pathname===d,u=d=>{if(d==="/synthetic-users"){const f=new CustomEvent("syntheticUsersNavigation");window.dispatchEvent(f)}r(d)};return a.jsxs("header",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200/80",children:[a.jsx("div",{className:"px-4 sm:px-6 lg:px-8",children:a.jsxs("div",{className:"flex h-16 items-center justify-between",children:[a.jsx("div",{className:"flex items-center",children:a.jsx(ys,{to:"/",className:"flex items-center",children:a.jsx("span",{className:"font-sf text-2xl font-semibold text-gradient",children:"Semblance"})})}),a.jsx("nav",{className:"hidden md:block",children:a.jsxs("ul",{className:"flex items-center space-x-8",children:[o.map(d=>a.jsx("li",{children:d.href==="/"?a.jsxs(ys,{to:d.href,className:Pe("flex items-center px-1 py-2 text-sm font-medium hover-transition border-b-2",l(d.href)?"border-primary text-primary":"border-transparent text-slate-600 hover:text-slate-900 hover:border-slate-300"),children:[a.jsx(d.icon,{className:"mr-1 h-4 w-4"}),d.name]}):a.jsxs("button",{onClick:()=>u(d.href),className:Pe("flex items-center px-1 py-2 text-sm font-medium hover-transition border-b-2",l(d.href)?"border-primary text-primary":"border-transparent text-slate-600 hover:text-slate-900 hover:border-slate-300"),children:[a.jsx(d.icon,{className:"mr-1 h-4 w-4"}),d.name]})},d.name)),a.jsx("li",{children:i?a.jsxs("button",{onClick:()=>{s(),r("/login")},className:"flex items-center px-3 py-2 text-sm font-medium text-slate-600 hover:text-slate-900 button-transition rounded-md hover:bg-slate-50",children:[a.jsx(JO,{className:"mr-1 h-4 w-4"}),"Logout"]}):a.jsxs(ys,{to:"/login",className:"flex items-center px-3 py-2 text-sm font-medium text-slate-600 hover:text-slate-900 button-transition rounded-md hover:bg-slate-50",children:[a.jsx(XO,{className:"mr-1 h-4 w-4"}),"Login"]})})]})}),a.jsx("div",{className:"flex md:hidden",children:a.jsxs("button",{type:"button",className:"inline-flex items-center justify-center rounded-md p-2 text-slate-700 hover:bg-slate-100 hover:text-slate-900 button-transition",onClick:c,children:[a.jsx("span",{className:"sr-only",children:"Open main menu"}),t?a.jsx(Ri,{className:"block h-6 w-6","aria-hidden":"true"}):a.jsx(rZ,{className:"block h-6 w-6","aria-hidden":"true"})]})})]})}),t&&a.jsx("div",{className:"md:hidden glass-panel animate-fade-in",children:a.jsxs("div",{className:"space-y-1 px-4 pb-3 pt-2",children:[o.map(d=>a.jsx("div",{children:d.href==="/"?a.jsxs(ys,{to:d.href,className:Pe("flex items-center rounded-md px-3 py-2 text-base font-medium button-transition",l(d.href)?"bg-primary text-white":"text-slate-600 hover:bg-slate-50 hover:text-slate-900"),onClick:()=>e(!1),children:[a.jsx(d.icon,{className:"mr-3 h-5 w-5"}),d.name]}):a.jsxs("button",{className:Pe("flex items-center rounded-md px-3 py-2 text-base font-medium button-transition w-full text-left",l(d.href)?"bg-primary text-white":"text-slate-600 hover:bg-slate-50 hover:text-slate-900"),onClick:()=>{e(!1),u(d.href)},children:[a.jsx(d.icon,{className:"mr-3 h-5 w-5"}),d.name]})},d.name)),i?a.jsxs("button",{onClick:()=>{s(),e(!1),r("/login")},className:"flex items-center rounded-md px-3 py-2 text-base font-medium button-transition text-slate-600 hover:bg-slate-50 hover:text-slate-900 w-full",children:[a.jsx(JO,{className:"mr-3 h-5 w-5"}),"Logout"]}):a.jsxs(ys,{to:"/login",className:"flex items-center rounded-md px-3 py-2 text-base font-medium button-transition text-slate-600 hover:bg-slate-50 hover:text-slate-900",onClick:()=>e(!1),children:[a.jsx(XO,{className:"mr-3 h-5 w-5"}),"Login"]})]})})]})}const JI=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,ZI=Mt,XN=(t,e)=>n=>{var r;if((e==null?void 0:e.variants)==null)return ZI(t,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:i,defaultVariants:s}=e,o=Object.keys(i).map(u=>{const d=n==null?void 0:n[u],f=s==null?void 0:s[u];if(d===null)return null;const h=JI(d)||JI(f);return i[u][h]}),c=n&&Object.entries(n).reduce((u,d)=>{let[f,h]=d;return h===void 0||(u[f]=h),u},{}),l=e==null||(r=e.compoundVariants)===null||r===void 0?void 0:r.reduce((u,d)=>{let{class:f,className:h,...p}=d;return Object.entries(p).every(g=>{let[m,y]=g;return Array.isArray(y)?y.includes({...s,...c}[m]):{...s,...c}[m]===y})?[...u,f,h]:u},[]);return ZI(t,o,l,n==null?void 0:n.class,n==null?void 0:n.className)},JN=XN("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),ee=v.forwardRef(({className:t,variant:e,size:n,asChild:r=!1,...i},s)=>{const o=r?Ho:"button";return a.jsx(o,{className:Pe(JN({variant:e,size:n,className:t})),ref:s,...i})});ee.displayName="Button";function Zie(){return a.jsxs("div",{className:"relative isolate overflow-hidden",children:[a.jsx("div",{className:"absolute inset-x-0 top-[-10rem] -z-10 transform-gpu overflow-hidden blur-3xl sm:top-[-20rem]","aria-hidden":"true",children:a.jsx("div",{className:"relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-primary to-blue-400 opacity-20 sm:left-[calc(50%-30rem)] sm:w-[72.1875rem]",style:{clipPath:"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"}})}),a.jsxs("div",{className:"mx-auto max-w-7xl px-6 py-24 sm:py-32 lg:flex lg:items-center lg:gap-x-10 lg:px-8 lg:py-40",children:[a.jsxs("div",{className:"mx-auto max-w-2xl lg:mx-0 lg:flex-auto",children:[a.jsx("div",{className:"flex",children:a.jsxs("div",{className:"relative flex items-center gap-x-4 rounded-full px-4 py-1 text-sm leading-6 text-gray-600 ring-1 ring-gray-900/10 hover:ring-gray-900/20",children:[a.jsx("span",{className:"font-semibold text-primary",children:"New"}),a.jsx("span",{className:"h-4 w-px bg-gray-900/10","aria-hidden":"true"}),a.jsx("span",{children:"Introducing AI-driven focus groups"})]})}),a.jsxs("h1",{className:"mt-10 max-w-lg text-4xl font-sf font-bold tracking-tight text-gray-900 sm:text-6xl",children:["Research with ",a.jsx("span",{className:"text-gradient",children:"synthetic personas"})]}),a.jsx("p",{className:"mt-6 text-lg leading-8 text-gray-600",children:"Conduct research using AI-powered synthetic personas and autonomous focus groups. Gain valuable insights without the limitations of traditional research methods."}),a.jsxs("div",{className:"mt-10 flex items-center gap-x-6",children:[a.jsx(ys,{to:"/synthetic-users",children:a.jsxs(ee,{className:"px-6 py-6 text-base hover:shadow-lg hover:translate-y-[-2px] button-transition",children:["Create synthetic personas",a.jsx(us,{className:"ml-2 h-4 w-4"})]})}),a.jsxs(ys,{to:"/focus-groups",className:"text-sm font-semibold leading-6 text-gray-900 hover:text-primary button-transition",children:["Set up focus groups ",a.jsx("span",{"aria-hidden":"true",children:"→"})]})]})]}),a.jsx("div",{className:"mt-16 sm:mt-24 lg:mt-0 lg:flex-shrink-0 lg:flex-grow",children:a.jsxs("div",{className:"relative glass-card mx-auto w-[350px] h-[450px] rounded-2xl shadow-xl overflow-hidden animate-float",children:[a.jsxs("div",{className:"absolute top-4 left-4 right-4 h-12 bg-white/70 backdrop-blur-sm rounded-lg flex items-center px-4",children:[a.jsx("div",{className:"h-3 w-3 rounded-full bg-red-400 mr-2"}),a.jsx("div",{className:"h-3 w-3 rounded-full bg-yellow-400 mr-2"}),a.jsx("div",{className:"h-3 w-3 rounded-full bg-green-400 mr-2"}),a.jsx("div",{className:"text-xs text-gray-500 ml-2",children:"Shampoo Brand Perception"})]}),a.jsx("div",{className:"absolute top-20 left-4 right-4 bottom-4 bg-gray-50 rounded-lg overflow-hidden",children:[1,2,3,4].map(t=>a.jsx("div",{className:`flex ${t%2===0?"justify-end":"justify-start"} px-3 py-2`,children:a.jsxs("div",{className:`max-w-[70%] rounded-lg px-3 py-2 text-xs ${t%2===0?"bg-primary text-white":"bg-gray-200 text-gray-800"}`,children:[t===1&&"What qualities do you look for in a premium shampoo brand?",t===2&&"I value natural ingredients and a brand that feels luxurious but still eco-friendly.",t===3&&"How important is fragrance in your shampoo selection?",t===4&&"Very important - it affects my mood and how I feel about the product throughout the day."]})},t))})]})})]}),a.jsx("div",{className:"absolute inset-x-0 bottom-[-10rem] -z-10 transform-gpu overflow-hidden blur-3xl sm:bottom-[-20rem]","aria-hidden":"true",children:a.jsx("div",{className:"relative left-[calc(50%+11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-blue-400 to-primary opacity-20 sm:left-[calc(50%+30rem)] sm:w-[72.1875rem]",style:{clipPath:"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"}})})]})}function Lu({title:t,description:e,icon:n,className:r}){return a.jsxs("div",{className:Pe("relative group glass-card rounded-xl overflow-hidden p-6 hover:shadow-lg hover:translate-y-[-4px] button-transition",r),children:[a.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-primary/5 to-blue-400/5 opacity-0 group-hover:opacity-100 transition-opacity duration-300"}),a.jsxs("div",{className:"relative",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-12 h-12 flex items-center justify-center mb-4",children:a.jsx(n,{className:"h-6 w-6 text-primary"})}),a.jsx("h3",{className:"font-sf text-lg font-semibold mb-2",children:t}),a.jsx("p",{className:"text-gray-600 text-sm",children:e})]})]})}const ese=()=>(Qo(),ar(),a.jsxs("div",{className:"min-h-screen overflow-hidden bg-background",children:[a.jsx(_a,{}),a.jsx("main",{children:a.jsxs("div",{className:"pt-16",children:[a.jsx(Zie,{}),a.jsx("section",{className:"py-20 px-6 bg-white",children:a.jsxs("div",{className:"max-w-7xl mx-auto",children:[a.jsxs("div",{className:"text-center mb-16",children:[a.jsx("h2",{className:"text-3xl font-sf font-bold sm:text-4xl",children:"Why Synthetic Personas?"}),a.jsx("p",{className:"mt-4 text-lg text-gray-600 max-w-3xl mx-auto",children:"Our platform combines advanced AI with intuitive design to help researchers gain deeper insights faster than traditional methods."})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:[a.jsx(Lu,{title:"Scalable Research",description:"Create and test with thousands of synthetic personas, each with unique demographic profiles and behaviors.",icon:Dr}),a.jsx(Lu,{title:"AI-Driven Focus Groups",description:"Run autonomous focus groups moderated by AI that adapts to participant responses in real-time.",icon:Vo}),a.jsx(Lu,{title:"Instant Analysis",description:"Generate comprehensive reports and visualizations that highlight key insights and patterns.",icon:z_}),a.jsx(Lu,{title:"Diverse Perspectives",description:"Access synthetic personas from various backgrounds, ensuring representation across age, gender, and location.",icon:Dr}),a.jsx(Lu,{title:"Dynamic Discussions",description:"AI moderators guide conversations naturally, following up on interesting points without bias.",icon:uZ}),a.jsx(Lu,{title:"Comprehensive Reporting",description:"Export detailed reports with sentiment analysis, key themes, and actionable recommendations.",icon:z_})]})]})}),a.jsx("section",{className:"py-20 px-6 bg-gradient-to-b from-white to-slate-50",children:a.jsxs("div",{className:"max-w-7xl mx-auto",children:[a.jsxs("div",{className:"text-center mb-16",children:[a.jsx("h2",{className:"text-3xl font-sf font-bold sm:text-4xl",children:"How It Works"}),a.jsx("p",{className:"mt-4 text-lg text-gray-600 max-w-3xl mx-auto",children:"Just three simple steps to gather valuable insights from synthetic personas."})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[a.jsxs("div",{className:"text-center p-6",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-16 h-16 flex items-center justify-center mx-auto mb-4",children:a.jsx("span",{className:"text-2xl font-bold text-primary",children:"1"})}),a.jsx("h3",{className:"text-xl font-sf font-semibold mb-3",children:"Create Synthetic Personas"}),a.jsx("p",{className:"text-gray-600",children:"Define your target audience with customizable demographic profiles and personality traits."})]}),a.jsxs("div",{className:"text-center p-6",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-16 h-16 flex items-center justify-center mx-auto mb-4",children:a.jsx("span",{className:"text-2xl font-bold text-primary",children:"2"})}),a.jsx("h3",{className:"text-xl font-sf font-semibold mb-3",children:"Set Up Focus Groups"}),a.jsx("p",{className:"text-gray-600",children:"Configure your research objectives, topics, and parameters for the AI moderator."})]}),a.jsxs("div",{className:"text-center p-6",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-16 h-16 flex items-center justify-center mx-auto mb-4",children:a.jsx("span",{className:"text-2xl font-bold text-primary",children:"3"})}),a.jsx("h3",{className:"text-xl font-sf font-semibold mb-3",children:"Analyze Results"}),a.jsx("p",{className:"text-gray-600",children:"Review comprehensive visual reports and actionable insights from your synthetic research."})]})]}),a.jsx("div",{className:"text-center mt-12",children:a.jsx(ys,{to:"synthetic-users",className:"inline-flex items-center justify-center px-6 py-3 border border-transparent text-base font-medium rounded-md text-white bg-primary hover:bg-primary/90 button-transition",children:"Get Started"})})]})}),a.jsxs("footer",{className:"bg-white py-12 px-6",children:[a.jsxs("div",{className:"max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center",children:[a.jsxs("div",{className:"mb-6 md:mb-0",children:[a.jsx("span",{className:"text-xl font-sf font-semibold text-gradient",children:"Semblance"}),a.jsx("p",{className:"text-sm text-gray-500 mt-2",children:"AI-powered synthetic persona research"})]}),a.jsxs("div",{className:"flex flex-col md:flex-row gap-8",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Platform"}),a.jsxs("ul",{className:"space-y-2",children:[a.jsx("li",{children:a.jsx(ys,{to:"/",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Home"})}),a.jsx("li",{children:a.jsx(ys,{to:"/synthetic-users",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Synthetic Personas"})}),a.jsx("li",{children:a.jsx(ys,{to:"/focus-groups",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Focus Groups"})}),a.jsx("li",{children:a.jsx(ys,{to:"/dashboard",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Dashboard"})})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Company"}),a.jsxs("ul",{className:"space-y-2",children:[a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"About"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Blog"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Careers"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Contact"})})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Legal"}),a.jsxs("ul",{className:"space-y-2",children:[a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Privacy"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Terms"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Security"})})]})]})]})]}),a.jsx("div",{className:"max-w-7xl mx-auto mt-8 pt-8 border-t border-gray-200",children:a.jsxs("p",{className:"text-sm text-gray-500 text-center",children:["© ",new Date().getFullYear()," Semblance. All rights reserved."]})})]})]})})]})),tse=()=>{const t=Ui(),e=ar();v.useEffect(()=>{console.error("404 Error: User attempted to access non-existent route:",t.pathname)},[t.pathname]);const n=t.pathname.startsWith("/synthetic-users/"),i=new URLSearchParams(t.search).get("fromReview")==="true";return a.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-100",children:a.jsxs("div",{className:"text-center p-8 max-w-md bg-white rounded-lg shadow-md",children:[a.jsx("h1",{className:"text-4xl font-bold mb-4",children:"404"}),n?a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-xl text-gray-600 mb-4",children:"Persona Not Found"}),a.jsx("p",{className:"text-gray-500 mb-6",children:"The persona you're looking for may have been removed or doesn't exist."}),i?a.jsx(ee,{onClick:()=>e("/synthetic-users?mode=create&tab=ai&step=review"),className:"mb-2 w-full",children:"Return to Review Page"}):a.jsx(ee,{onClick:()=>e("/synthetic-users"),className:"mb-2 w-full",children:"View All Personas"})]}):a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-xl text-gray-600 mb-4",children:"Oops! Page not found"}),a.jsx("p",{className:"text-gray-500 mb-6",children:"The page you're looking for doesn't exist or has been moved."})]}),a.jsx(ee,{variant:"outline",onClick:()=>e("/"),className:"w-full",children:"Return to Home"})]})})},KB=v.createContext(void 0),zS="synthetic-society-navigation-state",nse=({children:t})=>{const[e,n]=v.useState(()=>{try{const s=localStorage.getItem(zS);return s?JSON.parse(s):{}}catch{return{}}});v.useEffect(()=>{localStorage.setItem(zS,JSON.stringify(e))},[e]);const r=(s,o)=>{n({...e,previousRoute:s,...o})},i=()=>{n({}),localStorage.removeItem(zS)};return a.jsx(KB.Provider,{value:{navigationState:e,setNavigationState:n,clearNavigationState:i,setPreviousRoute:r},children:t})},xg=()=>{const t=v.useContext(KB);if(!t)throw new Error("useNavigation must be used within a NavigationProvider");return t};function rse(t,e=[]){let n=[];function r(s,o){const c=v.createContext(o),l=n.length;n=[...n,o];function u(f){const{scope:h,children:p,...g}=f,m=(h==null?void 0:h[t][l])||c,y=v.useMemo(()=>g,Object.values(g));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,g=v.useContext(p);if(g)return g;if(o!==void 0)return o;throw new Error(`\`${f}\` must be used within \`${s}\``)}return u.displayName=s+"Provider",[u,d]}const i=()=>{const s=n.map(o=>v.createContext(o));return function(c){const l=(c==null?void 0:c[t])||s;return v.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,ise(i,...e)]}function ise(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(s){const o=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(s)[`__scope${u}`];return{...c,...f}},{});return v.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}var ZN="Progress",eT=100,[sse,cFe]=rse(ZN),[ose,ase]=sse(ZN),WB=v.forwardRef((t,e)=>{const{__scopeProgress:n,value:r=null,max:i,getValueLabel:s=cse,...o}=t;(i||i===0)&&!eR(i)&&console.error(lse(`${i}`,"Progress"));const c=eR(i)?i:eT;r!==null&&!tR(r,c)&&console.error(use(`${r}`,"Progress"));const l=tR(r,c)?r:null,u=yx(l)?s(l,c):void 0;return a.jsx(ose,{scope:n,value:l,max:c,children:a.jsx(it.div,{"aria-valuemax":c,"aria-valuemin":0,"aria-valuenow":yx(l)?l:void 0,"aria-valuetext":u,role:"progressbar","data-state":QB(l,c),"data-value":l??void 0,"data-max":c,...o,ref:e})})});WB.displayName=ZN;var qB="ProgressIndicator",YB=v.forwardRef((t,e)=>{const{__scopeProgress:n,...r}=t,i=ase(qB,n);return a.jsx(it.div,{"data-state":QB(i.value,i.max),"data-value":i.value??void 0,"data-max":i.max,...r,ref:e})});YB.displayName=qB;function cse(t,e){return`${Math.round(t/e*100)}%`}function QB(t,e){return t==null?"indeterminate":t===e?"complete":"loading"}function yx(t){return typeof t=="number"}function eR(t){return yx(t)&&!isNaN(t)&&t>0}function tR(t,e){return yx(t)&&!isNaN(t)&&t<=e&&t>=0}function lse(t,e){return`Invalid prop \`max\` of value \`${t}\` supplied to \`${e}\`. Only numbers greater than 0 are valid max values. Defaulting to \`${eT}\`.`}function use(t,e){return`Invalid prop \`value\` of value \`${t}\` supplied to \`${e}\`. The \`value\` prop must be: - - a positive number - - less than the value passed to \`max\` (or ${eT} if no \`max\` prop is set) - - \`null\` or \`undefined\` if the progress is indeterminate. - -Defaulting to \`null\`.`}var XB=WB,dse=YB;const wc=v.forwardRef(({className:t,value:e,...n},r)=>a.jsx(XB,{ref:r,className:Pe("relative h-4 w-full overflow-hidden rounded-full bg-secondary",t),...n,children:a.jsx(dse,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(e||0)}%)`}})}));wc.displayName=XB.displayName;var bg=t=>t.type==="checkbox",Dl=t=>t instanceof Date,fi=t=>t==null;const JB=t=>typeof t=="object";var or=t=>!fi(t)&&!Array.isArray(t)&&JB(t)&&!Dl(t),ZB=t=>or(t)&&t.target?bg(t.target)?t.target.checked:t.target.value:t,fse=t=>t.substring(0,t.search(/\.\d+(\.|$)/))||t,e3=(t,e)=>t.has(fse(e)),hse=t=>{const e=t.constructor&&t.constructor.prototype;return or(e)&&e.hasOwnProperty("isPrototypeOf")},tT=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function _i(t){let e;const n=Array.isArray(t);if(t instanceof Date)e=new Date(t);else if(t instanceof Set)e=new Set(t);else if(!(tT&&(t instanceof Blob||t instanceof FileList))&&(n||or(t)))if(e=n?[]:{},!n&&!hse(t))e=t;else for(const r in t)t.hasOwnProperty(r)&&(e[r]=_i(t[r]));else return t;return e}var H0=t=>Array.isArray(t)?t.filter(Boolean):[],tr=t=>t===void 0,Re=(t,e,n)=>{if(!e||!or(t))return n;const r=H0(e.split(/[,[\].]+?/)).reduce((i,s)=>fi(i)?i:i[s],t);return tr(r)||r===t?tr(t[e])?n:t[e]:r},fs=t=>typeof t=="boolean",nT=t=>/^\w*$/.test(t),t3=t=>H0(t.replace(/["|']|\]/g,"").split(/\.|\[/)),hn=(t,e,n)=>{let r=-1;const i=nT(e)?[e]:t3(e),s=i.length,o=s-1;for(;++rT.useContext(n3),pse=t=>{const{children:e,...n}=t;return T.createElement(n3.Provider,{value:n},e)};var r3=(t,e,n,r=!0)=>{const i={defaultValues:e._defaultValues};for(const s in t)Object.defineProperty(i,s,{get:()=>{const o=s;return e._proxyFormState[o]!==Gs.all&&(e._proxyFormState[o]=!r||Gs.all),n&&(n[o]=!0),t[o]}});return i},Ai=t=>or(t)&&!Object.keys(t).length,i3=(t,e,n,r)=>{n(t);const{name:i,...s}=t;return Ai(s)||Object.keys(s).length>=Object.keys(e).length||Object.keys(s).find(o=>e[o]===(!r||Gs.all))},hp=t=>Array.isArray(t)?t:[t],s3=(t,e,n)=>!t||!e||t===e||hp(t).some(r=>r&&(n?r===e:r.startsWith(e)||e.startsWith(r)));function rT(t){const e=T.useRef(t);e.current=t,T.useEffect(()=>{const n=!t.disabled&&e.current.subject&&e.current.subject.subscribe({next:e.current.next});return()=>{n&&n.unsubscribe()}},[t.disabled])}function mse(t){const e=z0(),{control:n=e.control,disabled:r,name:i,exact:s}=t||{},[o,c]=T.useState(n._formState),l=T.useRef(!0),u=T.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1}),d=T.useRef(i);return d.current=i,rT({disabled:r,next:f=>l.current&&s3(d.current,f.name,s)&&i3(f,u.current,n._updateFormState)&&c({...n._formState,...f}),subject:n._subjects.state}),T.useEffect(()=>(l.current=!0,u.current.isValid&&n._updateValid(!0),()=>{l.current=!1}),[n]),r3(o,n,u.current,!1)}var Oo=t=>typeof t=="string",o3=(t,e,n,r,i)=>Oo(t)?(r&&e.watch.add(t),Re(n,t,i)):Array.isArray(t)?t.map(s=>(r&&e.watch.add(s),Re(n,s))):(r&&(e.watchAll=!0),n);function gse(t){const e=z0(),{control:n=e.control,name:r,defaultValue:i,disabled:s,exact:o}=t||{},c=T.useRef(r);c.current=r,rT({disabled:s,subject:n._subjects.values,next:d=>{s3(c.current,d.name,o)&&u(_i(o3(c.current,n._names,d.values||n._formValues,!1,i)))}});const[l,u]=T.useState(n._getWatch(r,i));return T.useEffect(()=>n._removeUnmounted()),l}function vse(t){const e=z0(),{name:n,disabled:r,control:i=e.control,shouldUnregister:s}=t,o=e3(i._names.array,n),c=gse({control:i,name:n,defaultValue:Re(i._formValues,n,Re(i._defaultValues,n,t.defaultValue)),exact:!0}),l=mse({control:i,name:n,exact:!0}),u=T.useRef(i.register(n,{...t.rules,value:c,...fs(t.disabled)?{disabled:t.disabled}:{}}));return T.useEffect(()=>{const d=i._options.shouldUnregister||s,f=(h,p)=>{const g=Re(i._fields,h);g&&g._f&&(g._f.mount=p)};if(f(n,!0),d){const h=_i(Re(i._options.defaultValues,n));hn(i._defaultValues,n,h),tr(Re(i._formValues,n))&&hn(i._formValues,n,h)}return()=>{(o?d&&!i._state.action:d)?i.unregister(n):f(n,!1)}},[n,i,o,s]),T.useEffect(()=>{Re(i._fields,n)&&i._updateDisabledField({disabled:r,fields:i._fields,name:n,value:Re(i._fields,n)._f.value})},[r,n,i]),{field:{name:n,value:c,...fs(r)||l.disabled?{disabled:l.disabled||r}:{},onChange:T.useCallback(d=>u.current.onChange({target:{value:ZB(d),name:n},type:xx.CHANGE}),[n]),onBlur:T.useCallback(()=>u.current.onBlur({target:{value:Re(i._formValues,n),name:n},type:xx.BLUR}),[n,i]),ref:T.useCallback(d=>{const f=Re(i._fields,n);f&&d&&(f._f.ref={focus:()=>d.focus(),select:()=>d.select(),setCustomValidity:h=>d.setCustomValidity(h),reportValidity:()=>d.reportValidity()})},[i._fields,n])},formState:l,fieldState:Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!Re(l.errors,n)},isDirty:{enumerable:!0,get:()=>!!Re(l.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!Re(l.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!Re(l.validatingFields,n)},error:{enumerable:!0,get:()=>Re(l.errors,n)}})}}const yse=t=>t.render(vse(t));var a3=(t,e,n,r,i)=>e?{...n[t],types:{...n[t]&&n[t].types?n[t].types:{},[r]:i||!0}}:{},nR=t=>({isOnSubmit:!t||t===Gs.onSubmit,isOnBlur:t===Gs.onBlur,isOnChange:t===Gs.onChange,isOnAll:t===Gs.all,isOnTouch:t===Gs.onTouched}),rR=(t,e,n)=>!n&&(e.watchAll||e.watch.has(t)||[...e.watch].some(r=>t.startsWith(r)&&/^\.\w+/.test(t.slice(r.length))));const pp=(t,e,n,r)=>{for(const i of n||Object.keys(t)){const s=Re(t,i);if(s){const{_f:o,...c}=s;if(o){if(o.refs&&o.refs[0]&&e(o.refs[0],i)&&!r)return!0;if(o.ref&&e(o.ref,o.name)&&!r)return!0;if(pp(c,e))break}else if(or(c)&&pp(c,e))break}}};var xse=(t,e,n)=>{const r=hp(Re(t,n));return hn(r,"root",e[n]),hn(t,n,r),t},iT=t=>t.type==="file",xa=t=>typeof t=="function",bx=t=>{if(!tT)return!1;const e=t?t.ownerDocument:0;return t instanceof(e&&e.defaultView?e.defaultView.HTMLElement:HTMLElement)},sy=t=>Oo(t),sT=t=>t.type==="radio",wx=t=>t instanceof RegExp;const iR={value:!1,isValid:!1},sR={value:!0,isValid:!0};var c3=t=>{if(Array.isArray(t)){if(t.length>1){const e=t.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:e,isValid:!!e.length}}return t[0].checked&&!t[0].disabled?t[0].attributes&&!tr(t[0].attributes.value)?tr(t[0].value)||t[0].value===""?sR:{value:t[0].value,isValid:!0}:sR:iR}return iR};const oR={isValid:!1,value:null};var l3=t=>Array.isArray(t)?t.reduce((e,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:e,oR):oR;function aR(t,e,n="validate"){if(sy(t)||Array.isArray(t)&&t.every(sy)||fs(t)&&!t)return{type:n,message:sy(t)?t:"",ref:e}}var Fu=t=>or(t)&&!wx(t)?t:{value:t,message:""},cR=async(t,e,n,r,i)=>{const{ref:s,refs:o,required:c,maxLength:l,minLength:u,min:d,max:f,pattern:h,validate:p,name:g,valueAsNumber:m,mount:y,disabled:b}=t._f,x=Re(e,g);if(!y||b)return{};const w=o?o[0]:s,S=E=>{r&&w.reportValidity&&(w.setCustomValidity(fs(E)?"":E||""),w.reportValidity())},C={},_=sT(s),A=bg(s),j=_||A,P=(m||iT(s))&&tr(s.value)&&tr(x)||bx(s)&&s.value===""||x===""||Array.isArray(x)&&!x.length,k=a3.bind(null,g,n,C),O=(E,R,M,G=ia.maxLength,L=ia.minLength)=>{const V=E?R:M;C[g]={type:E?G:L,message:V,ref:s,...k(E?G:L,V)}};if(i?!Array.isArray(x)||!x.length:c&&(!j&&(P||fi(x))||fs(x)&&!x||A&&!c3(o).isValid||_&&!l3(o).isValid)){const{value:E,message:R}=sy(c)?{value:!!c,message:c}:Fu(c);if(E&&(C[g]={type:ia.required,message:R,ref:w,...k(ia.required,R)},!n))return S(R),C}if(!P&&(!fi(d)||!fi(f))){let E,R;const M=Fu(f),G=Fu(d);if(!fi(x)&&!isNaN(x)){const L=s.valueAsNumber||x&&+x;fi(M.value)||(E=L>M.value),fi(G.value)||(R=Lnew Date(new Date().toDateString()+" "+X),I=s.type=="time",D=s.type=="week";Oo(M.value)&&x&&(E=I?V(x)>V(M.value):D?x>M.value:L>new Date(M.value)),Oo(G.value)&&x&&(R=I?V(x)+E.value,G=!fi(R.value)&&x.length<+R.value;if((M||G)&&(O(M,E.message,R.message),!n))return S(C[g].message),C}if(h&&!P&&Oo(x)){const{value:E,message:R}=Fu(h);if(wx(E)&&!x.match(E)&&(C[g]={type:ia.pattern,message:R,ref:s,...k(ia.pattern,R)},!n))return S(R),C}if(p){if(xa(p)){const E=await p(x,e),R=aR(E,w);if(R&&(C[g]={...R,...k(ia.validate,R.message)},!n))return S(R.message),C}else if(or(p)){let E={};for(const R in p){if(!Ai(E)&&!n)break;const M=aR(await p[R](x,e),w,R);M&&(E={...M,...k(R,M.message)},S(M.message),n&&(C[g]=E))}if(!Ai(E)&&(C[g]={ref:w,...E},!n))return C}}return S(!0),C};function bse(t,e){const n=e.slice(0,-1).length;let r=0;for(;r{let t=[];return{get observers(){return t},next:i=>{for(const s of t)s.next&&s.next(i)},subscribe:i=>(t.push(i),{unsubscribe:()=>{t=t.filter(s=>s!==i)}}),unsubscribe:()=>{t=[]}}},p1=t=>fi(t)||!JB(t);function lc(t,e){if(p1(t)||p1(e))return t===e;if(Dl(t)&&Dl(e))return t.getTime()===e.getTime();const n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(const i of n){const s=t[i];if(!r.includes(i))return!1;if(i!=="ref"){const o=e[i];if(Dl(s)&&Dl(o)||or(s)&&or(o)||Array.isArray(s)&&Array.isArray(o)?!lc(s,o):s!==o)return!1}}return!0}var u3=t=>t.type==="select-multiple",Sse=t=>sT(t)||bg(t),GS=t=>bx(t)&&t.isConnected,d3=t=>{for(const e in t)if(xa(t[e]))return!0;return!1};function Sx(t,e={}){const n=Array.isArray(t);if(or(t)||n)for(const r in t)Array.isArray(t[r])||or(t[r])&&!d3(t[r])?(e[r]=Array.isArray(t[r])?[]:{},Sx(t[r],e[r])):fi(t[r])||(e[r]=!0);return e}function f3(t,e,n){const r=Array.isArray(t);if(or(t)||r)for(const i in t)Array.isArray(t[i])||or(t[i])&&!d3(t[i])?tr(e)||p1(n[i])?n[i]=Array.isArray(t[i])?Sx(t[i],[]):{...Sx(t[i])}:f3(t[i],fi(e)?{}:e[i],n[i]):n[i]=!lc(t[i],e[i]);return n}var _h=(t,e)=>f3(t,e,Sx(e)),h3=(t,{valueAsNumber:e,valueAsDate:n,setValueAs:r})=>tr(t)?t:e?t===""?NaN:t&&+t:n&&Oo(t)?new Date(t):r?r(t):t;function KS(t){const e=t.ref;if(!(t.refs?t.refs.every(n=>n.disabled):e.disabled))return iT(e)?e.files:sT(e)?l3(t.refs).value:u3(e)?[...e.selectedOptions].map(({value:n})=>n):bg(e)?c3(t.refs).value:h3(tr(e.value)?t.ref.value:e.value,t)}var Cse=(t,e,n,r)=>{const i={};for(const s of t){const o=Re(e,s);o&&hn(i,s,o._f)}return{criteriaMode:n,names:[...t],fields:i,shouldUseNativeValidation:r}},Ah=t=>tr(t)?t:wx(t)?t.source:or(t)?wx(t.value)?t.value.source:t.value:t;const lR="AsyncFunction";var _se=t=>(!t||!t.validate)&&!!(xa(t.validate)&&t.validate.constructor.name===lR||or(t.validate)&&Object.values(t.validate).find(e=>e.constructor.name===lR)),Ase=t=>t.mount&&(t.required||t.min||t.max||t.maxLength||t.minLength||t.pattern||t.validate);function uR(t,e,n){const r=Re(t,n);if(r||nT(n))return{error:r,name:n};const i=n.split(".");for(;i.length;){const s=i.join("."),o=Re(e,s),c=Re(t,s);if(o&&!Array.isArray(o)&&n!==s)return{name:n};if(c&&c.type)return{name:s,error:c};i.pop()}return{name:n}}var jse=(t,e,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(e||t):(n?r.isOnBlur:i.isOnBlur)?!t:(n?r.isOnChange:i.isOnChange)?t:!0,Ese=(t,e)=>!H0(Re(t,e)).length&&xr(t,e);const Nse={mode:Gs.onSubmit,reValidateMode:Gs.onChange,shouldFocusError:!0};function Tse(t={}){let e={...Nse,...t},n={submitCount:0,isDirty:!1,isLoading:xa(e.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1},r={},i=or(e.defaultValues)||or(e.values)?_i(e.defaultValues||e.values)||{}:{},s=e.shouldUnregister?{}:_i(i),o={action:!1,mount:!1,watch:!1},c={mount:new Set,unMount:new Set,array:new Set,watch:new Set},l,u=0;const d={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},f={values:VS(),array:VS(),state:VS()},h=nR(e.mode),p=nR(e.reValidateMode),g=e.criteriaMode===Gs.all,m=N=>$=>{clearTimeout(u),u=setTimeout(N,$)},y=async N=>{if(!t.disabled&&(d.isValid||N)){const $=e.resolver?Ai((await j()).errors):await k(r,!0);$!==n.isValid&&f.state.next({isValid:$})}},b=(N,$)=>{!t.disabled&&(d.isValidating||d.validatingFields)&&((N||Array.from(c.mount)).forEach(B=>{B&&($?hn(n.validatingFields,B,$):xr(n.validatingFields,B))}),f.state.next({validatingFields:n.validatingFields,isValidating:!Ai(n.validatingFields)}))},x=(N,$=[],B,K,Z=!0,H=!0)=>{if(K&&B&&!t.disabled){if(o.action=!0,H&&Array.isArray(Re(r,N))){const re=B(Re(r,N),K.argA,K.argB);Z&&hn(r,N,re)}if(H&&Array.isArray(Re(n.errors,N))){const re=B(Re(n.errors,N),K.argA,K.argB);Z&&hn(n.errors,N,re),Ese(n.errors,N)}if(d.touchedFields&&H&&Array.isArray(Re(n.touchedFields,N))){const re=B(Re(n.touchedFields,N),K.argA,K.argB);Z&&hn(n.touchedFields,N,re)}d.dirtyFields&&(n.dirtyFields=_h(i,s)),f.state.next({name:N,isDirty:E(N,$),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else hn(s,N,$)},w=(N,$)=>{hn(n.errors,N,$),f.state.next({errors:n.errors})},S=N=>{n.errors=N,f.state.next({errors:n.errors,isValid:!1})},C=(N,$,B,K)=>{const Z=Re(r,N);if(Z){const H=Re(s,N,tr(B)?Re(i,N):B);tr(H)||K&&K.defaultChecked||$?hn(s,N,$?H:KS(Z._f)):G(N,H),o.mount&&y()}},_=(N,$,B,K,Z)=>{let H=!1,re=!1;const me={name:N};if(!t.disabled){const be=!!(Re(r,N)&&Re(r,N)._f&&Re(r,N)._f.disabled);if(!B||K){d.isDirty&&(re=n.isDirty,n.isDirty=me.isDirty=E(),H=re!==me.isDirty);const ke=be||lc(Re(i,N),$);re=!!(!be&&Re(n.dirtyFields,N)),ke||be?xr(n.dirtyFields,N):hn(n.dirtyFields,N,!0),me.dirtyFields=n.dirtyFields,H=H||d.dirtyFields&&re!==!ke}if(B){const ke=Re(n.touchedFields,N);ke||(hn(n.touchedFields,N,B),me.touchedFields=n.touchedFields,H=H||d.touchedFields&&ke!==B)}H&&Z&&f.state.next(me)}return H?me:{}},A=(N,$,B,K)=>{const Z=Re(n.errors,N),H=d.isValid&&fs($)&&n.isValid!==$;if(t.delayError&&B?(l=m(()=>w(N,B)),l(t.delayError)):(clearTimeout(u),l=null,B?hn(n.errors,N,B):xr(n.errors,N)),(B?!lc(Z,B):Z)||!Ai(K)||H){const re={...K,...H&&fs($)?{isValid:$}:{},errors:n.errors,name:N};n={...n,...re},f.state.next(re)}},j=async N=>{b(N,!0);const $=await e.resolver(s,e.context,Cse(N||c.mount,r,e.criteriaMode,e.shouldUseNativeValidation));return b(N),$},P=async N=>{const{errors:$}=await j(N);if(N)for(const B of N){const K=Re($,B);K?hn(n.errors,B,K):xr(n.errors,B)}else n.errors=$;return $},k=async(N,$,B={valid:!0})=>{for(const K in N){const Z=N[K];if(Z){const{_f:H,...re}=Z;if(H){const me=c.array.has(H.name),be=Z._f&&_se(Z._f);be&&d.validatingFields&&b([K],!0);const ke=await cR(Z,s,g,e.shouldUseNativeValidation&&!$,me);if(be&&d.validatingFields&&b([K]),ke[H.name]&&(B.valid=!1,$))break;!$&&(Re(ke,H.name)?me?xse(n.errors,ke,H.name):hn(n.errors,H.name,ke[H.name]):xr(n.errors,H.name))}!Ai(re)&&await k(re,$,B)}}return B.valid},O=()=>{for(const N of c.unMount){const $=Re(r,N);$&&($._f.refs?$._f.refs.every(B=>!GS(B)):!GS($._f.ref))&&ue(N)}c.unMount=new Set},E=(N,$)=>!t.disabled&&(N&&$&&hn(s,N,$),!lc(Q(),i)),R=(N,$,B)=>o3(N,c,{...o.mount?s:tr($)?i:Oo(N)?{[N]:$}:$},B,$),M=N=>H0(Re(o.mount?s:i,N,t.shouldUnregister?Re(i,N,[]):[])),G=(N,$,B={})=>{const K=Re(r,N);let Z=$;if(K){const H=K._f;H&&(!H.disabled&&hn(s,N,h3($,H)),Z=bx(H.ref)&&fi($)?"":$,u3(H.ref)?[...H.ref.options].forEach(re=>re.selected=Z.includes(re.value)):H.refs?bg(H.ref)?H.refs.length>1?H.refs.forEach(re=>(!re.defaultChecked||!re.disabled)&&(re.checked=Array.isArray(Z)?!!Z.find(me=>me===re.value):Z===re.value)):H.refs[0]&&(H.refs[0].checked=!!Z):H.refs.forEach(re=>re.checked=re.value===Z):iT(H.ref)?H.ref.value="":(H.ref.value=Z,H.ref.type||f.values.next({name:N,values:{...s}})))}(B.shouldDirty||B.shouldTouch)&&_(N,Z,B.shouldTouch,B.shouldDirty,!0),B.shouldValidate&&X(N)},L=(N,$,B)=>{for(const K in $){const Z=$[K],H=`${N}.${K}`,re=Re(r,H);(c.array.has(N)||or(Z)||re&&!re._f)&&!Dl(Z)?L(H,Z,B):G(H,Z,B)}},V=(N,$,B={})=>{const K=Re(r,N),Z=c.array.has(N),H=_i($);hn(s,N,H),Z?(f.array.next({name:N,values:{...s}}),(d.isDirty||d.dirtyFields)&&B.shouldDirty&&f.state.next({name:N,dirtyFields:_h(i,s),isDirty:E(N,H)})):K&&!K._f&&!fi(H)?L(N,H,B):G(N,H,B),rR(N,c)&&f.state.next({...n}),f.values.next({name:o.mount?N:void 0,values:{...s}})},I=async N=>{o.mount=!0;const $=N.target;let B=$.name,K=!0;const Z=Re(r,B),H=()=>$.type?KS(Z._f):ZB(N),re=me=>{K=Number.isNaN(me)||Dl(me)&&isNaN(me.getTime())||lc(me,Re(s,B,me))};if(Z){let me,be;const ke=H(),Se=N.type===xx.BLUR||N.type===xx.FOCUS_OUT,qe=!Ase(Z._f)&&!e.resolver&&!Re(n.errors,B)&&!Z._f.deps||jse(Se,Re(n.touchedFields,B),n.isSubmitted,p,h),st=rR(B,c,Se);hn(s,B,ke),Se?(Z._f.onBlur&&Z._f.onBlur(N),l&&l(0)):Z._f.onChange&&Z._f.onChange(N);const Dt=_(B,ke,Se,!1),We=!Ai(Dt)||st;if(!Se&&f.values.next({name:B,type:N.type,values:{...s}}),qe)return d.isValid&&(t.mode==="onBlur"?Se&&y():y()),We&&f.state.next({name:B,...st?{}:Dt});if(!Se&&st&&f.state.next({...n}),e.resolver){const{errors:Je}=await j([B]);if(re(ke),K){const At=uR(n.errors,r,B),Yt=uR(Je,r,At.name||B);me=Yt.error,B=Yt.name,be=Ai(Je)}}else b([B],!0),me=(await cR(Z,s,g,e.shouldUseNativeValidation))[B],b([B]),re(ke),K&&(me?be=!1:d.isValid&&(be=await k(r,!0)));K&&(Z._f.deps&&X(Z._f.deps),A(B,be,me,Dt))}},D=(N,$)=>{if(Re(n.errors,$)&&N.focus)return N.focus(),1},X=async(N,$={})=>{let B,K;const Z=hp(N);if(e.resolver){const H=await P(tr(N)?N:Z);B=Ai(H),K=N?!Z.some(re=>Re(H,re)):B}else N?(K=(await Promise.all(Z.map(async H=>{const re=Re(r,H);return await k(re&&re._f?{[H]:re}:re)}))).every(Boolean),!(!K&&!n.isValid)&&y()):K=B=await k(r);return f.state.next({...!Oo(N)||d.isValid&&B!==n.isValid?{}:{name:N},...e.resolver||!N?{isValid:B}:{},errors:n.errors}),$.shouldFocus&&!K&&pp(r,D,N?Z:c.mount),K},Q=N=>{const $={...o.mount?s:i};return tr(N)?$:Oo(N)?Re($,N):N.map(B=>Re($,B))},J=(N,$)=>({invalid:!!Re(($||n).errors,N),isDirty:!!Re(($||n).dirtyFields,N),error:Re(($||n).errors,N),isValidating:!!Re(n.validatingFields,N),isTouched:!!Re(($||n).touchedFields,N)}),ye=N=>{N&&hp(N).forEach($=>xr(n.errors,$)),f.state.next({errors:N?n.errors:{}})},U=(N,$,B)=>{const K=(Re(r,N,{_f:{}})._f||{}).ref,Z=Re(n.errors,N)||{},{ref:H,message:re,type:me,...be}=Z;hn(n.errors,N,{...be,...$,ref:K}),f.state.next({name:N,errors:n.errors,isValid:!1}),B&&B.shouldFocus&&K&&K.focus&&K.focus()},ne=(N,$)=>xa(N)?f.values.subscribe({next:B=>N(R(void 0,$),B)}):R(N,$,!0),ue=(N,$={})=>{for(const B of N?hp(N):c.mount)c.mount.delete(B),c.array.delete(B),$.keepValue||(xr(r,B),xr(s,B)),!$.keepError&&xr(n.errors,B),!$.keepDirty&&xr(n.dirtyFields,B),!$.keepTouched&&xr(n.touchedFields,B),!$.keepIsValidating&&xr(n.validatingFields,B),!e.shouldUnregister&&!$.keepDefaultValue&&xr(i,B);f.values.next({values:{...s}}),f.state.next({...n,...$.keepDirty?{isDirty:E()}:{}}),!$.keepIsValid&&y()},F=({disabled:N,name:$,field:B,fields:K,value:Z})=>{if(fs(N)&&o.mount||N){const H=N?void 0:tr(Z)?KS(B?B._f:Re(K,$)._f):Z;hn(s,$,H),_($,H,!1,!1,!0)}},ce=(N,$={})=>{let B=Re(r,N);const K=fs($.disabled)||fs(t.disabled);return hn(r,N,{...B||{},_f:{...B&&B._f?B._f:{ref:{name:N}},name:N,mount:!0,...$}}),c.mount.add(N),B?F({field:B,disabled:fs($.disabled)?$.disabled:t.disabled,name:N,value:$.value}):C(N,!0,$.value),{...K?{disabled:$.disabled||t.disabled}:{},...e.progressive?{required:!!$.required,min:Ah($.min),max:Ah($.max),minLength:Ah($.minLength),maxLength:Ah($.maxLength),pattern:Ah($.pattern)}:{},name:N,onChange:I,onBlur:I,ref:Z=>{if(Z){ce(N,$),B=Re(r,N);const H=tr(Z.value)&&Z.querySelectorAll&&Z.querySelectorAll("input,select,textarea")[0]||Z,re=Sse(H),me=B._f.refs||[];if(re?me.find(be=>be===H):H===B._f.ref)return;hn(r,N,{_f:{...B._f,...re?{refs:[...me.filter(GS),H,...Array.isArray(Re(i,N))?[{}]:[]],ref:{type:H.type,name:N}}:{ref:H}}}),C(N,!1,void 0,H)}else B=Re(r,N,{}),B._f&&(B._f.mount=!1),(e.shouldUnregister||$.shouldUnregister)&&!(e3(c.array,N)&&o.action)&&c.unMount.add(N)}}},te=()=>e.shouldFocusError&&pp(r,D,c.mount),pe=N=>{fs(N)&&(f.state.next({disabled:N}),pp(r,($,B)=>{const K=Re(r,B);K&&($.disabled=K._f.disabled||N,Array.isArray(K._f.refs)&&K._f.refs.forEach(Z=>{Z.disabled=K._f.disabled||N}))},0,!1))},we=(N,$)=>async B=>{let K;B&&(B.preventDefault&&B.preventDefault(),B.persist&&B.persist());let Z=_i(s);if(f.state.next({isSubmitting:!0}),e.resolver){const{errors:H,values:re}=await j();n.errors=H,Z=re}else await k(r);if(xr(n.errors,"root"),Ai(n.errors)){f.state.next({errors:{}});try{await N(Z,B)}catch(H){K=H}}else $&&await $({...n.errors},B),te(),setTimeout(te);if(f.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Ai(n.errors)&&!K,submitCount:n.submitCount+1,errors:n.errors}),K)throw K},Y=(N,$={})=>{Re(r,N)&&(tr($.defaultValue)?V(N,_i(Re(i,N))):(V(N,$.defaultValue),hn(i,N,_i($.defaultValue))),$.keepTouched||xr(n.touchedFields,N),$.keepDirty||(xr(n.dirtyFields,N),n.isDirty=$.defaultValue?E(N,_i(Re(i,N))):E()),$.keepError||(xr(n.errors,N),d.isValid&&y()),f.state.next({...n}))},nt=(N,$={})=>{const B=N?_i(N):i,K=_i(B),Z=Ai(N),H=Z?i:K;if($.keepDefaultValues||(i=B),!$.keepValues){if($.keepDirtyValues){const re=new Set([...c.mount,...Object.keys(_h(i,s))]);for(const me of Array.from(re))Re(n.dirtyFields,me)?hn(H,me,Re(s,me)):V(me,Re(H,me))}else{if(tT&&tr(N))for(const re of c.mount){const me=Re(r,re);if(me&&me._f){const be=Array.isArray(me._f.refs)?me._f.refs[0]:me._f.ref;if(bx(be)){const ke=be.closest("form");if(ke){ke.reset();break}}}}r={}}s=t.shouldUnregister?$.keepDefaultValues?_i(i):{}:_i(H),f.array.next({values:{...H}}),f.values.next({values:{...H}})}c={mount:$.keepDirtyValues?c.mount:new Set,unMount:new Set,array:new Set,watch:new Set,watchAll:!1,focus:""},o.mount=!d.isValid||!!$.keepIsValid||!!$.keepDirtyValues,o.watch=!!t.shouldUnregister,f.state.next({submitCount:$.keepSubmitCount?n.submitCount:0,isDirty:Z?!1:$.keepDirty?n.isDirty:!!($.keepDefaultValues&&!lc(N,i)),isSubmitted:$.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:Z?{}:$.keepDirtyValues?$.keepDefaultValues&&s?_h(i,s):n.dirtyFields:$.keepDefaultValues&&N?_h(i,N):$.keepDirty?n.dirtyFields:{},touchedFields:$.keepTouched?n.touchedFields:{},errors:$.keepErrors?n.errors:{},isSubmitSuccessful:$.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1})},Ue=(N,$)=>nt(xa(N)?N(s):N,$);return{control:{register:ce,unregister:ue,getFieldState:J,handleSubmit:we,setError:U,_executeSchema:j,_getWatch:R,_getDirty:E,_updateValid:y,_removeUnmounted:O,_updateFieldArray:x,_updateDisabledField:F,_getFieldArray:M,_reset:nt,_resetDefaultValues:()=>xa(e.defaultValues)&&e.defaultValues().then(N=>{Ue(N,e.resetOptions),f.state.next({isLoading:!1})}),_updateFormState:N=>{n={...n,...N}},_disableForm:pe,_subjects:f,_proxyFormState:d,_setErrors:S,get _fields(){return r},get _formValues(){return s},get _state(){return o},set _state(N){o=N},get _defaultValues(){return i},get _names(){return c},set _names(N){c=N},get _formState(){return n},set _formState(N){n=N},get _options(){return e},set _options(N){e={...e,...N}}},trigger:X,register:ce,handleSubmit:we,watch:ne,setValue:V,getValues:Q,reset:Ue,resetField:Y,clearErrors:ye,unregister:ue,setError:U,setFocus:(N,$={})=>{const B=Re(r,N),K=B&&B._f;if(K){const Z=K.refs?K.refs[0]:K.ref;Z.focus&&(Z.focus(),$.shouldSelect&&Z.select())}},getFieldState:J}}function V0(t={}){const e=T.useRef(),n=T.useRef(),[r,i]=T.useState({isDirty:!1,isValidating:!1,isLoading:xa(t.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1,defaultValues:xa(t.defaultValues)?void 0:t.defaultValues});e.current||(e.current={...Tse(t),formState:r});const s=e.current.control;return s._options=t,rT({subject:s._subjects.state,next:o=>{i3(o,s._proxyFormState,s._updateFormState,!0)&&i({...s._formState})}}),T.useEffect(()=>s._disableForm(t.disabled),[s,t.disabled]),T.useEffect(()=>{if(s._proxyFormState.isDirty){const o=s._getDirty();o!==r.isDirty&&s._subjects.state.next({isDirty:o})}},[s,r.isDirty]),T.useEffect(()=>{t.values&&!lc(t.values,n.current)?(s._reset(t.values,s._options.resetOptions),n.current=t.values,i(o=>({...o}))):s._resetDefaultValues()},[t.values,s]),T.useEffect(()=>{t.errors&&s._setErrors(t.errors)},[t.errors,s]),T.useEffect(()=>{s._state.mount||(s._updateValid(),s._state.mount=!0),s._state.watch&&(s._state.watch=!1,s._subjects.state.next({...s._formState})),s._removeUnmounted()}),T.useEffect(()=>{t.shouldUnregister&&s._subjects.values.next({values:s._getWatch()})},[t.shouldUnregister,s]),T.useEffect(()=>{e.current&&(e.current.watch=e.current.watch.bind({}))},[r]),e.current.formState=r3(r,s),e.current}const dR=(t,e,n)=>{if(t&&"reportValidity"in t){const r=Re(n,e);t.setCustomValidity(r&&r.message||""),t.reportValidity()}},p3=(t,e)=>{for(const n in e.fields){const r=e.fields[n];r&&r.ref&&"reportValidity"in r.ref?dR(r.ref,n,t):r.refs&&r.refs.forEach(i=>dR(i,n,t))}},Pse=(t,e)=>{e.shouldUseNativeValidation&&p3(t,e);const n={};for(const r in t){const i=Re(e.fields,r),s=Object.assign(t[r]||{},{ref:i&&i.ref});if(kse(e.names||Object.keys(t),r)){const o=Object.assign({},Re(n,r));hn(o,"root",s),hn(n,r,o)}else hn(n,r,s)}return n},kse=(t,e)=>t.some(n=>n.startsWith(e+"."));var Ose=function(t,e){for(var n={};t.length;){var r=t[0],i=r.code,s=r.message,o=r.path.join(".");if(!n[o])if("unionErrors"in r){var c=r.unionErrors[0].errors[0];n[o]={message:c.message,type:c.code}}else n[o]={message:s,type:i};if("unionErrors"in r&&r.unionErrors.forEach(function(d){return d.errors.forEach(function(f){return t.push(f)})}),e){var l=n[o].types,u=l&&l[r.code];n[o]=a3(o,e,n,i,u?[].concat(u,r.message):r.message)}t.shift()}return n},G0=function(t,e,n){return n===void 0&&(n={}),function(r,i,s){try{return Promise.resolve(function(o,c){try{var l=Promise.resolve(t[n.mode==="sync"?"parse":"parseAsync"](r,e)).then(function(u){return s.shouldUseNativeValidation&&p3({},s),{errors:{},values:n.raw?r:u}})}catch(u){return c(u)}return l&&l.then?l.then(void 0,c):l}(0,function(o){if(function(c){return Array.isArray(c==null?void 0:c.errors)}(o))return{values:{},errors:Pse(Ose(o.errors,!s.shouldUseNativeValidation&&s.criteriaMode==="all"),s)};throw o}))}catch(o){return Promise.reject(o)}}},tn;(function(t){t.assertEqual=i=>i;function e(i){}t.assertIs=e;function n(i){throw new Error}t.assertNever=n,t.arrayToEnum=i=>{const s={};for(const o of i)s[o]=o;return s},t.getValidEnumValues=i=>{const s=t.objectKeys(i).filter(c=>typeof i[i[c]]!="number"),o={};for(const c of s)o[c]=i[c];return t.objectValues(o)},t.objectValues=i=>t.objectKeys(i).map(function(s){return i[s]}),t.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const s=[];for(const o in i)Object.prototype.hasOwnProperty.call(i,o)&&s.push(o);return s},t.find=(i,s)=>{for(const o of i)if(s(o))return o},t.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,s=" | "){return i.map(o=>typeof o=="string"?`'${o}'`:o).join(s)}t.joinValues=r,t.jsonStringifyReplacer=(i,s)=>typeof s=="bigint"?s.toString():s})(tn||(tn={}));var m1;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(m1||(m1={}));const Ke=tn.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),uc=t=>{switch(typeof t){case"undefined":return Ke.undefined;case"string":return Ke.string;case"number":return isNaN(t)?Ke.nan:Ke.number;case"boolean":return Ke.boolean;case"function":return Ke.function;case"bigint":return Ke.bigint;case"symbol":return Ke.symbol;case"object":return Array.isArray(t)?Ke.array:t===null?Ke.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?Ke.promise:typeof Map<"u"&&t instanceof Map?Ke.map:typeof Set<"u"&&t instanceof Set?Ke.set:typeof Date<"u"&&t instanceof Date?Ke.date:Ke.object;default:return Ke.unknown}},je=tn.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Ise=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:");class ts extends Error{constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}get errors(){return this.issues}format(e){const n=e||function(s){return s.message},r={_errors:[]},i=s=>{for(const o of s.issues)if(o.code==="invalid_union")o.unionErrors.map(i);else if(o.code==="invalid_return_type")i(o.returnTypeError);else if(o.code==="invalid_arguments")i(o.argumentsError);else if(o.path.length===0)r._errors.push(n(o));else{let c=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(e(i))):r.push(e(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}ts.create=t=>new ts(t);const Jd=(t,e)=>{let n;switch(t.code){case je.invalid_type:t.received===Ke.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case je.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,tn.jsonStringifyReplacer)}`;break;case je.unrecognized_keys:n=`Unrecognized key(s) in object: ${tn.joinValues(t.keys,", ")}`;break;case je.invalid_union:n="Invalid input";break;case je.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${tn.joinValues(t.options)}`;break;case je.invalid_enum_value:n=`Invalid enum value. Expected ${tn.joinValues(t.options)}, received '${t.received}'`;break;case je.invalid_arguments:n="Invalid function arguments";break;case je.invalid_return_type:n="Invalid function return type";break;case je.invalid_date:n="Invalid date";break;case je.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:tn.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case je.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case je.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case je.custom:n="Invalid input";break;case je.invalid_intersection_types:n="Intersection results could not be merged";break;case je.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case je.not_finite:n="Number must be finite";break;default:n=e.defaultError,tn.assertNever(t)}return{message:n}};let m3=Jd;function Rse(t){m3=t}function Cx(){return m3}const _x=t=>{const{data:e,path:n,errorMaps:r,issueData:i}=t,s=[...n,...i.path||[]],o={...i,path:s};if(i.message!==void 0)return{...i,path:s,message:i.message};let c="";const l=r.filter(u=>!!u).slice().reverse();for(const u of l)c=u(o,{data:e,defaultError:c}).message;return{...i,path:s,message:c}},Mse=[];function ze(t,e){const n=Cx(),r=_x({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===Jd?void 0:Jd].filter(i=>!!i)});t.common.issues.push(r)}class ii{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){const r=[];for(const i of n){if(i.status==="aborted")return kt;i.status==="dirty"&&e.dirty(),r.push(i.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){const r=[];for(const i of n){const s=await i.key,o=await i.value;r.push({key:s,value:o})}return ii.mergeObjectSync(e,r)}static mergeObjectSync(e,n){const r={};for(const i of n){const{key:s,value:o}=i;if(s.status==="aborted"||o.status==="aborted")return kt;s.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),s.value!=="__proto__"&&(typeof o.value<"u"||i.alwaysSet)&&(r[s.value]=o.value)}return{status:e.value,value:r}}}const kt=Object.freeze({status:"aborted"}),cd=t=>({status:"dirty",value:t}),xi=t=>({status:"valid",value:t}),g1=t=>t.status==="aborted",v1=t=>t.status==="dirty",rm=t=>t.status==="valid",im=t=>typeof Promise<"u"&&t instanceof Promise;function Ax(t,e,n,r){if(typeof e=="function"?t!==e||!r:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e.get(t)}function g3(t,e,n,r,i){if(typeof e=="function"?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var lt;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(lt||(lt={}));var Vh,Gh;class Go{constructor(e,n,r,i){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const fR=(t,e)=>{if(rm(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new ts(t.common.issues);return this._error=n,this._error}}};function Ut(t){if(!t)return{};const{errorMap:e,invalid_type_error:n,required_error:r,description:i}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:i}:{errorMap:(o,c)=>{var l,u;const{message:d}=t;return o.code==="invalid_enum_value"?{message:d??c.defaultError}:typeof c.data>"u"?{message:(l=d??r)!==null&&l!==void 0?l:c.defaultError}:o.code!=="invalid_type"?{message:c.defaultError}:{message:(u=d??n)!==null&&u!==void 0?u:c.defaultError}},description:i}}class qt{constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return uc(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:uc(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ii,ctx:{common:e.parent.common,data:e.data,parsedType:uc(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const n=this._parse(e);if(im(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){const n=this._parse(e);return Promise.resolve(n)}parse(e,n){const r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:uc(e)},s=this._parseSync({data:e,path:i.path,parent:i});return fR(i,s)}async parseAsync(e,n){const r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:uc(e)},i=this._parse({data:e,path:r.path,parent:r}),s=await(im(i)?i:Promise.resolve(i));return fR(r,s)}refine(e,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,s)=>{const o=e(i),c=()=>s.addIssue({code:je.custom,...r(i)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(c(),!1)):o?!0:(c(),!1)})}refinement(e,n){return this._refinement((r,i)=>e(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(e){return new fo({schema:this,typeName:Tt.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}optional(){return Lo.create(this,this._def)}nullable(){return nl.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return eo.create(this,this._def)}promise(){return ef.create(this,this._def)}or(e){return cm.create([this,e],this._def)}and(e){return lm.create(this,e,this._def)}transform(e){return new fo({...Ut(this._def),schema:this,typeName:Tt.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const n=typeof e=="function"?e:()=>e;return new pm({...Ut(this._def),innerType:this,defaultValue:n,typeName:Tt.ZodDefault})}brand(){return new oT({typeName:Tt.ZodBranded,type:this,...Ut(this._def)})}catch(e){const n=typeof e=="function"?e:()=>e;return new mm({...Ut(this._def),innerType:this,catchValue:n,typeName:Tt.ZodCatch})}describe(e){const n=this.constructor;return new n({...this._def,description:e})}pipe(e){return wg.create(this,e)}readonly(){return gm.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Dse=/^c[^\s-]{8,}$/i,$se=/^[0-9a-z]+$/,Lse=/^[0-9A-HJKMNP-TV-Z]{26}$/,Fse=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Use=/^[a-z0-9_-]{21}$/i,Bse=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Hse=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,zse="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let WS;const Vse=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Gse=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Kse=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,v3="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Wse=new RegExp(`^${v3}$`);function y3(t){let e="([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";return t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`),e}function qse(t){return new RegExp(`^${y3(t)}$`)}function x3(t){let e=`${v3}T${y3(t)}`;const n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Yse(t,e){return!!((e==="v4"||!e)&&Vse.test(t)||(e==="v6"||!e)&&Gse.test(t))}class qs extends qt{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==Ke.string){const s=this._getOrReturnCtx(e);return ze(s,{code:je.invalid_type,expected:Ke.string,received:s.parsedType}),kt}const r=new ii;let i;for(const s of this._def.checks)if(s.kind==="min")e.data.lengths.value&&(i=this._getOrReturnCtx(e,i),ze(i,{code:je.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="length"){const o=e.data.length>s.value,c=e.data.lengthe.test(i),{validation:n,code:je.invalid_string,...lt.errToObj(r)})}_addCheck(e){return new qs({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...lt.errToObj(e)})}url(e){return this._addCheck({kind:"url",...lt.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...lt.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...lt.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...lt.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...lt.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...lt.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...lt.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...lt.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...lt.errToObj(e)})}datetime(e){var n,r;return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,offset:(n=e==null?void 0:e.offset)!==null&&n!==void 0?n:!1,local:(r=e==null?void 0:e.local)!==null&&r!==void 0?r:!1,...lt.errToObj(e==null?void 0:e.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,...lt.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...lt.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...lt.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n==null?void 0:n.position,...lt.errToObj(n==null?void 0:n.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...lt.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...lt.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...lt.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...lt.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...lt.errToObj(n)})}nonempty(e){return this.min(1,lt.errToObj(e))}trim(){return new qs({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new qs({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new qs({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get minLength(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value{var e;return new qs({checks:[],typeName:Tt.ZodString,coerce:(e=t==null?void 0:t.coerce)!==null&&e!==void 0?e:!1,...Ut(t)})};function Qse(t,e){const n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,i=n>r?n:r,s=parseInt(t.toFixed(i).replace(".","")),o=parseInt(e.toFixed(i).replace(".",""));return s%o/Math.pow(10,i)}class Zc extends qt{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==Ke.number){const s=this._getOrReturnCtx(e);return ze(s,{code:je.invalid_type,expected:Ke.number,received:s.parsedType}),kt}let r;const i=new ii;for(const s of this._def.checks)s.kind==="int"?tn.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),ze(r,{code:je.invalid_type,expected:"integer",received:"float",message:s.message}),i.dirty()):s.kind==="min"?(s.inclusive?e.datas.value:e.data>=s.value)&&(r=this._getOrReturnCtx(e,r),ze(r,{code:je.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),i.dirty()):s.kind==="multipleOf"?Qse(e.data,s.value)!==0&&(r=this._getOrReturnCtx(e,r),ze(r,{code:je.not_multiple_of,multipleOf:s.value,message:s.message}),i.dirty()):s.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),ze(r,{code:je.not_finite,message:s.message}),i.dirty()):tn.assertNever(s);return{status:i.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,lt.toString(n))}gt(e,n){return this.setLimit("min",e,!1,lt.toString(n))}lte(e,n){return this.setLimit("max",e,!0,lt.toString(n))}lt(e,n){return this.setLimit("max",e,!1,lt.toString(n))}setLimit(e,n,r,i){return new Zc({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:lt.toString(i)}]})}_addCheck(e){return new Zc({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:lt.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:lt.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:lt.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:lt.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:lt.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:lt.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:lt.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:lt.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:lt.toString(e)})}get minValue(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.valuee.kind==="int"||e.kind==="multipleOf"&&tn.isInteger(e.value))}get isFinite(){let e=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.valuenew Zc({checks:[],typeName:Tt.ZodNumber,coerce:(t==null?void 0:t.coerce)||!1,...Ut(t)});class el extends qt{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce&&(e.data=BigInt(e.data)),this._getType(e)!==Ke.bigint){const s=this._getOrReturnCtx(e);return ze(s,{code:je.invalid_type,expected:Ke.bigint,received:s.parsedType}),kt}let r;const i=new ii;for(const s of this._def.checks)s.kind==="min"?(s.inclusive?e.datas.value:e.data>=s.value)&&(r=this._getOrReturnCtx(e,r),ze(r,{code:je.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),i.dirty()):s.kind==="multipleOf"?e.data%s.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),ze(r,{code:je.not_multiple_of,multipleOf:s.value,message:s.message}),i.dirty()):tn.assertNever(s);return{status:i.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,lt.toString(n))}gt(e,n){return this.setLimit("min",e,!1,lt.toString(n))}lte(e,n){return this.setLimit("max",e,!0,lt.toString(n))}lt(e,n){return this.setLimit("max",e,!1,lt.toString(n))}setLimit(e,n,r,i){return new el({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:lt.toString(i)}]})}_addCheck(e){return new el({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:lt.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:lt.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:lt.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:lt.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:lt.toString(n)})}get minValue(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value{var e;return new el({checks:[],typeName:Tt.ZodBigInt,coerce:(e=t==null?void 0:t.coerce)!==null&&e!==void 0?e:!1,...Ut(t)})};class sm extends qt{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==Ke.boolean){const r=this._getOrReturnCtx(e);return ze(r,{code:je.invalid_type,expected:Ke.boolean,received:r.parsedType}),kt}return xi(e.data)}}sm.create=t=>new sm({typeName:Tt.ZodBoolean,coerce:(t==null?void 0:t.coerce)||!1,...Ut(t)});class vu extends qt{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==Ke.date){const s=this._getOrReturnCtx(e);return ze(s,{code:je.invalid_type,expected:Ke.date,received:s.parsedType}),kt}if(isNaN(e.data.getTime())){const s=this._getOrReturnCtx(e);return ze(s,{code:je.invalid_date}),kt}const r=new ii;let i;for(const s of this._def.checks)s.kind==="min"?e.data.getTime()s.value&&(i=this._getOrReturnCtx(e,i),ze(i,{code:je.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),r.dirty()):tn.assertNever(s);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new vu({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:lt.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:lt.toString(n)})}get minDate(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.valuenew vu({checks:[],coerce:(t==null?void 0:t.coerce)||!1,typeName:Tt.ZodDate,...Ut(t)});class jx extends qt{_parse(e){if(this._getType(e)!==Ke.symbol){const r=this._getOrReturnCtx(e);return ze(r,{code:je.invalid_type,expected:Ke.symbol,received:r.parsedType}),kt}return xi(e.data)}}jx.create=t=>new jx({typeName:Tt.ZodSymbol,...Ut(t)});class om extends qt{_parse(e){if(this._getType(e)!==Ke.undefined){const r=this._getOrReturnCtx(e);return ze(r,{code:je.invalid_type,expected:Ke.undefined,received:r.parsedType}),kt}return xi(e.data)}}om.create=t=>new om({typeName:Tt.ZodUndefined,...Ut(t)});class am extends qt{_parse(e){if(this._getType(e)!==Ke.null){const r=this._getOrReturnCtx(e);return ze(r,{code:je.invalid_type,expected:Ke.null,received:r.parsedType}),kt}return xi(e.data)}}am.create=t=>new am({typeName:Tt.ZodNull,...Ut(t)});class Zd extends qt{constructor(){super(...arguments),this._any=!0}_parse(e){return xi(e.data)}}Zd.create=t=>new Zd({typeName:Tt.ZodAny,...Ut(t)});class Xl extends qt{constructor(){super(...arguments),this._unknown=!0}_parse(e){return xi(e.data)}}Xl.create=t=>new Xl({typeName:Tt.ZodUnknown,...Ut(t)});class $a extends qt{_parse(e){const n=this._getOrReturnCtx(e);return ze(n,{code:je.invalid_type,expected:Ke.never,received:n.parsedType}),kt}}$a.create=t=>new $a({typeName:Tt.ZodNever,...Ut(t)});class Ex extends qt{_parse(e){if(this._getType(e)!==Ke.undefined){const r=this._getOrReturnCtx(e);return ze(r,{code:je.invalid_type,expected:Ke.void,received:r.parsedType}),kt}return xi(e.data)}}Ex.create=t=>new Ex({typeName:Tt.ZodVoid,...Ut(t)});class eo extends qt{_parse(e){const{ctx:n,status:r}=this._processInputParams(e),i=this._def;if(n.parsedType!==Ke.array)return ze(n,{code:je.invalid_type,expected:Ke.array,received:n.parsedType}),kt;if(i.exactLength!==null){const o=n.data.length>i.exactLength.value,c=n.data.lengthi.maxLength.value&&(ze(n,{code:je.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,c)=>i.type._parseAsync(new Go(n,o,n.path,c)))).then(o=>ii.mergeArray(r,o));const s=[...n.data].map((o,c)=>i.type._parseSync(new Go(n,o,n.path,c)));return ii.mergeArray(r,s)}get element(){return this._def.type}min(e,n){return new eo({...this._def,minLength:{value:e,message:lt.toString(n)}})}max(e,n){return new eo({...this._def,maxLength:{value:e,message:lt.toString(n)}})}length(e,n){return new eo({...this._def,exactLength:{value:e,message:lt.toString(n)}})}nonempty(e){return this.min(1,e)}}eo.create=(t,e)=>new eo({type:t,minLength:null,maxLength:null,exactLength:null,typeName:Tt.ZodArray,...Ut(e)});function Yu(t){if(t instanceof Kn){const e={};for(const n in t.shape){const r=t.shape[n];e[n]=Lo.create(Yu(r))}return new Kn({...t._def,shape:()=>e})}else return t instanceof eo?new eo({...t._def,type:Yu(t.element)}):t instanceof Lo?Lo.create(Yu(t.unwrap())):t instanceof nl?nl.create(Yu(t.unwrap())):t instanceof Ko?Ko.create(t.items.map(e=>Yu(e))):t}class Kn extends qt{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),n=tn.objectKeys(e);return this._cached={shape:e,keys:n}}_parse(e){if(this._getType(e)!==Ke.object){const u=this._getOrReturnCtx(e);return ze(u,{code:je.invalid_type,expected:Ke.object,received:u.parsedType}),kt}const{status:r,ctx:i}=this._processInputParams(e),{shape:s,keys:o}=this._getCached(),c=[];if(!(this._def.catchall instanceof $a&&this._def.unknownKeys==="strip"))for(const u in i.data)o.includes(u)||c.push(u);const l=[];for(const u of o){const d=s[u],f=i.data[u];l.push({key:{status:"valid",value:u},value:d._parse(new Go(i,f,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof $a){const u=this._def.unknownKeys;if(u==="passthrough")for(const d of c)l.push({key:{status:"valid",value:d},value:{status:"valid",value:i.data[d]}});else if(u==="strict")c.length>0&&(ze(i,{code:je.unrecognized_keys,keys:c}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const d of c){const f=i.data[d];l.push({key:{status:"valid",value:d},value:u._parse(new Go(i,f,i.path,d)),alwaysSet:d in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const u=[];for(const d of l){const f=await d.key,h=await d.value;u.push({key:f,value:h,alwaysSet:d.alwaysSet})}return u}).then(u=>ii.mergeObjectSync(r,u)):ii.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(e){return lt.errToObj,new Kn({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{var i,s,o,c;const l=(o=(s=(i=this._def).errorMap)===null||s===void 0?void 0:s.call(i,n,r).message)!==null&&o!==void 0?o:r.defaultError;return n.code==="unrecognized_keys"?{message:(c=lt.errToObj(e).message)!==null&&c!==void 0?c:l}:{message:l}}}:{}})}strip(){return new Kn({...this._def,unknownKeys:"strip"})}passthrough(){return new Kn({...this._def,unknownKeys:"passthrough"})}extend(e){return new Kn({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new Kn({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:Tt.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new Kn({...this._def,catchall:e})}pick(e){const n={};return tn.objectKeys(e).forEach(r=>{e[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new Kn({...this._def,shape:()=>n})}omit(e){const n={};return tn.objectKeys(this.shape).forEach(r=>{e[r]||(n[r]=this.shape[r])}),new Kn({...this._def,shape:()=>n})}deepPartial(){return Yu(this)}partial(e){const n={};return tn.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];e&&!e[r]?n[r]=i:n[r]=i.optional()}),new Kn({...this._def,shape:()=>n})}required(e){const n={};return tn.objectKeys(this.shape).forEach(r=>{if(e&&!e[r])n[r]=this.shape[r];else{let s=this.shape[r];for(;s instanceof Lo;)s=s._def.innerType;n[r]=s}}),new Kn({...this._def,shape:()=>n})}keyof(){return b3(tn.objectKeys(this.shape))}}Kn.create=(t,e)=>new Kn({shape:()=>t,unknownKeys:"strip",catchall:$a.create(),typeName:Tt.ZodObject,...Ut(e)});Kn.strictCreate=(t,e)=>new Kn({shape:()=>t,unknownKeys:"strict",catchall:$a.create(),typeName:Tt.ZodObject,...Ut(e)});Kn.lazycreate=(t,e)=>new Kn({shape:t,unknownKeys:"strip",catchall:$a.create(),typeName:Tt.ZodObject,...Ut(e)});class cm extends qt{_parse(e){const{ctx:n}=this._processInputParams(e),r=this._def.options;function i(s){for(const c of s)if(c.result.status==="valid")return c.result;for(const c of s)if(c.result.status==="dirty")return n.common.issues.push(...c.ctx.common.issues),c.result;const o=s.map(c=>new ts(c.ctx.common.issues));return ze(n,{code:je.invalid_union,unionErrors:o}),kt}if(n.common.async)return Promise.all(r.map(async s=>{const o={...n,common:{...n.common,issues:[]},parent:null};return{result:await s._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(i);{let s;const o=[];for(const l of r){const u={...n,common:{...n.common,issues:[]},parent:null},d=l._parseSync({data:n.data,path:n.path,parent:u});if(d.status==="valid")return d;d.status==="dirty"&&!s&&(s={result:d,ctx:u}),u.common.issues.length&&o.push(u.common.issues)}if(s)return n.common.issues.push(...s.ctx.common.issues),s.result;const c=o.map(l=>new ts(l));return ze(n,{code:je.invalid_union,unionErrors:c}),kt}}get options(){return this._def.options}}cm.create=(t,e)=>new cm({options:t,typeName:Tt.ZodUnion,...Ut(e)});const aa=t=>t instanceof dm?aa(t.schema):t instanceof fo?aa(t.innerType()):t instanceof fm?[t.value]:t instanceof tl?t.options:t instanceof hm?tn.objectValues(t.enum):t instanceof pm?aa(t._def.innerType):t instanceof om?[void 0]:t instanceof am?[null]:t instanceof Lo?[void 0,...aa(t.unwrap())]:t instanceof nl?[null,...aa(t.unwrap())]:t instanceof oT||t instanceof gm?aa(t.unwrap()):t instanceof mm?aa(t._def.innerType):[];class K0 extends qt{_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==Ke.object)return ze(n,{code:je.invalid_type,expected:Ke.object,received:n.parsedType}),kt;const r=this.discriminator,i=n.data[r],s=this.optionsMap.get(i);return s?n.common.async?s._parseAsync({data:n.data,path:n.path,parent:n}):s._parseSync({data:n.data,path:n.path,parent:n}):(ze(n,{code:je.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),kt)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){const i=new Map;for(const s of n){const o=aa(s.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const c of o){if(i.has(c))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(c)}`);i.set(c,s)}}return new K0({typeName:Tt.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:i,...Ut(r)})}}function y1(t,e){const n=uc(t),r=uc(e);if(t===e)return{valid:!0,data:t};if(n===Ke.object&&r===Ke.object){const i=tn.objectKeys(e),s=tn.objectKeys(t).filter(c=>i.indexOf(c)!==-1),o={...t,...e};for(const c of s){const l=y1(t[c],e[c]);if(!l.valid)return{valid:!1};o[c]=l.data}return{valid:!0,data:o}}else if(n===Ke.array&&r===Ke.array){if(t.length!==e.length)return{valid:!1};const i=[];for(let s=0;s{if(g1(s)||g1(o))return kt;const c=y1(s.value,o.value);return c.valid?((v1(s)||v1(o))&&n.dirty(),{status:n.value,value:c.data}):(ze(r,{code:je.invalid_intersection_types}),kt)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([s,o])=>i(s,o)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}lm.create=(t,e,n)=>new lm({left:t,right:e,typeName:Tt.ZodIntersection,...Ut(n)});class Ko extends qt{_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==Ke.array)return ze(r,{code:je.invalid_type,expected:Ke.array,received:r.parsedType}),kt;if(r.data.lengththis._def.items.length&&(ze(r,{code:je.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const s=[...r.data].map((o,c)=>{const l=this._def.items[c]||this._def.rest;return l?l._parse(new Go(r,o,r.path,c)):null}).filter(o=>!!o);return r.common.async?Promise.all(s).then(o=>ii.mergeArray(n,o)):ii.mergeArray(n,s)}get items(){return this._def.items}rest(e){return new Ko({...this._def,rest:e})}}Ko.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ko({items:t,typeName:Tt.ZodTuple,rest:null,...Ut(e)})};class um extends qt{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==Ke.object)return ze(r,{code:je.invalid_type,expected:Ke.object,received:r.parsedType}),kt;const i=[],s=this._def.keyType,o=this._def.valueType;for(const c in r.data)i.push({key:s._parse(new Go(r,c,r.path,c)),value:o._parse(new Go(r,r.data[c],r.path,c)),alwaysSet:c in r.data});return r.common.async?ii.mergeObjectAsync(n,i):ii.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof qt?new um({keyType:e,valueType:n,typeName:Tt.ZodRecord,...Ut(r)}):new um({keyType:qs.create(),valueType:e,typeName:Tt.ZodRecord,...Ut(n)})}}class Nx extends qt{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==Ke.map)return ze(r,{code:je.invalid_type,expected:Ke.map,received:r.parsedType}),kt;const i=this._def.keyType,s=this._def.valueType,o=[...r.data.entries()].map(([c,l],u)=>({key:i._parse(new Go(r,c,r.path,[u,"key"])),value:s._parse(new Go(r,l,r.path,[u,"value"]))}));if(r.common.async){const c=new Map;return Promise.resolve().then(async()=>{for(const l of o){const u=await l.key,d=await l.value;if(u.status==="aborted"||d.status==="aborted")return kt;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),c.set(u.value,d.value)}return{status:n.value,value:c}})}else{const c=new Map;for(const l of o){const u=l.key,d=l.value;if(u.status==="aborted"||d.status==="aborted")return kt;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),c.set(u.value,d.value)}return{status:n.value,value:c}}}}Nx.create=(t,e,n)=>new Nx({valueType:e,keyType:t,typeName:Tt.ZodMap,...Ut(n)});class yu extends qt{_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==Ke.set)return ze(r,{code:je.invalid_type,expected:Ke.set,received:r.parsedType}),kt;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(ze(r,{code:je.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const s=this._def.valueType;function o(l){const u=new Set;for(const d of l){if(d.status==="aborted")return kt;d.status==="dirty"&&n.dirty(),u.add(d.value)}return{status:n.value,value:u}}const c=[...r.data.values()].map((l,u)=>s._parse(new Go(r,l,r.path,u)));return r.common.async?Promise.all(c).then(l=>o(l)):o(c)}min(e,n){return new yu({...this._def,minSize:{value:e,message:lt.toString(n)}})}max(e,n){return new yu({...this._def,maxSize:{value:e,message:lt.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}}yu.create=(t,e)=>new yu({valueType:t,minSize:null,maxSize:null,typeName:Tt.ZodSet,...Ut(e)});class _d extends qt{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==Ke.function)return ze(n,{code:je.invalid_type,expected:Ke.function,received:n.parsedType}),kt;function r(c,l){return _x({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Cx(),Jd].filter(u=>!!u),issueData:{code:je.invalid_arguments,argumentsError:l}})}function i(c,l){return _x({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Cx(),Jd].filter(u=>!!u),issueData:{code:je.invalid_return_type,returnTypeError:l}})}const s={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof ef){const c=this;return xi(async function(...l){const u=new ts([]),d=await c._def.args.parseAsync(l,s).catch(p=>{throw u.addIssue(r(l,p)),u}),f=await Reflect.apply(o,this,d);return await c._def.returns._def.type.parseAsync(f,s).catch(p=>{throw u.addIssue(i(f,p)),u})})}else{const c=this;return xi(function(...l){const u=c._def.args.safeParse(l,s);if(!u.success)throw new ts([r(l,u.error)]);const d=Reflect.apply(o,this,u.data),f=c._def.returns.safeParse(d,s);if(!f.success)throw new ts([i(d,f.error)]);return f.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new _d({...this._def,args:Ko.create(e).rest(Xl.create())})}returns(e){return new _d({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new _d({args:e||Ko.create([]).rest(Xl.create()),returns:n||Xl.create(),typeName:Tt.ZodFunction,...Ut(r)})}}class dm extends qt{get schema(){return this._def.getter()}_parse(e){const{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}dm.create=(t,e)=>new dm({getter:t,typeName:Tt.ZodLazy,...Ut(e)});class fm extends qt{_parse(e){if(e.data!==this._def.value){const n=this._getOrReturnCtx(e);return ze(n,{received:n.data,code:je.invalid_literal,expected:this._def.value}),kt}return{status:"valid",value:e.data}}get value(){return this._def.value}}fm.create=(t,e)=>new fm({value:t,typeName:Tt.ZodLiteral,...Ut(e)});function b3(t,e){return new tl({values:t,typeName:Tt.ZodEnum,...Ut(e)})}class tl extends qt{constructor(){super(...arguments),Vh.set(this,void 0)}_parse(e){if(typeof e.data!="string"){const n=this._getOrReturnCtx(e),r=this._def.values;return ze(n,{expected:tn.joinValues(r),received:n.parsedType,code:je.invalid_type}),kt}if(Ax(this,Vh)||g3(this,Vh,new Set(this._def.values)),!Ax(this,Vh).has(e.data)){const n=this._getOrReturnCtx(e),r=this._def.values;return ze(n,{received:n.data,code:je.invalid_enum_value,options:r}),kt}return xi(e.data)}get options(){return this._def.values}get enum(){const e={};for(const n of this._def.values)e[n]=n;return e}get Values(){const e={};for(const n of this._def.values)e[n]=n;return e}get Enum(){const e={};for(const n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return tl.create(e,{...this._def,...n})}exclude(e,n=this._def){return tl.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}}Vh=new WeakMap;tl.create=b3;class hm extends qt{constructor(){super(...arguments),Gh.set(this,void 0)}_parse(e){const n=tn.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==Ke.string&&r.parsedType!==Ke.number){const i=tn.objectValues(n);return ze(r,{expected:tn.joinValues(i),received:r.parsedType,code:je.invalid_type}),kt}if(Ax(this,Gh)||g3(this,Gh,new Set(tn.getValidEnumValues(this._def.values))),!Ax(this,Gh).has(e.data)){const i=tn.objectValues(n);return ze(r,{received:r.data,code:je.invalid_enum_value,options:i}),kt}return xi(e.data)}get enum(){return this._def.values}}Gh=new WeakMap;hm.create=(t,e)=>new hm({values:t,typeName:Tt.ZodNativeEnum,...Ut(e)});class ef extends qt{unwrap(){return this._def.type}_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==Ke.promise&&n.common.async===!1)return ze(n,{code:je.invalid_type,expected:Ke.promise,received:n.parsedType}),kt;const r=n.parsedType===Ke.promise?n.data:Promise.resolve(n.data);return xi(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}ef.create=(t,e)=>new ef({type:t,typeName:Tt.ZodPromise,...Ut(e)});class fo extends qt{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Tt.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:n,ctx:r}=this._processInputParams(e),i=this._def.effect||null,s={addIssue:o=>{ze(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(s.addIssue=s.addIssue.bind(s),i.type==="preprocess"){const o=i.transform(r.data,s);if(r.common.async)return Promise.resolve(o).then(async c=>{if(n.value==="aborted")return kt;const l=await this._def.schema._parseAsync({data:c,path:r.path,parent:r});return l.status==="aborted"?kt:l.status==="dirty"||n.value==="dirty"?cd(l.value):l});{if(n.value==="aborted")return kt;const c=this._def.schema._parseSync({data:o,path:r.path,parent:r});return c.status==="aborted"?kt:c.status==="dirty"||n.value==="dirty"?cd(c.value):c}}if(i.type==="refinement"){const o=c=>{const l=i.refinement(c,s);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return c};if(r.common.async===!1){const c=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return c.status==="aborted"?kt:(c.status==="dirty"&&n.dirty(),o(c.value),{status:n.value,value:c.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(c=>c.status==="aborted"?kt:(c.status==="dirty"&&n.dirty(),o(c.value).then(()=>({status:n.value,value:c.value}))))}if(i.type==="transform")if(r.common.async===!1){const o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!rm(o))return o;const c=i.transform(o.value,s);if(c instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:c}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>rm(o)?Promise.resolve(i.transform(o.value,s)).then(c=>({status:n.value,value:c})):o);tn.assertNever(i)}}fo.create=(t,e,n)=>new fo({schema:t,typeName:Tt.ZodEffects,effect:e,...Ut(n)});fo.createWithPreprocess=(t,e,n)=>new fo({schema:e,effect:{type:"preprocess",transform:t},typeName:Tt.ZodEffects,...Ut(n)});class Lo extends qt{_parse(e){return this._getType(e)===Ke.undefined?xi(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Lo.create=(t,e)=>new Lo({innerType:t,typeName:Tt.ZodOptional,...Ut(e)});class nl extends qt{_parse(e){return this._getType(e)===Ke.null?xi(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}nl.create=(t,e)=>new nl({innerType:t,typeName:Tt.ZodNullable,...Ut(e)});class pm extends qt{_parse(e){const{ctx:n}=this._processInputParams(e);let r=n.data;return n.parsedType===Ke.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}pm.create=(t,e)=>new pm({innerType:t,typeName:Tt.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Ut(e)});class mm extends qt{_parse(e){const{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return im(i)?i.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new ts(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new ts(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}mm.create=(t,e)=>new mm({innerType:t,typeName:Tt.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Ut(e)});class Tx extends qt{_parse(e){if(this._getType(e)!==Ke.nan){const r=this._getOrReturnCtx(e);return ze(r,{code:je.invalid_type,expected:Ke.nan,received:r.parsedType}),kt}return{status:"valid",value:e.data}}}Tx.create=t=>new Tx({typeName:Tt.ZodNaN,...Ut(t)});const Xse=Symbol("zod_brand");class oT extends qt{_parse(e){const{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class wg extends qt{_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const s=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?kt:s.status==="dirty"?(n.dirty(),cd(s.value)):this._def.out._parseAsync({data:s.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?kt:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(e,n){return new wg({in:e,out:n,typeName:Tt.ZodPipeline})}}class gm extends qt{_parse(e){const n=this._def.innerType._parse(e),r=i=>(rm(i)&&(i.value=Object.freeze(i.value)),i);return im(n)?n.then(i=>r(i)):r(n)}unwrap(){return this._def.innerType}}gm.create=(t,e)=>new gm({innerType:t,typeName:Tt.ZodReadonly,...Ut(e)});function w3(t,e={},n){return t?Zd.create().superRefine((r,i)=>{var s,o;if(!t(r)){const c=typeof e=="function"?e(r):typeof e=="string"?{message:e}:e,l=(o=(s=c.fatal)!==null&&s!==void 0?s:n)!==null&&o!==void 0?o:!0,u=typeof c=="string"?{message:c}:c;i.addIssue({code:"custom",...u,fatal:l})}}):Zd.create()}const Jse={object:Kn.lazycreate};var Tt;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(Tt||(Tt={}));const Zse=(t,e={message:`Input not instance of ${t.name}`})=>w3(n=>n instanceof t,e),S3=qs.create,C3=Zc.create,eoe=Tx.create,toe=el.create,_3=sm.create,noe=vu.create,roe=jx.create,ioe=om.create,soe=am.create,ooe=Zd.create,aoe=Xl.create,coe=$a.create,loe=Ex.create,uoe=eo.create,doe=Kn.create,foe=Kn.strictCreate,hoe=cm.create,poe=K0.create,moe=lm.create,goe=Ko.create,voe=um.create,yoe=Nx.create,xoe=yu.create,boe=_d.create,woe=dm.create,Soe=fm.create,Coe=tl.create,_oe=hm.create,Aoe=ef.create,hR=fo.create,joe=Lo.create,Eoe=nl.create,Noe=fo.createWithPreprocess,Toe=wg.create,Poe=()=>S3().optional(),koe=()=>C3().optional(),Ooe=()=>_3().optional(),Ioe={string:t=>qs.create({...t,coerce:!0}),number:t=>Zc.create({...t,coerce:!0}),boolean:t=>sm.create({...t,coerce:!0}),bigint:t=>el.create({...t,coerce:!0}),date:t=>vu.create({...t,coerce:!0})},Roe=kt;var Ie=Object.freeze({__proto__:null,defaultErrorMap:Jd,setErrorMap:Rse,getErrorMap:Cx,makeIssue:_x,EMPTY_PATH:Mse,addIssueToContext:ze,ParseStatus:ii,INVALID:kt,DIRTY:cd,OK:xi,isAborted:g1,isDirty:v1,isValid:rm,isAsync:im,get util(){return tn},get objectUtil(){return m1},ZodParsedType:Ke,getParsedType:uc,ZodType:qt,datetimeRegex:x3,ZodString:qs,ZodNumber:Zc,ZodBigInt:el,ZodBoolean:sm,ZodDate:vu,ZodSymbol:jx,ZodUndefined:om,ZodNull:am,ZodAny:Zd,ZodUnknown:Xl,ZodNever:$a,ZodVoid:Ex,ZodArray:eo,ZodObject:Kn,ZodUnion:cm,ZodDiscriminatedUnion:K0,ZodIntersection:lm,ZodTuple:Ko,ZodRecord:um,ZodMap:Nx,ZodSet:yu,ZodFunction:_d,ZodLazy:dm,ZodLiteral:fm,ZodEnum:tl,ZodNativeEnum:hm,ZodPromise:ef,ZodEffects:fo,ZodTransformer:fo,ZodOptional:Lo,ZodNullable:nl,ZodDefault:pm,ZodCatch:mm,ZodNaN:Tx,BRAND:Xse,ZodBranded:oT,ZodPipeline:wg,ZodReadonly:gm,custom:w3,Schema:qt,ZodSchema:qt,late:Jse,get ZodFirstPartyTypeKind(){return Tt},coerce:Ioe,any:ooe,array:uoe,bigint:toe,boolean:_3,date:noe,discriminatedUnion:poe,effect:hR,enum:Coe,function:boe,instanceof:Zse,intersection:moe,lazy:woe,literal:Soe,map:yoe,nan:eoe,nativeEnum:_oe,never:coe,null:soe,nullable:Eoe,number:C3,object:doe,oboolean:Ooe,onumber:koe,optional:joe,ostring:Poe,pipeline:Toe,preprocess:Noe,promise:Aoe,record:voe,set:xoe,strictObject:foe,string:S3,symbol:roe,transformer:hR,tuple:goe,undefined:ioe,union:hoe,unknown:aoe,void:loe,NEVER:Roe,ZodIssueCode:je,quotelessJson:Ise,ZodError:ts});const ut=v.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Pe("rounded-lg border bg-card text-card-foreground shadow-sm",t),...e}));ut.displayName="Card";const ji=v.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Pe("flex flex-col space-y-1.5 p-6",t),...e}));ji.displayName="CardHeader";const qi=v.forwardRef(({className:t,...e},n)=>a.jsx("h3",{ref:n,className:Pe("text-2xl font-semibold leading-none tracking-tight",t),...e}));qi.displayName="CardTitle";const aT=v.forwardRef(({className:t,...e},n)=>a.jsx("p",{ref:n,className:Pe("text-sm text-muted-foreground",t),...e}));aT.displayName="CardDescription";const Rt=v.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Pe("p-6 pt-0",t),...e}));Rt.displayName="CardContent";const cT=v.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Pe("flex items-center p-6 pt-0",t),...e}));cT.displayName="CardFooter";const Wt=v.forwardRef(({className:t,type:e,...n},r)=>a.jsx("input",{type:e,className:Pe("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",t),ref:r,...n}));Wt.displayName="Input";const Moe=XN("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function Hn({className:t,variant:e,...n}){return a.jsx("div",{className:Pe(Moe({variant:e}),t),...n})}function A3({onAssetsChange:t,onUploadComplete:e,onUploadError:n,onFilesChange:r,focusGroupId:i,disabled:s=!1,maxAssets:o=10,allowedTypes:c=["image/*","application/pdf","video/*"],label:l="Upload Assets",description:u="Upload creative assets for testing",maxFileSize:d=10,enableRenaming:f=!0}){const[h,p]=v.useState([]),[g,m]=v.useState([]),[y,b]=v.useState(null),[x,w]=v.useState(""),[S,C]=v.useState(!1),_=v.useRef(null),A=v.useRef(null);v.useEffect(()=>{i&&j()},[i]),v.useEffect(()=>{if(r){const F=h.map(ce=>ce.file);r(F)}},[h,r]);const j=async()=>{if(i)try{const ce=(await pt.getAssets(i)).data.assets||[];m(ce),t&&t(ce)}catch(F){console.error("Error fetching backend assets:",F)}},P=F=>{if(!c.some(pe=>{if(pe.includes("*")){const we=pe.split("/")[0];return F.type.startsWith(we+"/")}return F.type===pe}))return`File "${F.name}" is not a supported file type. Supported types: ${k().join(", ")}.`;const te=d*1024*1024;return F.size>te?`File "${F.name}" is too large. Maximum file size: ${d}MB.`:null},k=()=>{const F={"image/*":"Images","application/pdf":"PDF","video/*":"Videos","text/*":"Text files","application/msword":"Word docs","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word docs","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel files"};return c.map(ce=>F[ce]||ce).filter((ce,te,pe)=>pe.indexOf(ce)===te)},O=async F=>{if(!F||F.length===0)return;if(h.length+g.length+F.length>o){se.error(`You can only upload up to ${o} assets`);return}const te=[],pe=[];if(Array.from(F).forEach(Y=>{const nt=P(Y);nt?pe.push(nt):te.push(Y)}),pe.length>0&&(pe.forEach(Y=>se.error(Y)),te.length===0))return;const we=te.map(Y=>{const nt=Y.type.startsWith("image/")?URL.createObjectURL(Y):void 0;return{id:`local-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,file:Y,previewUrl:nt,status:"uploading",progress:0}});p(Y=>[...Y,...we]);for(const Y of we){if(!i){p(Ue=>Ue.map(at=>at.id===Y.id?{...at,status:"uploaded",progress:100}:at));continue}const nt=Ue=>{p(at=>at.map(Be=>Be.id===Y.id?{...Be,progress:Ue}:Be))};try{nt(10);const Ue=new FormData;if(Ue.append("assets",Y.file),nt(50),(await pt.uploadAssets(i,Ue,!1)).data.uploaded_assets>0)nt(100),setTimeout(()=>{p(Bt=>Bt.filter(N=>N.id!==Y.id))},500),await j(),se.success(`${Y.file.name} uploaded successfully`);else throw new Error("Upload failed")}catch(Ue){console.error(`Upload failed for ${Y.file.name}:`,Ue),p(at=>at.map(Be=>{var Bt,N;return Be.id===Y.id?{...Be,status:"failed",progress:0,error:((N=(Bt=Ue.response)==null?void 0:Bt.data)==null?void 0:N.error)||"Upload failed"}:Be})),n&&n(Ue)}}e&&setTimeout(()=>{e(g)},500)},E=async F=>{if(i)try{await pt.deleteAsset(i,F),await j(),se.info("Asset removed")}catch(ce){console.error("Error removing asset:",ce),se.error("Failed to remove asset")}},R=F=>{const ce=h.find(te=>te.id===F);ce!=null&&ce.previewUrl&&URL.revokeObjectURL(ce.previewUrl),p(te=>te.filter(pe=>pe.id!==F))},M=F=>{F.preventDefault(),F.stopPropagation(),C(!0)},G=F=>{var ce;F.preventDefault(),F.stopPropagation(),(ce=A.current)!=null&&ce.contains(F.relatedTarget)||C(!1)},L=F=>{F.preventDefault(),F.stopPropagation()},V=F=>{if(F.preventDefault(),F.stopPropagation(),C(!1),s)return;const ce=F.dataTransfer.files;ce.length>0&&O(ce)},I=()=>{h.length===0&&g.length===0||(h.forEach(F=>{F.previewUrl&&URL.revokeObjectURL(F.previewUrl)}),p([]),i&&g.length>0?Promise.all(g.map(F=>pt.deleteAsset(i,F.filename).catch(console.error))).then(()=>{m([]),t&&t([]),se.info("All assets cleared")}):(m([]),t&&t([])))},D=async F=>{if(i){p(ce=>ce.map(te=>te.id===F.id?{...te,status:"uploading",error:void 0,progress:0}:te));try{const ce=new FormData;if(ce.append("assets",F.file),p(we=>we.map(Y=>Y.id===F.id?{...Y,progress:50}:Y)),(await pt.uploadAssets(i,ce,!1)).data.uploaded_assets>0)p(we=>we.map(Y=>Y.id===F.id?{...Y,progress:100}:Y)),setTimeout(()=>{p(we=>we.filter(Y=>Y.id!==F.id))},500),await j(),se.success(`${F.file.name} uploaded successfully`);else throw new Error("Upload failed")}catch(ce){p(te=>te.map(pe=>{var we,Y;return pe.id===F.id?{...pe,status:"failed",progress:0,error:((Y=(we=ce.response)==null?void 0:we.data)==null?void 0:Y.error)||"Upload failed"}:pe})),se.error(`Failed to upload ${F.file.name}`)}}},X=F=>{b(F.filename),w(F.user_assigned_name||"")},Q=async F=>{if(!i||!x.trim()){J();return}try{await pt.updateAssetName(i,F,x.trim()),m(ce=>ce.map(te=>te.filename===F?{...te,user_assigned_name:x.trim()}:te)),t&&t(g),b(null),w(""),se.success("Asset name updated")}catch(ce){console.error("Error updating asset name:",ce),se.error("Failed to update asset name")}},J=()=>{b(null),w("")},ye=F=>F.startsWith("image/")?a.jsx(op,{className:"h-8 w-8 text-slate-400"}):F.startsWith("video/")?a.jsx(QJ,{className:"h-8 w-8 text-slate-400"}):F==="application/pdf"?a.jsx(Wp,{className:"h-8 w-8 text-slate-400"}):a.jsx(Wp,{className:"h-8 w-8 text-slate-400"}),U=(F,ce)=>F.user_assigned_name||`Asset ${ce+1}`,ne=h.length+g.length,ue=o-ne;return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"text-center",children:[a.jsx("h3",{className:"text-lg font-semibold text-foreground",children:l}),a.jsx("p",{className:"text-muted-foreground mt-1",children:u})]}),a.jsx("div",{ref:A,className:`relative border-2 border-dashed rounded-xl p-8 transition-all duration-200 ${s?"border-muted-foreground/20 bg-muted/30 cursor-not-allowed":S?"border-primary bg-primary/5 scale-[1.02]":"border-muted-foreground/30 bg-background hover:border-primary/50 hover:bg-muted/50 cursor-pointer"}`,onDragEnter:M,onDragLeave:G,onDragOver:L,onDrop:V,onClick:()=>{var F;return!s&&((F=_.current)==null?void 0:F.click())},children:a.jsxs("div",{className:"flex flex-col items-center justify-center text-center",children:[a.jsx(qJ,{className:`h-12 w-12 mb-4 ${s?"text-muted-foreground/40":S?"text-primary":"text-muted-foreground"}`}),s?a.jsxs("div",{children:[a.jsx("p",{className:"text-lg font-medium text-muted-foreground mb-2",children:"File Upload Disabled"}),a.jsx("p",{className:"text-sm text-muted-foreground",children:"Complete the required details above to enable file uploads"})]}):a.jsxs("div",{children:[a.jsx("p",{className:"text-lg font-medium text-foreground mb-2",children:S?"Drop files here":"Drag and drop files here, or click to browse"}),a.jsx("div",{className:"flex flex-wrap justify-center gap-2 mb-4",children:k().map((F,ce)=>a.jsx(Hn,{variant:"secondary",className:"text-xs",children:F},ce))}),a.jsxs("p",{className:"text-sm text-muted-foreground mb-4",children:["Maximum file size: ",d,"MB"]}),a.jsx("input",{ref:_,type:"file",accept:c.join(","),multiple:!0,onChange:F=>O(F.target.files),className:"hidden",disabled:s}),a.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-center gap-3",children:[a.jsxs(ee,{type:"button",variant:"default",size:"sm",disabled:s||ue<=0,onClick:F=>{var ce;F.stopPropagation(),(ce=_.current)==null||ce.click()},children:[a.jsx(gZ,{className:"mr-2 h-4 w-4"}),"Select Files"]}),(h.length>0||g.length>0)&&a.jsxs(ee,{type:"button",variant:"outline",size:"sm",onClick:F=>{F.stopPropagation(),I()},children:[a.jsx(qn,{className:"mr-2 h-4 w-4"}),"Clear All"]})]}),a.jsxs("p",{className:"text-xs text-muted-foreground mt-3",children:[ue," of ",o," uploads remaining"]})]})]})})]}),(g.length>0||h.length>0)&&a.jsxs(ut,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsxs("h4",{className:"text-lg font-semibold text-foreground",children:["Uploaded Files (",h.length+g.length,")"]}),(h.length>0||g.length>0)&&a.jsxs(ee,{type:"button",variant:"ghost",size:"sm",onClick:I,className:"text-muted-foreground hover:text-destructive",children:[a.jsx(qn,{className:"mr-2 h-4 w-4"}),"Clear All"]})]}),a.jsxs("div",{className:"space-y-3",children:[g.map((F,ce)=>{var te;return a.jsxs("div",{className:"flex items-center gap-4 p-4 border rounded-lg bg-card shadow-sm",children:[a.jsx("div",{className:"w-12 h-12 bg-muted/50 rounded-md flex items-center justify-center flex-shrink-0",children:(te=F.mime_type)!=null&&te.startsWith("image/")?a.jsx("img",{src:pt.getAssetUrl(i,F.filename),alt:U(F,ce),className:"max-h-full max-w-full object-contain rounded-md"}):ye(F.mime_type)}),a.jsx("div",{className:"flex-grow min-w-0",children:f&&y===F.filename?a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Wt,{value:x,onChange:pe=>w(pe.target.value),placeholder:`Asset ${ce+1}`,className:"flex-1",autoFocus:!0,onKeyDown:pe=>{pe.key==="Enter"?(pe.preventDefault(),Q(F.filename)):pe.key==="Escape"&&J()}}),a.jsx(ee,{size:"sm",variant:"outline",type:"button",onClick:()=>Q(F.filename),children:a.jsx(Es,{className:"h-4 w-4"})}),a.jsx(ee,{size:"sm",variant:"outline",type:"button",onClick:J,children:a.jsx(Ri,{className:"h-4 w-4"})})]}):a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("p",{className:"font-medium text-sm truncate",children:U(F,ce)}),f&&a.jsx(ee,{size:"sm",variant:"ghost",type:"button",onClick:()=>X(F),className:"h-6 w-6 p-0",children:a.jsx(V_,{className:"h-3 w-3"})})]}),a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("p",{className:"text-xs text-muted-foreground truncate",children:["Original: ",F.original_name]}),a.jsx(Hn,{variant:"outline",className:"text-xs text-green-600 bg-green-50 border-green-200",children:"Complete"})]})]})}),a.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f&&a.jsxs("div",{className:"text-right mr-2",children:[a.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"Will appear as:"}),a.jsxs("div",{className:"text-sm font-medium text-primary",children:['"',U(F,ce),'"']})]}),a.jsx(ee,{size:"sm",variant:"ghost",type:"button",onClick:()=>E(F.filename),className:"h-8 w-8 p-0 text-muted-foreground hover:text-destructive",children:a.jsx(Ri,{className:"h-4 w-4"})})]})]},F.filename)}),h.map(F=>a.jsxs("div",{className:"flex items-center gap-4 p-4 border rounded-lg bg-muted/30",children:[a.jsx("div",{className:"w-12 h-12 bg-muted/50 rounded-md flex items-center justify-center flex-shrink-0",children:F.previewUrl?a.jsx("img",{src:F.previewUrl,alt:F.file.name,className:"max-h-full max-w-full object-contain rounded-md"}):ye(F.file.type)}),a.jsxs("div",{className:"flex-grow min-w-0",children:[a.jsx("p",{className:"font-medium text-sm truncate",children:F.file.name}),a.jsxs("p",{className:"text-xs text-muted-foreground mb-2",children:[(F.file.size/1024/1024).toFixed(2)," MB"]}),F.status==="uploading"&&a.jsxs("div",{className:"space-y-1",children:[a.jsx(wc,{value:F.progress||0,className:"h-2"}),a.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground",children:[a.jsx("span",{children:"Uploading..."}),a.jsxs("span",{children:[F.progress||0,"%"]})]})]}),F.error&&a.jsx("p",{className:"text-xs text-destructive truncate mt-1",children:F.error})]}),a.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[F.status==="uploading"&&a.jsx("div",{className:"flex items-center gap-2",children:a.jsxs(Hn,{variant:"outline",className:"text-xs text-blue-600 bg-blue-50 border-blue-200",children:[a.jsx(Js,{className:"h-3 w-3 mr-1 animate-spin"}),"Uploading"]})}),F.status==="uploaded"&&a.jsxs(Hn,{variant:"outline",className:"text-xs text-green-600 bg-green-50 border-green-200",children:[a.jsx(Es,{className:"h-3 w-3 mr-1"}),"Complete"]}),F.status==="failed"&&a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Hn,{variant:"outline",className:"text-xs text-destructive bg-destructive/10 border-destructive/20",children:"Failed"}),a.jsxs(ee,{size:"sm",variant:"outline",type:"button",onClick:()=>D(F),className:"h-7 text-xs",children:[a.jsx(Yl,{className:"h-3 w-3 mr-1"}),"Retry"]})]}),a.jsx(ee,{size:"sm",variant:"ghost",type:"button",onClick:()=>R(F.id),className:"h-8 w-8 p-0 text-muted-foreground hover:text-destructive",children:a.jsx(Ri,{className:"h-4 w-4"})})]})]},F.id))]}),f&&g.length>0&&a.jsx("div",{className:"mt-6 p-4 bg-primary/5 border border-primary/20 rounded-lg",children:a.jsxs("p",{className:"text-sm text-foreground",children:[a.jsx("strong",{children:"Asset Names:"})," Click the edit icon to customize how assets will be referenced in the discussion guide. Leave blank to use default numbering."]})})]})]})}var Doe="Label",j3=v.forwardRef((t,e)=>a.jsx(it.label,{...t,ref:e,onMouseDown:n=>{var i;n.target.closest("button, input, select, textarea")||((i=t.onMouseDown)==null||i.call(t,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));j3.displayName=Doe;var E3=j3;const $oe=XN("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),hs=v.forwardRef(({className:t,...e},n)=>a.jsx(E3,{ref:n,className:Pe($oe(),t),...e}));hs.displayName=E3.displayName;const W0=pse,N3=v.createContext({}),_t=({...t})=>a.jsx(N3.Provider,{value:{name:t.name},children:a.jsx(yse,{...t})}),q0=()=>{const t=v.useContext(N3),e=v.useContext(T3),{getFieldState:n,formState:r}=z0(),i=n(t.name,r);if(!t)throw new Error("useFormField should be used within ");const{id:s}=e;return{id:s,name:t.name,formItemId:`${s}-form-item`,formDescriptionId:`${s}-form-item-description`,formMessageId:`${s}-form-item-message`,...i}},T3=v.createContext({}),gt=v.forwardRef(({className:t,...e},n)=>{const r=v.useId();return a.jsx(T3.Provider,{value:{id:r},children:a.jsx("div",{ref:n,className:Pe("space-y-2",t),...e})})});gt.displayName="FormItem";const vt=v.forwardRef(({className:t,...e},n)=>{const{error:r,formItemId:i}=q0();return a.jsx(hs,{ref:n,className:Pe(r&&"text-destructive",t),htmlFor:i,...e})});vt.displayName="FormLabel";const yt=v.forwardRef(({...t},e)=>{const{error:n,formItemId:r,formDescriptionId:i,formMessageId:s}=q0();return a.jsx(Ho,{ref:e,id:r,"aria-describedby":n?`${i} ${s}`:`${i}`,"aria-invalid":!!n,...t})});yt.displayName="FormControl";const Fn=v.forwardRef(({className:t,...e},n)=>{const{formDescriptionId:r}=q0();return a.jsx("p",{ref:n,id:r,className:Pe("text-sm text-muted-foreground",t),...e})});Fn.displayName="FormDescription";const xt=v.forwardRef(({className:t,children:e,...n},r)=>{const{error:i,formMessageId:s}=q0(),o=i?String(i==null?void 0:i.message):e;return o?a.jsx("p",{ref:r,id:s,className:Pe("text-sm font-medium text-destructive",t),...n,children:o}):null});xt.displayName="FormMessage";const ht=v.forwardRef(({className:t,...e},n)=>a.jsx("textarea",{className:Pe("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",t),ref:n,...e}));ht.displayName="Textarea";function vm(t,[e,n]){return Math.min(n,Math.max(e,t))}function Loe(t,e=[]){let n=[];function r(s,o){const c=v.createContext(o),l=n.length;n=[...n,o];function u(f){const{scope:h,children:p,...g}=f,m=(h==null?void 0:h[t][l])||c,y=v.useMemo(()=>g,Object.values(g));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,g=v.useContext(p);if(g)return g;if(o!==void 0)return o;throw new Error(`\`${f}\` must be used within \`${s}\``)}return u.displayName=s+"Provider",[u,d]}const i=()=>{const s=n.map(o=>v.createContext(o));return function(c){const l=(c==null?void 0:c[t])||s;return v.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,Foe(i,...e)]}function Foe(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(s){const o=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(s)[`__scope${u}`];return{...c,...f}},{});return v.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}function Y0(t){const e=t+"CollectionProvider",[n,r]=Loe(e),[i,s]=n(e,{collectionRef:{current:null},itemMap:new Map}),o=p=>{const{scope:g,children:m}=p,y=T.useRef(null),b=T.useRef(new Map).current;return a.jsx(i,{scope:g,itemMap:b,collectionRef:y,children:m})};o.displayName=e;const c=t+"CollectionSlot",l=T.forwardRef((p,g)=>{const{scope:m,children:y}=p,b=s(c,m),x=Ot(g,b.collectionRef);return a.jsx(Ho,{ref:x,children:y})});l.displayName=c;const u=t+"CollectionItemSlot",d="data-radix-collection-item",f=T.forwardRef((p,g)=>{const{scope:m,children:y,...b}=p,x=T.useRef(null),w=Ot(g,x),S=s(u,m);return T.useEffect(()=>(S.itemMap.set(x,{ref:x,...b}),()=>void S.itemMap.delete(x))),a.jsx(Ho,{[d]:"",ref:w,children:y})});f.displayName=u;function h(p){const g=s(t+"CollectionConsumer",p);return T.useCallback(()=>{const y=g.collectionRef.current;if(!y)return[];const b=Array.from(y.querySelectorAll(`[${d}]`));return Array.from(g.itemMap.values()).sort((S,C)=>b.indexOf(S.ref.current)-b.indexOf(C.ref.current))},[g.collectionRef,g.itemMap])}return[{Provider:o,Slot:l,ItemSlot:f},h,r]}var Uoe=v.createContext(void 0);function Pu(t){const e=v.useContext(Uoe);return t||e||"ltr"}var qS=0;function lT(){v.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??pR()),document.body.insertAdjacentElement("beforeend",t[1]??pR()),qS++,()=>{qS===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),qS--}},[])}function pR(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var YS="focusScope.autoFocusOnMount",QS="focusScope.autoFocusOnUnmount",mR={bubbles:!1,cancelable:!0},Boe="FocusScope",Q0=v.forwardRef((t,e)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:s,...o}=t,[c,l]=v.useState(null),u=Cr(i),d=Cr(s),f=v.useRef(null),h=Ot(e,m=>l(m)),p=v.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;v.useEffect(()=>{if(r){let m=function(w){if(p.paused||!c)return;const S=w.target;c.contains(S)?f.current=S:ec(f.current,{select:!0})},y=function(w){if(p.paused||!c)return;const S=w.relatedTarget;S!==null&&(c.contains(S)||ec(f.current,{select:!0}))},b=function(w){if(document.activeElement===document.body)for(const C of w)C.removedNodes.length>0&&ec(c)};document.addEventListener("focusin",m),document.addEventListener("focusout",y);const x=new MutationObserver(b);return c&&x.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",y),x.disconnect()}}},[r,c,p.paused]),v.useEffect(()=>{if(c){vR.add(p);const m=document.activeElement;if(!c.contains(m)){const b=new CustomEvent(YS,mR);c.addEventListener(YS,u),c.dispatchEvent(b),b.defaultPrevented||(Hoe(Woe(P3(c)),{select:!0}),document.activeElement===m&&ec(c))}return()=>{c.removeEventListener(YS,u),setTimeout(()=>{const b=new CustomEvent(QS,mR);c.addEventListener(QS,d),c.dispatchEvent(b),b.defaultPrevented||ec(m??document.body,{select:!0}),c.removeEventListener(QS,d),vR.remove(p)},0)}}},[c,u,d,p]);const g=v.useCallback(m=>{if(!n&&!r||p.paused)return;const y=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,b=document.activeElement;if(y&&b){const x=m.currentTarget,[w,S]=zoe(x);w&&S?!m.shiftKey&&b===S?(m.preventDefault(),n&&ec(w,{select:!0})):m.shiftKey&&b===w&&(m.preventDefault(),n&&ec(S,{select:!0})):b===x&&m.preventDefault()}},[n,r,p.paused]);return a.jsx(it.div,{tabIndex:-1,...o,ref:h,onKeyDown:g})});Q0.displayName=Boe;function Hoe(t,{select:e=!1}={}){const n=document.activeElement;for(const r of t)if(ec(r,{select:e}),document.activeElement!==n)return}function zoe(t){const e=P3(t),n=gR(e,t),r=gR(e.reverse(),t);return[n,r]}function P3(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const i=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||i?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)e.push(n.currentNode);return e}function gR(t,e){for(const n of t)if(!Voe(n,{upTo:e}))return n}function Voe(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function Goe(t){return t instanceof HTMLInputElement&&"select"in t}function ec(t,{select:e=!1}={}){if(t&&t.focus){const n=document.activeElement;t.focus({preventScroll:!0}),t!==n&&Goe(t)&&e&&t.select()}}var vR=Koe();function Koe(){let t=[];return{add(e){const n=t[0];e!==n&&(n==null||n.pause()),t=yR(t,e),t.unshift(e)},remove(e){var n;t=yR(t,e),(n=t[0])==null||n.resume()}}}function yR(t,e){const n=[...t],r=n.indexOf(e);return r!==-1&&n.splice(r,1),n}function Woe(t){return t.filter(e=>e.tagName!=="A")}function Sg(t){const e=v.useRef({value:t,previous:t});return v.useMemo(()=>(e.current.value!==t&&(e.current.previous=e.current.value,e.current.value=t),e.current.previous),[t])}var qoe=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},Uu=new WeakMap,yv=new WeakMap,xv={},XS=0,k3=function(t){return t&&(t.host||k3(t.parentNode))},Yoe=function(t,e){return e.map(function(n){if(t.contains(n))return n;var r=k3(n);return r&&t.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",t,". Doing nothing"),null)}).filter(function(n){return!!n})},Qoe=function(t,e,n,r){var i=Yoe(e,Array.isArray(t)?t:[t]);xv[n]||(xv[n]=new WeakMap);var s=xv[n],o=[],c=new Set,l=new Set(i),u=function(f){!f||c.has(f)||(c.add(f),u(f.parentNode))};i.forEach(u);var d=function(f){!f||l.has(f)||Array.prototype.forEach.call(f.children,function(h){if(c.has(h))d(h);else try{var p=h.getAttribute(r),g=p!==null&&p!=="false",m=(Uu.get(h)||0)+1,y=(s.get(h)||0)+1;Uu.set(h,m),s.set(h,y),o.push(h),m===1&&g&&yv.set(h,!0),y===1&&h.setAttribute(n,"true"),g||h.setAttribute(r,"true")}catch(b){console.error("aria-hidden: cannot operate on ",h,b)}})};return d(e),c.clear(),XS++,function(){o.forEach(function(f){var h=Uu.get(f)-1,p=s.get(f)-1;Uu.set(f,h),s.set(f,p),h||(yv.has(f)||f.removeAttribute(r),yv.delete(f)),p||f.removeAttribute(n)}),XS--,XS||(Uu=new WeakMap,Uu=new WeakMap,yv=new WeakMap,xv={})}},uT=function(t,e,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(t)?t:[t]),i=qoe(t);return i?(r.push.apply(r,Array.from(i.querySelectorAll("[aria-live]"))),Qoe(r,i,n,"aria-hidden")):function(){return null}},ko=function(){return ko=Object.assign||function(e){for(var n,r=1,i=arguments.length;r"u")return hae;var e=pae(t),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-n+e[2]-e[0])}},gae=M3(),Ad="data-scroll-locked",vae=function(t,e,n,r){var i=t.left,s=t.top,o=t.right,c=t.gap;return n===void 0&&(n="margin"),` - .`.concat(Joe,` { - overflow: hidden `).concat(r,`; - padding-right: `).concat(c,"px ").concat(r,`; - } - body[`).concat(Ad,`] { - overflow: hidden `).concat(r,`; - overscroll-behavior: contain; - `).concat([e&&"position: relative ".concat(r,";"),n==="margin"&&` - padding-left: `.concat(i,`px; - padding-top: `).concat(s,`px; - padding-right: `).concat(o,`px; - margin-left:0; - margin-top:0; - margin-right: `).concat(c,"px ").concat(r,`; - `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` - } - - .`).concat(oy,` { - right: `).concat(c,"px ").concat(r,`; - } - - .`).concat(ay,` { - margin-right: `).concat(c,"px ").concat(r,`; - } - - .`).concat(oy," .").concat(oy,` { - right: 0 `).concat(r,`; - } - - .`).concat(ay," .").concat(ay,` { - margin-right: 0 `).concat(r,`; - } - - body[`).concat(Ad,`] { - `).concat(Zoe,": ").concat(c,`px; - } -`)},bR=function(){var t=parseInt(document.body.getAttribute(Ad)||"0",10);return isFinite(t)?t:0},yae=function(){v.useEffect(function(){return document.body.setAttribute(Ad,(bR()+1).toString()),function(){var t=bR()-1;t<=0?document.body.removeAttribute(Ad):document.body.setAttribute(Ad,t.toString())}},[])},xae=function(t){var e=t.noRelative,n=t.noImportant,r=t.gapMode,i=r===void 0?"margin":r;yae();var s=v.useMemo(function(){return mae(i)},[i]);return v.createElement(gae,{styles:vae(s,!e,i,n?"":"!important")})},x1=!1;if(typeof window<"u")try{var bv=Object.defineProperty({},"passive",{get:function(){return x1=!0,!0}});window.addEventListener("test",bv,bv),window.removeEventListener("test",bv,bv)}catch{x1=!1}var Bu=x1?{passive:!1}:!1,bae=function(t){return t.tagName==="TEXTAREA"},D3=function(t,e){if(!(t instanceof Element))return!1;var n=window.getComputedStyle(t);return n[e]!=="hidden"&&!(n.overflowY===n.overflowX&&!bae(t)&&n[e]==="visible")},wae=function(t){return D3(t,"overflowY")},Sae=function(t){return D3(t,"overflowX")},wR=function(t,e){var n=e.ownerDocument,r=e;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var i=$3(t,r);if(i){var s=L3(t,r),o=s[1],c=s[2];if(o>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Cae=function(t){var e=t.scrollTop,n=t.scrollHeight,r=t.clientHeight;return[e,n,r]},_ae=function(t){var e=t.scrollLeft,n=t.scrollWidth,r=t.clientWidth;return[e,n,r]},$3=function(t,e){return t==="v"?wae(e):Sae(e)},L3=function(t,e){return t==="v"?Cae(e):_ae(e)},Aae=function(t,e){return t==="h"&&e==="rtl"?-1:1},jae=function(t,e,n,r,i){var s=Aae(t,window.getComputedStyle(e).direction),o=s*r,c=n.target,l=e.contains(c),u=!1,d=o>0,f=0,h=0;do{var p=L3(t,c),g=p[0],m=p[1],y=p[2],b=m-y-s*g;(g||b)&&$3(t,c)&&(f+=b,h+=g),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!l&&c!==document.body||l&&(e.contains(c)||e===c));return(d&&(Math.abs(f)<1||!i)||!d&&(Math.abs(h)<1||!i))&&(u=!0),u},wv=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},SR=function(t){return[t.deltaX,t.deltaY]},CR=function(t){return t&&"current"in t?t.current:t},Eae=function(t,e){return t[0]===e[0]&&t[1]===e[1]},Nae=function(t){return` - .block-interactivity-`.concat(t,` {pointer-events: none;} - .allow-interactivity-`).concat(t,` {pointer-events: all;} -`)},Tae=0,Hu=[];function Pae(t){var e=v.useRef([]),n=v.useRef([0,0]),r=v.useRef(),i=v.useState(Tae++)[0],s=v.useState(M3)[0],o=v.useRef(t);v.useEffect(function(){o.current=t},[t]),v.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(i));var m=Xoe([t.lockRef.current],(t.shards||[]).map(CR),!0).filter(Boolean);return m.forEach(function(y){return y.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),m.forEach(function(y){return y.classList.remove("allow-interactivity-".concat(i))})}}},[t.inert,t.lockRef.current,t.shards]);var c=v.useCallback(function(m,y){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!o.current.allowPinchZoom;var b=wv(m),x=n.current,w="deltaX"in m?m.deltaX:x[0]-b[0],S="deltaY"in m?m.deltaY:x[1]-b[1],C,_=m.target,A=Math.abs(w)>Math.abs(S)?"h":"v";if("touches"in m&&A==="h"&&_.type==="range")return!1;var j=wR(A,_);if(!j)return!0;if(j?C=A:(C=A==="v"?"h":"v",j=wR(A,_)),!j)return!1;if(!r.current&&"changedTouches"in m&&(w||S)&&(r.current=C),!C)return!0;var P=r.current||C;return jae(P,y,m,P==="h"?w:S,!0)},[]),l=v.useCallback(function(m){var y=m;if(!(!Hu.length||Hu[Hu.length-1]!==s)){var b="deltaY"in y?SR(y):wv(y),x=e.current.filter(function(C){return C.name===y.type&&(C.target===y.target||y.target===C.shadowParent)&&Eae(C.delta,b)})[0];if(x&&x.should){y.cancelable&&y.preventDefault();return}if(!x){var w=(o.current.shards||[]).map(CR).filter(Boolean).filter(function(C){return C.contains(y.target)}),S=w.length>0?c(y,w[0]):!o.current.noIsolation;S&&y.cancelable&&y.preventDefault()}}},[]),u=v.useCallback(function(m,y,b,x){var w={name:m,delta:y,target:b,should:x,shadowParent:kae(b)};e.current.push(w),setTimeout(function(){e.current=e.current.filter(function(S){return S!==w})},1)},[]),d=v.useCallback(function(m){n.current=wv(m),r.current=void 0},[]),f=v.useCallback(function(m){u(m.type,SR(m),m.target,c(m,t.lockRef.current))},[]),h=v.useCallback(function(m){u(m.type,wv(m),m.target,c(m,t.lockRef.current))},[]);v.useEffect(function(){return Hu.push(s),t.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:h}),document.addEventListener("wheel",l,Bu),document.addEventListener("touchmove",l,Bu),document.addEventListener("touchstart",d,Bu),function(){Hu=Hu.filter(function(m){return m!==s}),document.removeEventListener("wheel",l,Bu),document.removeEventListener("touchmove",l,Bu),document.removeEventListener("touchstart",d,Bu)}},[]);var p=t.removeScrollBar,g=t.inert;return v.createElement(v.Fragment,null,g?v.createElement(s,{styles:Nae(i)}):null,p?v.createElement(xae,{gapMode:t.gapMode}):null)}function kae(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const Oae=oae(R3,Pae);var J0=v.forwardRef(function(t,e){return v.createElement(X0,ko({},t,{ref:e,sideCar:Oae}))});J0.classNames=X0.classNames;var Iae=[" ","Enter","ArrowUp","ArrowDown"],Rae=[" ","Enter"],Cg="Select",[Z0,ew,Mae]=Y0(Cg),[Gf,lFe]=Fi(Cg,[Mae,Mf]),tw=Mf(),[Dae,ul]=Gf(Cg),[$ae,Lae]=Gf(Cg),F3=t=>{const{__scopeSelect:e,children:n,open:r,defaultOpen:i,onOpenChange:s,value:o,defaultValue:c,onValueChange:l,dir:u,name:d,autoComplete:f,disabled:h,required:p,form:g}=t,m=tw(e),[y,b]=v.useState(null),[x,w]=v.useState(null),[S,C]=v.useState(!1),_=Pu(u),[A=!1,j]=ao({prop:r,defaultProp:i,onChange:s}),[P,k]=ao({prop:o,defaultProp:c,onChange:l}),O=v.useRef(null),E=y?g||!!y.closest("form"):!0,[R,M]=v.useState(new Set),G=Array.from(R).map(L=>L.props.value).join(";");return a.jsx(P4,{...m,children:a.jsxs(Dae,{required:p,scope:e,trigger:y,onTriggerChange:b,valueNode:x,onValueNodeChange:w,valueNodeHasChildren:S,onValueNodeHasChildrenChange:C,contentId:Xs(),value:P,onValueChange:k,open:A,onOpenChange:j,dir:_,triggerPointerDownPosRef:O,disabled:h,children:[a.jsx(Z0.Provider,{scope:e,children:a.jsx($ae,{scope:t.__scopeSelect,onNativeOptionAdd:v.useCallback(L=>{M(V=>new Set(V).add(L))},[]),onNativeOptionRemove:v.useCallback(L=>{M(V=>{const I=new Set(V);return I.delete(L),I})},[]),children:n})}),E?a.jsxs(u6,{"aria-hidden":!0,required:p,tabIndex:-1,name:d,autoComplete:f,value:P,onChange:L=>k(L.target.value),disabled:h,form:g,children:[P===void 0?a.jsx("option",{value:""}):null,Array.from(R)]},G):null]})})};F3.displayName=Cg;var U3="SelectTrigger",B3=v.forwardRef((t,e)=>{const{__scopeSelect:n,disabled:r=!1,...i}=t,s=tw(n),o=ul(U3,n),c=o.disabled||r,l=Ot(e,o.onTriggerChange),u=ew(n),d=v.useRef("touch"),[f,h,p]=d6(m=>{const y=u().filter(w=>!w.disabled),b=y.find(w=>w.value===o.value),x=f6(y,m,b);x!==void 0&&o.onValueChange(x.value)}),g=m=>{c||(o.onOpenChange(!0),p()),m&&(o.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return a.jsx(bE,{asChild:!0,...s,children:a.jsx(it.button,{type:"button",role:"combobox","aria-controls":o.contentId,"aria-expanded":o.open,"aria-required":o.required,"aria-autocomplete":"none",dir:o.dir,"data-state":o.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":l6(o.value)?"":void 0,...i,ref:l,onClick:Ne(i.onClick,m=>{m.currentTarget.focus(),d.current!=="mouse"&&g(m)}),onPointerDown:Ne(i.onPointerDown,m=>{d.current=m.pointerType;const y=m.target;y.hasPointerCapture(m.pointerId)&&y.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(g(m),m.preventDefault())}),onKeyDown:Ne(i.onKeyDown,m=>{const y=f.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&h(m.key),!(y&&m.key===" ")&&Iae.includes(m.key)&&(g(),m.preventDefault())})})})});B3.displayName=U3;var H3="SelectValue",z3=v.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:i,children:s,placeholder:o="",...c}=t,l=ul(H3,n),{onValueNodeHasChildrenChange:u}=l,d=s!==void 0,f=Ot(e,l.onValueNodeChange);return Gr(()=>{u(d)},[u,d]),a.jsx(it.span,{...c,ref:f,style:{pointerEvents:"none"},children:l6(l.value)?a.jsx(a.Fragment,{children:o}):s})});z3.displayName=H3;var Fae="SelectIcon",V3=v.forwardRef((t,e)=>{const{__scopeSelect:n,children:r,...i}=t;return a.jsx(it.span,{"aria-hidden":!0,...i,ref:e,children:r||"▼"})});V3.displayName=Fae;var Uae="SelectPortal",G3=t=>a.jsx(f0,{asChild:!0,...t});G3.displayName=Uae;var xu="SelectContent",K3=v.forwardRef((t,e)=>{const n=ul(xu,t.__scopeSelect),[r,i]=v.useState();if(Gr(()=>{i(new DocumentFragment)},[]),!n.open){const s=r;return s?Of.createPortal(a.jsx(W3,{scope:t.__scopeSelect,children:a.jsx(Z0.Slot,{scope:t.__scopeSelect,children:a.jsx("div",{children:t.children})})}),s):null}return a.jsx(q3,{...t,ref:e})});K3.displayName=xu;var Ds=10,[W3,dl]=Gf(xu),Bae="SelectContentImpl",q3=v.forwardRef((t,e)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:s,onPointerDownOutside:o,side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:p,sticky:g,hideWhenDetached:m,avoidCollisions:y,...b}=t,x=ul(xu,n),[w,S]=v.useState(null),[C,_]=v.useState(null),A=Ot(e,F=>S(F)),[j,P]=v.useState(null),[k,O]=v.useState(null),E=ew(n),[R,M]=v.useState(!1),G=v.useRef(!1);v.useEffect(()=>{if(w)return uT(w)},[w]),lT();const L=v.useCallback(F=>{const[ce,...te]=E().map(Y=>Y.ref.current),[pe]=te.slice(-1),we=document.activeElement;for(const Y of F)if(Y===we||(Y==null||Y.scrollIntoView({block:"nearest"}),Y===ce&&C&&(C.scrollTop=0),Y===pe&&C&&(C.scrollTop=C.scrollHeight),Y==null||Y.focus(),document.activeElement!==we))return},[E,C]),V=v.useCallback(()=>L([j,w]),[L,j,w]);v.useEffect(()=>{R&&V()},[R,V]);const{onOpenChange:I,triggerPointerDownPosRef:D}=x;v.useEffect(()=>{if(w){let F={x:0,y:0};const ce=pe=>{var we,Y;F={x:Math.abs(Math.round(pe.pageX)-(((we=D.current)==null?void 0:we.x)??0)),y:Math.abs(Math.round(pe.pageY)-(((Y=D.current)==null?void 0:Y.y)??0))}},te=pe=>{F.x<=10&&F.y<=10?pe.preventDefault():w.contains(pe.target)||I(!1),document.removeEventListener("pointermove",ce),D.current=null};return D.current!==null&&(document.addEventListener("pointermove",ce),document.addEventListener("pointerup",te,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ce),document.removeEventListener("pointerup",te,{capture:!0})}}},[w,I,D]),v.useEffect(()=>{const F=()=>I(!1);return window.addEventListener("blur",F),window.addEventListener("resize",F),()=>{window.removeEventListener("blur",F),window.removeEventListener("resize",F)}},[I]);const[X,Q]=d6(F=>{const ce=E().filter(we=>!we.disabled),te=ce.find(we=>we.ref.current===document.activeElement),pe=f6(ce,F,te);pe&&setTimeout(()=>pe.ref.current.focus())}),J=v.useCallback((F,ce,te)=>{const pe=!G.current&&!te;(x.value!==void 0&&x.value===ce||pe)&&(P(F),pe&&(G.current=!0))},[x.value]),ye=v.useCallback(()=>w==null?void 0:w.focus(),[w]),U=v.useCallback((F,ce,te)=>{const pe=!G.current&&!te;(x.value!==void 0&&x.value===ce||pe)&&O(F)},[x.value]),ne=r==="popper"?b1:Y3,ue=ne===b1?{side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:p,sticky:g,hideWhenDetached:m,avoidCollisions:y}:{};return a.jsx(W3,{scope:n,content:w,viewport:C,onViewportChange:_,itemRefCallback:J,selectedItem:j,onItemLeave:ye,itemTextRefCallback:U,focusSelectedItem:V,selectedItemText:k,position:r,isPositioned:R,searchRef:X,children:a.jsx(J0,{as:Ho,allowPinchZoom:!0,children:a.jsx(Q0,{asChild:!0,trapped:x.open,onMountAutoFocus:F=>{F.preventDefault()},onUnmountAutoFocus:Ne(i,F=>{var ce;(ce=x.trigger)==null||ce.focus({preventScroll:!0}),F.preventDefault()}),children:a.jsx(fg,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:s,onPointerDownOutside:o,onFocusOutside:F=>F.preventDefault(),onDismiss:()=>x.onOpenChange(!1),children:a.jsx(ne,{role:"listbox",id:x.contentId,"data-state":x.open?"open":"closed",dir:x.dir,onContextMenu:F=>F.preventDefault(),...b,...ue,onPlaced:()=>M(!0),ref:A,style:{display:"flex",flexDirection:"column",outline:"none",...b.style},onKeyDown:Ne(b.onKeyDown,F=>{const ce=F.ctrlKey||F.altKey||F.metaKey;if(F.key==="Tab"&&F.preventDefault(),!ce&&F.key.length===1&&Q(F.key),["ArrowUp","ArrowDown","Home","End"].includes(F.key)){let pe=E().filter(we=>!we.disabled).map(we=>we.ref.current);if(["ArrowUp","End"].includes(F.key)&&(pe=pe.slice().reverse()),["ArrowUp","ArrowDown"].includes(F.key)){const we=F.target,Y=pe.indexOf(we);pe=pe.slice(Y+1)}setTimeout(()=>L(pe)),F.preventDefault()}})})})})})})});q3.displayName=Bae;var Hae="SelectItemAlignedPosition",Y3=v.forwardRef((t,e)=>{const{__scopeSelect:n,onPlaced:r,...i}=t,s=ul(xu,n),o=dl(xu,n),[c,l]=v.useState(null),[u,d]=v.useState(null),f=Ot(e,A=>d(A)),h=ew(n),p=v.useRef(!1),g=v.useRef(!0),{viewport:m,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=o,w=v.useCallback(()=>{if(s.trigger&&s.valueNode&&c&&u&&m&&y&&b){const A=s.trigger.getBoundingClientRect(),j=u.getBoundingClientRect(),P=s.valueNode.getBoundingClientRect(),k=b.getBoundingClientRect();if(s.dir!=="rtl"){const we=k.left-j.left,Y=P.left-we,nt=A.left-Y,Ue=A.width+nt,at=Math.max(Ue,j.width),Be=window.innerWidth-Ds,Bt=vm(Y,[Ds,Math.max(Ds,Be-at)]);c.style.minWidth=Ue+"px",c.style.left=Bt+"px"}else{const we=j.right-k.right,Y=window.innerWidth-P.right-we,nt=window.innerWidth-A.right-Y,Ue=A.width+nt,at=Math.max(Ue,j.width),Be=window.innerWidth-Ds,Bt=vm(Y,[Ds,Math.max(Ds,Be-at)]);c.style.minWidth=Ue+"px",c.style.right=Bt+"px"}const O=h(),E=window.innerHeight-Ds*2,R=m.scrollHeight,M=window.getComputedStyle(u),G=parseInt(M.borderTopWidth,10),L=parseInt(M.paddingTop,10),V=parseInt(M.borderBottomWidth,10),I=parseInt(M.paddingBottom,10),D=G+L+R+I+V,X=Math.min(y.offsetHeight*5,D),Q=window.getComputedStyle(m),J=parseInt(Q.paddingTop,10),ye=parseInt(Q.paddingBottom,10),U=A.top+A.height/2-Ds,ne=E-U,ue=y.offsetHeight/2,F=y.offsetTop+ue,ce=G+L+F,te=D-ce;if(ce<=U){const we=O.length>0&&y===O[O.length-1].ref.current;c.style.bottom="0px";const Y=u.clientHeight-m.offsetTop-m.offsetHeight,nt=Math.max(ne,ue+(we?ye:0)+Y+V),Ue=ce+nt;c.style.height=Ue+"px"}else{const we=O.length>0&&y===O[0].ref.current;c.style.top="0px";const nt=Math.max(U,G+m.offsetTop+(we?J:0)+ue)+te;c.style.height=nt+"px",m.scrollTop=ce-U+m.offsetTop}c.style.margin=`${Ds}px 0`,c.style.minHeight=X+"px",c.style.maxHeight=E+"px",r==null||r(),requestAnimationFrame(()=>p.current=!0)}},[h,s.trigger,s.valueNode,c,u,m,y,b,s.dir,r]);Gr(()=>w(),[w]);const[S,C]=v.useState();Gr(()=>{u&&C(window.getComputedStyle(u).zIndex)},[u]);const _=v.useCallback(A=>{A&&g.current===!0&&(w(),x==null||x(),g.current=!1)},[w,x]);return a.jsx(Vae,{scope:n,contentWrapper:c,shouldExpandOnScrollRef:p,onScrollButtonChange:_,children:a.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:S},children:a.jsx(it.div,{...i,ref:f,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});Y3.displayName=Hae;var zae="SelectPopperPosition",b1=v.forwardRef((t,e)=>{const{__scopeSelect:n,align:r="start",collisionPadding:i=Ds,...s}=t,o=tw(n);return a.jsx(wE,{...o,...s,ref:e,align:r,collisionPadding:i,style:{boxSizing:"border-box",...s.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});b1.displayName=zae;var[Vae,dT]=Gf(xu,{}),w1="SelectViewport",Q3=v.forwardRef((t,e)=>{const{__scopeSelect:n,nonce:r,...i}=t,s=dl(w1,n),o=dT(w1,n),c=Ot(e,s.onViewportChange),l=v.useRef(0);return a.jsxs(a.Fragment,{children:[a.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),a.jsx(Z0.Slot,{scope:n,children:a.jsx(it.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:Ne(i.onScroll,u=>{const d=u.currentTarget,{contentWrapper:f,shouldExpandOnScrollRef:h}=o;if(h!=null&&h.current&&f){const p=Math.abs(l.current-d.scrollTop);if(p>0){const g=window.innerHeight-Ds*2,m=parseFloat(f.style.minHeight),y=parseFloat(f.style.height),b=Math.max(m,y);if(b0?S:0,f.style.justifyContent="flex-end")}}}l.current=d.scrollTop})})})]})});Q3.displayName=w1;var X3="SelectGroup",[Gae,Kae]=Gf(X3),Wae=v.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,i=Xs();return a.jsx(Gae,{scope:n,id:i,children:a.jsx(it.div,{role:"group","aria-labelledby":i,...r,ref:e})})});Wae.displayName=X3;var J3="SelectLabel",Z3=v.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,i=Kae(J3,n);return a.jsx(it.div,{id:i.id,...r,ref:e})});Z3.displayName=J3;var Px="SelectItem",[qae,e6]=Gf(Px),t6=v.forwardRef((t,e)=>{const{__scopeSelect:n,value:r,disabled:i=!1,textValue:s,...o}=t,c=ul(Px,n),l=dl(Px,n),u=c.value===r,[d,f]=v.useState(s??""),[h,p]=v.useState(!1),g=Ot(e,x=>{var w;return(w=l.itemRefCallback)==null?void 0:w.call(l,x,r,i)}),m=Xs(),y=v.useRef("touch"),b=()=>{i||(c.onValueChange(r),c.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return a.jsx(qae,{scope:n,value:r,disabled:i,textId:m,isSelected:u,onItemTextChange:v.useCallback(x=>{f(w=>w||((x==null?void 0:x.textContent)??"").trim())},[]),children:a.jsx(Z0.ItemSlot,{scope:n,value:r,disabled:i,textValue:d,children:a.jsx(it.div,{role:"option","aria-labelledby":m,"data-highlighted":h?"":void 0,"aria-selected":u&&h,"data-state":u?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...o,ref:g,onFocus:Ne(o.onFocus,()=>p(!0)),onBlur:Ne(o.onBlur,()=>p(!1)),onClick:Ne(o.onClick,()=>{y.current!=="mouse"&&b()}),onPointerUp:Ne(o.onPointerUp,()=>{y.current==="mouse"&&b()}),onPointerDown:Ne(o.onPointerDown,x=>{y.current=x.pointerType}),onPointerMove:Ne(o.onPointerMove,x=>{var w;y.current=x.pointerType,i?(w=l.onItemLeave)==null||w.call(l):y.current==="mouse"&&x.currentTarget.focus({preventScroll:!0})}),onPointerLeave:Ne(o.onPointerLeave,x=>{var w;x.currentTarget===document.activeElement&&((w=l.onItemLeave)==null||w.call(l))}),onKeyDown:Ne(o.onKeyDown,x=>{var S;((S=l.searchRef)==null?void 0:S.current)!==""&&x.key===" "||(Rae.includes(x.key)&&b(),x.key===" "&&x.preventDefault())})})})})});t6.displayName=Px;var Kh="SelectItemText",n6=v.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:i,...s}=t,o=ul(Kh,n),c=dl(Kh,n),l=e6(Kh,n),u=Lae(Kh,n),[d,f]=v.useState(null),h=Ot(e,b=>f(b),l.onItemTextChange,b=>{var x;return(x=c.itemTextRefCallback)==null?void 0:x.call(c,b,l.value,l.disabled)}),p=d==null?void 0:d.textContent,g=v.useMemo(()=>a.jsx("option",{value:l.value,disabled:l.disabled,children:p},l.value),[l.disabled,l.value,p]),{onNativeOptionAdd:m,onNativeOptionRemove:y}=u;return Gr(()=>(m(g),()=>y(g)),[m,y,g]),a.jsxs(a.Fragment,{children:[a.jsx(it.span,{id:l.textId,...s,ref:h}),l.isSelected&&o.valueNode&&!o.valueNodeHasChildren?Of.createPortal(s.children,o.valueNode):null]})});n6.displayName=Kh;var r6="SelectItemIndicator",i6=v.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return e6(r6,n).isSelected?a.jsx(it.span,{"aria-hidden":!0,...r,ref:e}):null});i6.displayName=r6;var S1="SelectScrollUpButton",s6=v.forwardRef((t,e)=>{const n=dl(S1,t.__scopeSelect),r=dT(S1,t.__scopeSelect),[i,s]=v.useState(!1),o=Ot(e,r.onScrollButtonChange);return Gr(()=>{if(n.viewport&&n.isPositioned){let c=function(){const u=l.scrollTop>0;s(u)};const l=n.viewport;return c(),l.addEventListener("scroll",c),()=>l.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),i?a.jsx(a6,{...t,ref:o,onAutoScroll:()=>{const{viewport:c,selectedItem:l}=n;c&&l&&(c.scrollTop=c.scrollTop-l.offsetHeight)}}):null});s6.displayName=S1;var C1="SelectScrollDownButton",o6=v.forwardRef((t,e)=>{const n=dl(C1,t.__scopeSelect),r=dT(C1,t.__scopeSelect),[i,s]=v.useState(!1),o=Ot(e,r.onScrollButtonChange);return Gr(()=>{if(n.viewport&&n.isPositioned){let c=function(){const u=l.scrollHeight-l.clientHeight,d=Math.ceil(l.scrollTop)l.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),i?a.jsx(a6,{...t,ref:o,onAutoScroll:()=>{const{viewport:c,selectedItem:l}=n;c&&l&&(c.scrollTop=c.scrollTop+l.offsetHeight)}}):null});o6.displayName=C1;var a6=v.forwardRef((t,e)=>{const{__scopeSelect:n,onAutoScroll:r,...i}=t,s=dl("SelectScrollButton",n),o=v.useRef(null),c=ew(n),l=v.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return v.useEffect(()=>()=>l(),[l]),Gr(()=>{var d;const u=c().find(f=>f.ref.current===document.activeElement);(d=u==null?void 0:u.ref.current)==null||d.scrollIntoView({block:"nearest"})},[c]),a.jsx(it.div,{"aria-hidden":!0,...i,ref:e,style:{flexShrink:0,...i.style},onPointerDown:Ne(i.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:Ne(i.onPointerMove,()=>{var u;(u=s.onItemLeave)==null||u.call(s),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:Ne(i.onPointerLeave,()=>{l()})})}),Yae="SelectSeparator",c6=v.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return a.jsx(it.div,{"aria-hidden":!0,...r,ref:e})});c6.displayName=Yae;var _1="SelectArrow",Qae=v.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,i=tw(n),s=ul(_1,n),o=dl(_1,n);return s.open&&o.position==="popper"?a.jsx(SE,{...i,...r,ref:e}):null});Qae.displayName=_1;function l6(t){return t===""||t===void 0}var u6=v.forwardRef((t,e)=>{const{value:n,...r}=t,i=v.useRef(null),s=Ot(e,i),o=Sg(n);return v.useEffect(()=>{const c=i.current,l=window.HTMLSelectElement.prototype,d=Object.getOwnPropertyDescriptor(l,"value").set;if(o!==n&&d){const f=new Event("change",{bubbles:!0});d.call(c,n),c.dispatchEvent(f)}},[o,n]),a.jsx(CE,{asChild:!0,children:a.jsx("select",{...r,ref:s,defaultValue:n})})});u6.displayName="BubbleSelect";function d6(t){const e=Cr(t),n=v.useRef(""),r=v.useRef(0),i=v.useCallback(o=>{const c=n.current+o;e(c),function l(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(c)},[e]),s=v.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return v.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,s]}function f6(t,e,n){const i=e.length>1&&Array.from(e).every(u=>u===e[0])?e[0]:e,s=n?t.indexOf(n):-1;let o=Xae(t,Math.max(s,0));i.length===1&&(o=o.filter(u=>u!==n));const l=o.find(u=>u.textValue.toLowerCase().startsWith(i.toLowerCase()));return l!==n?l:void 0}function Xae(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var Jae=F3,h6=B3,Zae=z3,ece=V3,tce=G3,p6=K3,nce=Q3,m6=Z3,g6=t6,rce=n6,ice=i6,v6=s6,y6=o6,x6=c6;const Un=Jae,Bn=Zae,Dn=v.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(h6,{ref:r,className:Pe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t),...n,children:[e,a.jsx(ece,{asChild:!0,children:a.jsx(Ra,{className:"h-4 w-4 opacity-50"})})]}));Dn.displayName=h6.displayName;const b6=v.forwardRef(({className:t,...e},n)=>a.jsx(v6,{ref:n,className:Pe("flex cursor-default items-center justify-center py-1",t),...e,children:a.jsx(uu,{className:"h-4 w-4"})}));b6.displayName=v6.displayName;const w6=v.forwardRef(({className:t,...e},n)=>a.jsx(y6,{ref:n,className:Pe("flex cursor-default items-center justify-center py-1",t),...e,children:a.jsx(Ra,{className:"h-4 w-4"})}));w6.displayName=y6.displayName;const $n=v.forwardRef(({className:t,children:e,position:n="popper",...r},i)=>a.jsx(tce,{children:a.jsxs(p6,{ref:i,className:Pe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...r,children:[a.jsx(b6,{}),a.jsx(nce,{className:Pe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:e}),a.jsx(w6,{})]})}));$n.displayName=p6.displayName;const sce=v.forwardRef(({className:t,...e},n)=>a.jsx(m6,{ref:n,className:Pe("py-1.5 pl-8 pr-2 text-sm font-semibold",t),...e}));sce.displayName=m6.displayName;const ae=v.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(g6,{ref:r,className:Pe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...n,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(ice,{children:a.jsx(Es,{className:"h-4 w-4"})})}),a.jsx(rce,{children:e})]}));ae.displayName=g6.displayName;const oce=v.forwardRef(({className:t,...e},n)=>a.jsx(x6,{ref:n,className:Pe("-mx-1 my-1 h-px bg-muted",t),...e}));oce.displayName=x6.displayName;const ace=Ie.object({audienceBrief:Ie.string().min(10,{message:"Audience brief must be at least 10 characters."}),researchObjective:Ie.string().optional(),personaCount:Ie.string().min(1,{message:"Number of personas is required."}),dataFile:Ie.instanceof(FileList).optional(),llm_model:Ie.string().optional()});function cce({onSubmit:t,isGenerating:e}){const[n,r]=v.useState(!1),[i,s]=v.useState(!1),[o,c]=v.useState({audience_brief:[],research_objective:[]}),[l,u]=v.useState(!1),[d,f]=v.useState(null),[h,p]=v.useState(null),[g,m]=v.useState([]),y=_=>{const A=new DataTransfer;return _.forEach(j=>A.items.add(j)),A.files},b=V0({resolver:G0(ace),defaultValues:{audienceBrief:"",researchObjective:"",personaCount:"5",llm_model:"gemini-2.5-pro"}}),x=b.watch("audienceBrief"),w=b.watch("researchObjective"),S=async()=>{var j,P,k,O,E,R,M,G,L,V,I;const _=x==null?void 0:x.trim(),A=w==null?void 0:w.trim();if(!_||_.length<10){se.error("Audience brief too short",{description:"Please enter at least 10 characters in the audience brief"});return}if(!A||A.length<10){se.error("Research objective too short",{description:"Please enter at least 10 characters in the research objective"});return}u(!0),f(null);try{const D=await la.enhanceAudienceBrief(_,A);c(D.data.suggestions||{audience_brief:[],research_objective:[]}),r(!0),s(!1);const X=(((P=(j=D.data.suggestions)==null?void 0:j.audience_brief)==null?void 0:P.length)||0)+(((O=(k=D.data.suggestions)==null?void 0:k.research_objective)==null?void 0:O.length)||0);se.success("Enhancement suggestions generated",{description:`Generated ${X} suggestions to improve your research inputs`})}catch(D){console.error("Error enhancing audience brief:",D);let X="Please try again or modify your brief",Q="Failed to generate suggestions";if(D&&typeof D=="object"){const J=D;J.code==="ECONNABORTED"||(E=J.message)!=null&&E.includes("timeout")?(Q="Request timeout",X="The AI took too long to analyze your brief. Please try again."):((R=J.response)==null?void 0:R.status)===500?(Q="Server error",X=((G=(M=J.response)==null?void 0:M.data)==null?void 0:G.message)||"The server encountered an error. Please try again later."):((L=J.response)==null?void 0:L.status)===400?(Q="Invalid brief",X=((I=(V=J.response)==null?void 0:V.data)==null?void 0:I.message)||"Please check your audience brief and try again."):J.message&&(X=J.message)}else D instanceof Error&&(X=D.message);f(X),se.error(Q,{description:X,duration:5e3})}finally{u(!1)}},C=()=>{s(!i)};return a.jsx(W0,{...b,children:a.jsxs("form",{onSubmit:b.handleSubmit(t),className:"space-y-6",children:[a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-6",children:[a.jsx(_t,{control:b.control,name:"audienceBrief",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Audience Brief"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Describe your target audience and research goals...",className:"h-40",..._})}),a.jsx(Fn,{children:"Provide details about the demographics, behaviors, and attitudes you want to explore"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:b.control,name:"researchObjective",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Research Objective"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"What is the main research topic or objective you want to explore?",className:"h-32",..._})}),a.jsx(Fn,{children:"Specify your research focus to generate more targeted persona goals, frustrations, and scenarios"}),a.jsx(xt,{})]})}),a.jsx("div",{className:"space-y-3",children:a.jsx(ee,{type:"button",variant:"outline",size:"sm",onClick:S,disabled:!x||x.trim().length<10||!w||w.trim().length<10||l||e,className:"flex items-center gap-2 hover-transition",children:l?a.jsxs(a.Fragment,{children:[a.jsx(Yl,{className:"h-4 w-4 animate-spin"}),"Analyzing Research Inputs..."]}):a.jsxs(a.Fragment,{children:[a.jsx(du,{className:"h-4 w-4"}),"Enhance Brief"]})})})]}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsx(A3,{focusGroupId:void 0,disabled:e,maxAssets:5,maxFileSize:10,allowedTypes:["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","text/*","image/*"],label:"Customer Data Upload",description:"Upload existing customer data to create more realistic and accurate synthetic personas. This helps the AI understand your target audience better.",enableRenaming:!1,onFilesChange:_=>{m(_),p(_.length>0?y(_):null)}}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Supports PDF, Word docs, Excel files, text files, and images"})]}),a.jsxs("div",{className:"bg-muted/30 p-4 rounded-lg border border-border",children:[a.jsxs("div",{className:"flex items-center mb-2",children:[a.jsx(Wp,{className:"h-5 w-5 text-muted-foreground mr-2"}),a.jsx("h3",{className:"font-sf font-medium",children:"What's included?"})]}),a.jsxs("ul",{className:"space-y-2 text-sm text-muted-foreground",children:[a.jsxs("li",{className:"flex items-center",children:[a.jsx(Bh,{className:"h-4 w-4 text-green-500 mr-2"}),"Demographic profiles based on your brief"]}),a.jsxs("li",{className:"flex items-center",children:[a.jsx(Bh,{className:"h-4 w-4 text-green-500 mr-2"}),"Personality traits and behavioral patterns"]}),a.jsxs("li",{className:"flex items-center",children:[a.jsx(Bh,{className:"h-4 w-4 text-green-500 mr-2"}),"Consumer preferences and interests"]}),a.jsxs("li",{className:"flex items-center",children:[a.jsx(Bh,{className:"h-4 w-4 text-green-500 mr-2"}),"Review and refine capabilities"]})]})]})]})]}),n&&a.jsxs("div",{className:"glass-panel rounded-lg p-4 border border-border bg-muted/30",children:[a.jsxs("div",{className:"flex items-center justify-between mb-3",children:[a.jsxs("h3",{className:"font-sf font-medium text-sm flex items-center gap-2",children:[a.jsx(du,{className:"h-4 w-4 text-primary"}),"Enhancement Suggestions:"]}),a.jsx(ee,{type:"button",variant:"ghost",size:"sm",onClick:C,className:"h-6 w-6 p-0 hover:bg-slate-200",title:i?"Expand suggestions":"Collapse suggestions",children:i?a.jsx(Ra,{className:"h-4 w-4"}):a.jsx(uu,{className:"h-4 w-4"})})]}),!i&&a.jsx(a.Fragment,{children:d?a.jsx("div",{className:"text-sm text-red-600 bg-red-50 p-3 rounded-md",children:d}):a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx("div",{children:o.audience_brief.length>0?a.jsxs("div",{children:[a.jsxs("h4",{className:"font-sf font-medium text-sm text-slate-800 mb-2 flex items-center gap-2",children:[a.jsx(Dr,{className:"h-4 w-4 text-blue-600"}),"Suggestions for your Audience Brief:"]}),a.jsx("ul",{className:"space-y-2 text-sm text-slate-700",children:o.audience_brief.map((_,A)=>a.jsxs("li",{className:"flex items-start gap-2",children:[a.jsx("span",{className:"text-blue-600 mt-1.5 text-xs",children:"•"}),a.jsx("span",{className:"flex-1",children:_})]},A))})]}):a.jsx("div",{className:"text-sm text-muted-foreground",children:"No audience brief suggestions available"})}),a.jsx("div",{children:o.research_objective.length>0?a.jsxs("div",{children:[a.jsxs("h4",{className:"font-sf font-medium text-sm text-slate-800 mb-2 flex items-center gap-2",children:[a.jsx(Wp,{className:"h-4 w-4 text-green-600"}),"Suggestions for your Research Objective:"]}),a.jsx("ul",{className:"space-y-2 text-sm text-slate-700",children:o.research_objective.map((_,A)=>a.jsxs("li",{className:"flex items-start gap-2",children:[a.jsx("span",{className:"text-green-600 mt-1.5 text-xs",children:"•"}),a.jsx("span",{className:"flex-1",children:_})]},A))})]}):a.jsx("div",{className:"text-sm text-muted-foreground",children:"No research objective suggestions available"})}),o.audience_brief.length===0&&o.research_objective.length===0&&a.jsx("div",{className:"col-span-full text-sm text-muted-foreground text-center",children:"No suggestions available"})]})})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx(_t,{control:b.control,name:"llm_model",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"AI Model"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select AI model"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"gemini-2.5-pro",children:"Gemini 2.5 Pro"}),a.jsx(ae,{value:"gpt-4.1",children:"GPT-4.1"}),a.jsx(ae,{value:"gpt-5",children:"GPT-5"})]})]}),a.jsx(Fn,{children:"Choose which AI model to use for generating personas"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:b.control,name:"personaCount",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Number of Personas to Generate"}),a.jsx(yt,{children:a.jsx(Wt,{type:"number",min:"1",max:"20",..._})}),a.jsx(Fn,{children:"How many synthetic users do you need for your research?"}),a.jsx(xt,{})]})})]}),a.jsxs("div",{className:"flex flex-col items-end",children:[a.jsx(ee,{type:"button",disabled:e,className:"min-w-36",onClick:()=>{const _=b.getValues();t({..._,dataFile:h})},children:e?a.jsxs(a.Fragment,{children:[a.jsx(Yl,{className:"mr-2 h-4 w-4 animate-spin"}),"AI Generating..."]}):a.jsxs(a.Fragment,{children:[a.jsx(Dr,{className:"mr-2 h-4 w-4"}),"Generate Personas"]})}),e&&a.jsx("div",{className:"text-xs text-muted-foreground mt-2",children:"Generating multiple personas in parallel. This may take 1-2 minutes..."})]})]})})}const lce=t=>{const e=t==null?void 0:t.toLowerCase(),n="/semblance/";switch(e){case"male":return`${n}male_avatar.png`;case"female":return`${n}female_avatar.png`;case"non-binary":case"nonbinary":case"non binary":return`${n}nonbinary_avatar.png`;default:return`${n}male_avatar.png`}},_g=t=>t.avatar||lce(t.gender);function fT({user:t,selected:e=!1,onClick:n,showDetailedDialog:r=!1,onSelectionToggle:i,showAddToFolderButton:s=!1,onAddToFolder:o,onViewDetails:c,folders:l=[]}){const u=ar();v.useState(!1);const[d,f]=v.useState(t),h=t._id||t.id,p=y=>{y.stopPropagation(),u(`/synthetic-users/${h}`)};d.oceanTraits&&(d.oceanTraits.openness,d.oceanTraits.conscientiousness,d.oceanTraits.extraversion,d.oceanTraits.agreeableness,d.oceanTraits.neuroticism);const g=y=>{var w,S;const b=y.target;b.closest("button")&&((S=(w=b.closest("button"))==null?void 0:w.textContent)!=null&&S.includes("View Details"))||(i?i(y):n&&n(y))},m=y=>{y.stopPropagation(),c?c(d):p(y)};return a.jsxs("div",{className:Pe("persona-card glass-card rounded-xl p-4 cursor-pointer hover:shadow-md button-transition",e&&"selected ring-2 ring-primary"),onClick:g,children:[a.jsx("div",{className:"persona-card-overlay"}),a.jsx("div",{className:"persona-card-checkmark",children:a.jsx(Es,{className:"h-4 w-4 text-primary"})}),a.jsx("div",{className:"relative z-10",children:a.jsxs("div",{className:"flex items-start space-x-4",children:[a.jsx("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center",children:a.jsx("img",{src:_g(d),alt:`${d.name} avatar`,className:"h-12 w-12 rounded-full object-cover"})}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("div",{className:"flex items-center justify-between gap-2",children:a.jsx("h3",{className:"text-sm font-medium truncate flex-1",children:d.name})}),a.jsxs("p",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[d.age," • ",d.gender]}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:d.occupation}),a.jsx("p",{className:"text-xs text-muted-foreground",children:d.location}),a.jsx("div",{className:"mt-2",children:d.aiSynthesizedBio?a.jsxs("p",{className:"text-xs text-slate-700 line-clamp-3 leading-relaxed",children:[d.aiSynthesizedBio,d.aiSynthesizedBio.length>150&&"..."]}):a.jsxs("p",{className:"text-xs text-muted-foreground italic line-clamp-3",children:['"',d.personality,'"']})}),d.qualitativeAttributes&&d.qualitativeAttributes.length>0&&a.jsx("div",{className:"mt-3",children:a.jsx("div",{className:"flex flex-wrap gap-1",children:d.qualitativeAttributes.slice(0,3).map((y,b)=>a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-blue-50 text-blue-700 text-xs rounded-full",children:[a.jsx(hZ,{className:"h-3 w-3"}),y]},b))})}),d.folder_ids&&d.folder_ids.length>0&&a.jsx("div",{className:"mt-2",children:a.jsxs("div",{className:"flex flex-wrap gap-1",children:[d.folder_ids.slice(0,2).map(y=>{const b=l.find(x=>x._id===y);return b?a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded-full",title:`In folder: ${b.name}`,children:[a.jsx(ds,{className:"h-3 w-3"}),b.name]},y):null}),d.folder_ids.length>2&&a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded-full",children:[a.jsx(Br,{className:"h-3 w-3"}),d.folder_ids.length-2," more"]})]})}),d.topPersonalityTraits&&d.topPersonalityTraits.length>0&&a.jsx("div",{className:"mt-2",children:a.jsx("div",{className:"flex flex-wrap gap-1",children:d.topPersonalityTraits.slice(0,3).map((y,b)=>a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-purple-50 text-purple-700 text-xs rounded-full",children:[a.jsx(lu,{className:"h-3 w-3"}),y]},b))})}),a.jsx("div",{className:"mt-3 flex justify-end",children:a.jsx(ee,{variant:"ghost",size:"sm",onClick:m,children:"View Details"})})]})]})})]})}var hT="Collapsible",[uce,uFe]=Fi(hT),[dce,pT]=uce(hT),S6=v.forwardRef((t,e)=>{const{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:s,onOpenChange:o,...c}=t,[l=!1,u]=ao({prop:r,defaultProp:i,onChange:o});return a.jsx(dce,{scope:n,disabled:s,contentId:Xs(),open:l,onOpenToggle:v.useCallback(()=>u(d=>!d),[u]),children:a.jsx(it.div,{"data-state":gT(l),"data-disabled":s?"":void 0,...c,ref:e})})});S6.displayName=hT;var C6="CollapsibleTrigger",_6=v.forwardRef((t,e)=>{const{__scopeCollapsible:n,...r}=t,i=pT(C6,n);return a.jsx(it.button,{type:"button","aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":gT(i.open),"data-disabled":i.disabled?"":void 0,disabled:i.disabled,...r,ref:e,onClick:Ne(t.onClick,i.onOpenToggle)})});_6.displayName=C6;var mT="CollapsibleContent",A6=v.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=pT(mT,t.__scopeCollapsible);return a.jsx(Kr,{present:n||i.open,children:({present:s})=>a.jsx(fce,{...r,ref:e,present:s})})});A6.displayName=mT;var fce=v.forwardRef((t,e)=>{const{__scopeCollapsible:n,present:r,children:i,...s}=t,o=pT(mT,n),[c,l]=v.useState(r),u=v.useRef(null),d=Ot(e,u),f=v.useRef(0),h=f.current,p=v.useRef(0),g=p.current,m=o.open||c,y=v.useRef(m),b=v.useRef();return v.useEffect(()=>{const x=requestAnimationFrame(()=>y.current=!1);return()=>cancelAnimationFrame(x)},[]),Gr(()=>{const x=u.current;if(x){b.current=b.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const w=x.getBoundingClientRect();f.current=w.height,p.current=w.width,y.current||(x.style.transitionDuration=b.current.transitionDuration,x.style.animationName=b.current.animationName),l(r)}},[o.open,r]),a.jsx(it.div,{"data-state":gT(o.open),"data-disabled":o.disabled?"":void 0,id:o.contentId,hidden:!m,...s,ref:d,style:{"--radix-collapsible-content-height":h?`${h}px`:void 0,"--radix-collapsible-content-width":g?`${g}px`:void 0,...t.style},children:m&&i})});function gT(t){return t?"open":"closed"}var hce=S6;const Ag=hce,jg=_6,Eg=A6;function pce({generatedPersonas:t,selectedPersonas:e,isGenerating:n,onPersonaSelection:r,onRefinePersonas:i,onApprovePersonas:s,onBackToGenerator:o}){const c=ar(),[l,u]=v.useState(""),[d,f]=v.useState(!1),h=p=>{c(`/synthetic-users/${p}?fromReview=true`)};return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Review Generated Personas"}),a.jsxs("div",{className:"text-sm text-muted-foreground",children:[e.length," of ",t.length," selected"]})]}),a.jsx("div",{className:"space-y-4",children:t.map(p=>a.jsx(ut,{className:`border ${e.includes(p.id)?"border-primary/50 bg-primary/5":""} cursor-pointer`,onClick:()=>h(p.id),children:a.jsx(Rt,{className:"p-4",children:a.jsxs("div",{className:"flex items-start justify-between",children:[a.jsx("div",{className:"flex-1",children:a.jsxs("div",{className:"flex items-center",children:[a.jsx("input",{type:"checkbox",id:`persona-${p.id}`,checked:e.includes(p.id),onChange:g=>{g.stopPropagation(),r(p.id)},className:"mr-3 h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary"}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium",children:p.name}),a.jsxs("p",{className:"text-sm text-muted-foreground",children:[p.age," • ",p.gender," • ",p.occupation]})]})]})}),a.jsx(fT,{user:p,showDetailedDialog:!1,onClick:g=>{g.stopPropagation(),h(p.id)}})]})})},p.id))}),a.jsx("div",{className:"space-y-4 pt-4 border-t",children:a.jsxs("div",{children:[a.jsx("div",{className:"flex justify-between items-start mb-4",children:a.jsxs(ee,{variant:"outline",onClick:o,children:[a.jsx(Gp,{className:"mr-2 h-4 w-4"}),"Back to Generator"]})}),a.jsxs(Ag,{open:d,onOpenChange:f,className:"w-full space-y-4",children:[a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx(jg,{asChild:!0,children:a.jsxs(ee,{variant:"outline",className:"flex items-center gap-2",children:[a.jsx(Yl,{className:"h-4 w-4"}),"Refine Personas",a.jsx(Ra,{className:"h-4 w-4 ml-1 transition-transform duration-200",style:{transform:d?"rotate(180deg)":"rotate(0deg)"}})]})}),a.jsxs(ee,{onClick:s,disabled:e.length===0,children:[a.jsx(Bh,{className:"mr-2 h-4 w-4"}),"Approve Selected (",e.length,")"]})]}),a.jsx(Eg,{children:a.jsx(ut,{className:"border shadow-sm w-full mt-4",children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{htmlFor:"refinement-prompt",className:"text-sm font-medium block mb-2",children:"Refinement Instructions"}),a.jsx(ht,{id:"refinement-prompt",placeholder:"Example: Make all personas 5 years younger, or ensure everyone is from different locations...",value:l,onChange:p=>u(p.target.value),className:"min-h-[100px] w-full resize-y"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"Use natural language to describe how you'd like to refine the selected personas."})]}),a.jsxs(ee,{onClick:()=>i(l),disabled:n||l.trim()==="",className:"w-full",children:[n?a.jsx(Yl,{className:"mr-2 h-4 w-4 animate-spin"}):a.jsx(Yl,{className:"mr-2 h-4 w-4"}),"Apply Refinements"]})]})})})})]})]})})]})}async function mce(t,e,n,r,i,s){console.log(`generateSyntheticPersonas called with targetFolderId: ${i||"none"}`),console.log(`🔄 generateSyntheticPersonas using model: ${s||"gemini-2.5-pro"}`);try{if(console.log(`Generating ${n} synthetic personas using two-stage approach...`),t.trim().length<10)throw new Error("Audience brief is too short. Please provide more context for better persona generation.");let o;if(r&&r.length>0){console.log(`Uploading ${r.length} customer data files...`);try{o=(await la.uploadCustomerData(r)).data.session_id,console.log(`Customer data uploaded with session ID: ${o}`)}catch(l){throw console.error("Failed to upload customer data:",l),new Error("Failed to upload customer data files. Please try again.")}}const c=await la.batchGenerateWithStages(t,e,n,.8,o,s);if(c.data){const l=c.data.partial_success===!0,u=c.data.personas&&c.data.personas.length>0,d=c.data.errors&&c.data.errors.length>0;if(u){if(console.log(`Generated ${c.data.personas.length} personas with two-stage process${d?` (${c.data.errors.length} failed)`:""}`),i){const f=c.data.personas,h=f.map(p=>p._id||p.id).filter(Boolean);console.log(`Adding ${h.length} newly generated personas to folder: ${i}`);try{await Eo.addPersonasBatch(i,h),console.log(`Added ${h.length} newly generated personas to folder: ${i}`)}catch(p){console.error("Error adding personas to folder:",p)}if(o)try{await la.cleanupCustomerData(o),console.log(`Cleaned up customer data for session: ${o}`)}catch(p){console.warn("Failed to cleanup customer data:",p)}return l||d?{...c.data,length:f.length}:{...c.data,personas:f}}if(o)try{await la.cleanupCustomerData(o),console.log(`Cleaned up customer data for session: ${o}`)}catch(f){console.warn("Failed to cleanup customer data:",f)}if(l||d)return{...c.data.personas,length:c.data.personas.length,partial_success:l,errors:c.data.errors};if(o)try{await la.cleanupCustomerData(o),console.log(`Cleaned up customer data for session: ${o}`)}catch(f){console.warn("Failed to cleanup customer data:",f)}return c.data.personas}else if(d){if(o)try{await la.cleanupCustomerData(o),console.log(`Cleaned up customer data for session: ${o}`)}catch(f){console.warn("Failed to cleanup customer data:",f)}throw new Error(`Failed to generate personas: ${c.data.errors.length} generation attempts failed.`)}else throw new Error("No personas returned from API")}else throw new Error("Invalid response format from API")}catch(o){if(customerDataSessionId)try{await la.cleanupCustomerData(customerDataSessionId),console.log(`Cleaned up customer data for session: ${customerDataSessionId}`)}catch(c){console.warn("Failed to cleanup customer data:",c)}throw console.error("Error generating AI personas:",o),o}}function j6(){const[t,e]=v.useState([]),n=async s=>{const o=[];for(const c of s){const l={...c};l._id&&typeof l._id=="string"&&l._id.startsWith("local-")&&delete l._id;const u=await Rr.create(l);console.log("Persona saved to database:",u.data),o.push({...c,id:u.data._id||u.data.id,_id:u.data._id||u.data.id,isDbPersona:!0})}e(o)},r=async()=>{const s=await Rr.getAll();return s&&s.data&&Array.isArray(s.data)?(console.log("Personas loaded from database:",s.data.length),s.data.map(o=>({...o,id:o._id||o.id,isDbPersona:!0}))):[]};return v.useEffect(()=>{(async()=>{const o=await r();e(o)})()},[]),{storedPersonas:t,savePersonas:n,loadPersonas:r,clearPersonas:async()=>{const s=await r();for(const o of s)o._id&&await Rr.delete(o._id);e([])}}}function gce({targetFolderId:t,targetFolderName:e}){const n=Ui(),r=ar(),{loadPersonas:i,savePersonas:s}=j6(),[o,c]=v.useState(!1),[l,u]=v.useState([]),[d,f]=v.useState([]),[h,p]=v.useState(!1),[g,m]=v.useState(0);v.useEffect(()=>{const C=new URLSearchParams(n.search),_=C.get("mode"),A=C.get("tab"),j=C.get("step");if(_==="create"&&A==="ai"&&j==="review"){const P=i();P.length>0&&(u(P),f(P.map(k=>k.id)),p(!0))}},[n,i]);async function y(C){var _,A,j,P,k,O,E,R,M,G;try{c(!0),m(0);const L=parseInt(C.personaCount);if(isNaN(L)||L<1||L>10){se.error("Invalid number of personas",{description:"Please enter a number between 1 and 10"}),c(!1);return}m(5);const V=setInterval(()=>{m(Q=>Q<90?Q+Math.random()*5:Q)},500),I=L<=2?"30-60 seconds":L<=4?"1-2 minutes":L<=6?"2-3 minutes":"3-5 minutes";L>4&&se.info("Generation may take longer",{description:`Generating ${L} personas at once may result in some timeouts. If this happens, the successfully created personas will still be saved.`,duration:8e3}),se.info("Generating AI personas in parallel",{description:`Creating ${L} synthetic personas based on your brief. This may take ${I}. Please be patient.`,duration:1e4}),t&&e?(console.log(`Target folder for new personas: ID=${t}, Name=${e}`),se.info(`Creating personas in "${e}" folder`,{duration:3e3})):console.log("No target folder specified for new personas"),console.log(`🤖 Starting persona generation with model: ${C.llm_model||"gemini-2.5-pro"}`);const D=await mce(C.audienceBrief,C.researchObjective,L,C.dataFile,t,C.llm_model),X=D.personas||D;if(clearInterval(V),m(100),X&&X.length>0)console.log(`✅ Successfully generated ${X.length} personas using model: ${C.llm_model||"gemini-2.5-pro"}`),D.partial_success||D.errors&&D.errors.length>0?(se.success("Some personas generated successfully",{description:`${X.length} synthetic personas were created using ${C.llm_model||"Gemini 2.5 Pro"}. ${((_=D.errors)==null?void 0:_.length)||0} failed due to timeout or other errors.`,duration:8e3}),D.errors&&D.errors.length>0&&setTimeout(()=>{se.error("Some personas failed to generate",{description:`${D.errors.length} personas timed out. The server took too long to generate them. The successfully generated personas have been saved${t?" in the selected folder":""}.`,duration:1e4})},1e3)):se.success("Personas generated and saved successfully",{description:`${X.length} synthetic personas have been created using ${C.llm_model||"Gemini 2.5 Pro"} and saved ${t?`to the "${e}" folder`:"to the database"}.`}),r("/synthetic-users?mode=view");else throw new Error("No personas were generated")}catch(L){console.error(`❌ Error generating personas using model: ${C.llm_model||"gemini-2.5-pro"}:`,L);let V="Please try again or adjust your parameters",I="Failed to generate personas";L.code==="ECONNABORTED"||(A=L.message)!=null&&A.includes("timeout")||((j=L.response)==null?void 0:j.status)===504?(I="Generation timeout",V="AI persona generation timed out. This often happens when generating multiple complex personas. Try generating fewer personas (2-3) or try again later."):((P=L.response)==null?void 0:P.status)===500?(I="Server error",(O=(k=L.response)==null?void 0:k.data)!=null&&O.message?V=L.response.data.message:(R=(E=L.response)==null?void 0:E.data)!=null&&R.error?V=L.response.data.error:V="The server encountered an error processing your request. Please try again later."):((M=L.response)==null?void 0:M.status)===401?(I="Authentication required",V="Please log in to generate personas."):(G=L.message)!=null&&G.includes("504 Deadline Exceeded")?(I="Generation timeout",V="The AI model took too long to generate personas. Try generating fewer personas or simplify your brief."):L instanceof Error&&(V=L.message),se.error(I,{description:V,duration:6e3})}finally{setTimeout(()=>{c(!1),m(0)},500)}}const b=C=>{f(_=>_.includes(C)?_.filter(A=>A!==C):[..._,C])},x=(C,_)=>{const A=_.toLowerCase();return C.map(j=>{const P={...j};if(A.includes("younger")){const k=parseInt(P.age);P.age=(k-5).toString()}else if(A.includes("older")){const k=parseInt(P.age);P.age=(k+5).toString()}if(A.includes("different locations")&&(P.location=`${P.location} (Diversified)`),A.includes("more extroverted")?P.personality=`Extroverted, ${P.personality.toLowerCase()}`:A.includes("more introverted")&&(P.personality=`Introverted, ${P.personality.toLowerCase()}`),A.includes("diverse")){const k=["tech-savvy","traditional","innovative","conservative","creative"],O=k[Math.floor(Math.random()*k.length)];P.personality=`${O}, ${P.personality}`}return P})},w=C=>{if(!C.trim()){se.error("Please provide refinement instructions");return}c(!0),setTimeout(()=>{try{const _=l.filter(P=>d.includes(P.id)),A=x(_,C),j=l.map(P=>A.find(O=>O.id===P.id)||P);u(j),c(!1),s(j),se.success("Personas refined based on your instructions",{description:"Review the updated profiles"})}catch(_){console.error("Error refining personas:",_),se.error("Failed to refine personas",{description:"Please try different instructions"}),c(!1)}},1500)},S=()=>{const C=l.filter(_=>d.includes(_.id));se.success(`${C.length} personas approved`,{description:"Added to your synthetic persona library"}),s(C),r("/synthetic-users?mode=view")};return a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-6",children:[a.jsx(Dr,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"AI Persona Recruiter"})]}),o&&a.jsxs("div",{className:"mb-6",children:[a.jsxs("div",{className:"flex justify-between items-center mb-2",children:[a.jsx("span",{className:"text-sm font-medium",children:"Generating personas in parallel..."}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[Math.round(g),"%"]})]}),a.jsx(wc,{value:g,className:"h-2"})]}),h?a.jsx(pce,{generatedPersonas:l,selectedPersonas:d,isGenerating:o,onPersonaSelection:b,onRefinePersonas:w,onApprovePersonas:S,onBackToGenerator:()=>p(!1)}):a.jsx(cce,{onSubmit:y,isGenerating:o})]})}const rl=new Map;function E6(t){const{id:e,title:n,description:r,type:i="default",duration:s}=t;let o;switch(i){case"success":o=se.success(n,{description:r,duration:s});break;case"error":o=se.error(n,{description:r,duration:s});break;case"warning":o=se.warning(n,{description:r,duration:s});break;case"info":o=se.info(n,{description:r,duration:s});break;default:o=se(n,{description:r,duration:s});break}return rl.set(e,o.toString()),e}function vce(t,e){const n=rl.get(t);if(!n)return console.warn(`Toast with ID "${t}" not found. Creating new toast instead.`),E6({id:t,...e,title:e.title||"Updated"}),!1;const{title:r,description:i,type:s="default",duration:o}=e;se.dismiss(n);let c;switch(s){case"success":c=se.success(r,{description:i,duration:o});break;case"error":c=se.error(r,{description:i,duration:o});break;case"warning":c=se.warning(r,{description:i,duration:o});break;case"info":c=se.info(r,{description:i,duration:o});break;default:c=se(r,{description:i,duration:o});break}return rl.set(t,c.toString()),!0}function yce(t){const e=rl.get(t);return e?(se.dismiss(e),rl.delete(t),!0):(console.warn(`Toast with ID "${t}" not found.`),!1)}function xce(t){return rl.has(t)}function bce(){rl.forEach(t=>{se.dismiss(t)}),rl.clear()}const Fe={success:se.success,error:se.error,warning:se.warning,info:se.info,loading:se.loading,dismiss:se.dismiss,createPersistent:E6,updatePersistent:vce,dismissPersistent:yce,hasPersistent:xce,dismissAllPersistent:bce};var N6=["PageUp","PageDown"],T6=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],P6={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},Kf="Slider",[A1,wce,Sce]=Y0(Kf),[k6,dFe]=Fi(Kf,[Sce]),[Cce,nw]=k6(Kf),O6=v.forwardRef((t,e)=>{const{name:n,min:r=0,max:i=100,step:s=1,orientation:o="horizontal",disabled:c=!1,minStepsBetweenThumbs:l=0,defaultValue:u=[r],value:d,onValueChange:f=()=>{},onValueCommit:h=()=>{},inverted:p=!1,form:g,...m}=t,y=v.useRef(new Set),b=v.useRef(0),w=o==="horizontal"?_ce:Ace,[S=[],C]=ao({prop:d,defaultProp:u,onChange:O=>{var R;(R=[...y.current][b.current])==null||R.focus(),f(O)}}),_=v.useRef(S);function A(O){const E=Pce(S,O);k(O,E)}function j(O){k(O,b.current)}function P(){const O=_.current[b.current];S[b.current]!==O&&h(S)}function k(O,E,{commit:R}={commit:!1}){const M=Rce(s),G=Mce(Math.round((O-r)/s)*s+r,M),L=vm(G,[r,i]);C((V=[])=>{const I=Nce(V,L,E);if(Ice(I,l*s)){b.current=I.indexOf(L);const D=String(I)!==String(V);return D&&R&&h(I),D?I:V}else return V})}return a.jsx(Cce,{scope:t.__scopeSlider,name:n,disabled:c,min:r,max:i,valueIndexToChangeRef:b,thumbs:y.current,values:S,orientation:o,form:g,children:a.jsx(A1.Provider,{scope:t.__scopeSlider,children:a.jsx(A1.Slot,{scope:t.__scopeSlider,children:a.jsx(w,{"aria-disabled":c,"data-disabled":c?"":void 0,...m,ref:e,onPointerDown:Ne(m.onPointerDown,()=>{c||(_.current=S)}),min:r,max:i,inverted:p,onSlideStart:c?void 0:A,onSlideMove:c?void 0:j,onSlideEnd:c?void 0:P,onHomeKeyDown:()=>!c&&k(r,0,{commit:!0}),onEndKeyDown:()=>!c&&k(i,S.length-1,{commit:!0}),onStepKeyDown:({event:O,direction:E})=>{if(!c){const G=N6.includes(O.key)||O.shiftKey&&T6.includes(O.key)?10:1,L=b.current,V=S[L],I=s*G*E;k(V+I,L,{commit:!0})}}})})})})});O6.displayName=Kf;var[I6,R6]=k6(Kf,{startEdge:"left",endEdge:"right",size:"width",direction:1}),_ce=v.forwardRef((t,e)=>{const{min:n,max:r,dir:i,inverted:s,onSlideStart:o,onSlideMove:c,onSlideEnd:l,onStepKeyDown:u,...d}=t,[f,h]=v.useState(null),p=Ot(e,w=>h(w)),g=v.useRef(),m=Pu(i),y=m==="ltr",b=y&&!s||!y&&s;function x(w){const S=g.current||f.getBoundingClientRect(),C=[0,S.width],A=vT(C,b?[n,r]:[r,n]);return g.current=S,A(w-S.left)}return a.jsx(I6,{scope:t.__scopeSlider,startEdge:b?"left":"right",endEdge:b?"right":"left",direction:b?1:-1,size:"width",children:a.jsx(M6,{dir:m,"data-orientation":"horizontal",...d,ref:p,style:{...d.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:w=>{const S=x(w.clientX);o==null||o(S)},onSlideMove:w=>{const S=x(w.clientX);c==null||c(S)},onSlideEnd:()=>{g.current=void 0,l==null||l()},onStepKeyDown:w=>{const C=P6[b?"from-left":"from-right"].includes(w.key);u==null||u({event:w,direction:C?-1:1})}})})}),Ace=v.forwardRef((t,e)=>{const{min:n,max:r,inverted:i,onSlideStart:s,onSlideMove:o,onSlideEnd:c,onStepKeyDown:l,...u}=t,d=v.useRef(null),f=Ot(e,d),h=v.useRef(),p=!i;function g(m){const y=h.current||d.current.getBoundingClientRect(),b=[0,y.height],w=vT(b,p?[r,n]:[n,r]);return h.current=y,w(m-y.top)}return a.jsx(I6,{scope:t.__scopeSlider,startEdge:p?"bottom":"top",endEdge:p?"top":"bottom",size:"height",direction:p?1:-1,children:a.jsx(M6,{"data-orientation":"vertical",...u,ref:f,style:{...u.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:m=>{const y=g(m.clientY);s==null||s(y)},onSlideMove:m=>{const y=g(m.clientY);o==null||o(y)},onSlideEnd:()=>{h.current=void 0,c==null||c()},onStepKeyDown:m=>{const b=P6[p?"from-bottom":"from-top"].includes(m.key);l==null||l({event:m,direction:b?-1:1})}})})}),M6=v.forwardRef((t,e)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:i,onSlideEnd:s,onHomeKeyDown:o,onEndKeyDown:c,onStepKeyDown:l,...u}=t,d=nw(Kf,n);return a.jsx(it.span,{...u,ref:e,onKeyDown:Ne(t.onKeyDown,f=>{f.key==="Home"?(o(f),f.preventDefault()):f.key==="End"?(c(f),f.preventDefault()):N6.concat(T6).includes(f.key)&&(l(f),f.preventDefault())}),onPointerDown:Ne(t.onPointerDown,f=>{const h=f.target;h.setPointerCapture(f.pointerId),f.preventDefault(),d.thumbs.has(h)?h.focus():r(f)}),onPointerMove:Ne(t.onPointerMove,f=>{f.target.hasPointerCapture(f.pointerId)&&i(f)}),onPointerUp:Ne(t.onPointerUp,f=>{const h=f.target;h.hasPointerCapture(f.pointerId)&&(h.releasePointerCapture(f.pointerId),s(f))})})}),D6="SliderTrack",$6=v.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,i=nw(D6,n);return a.jsx(it.span,{"data-disabled":i.disabled?"":void 0,"data-orientation":i.orientation,...r,ref:e})});$6.displayName=D6;var j1="SliderRange",L6=v.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,i=nw(j1,n),s=R6(j1,n),o=v.useRef(null),c=Ot(e,o),l=i.values.length,u=i.values.map(h=>U6(h,i.min,i.max)),d=l>1?Math.min(...u):0,f=100-Math.max(...u);return a.jsx(it.span,{"data-orientation":i.orientation,"data-disabled":i.disabled?"":void 0,...r,ref:c,style:{...t.style,[s.startEdge]:d+"%",[s.endEdge]:f+"%"}})});L6.displayName=j1;var E1="SliderThumb",F6=v.forwardRef((t,e)=>{const n=wce(t.__scopeSlider),[r,i]=v.useState(null),s=Ot(e,c=>i(c)),o=v.useMemo(()=>r?n().findIndex(c=>c.ref.current===r):-1,[n,r]);return a.jsx(jce,{...t,ref:s,index:o})}),jce=v.forwardRef((t,e)=>{const{__scopeSlider:n,index:r,name:i,...s}=t,o=nw(E1,n),c=R6(E1,n),[l,u]=v.useState(null),d=Ot(e,x=>u(x)),f=l?o.form||!!l.closest("form"):!0,h=pg(l),p=o.values[r],g=p===void 0?0:U6(p,o.min,o.max),m=Tce(r,o.values.length),y=h==null?void 0:h[c.size],b=y?kce(y,g,c.direction):0;return v.useEffect(()=>{if(l)return o.thumbs.add(l),()=>{o.thumbs.delete(l)}},[l,o.thumbs]),a.jsxs("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[c.startEdge]:`calc(${g}% + ${b}px)`},children:[a.jsx(A1.ItemSlot,{scope:t.__scopeSlider,children:a.jsx(it.span,{role:"slider","aria-label":t["aria-label"]||m,"aria-valuemin":o.min,"aria-valuenow":p,"aria-valuemax":o.max,"aria-orientation":o.orientation,"data-orientation":o.orientation,"data-disabled":o.disabled?"":void 0,tabIndex:o.disabled?void 0:0,...s,ref:d,style:p===void 0?{display:"none"}:t.style,onFocus:Ne(t.onFocus,()=>{o.valueIndexToChangeRef.current=r})})}),f&&a.jsx(Ece,{name:i??(o.name?o.name+(o.values.length>1?"[]":""):void 0),form:o.form,value:p},r)]})});F6.displayName=E1;var Ece=t=>{const{value:e,...n}=t,r=v.useRef(null),i=Sg(e);return v.useEffect(()=>{const s=r.current,o=window.HTMLInputElement.prototype,l=Object.getOwnPropertyDescriptor(o,"value").set;if(i!==e&&l){const u=new Event("input",{bubbles:!0});l.call(s,e),s.dispatchEvent(u)}},[i,e]),a.jsx("input",{style:{display:"none"},...n,ref:r,defaultValue:e})};function Nce(t=[],e,n){const r=[...t];return r[n]=e,r.sort((i,s)=>i-s)}function U6(t,e,n){const s=100/(n-e)*(t-e);return vm(s,[0,100])}function Tce(t,e){return e>2?`Value ${t+1} of ${e}`:e===2?["Minimum","Maximum"][t]:void 0}function Pce(t,e){if(t.length===1)return 0;const n=t.map(i=>Math.abs(i-e)),r=Math.min(...n);return n.indexOf(r)}function kce(t,e,n){const r=t/2,s=vT([0,50],[0,r]);return(r-s(e)*n)*n}function Oce(t){return t.slice(0,-1).map((e,n)=>t[n+1]-e)}function Ice(t,e){if(e>0){const n=Oce(t);return Math.min(...n)>=e}return!0}function vT(t,e){return n=>{if(t[0]===t[1]||e[0]===e[1])return e[0];const r=(e[1]-e[0])/(t[1]-t[0]);return e[0]+r*(n-t[0])}}function Rce(t){return(String(t).split(".")[1]||"").length}function Mce(t,e){const n=Math.pow(10,e);return Math.round(t*n)/n}var B6=O6,Dce=$6,$ce=L6,Lce=F6;const wr=v.forwardRef(({className:t,...e},n)=>a.jsxs(B6,{ref:n,className:Pe("relative flex w-full touch-none select-none items-center",t),...e,children:[a.jsx(Dce,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary",children:a.jsx($ce,{className:"absolute h-full bg-primary"})}),a.jsx(Lce,{className:"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})]}));wr.displayName=B6.displayName;var yT="Switch",[Fce,fFe]=Fi(yT),[Uce,Bce]=Fce(yT),H6=v.forwardRef((t,e)=>{const{__scopeSwitch:n,name:r,checked:i,defaultChecked:s,required:o,disabled:c,value:l="on",onCheckedChange:u,form:d,...f}=t,[h,p]=v.useState(null),g=Ot(e,w=>p(w)),m=v.useRef(!1),y=h?d||!!h.closest("form"):!0,[b=!1,x]=ao({prop:i,defaultProp:s,onChange:u});return a.jsxs(Uce,{scope:n,checked:b,disabled:c,children:[a.jsx(it.button,{type:"button",role:"switch","aria-checked":b,"aria-required":o,"data-state":G6(b),"data-disabled":c?"":void 0,disabled:c,value:l,...f,ref:g,onClick:Ne(t.onClick,w=>{x(S=>!S),y&&(m.current=w.isPropagationStopped(),m.current||w.stopPropagation())})}),y&&a.jsx(Hce,{control:h,bubbles:!m.current,name:r,value:l,checked:b,required:o,disabled:c,form:d,style:{transform:"translateX(-100%)"}})]})});H6.displayName=yT;var z6="SwitchThumb",V6=v.forwardRef((t,e)=>{const{__scopeSwitch:n,...r}=t,i=Bce(z6,n);return a.jsx(it.span,{"data-state":G6(i.checked),"data-disabled":i.disabled?"":void 0,...r,ref:e})});V6.displayName=z6;var Hce=t=>{const{control:e,checked:n,bubbles:r=!0,...i}=t,s=v.useRef(null),o=Sg(n),c=pg(e);return v.useEffect(()=>{const l=s.current,u=window.HTMLInputElement.prototype,f=Object.getOwnPropertyDescriptor(u,"checked").set;if(o!==n&&f){const h=new Event("click",{bubbles:r});f.call(l,n),l.dispatchEvent(h)}},[o,n,r]),a.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:s,style:{...t.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function G6(t){return t?"checked":"unchecked"}var K6=H6,zce=V6;const ym=v.forwardRef(({className:t,...e},n)=>a.jsx(K6,{className:Pe("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",t),...e,ref:n,children:a.jsx(zce,{className:Pe("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));ym.displayName=K6.displayName;function Vce(t,e=[]){let n=[];function r(s,o){const c=v.createContext(o),l=n.length;n=[...n,o];function u(f){const{scope:h,children:p,...g}=f,m=(h==null?void 0:h[t][l])||c,y=v.useMemo(()=>g,Object.values(g));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,g=v.useContext(p);if(g)return g;if(o!==void 0)return o;throw new Error(`\`${f}\` must be used within \`${s}\``)}return u.displayName=s+"Provider",[u,d]}const i=()=>{const s=n.map(o=>v.createContext(o));return function(c){const l=(c==null?void 0:c[t])||s;return v.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,Gce(i,...e)]}function Gce(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(s){const o=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(s)[`__scope${u}`];return{...c,...f}},{});return v.useMemo(()=>({[`__scope${e.scopeName}`]:o}),[o])}};return n.scopeName=e.scopeName,n}var tC="rovingFocusGroup.onEntryFocus",Kce={bubbles:!1,cancelable:!0},rw="RovingFocusGroup",[N1,W6,Wce]=Y0(rw),[qce,Wf]=Vce(rw,[Wce]),[Yce,Qce]=qce(rw),q6=v.forwardRef((t,e)=>a.jsx(N1.Provider,{scope:t.__scopeRovingFocusGroup,children:a.jsx(N1.Slot,{scope:t.__scopeRovingFocusGroup,children:a.jsx(Xce,{...t,ref:e})})}));q6.displayName=rw;var Xce=v.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:s,currentTabStopId:o,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:d=!1,...f}=t,h=v.useRef(null),p=Ot(e,h),g=Pu(s),[m=null,y]=ao({prop:o,defaultProp:c,onChange:l}),[b,x]=v.useState(!1),w=Cr(u),S=W6(n),C=v.useRef(!1),[_,A]=v.useState(0);return v.useEffect(()=>{const j=h.current;if(j)return j.addEventListener(tC,w),()=>j.removeEventListener(tC,w)},[w]),a.jsx(Yce,{scope:n,orientation:r,dir:g,loop:i,currentTabStopId:m,onItemFocus:v.useCallback(j=>y(j),[y]),onItemShiftTab:v.useCallback(()=>x(!0),[]),onFocusableItemAdd:v.useCallback(()=>A(j=>j+1),[]),onFocusableItemRemove:v.useCallback(()=>A(j=>j-1),[]),children:a.jsx(it.div,{tabIndex:b||_===0?-1:0,"data-orientation":r,...f,ref:p,style:{outline:"none",...t.style},onMouseDown:Ne(t.onMouseDown,()=>{C.current=!0}),onFocus:Ne(t.onFocus,j=>{const P=!C.current;if(j.target===j.currentTarget&&P&&!b){const k=new CustomEvent(tC,Kce);if(j.currentTarget.dispatchEvent(k),!k.defaultPrevented){const O=S().filter(L=>L.focusable),E=O.find(L=>L.active),R=O.find(L=>L.id===m),G=[E,R,...O].filter(Boolean).map(L=>L.ref.current);X6(G,d)}}C.current=!1}),onBlur:Ne(t.onBlur,()=>x(!1))})})}),Y6="RovingFocusGroupItem",Q6=v.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:s,...o}=t,c=Xs(),l=s||c,u=Qce(Y6,n),d=u.currentTabStopId===l,f=W6(n),{onFocusableItemAdd:h,onFocusableItemRemove:p}=u;return v.useEffect(()=>{if(r)return h(),()=>p()},[r,h,p]),a.jsx(N1.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:a.jsx(it.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...o,ref:e,onMouseDown:Ne(t.onMouseDown,g=>{r?u.onItemFocus(l):g.preventDefault()}),onFocus:Ne(t.onFocus,()=>u.onItemFocus(l)),onKeyDown:Ne(t.onKeyDown,g=>{if(g.key==="Tab"&&g.shiftKey){u.onItemShiftTab();return}if(g.target!==g.currentTarget)return;const m=ele(g,u.orientation,u.dir);if(m!==void 0){if(g.metaKey||g.ctrlKey||g.altKey||g.shiftKey)return;g.preventDefault();let b=f().filter(x=>x.focusable).map(x=>x.ref.current);if(m==="last")b.reverse();else if(m==="prev"||m==="next"){m==="prev"&&b.reverse();const x=b.indexOf(g.currentTarget);b=u.loop?tle(b,x+1):b.slice(x+1)}setTimeout(()=>X6(b))}})})})});Q6.displayName=Y6;var Jce={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Zce(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function ele(t,e,n){const r=Zce(t.key,n);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Jce[r]}function X6(t,e=!1){const n=document.activeElement;for(const r of t)if(r===n||(r.focus({preventScroll:e}),document.activeElement!==n))return}function tle(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var xT=q6,bT=Q6,wT="Tabs",[nle,hFe]=Fi(wT,[Wf]),J6=Wf(),[rle,ST]=nle(wT),Z6=v.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,onValueChange:i,defaultValue:s,orientation:o="horizontal",dir:c,activationMode:l="automatic",...u}=t,d=Pu(c),[f,h]=ao({prop:r,onChange:i,defaultProp:s});return a.jsx(rle,{scope:n,baseId:Xs(),value:f,onValueChange:h,orientation:o,dir:d,activationMode:l,children:a.jsx(it.div,{dir:d,"data-orientation":o,...u,ref:e})})});Z6.displayName=wT;var eH="TabsList",tH=v.forwardRef((t,e)=>{const{__scopeTabs:n,loop:r=!0,...i}=t,s=ST(eH,n),o=J6(n);return a.jsx(xT,{asChild:!0,...o,orientation:s.orientation,dir:s.dir,loop:r,children:a.jsx(it.div,{role:"tablist","aria-orientation":s.orientation,...i,ref:e})})});tH.displayName=eH;var nH="TabsTrigger",rH=v.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,disabled:i=!1,...s}=t,o=ST(nH,n),c=J6(n),l=oH(o.baseId,r),u=aH(o.baseId,r),d=r===o.value;return a.jsx(bT,{asChild:!0,...c,focusable:!i,active:d,children:a.jsx(it.button,{type:"button",role:"tab","aria-selected":d,"aria-controls":u,"data-state":d?"active":"inactive","data-disabled":i?"":void 0,disabled:i,id:l,...s,ref:e,onMouseDown:Ne(t.onMouseDown,f=>{!i&&f.button===0&&f.ctrlKey===!1?o.onValueChange(r):f.preventDefault()}),onKeyDown:Ne(t.onKeyDown,f=>{[" ","Enter"].includes(f.key)&&o.onValueChange(r)}),onFocus:Ne(t.onFocus,()=>{const f=o.activationMode!=="manual";!d&&!i&&f&&o.onValueChange(r)})})})});rH.displayName=nH;var iH="TabsContent",sH=v.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,forceMount:i,children:s,...o}=t,c=ST(iH,n),l=oH(c.baseId,r),u=aH(c.baseId,r),d=r===c.value,f=v.useRef(d);return v.useEffect(()=>{const h=requestAnimationFrame(()=>f.current=!1);return()=>cancelAnimationFrame(h)},[]),a.jsx(Kr,{present:i||d,children:({present:h})=>a.jsx(it.div,{"data-state":d?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":l,hidden:!h,id:u,tabIndex:0,...o,ref:e,style:{...t.style,animationDuration:f.current?"0s":void 0},children:h&&s})})});sH.displayName=iH;function oH(t,e){return`${t}-trigger-${e}`}function aH(t,e){return`${t}-content-${e}`}var ile=Z6,cH=tH,lH=rH,uH=sH;const fl=ile,Va=v.forwardRef(({className:t,...e},n)=>a.jsx(cH,{ref:n,className:Pe("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",t),...e}));Va.displayName=cH.displayName;const pn=v.forwardRef(({className:t,...e},n)=>a.jsx(lH,{ref:n,className:Pe("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",t),...e}));pn.displayName=lH.displayName;const mn=v.forwardRef(({className:t,...e},n)=>a.jsx(uH,{ref:n,className:Pe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",t),...e}));mn.displayName=uH.displayName;const sle=Ie.object({name:Ie.string().min(2,{message:"Name must be at least 2 characters."}),age:Ie.string().min(1,{message:"Age is required."}),gender:Ie.string().min(1,{message:"Gender is required."}),occupation:Ie.string().min(2,{message:"Occupation is required."}),education:Ie.string().min(1,{message:"Education is required."}),location:Ie.string().min(2,{message:"Location is required."}),ethnicity:Ie.string().optional(),personality:Ie.string(),interests:Ie.string(),hasPurchasingPower:Ie.boolean().optional(),hasChildren:Ie.boolean().optional(),techSavviness:Ie.number().min(0).max(100),brandLoyalty:Ie.number().min(0).max(100),priceConsciousness:Ie.number().min(0).max(100),environmentalConcern:Ie.number().min(0).max(100),socialGrade:Ie.string().optional(),householdIncome:Ie.string().optional(),householdComposition:Ie.string().optional(),livingSituation:Ie.string().optional(),goals:Ie.array(Ie.string()).optional(),frustrations:Ie.array(Ie.string()).optional(),motivations:Ie.array(Ie.string()).optional(),scenarios:Ie.array(Ie.string()).optional(),scenarioType:Ie.string().optional(),oceanTraits:Ie.object({openness:Ie.number().min(0).max(100),conscientiousness:Ie.number().min(0).max(100),extraversion:Ie.number().min(0).max(100),agreeableness:Ie.number().min(0).max(100),neuroticism:Ie.number().min(0).max(100)}).optional(),thinkFeelDo:Ie.object({thinks:Ie.array(Ie.string()),feels:Ie.array(Ie.string()),does:Ie.array(Ie.string())}).optional(),mediaConsumption:Ie.string().optional(),deviceUsage:Ie.string().optional(),shoppingHabits:Ie.string().optional(),brandPreferences:Ie.string().optional(),communicationPreferences:Ie.string().optional(),paymentMethods:Ie.string().optional(),purchaseBehaviour:Ie.string().optional(),coreValues:Ie.string().optional(),lifestyleChoices:Ie.string().optional(),socialActivities:Ie.string().optional(),categoryKnowledge:Ie.string().optional(),decisionInfluences:Ie.string().optional(),painPoints:Ie.string().optional(),journeyContext:Ie.string().optional(),keyTouchpoints:Ie.string().optional(),selfDeterminationNeeds:Ie.object({autonomy:Ie.string(),competence:Ie.string(),relatedness:Ie.string()}).optional(),fears:Ie.array(Ie.string()).optional(),narrative:Ie.string().optional(),additionalInformation:Ie.string().optional()});function ole({targetFolderId:t,targetFolderName:e}){const[n,r]=v.useState(1),[i,s]=v.useState(!1),[o,c]=v.useState(!1),[l,u]=v.useState(0),d=ar(),{isAuthenticated:f,login:h}=Qo();v.useEffect(()=>{u(0)},[]),v.useEffect(()=>{(async()=>{if(!f&&!o){c(!0);try{console.log("Attempting auto login with default credentials"),await h("user","pass"),console.log("Auto login successful");const A=localStorage.getItem("auth_token");A?(console.log("Token successfully stored:",A.substring(0,10)+"..."),Fe.success("Logged in automatically with default account")):(console.error("Token not stored after successful login"),Fe.error("Authentication problem, token not stored"))}catch(A){console.error("Auto login failed:",A)}finally{c(!1)}}})()},[]);const p=V0({resolver:G0(sle),defaultValues:{name:"",age:"",gender:"",occupation:"",education:"",location:"",ethnicity:"",personality:"",interests:"",hasPurchasingPower:!1,hasChildren:!1,techSavviness:50,brandLoyalty:50,priceConsciousness:50,environmentalConcern:50,socialGrade:"",householdIncome:"",householdComposition:"",livingSituation:"",goals:[],frustrations:[],motivations:[],scenarios:[],scenarioType:"",oceanTraits:{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},thinkFeelDo:{thinks:[],feels:[],does:[]},mediaConsumption:"",deviceUsage:"",shoppingHabits:"",brandPreferences:"",communicationPreferences:"",paymentMethods:"",purchaseBehaviour:"",coreValues:"",lifestyleChoices:"",socialActivities:"",categoryKnowledge:"",decisionInfluences:"",painPoints:"",journeyContext:"",keyTouchpoints:"",selfDeterminationNeeds:{autonomy:"",competence:"",relatedness:""},fears:[],narrative:"",additionalInformation:""}}),g=_=>{const A=p.getValues(_)||[];p.setValue(_,[...A,""])},m=(_,A,j)=>{const k=[...p.getValues(_)||[]];k[A]=j,p.setValue(_,k)},y=(_,A)=>{const P=[...p.getValues(_)||[]];P.splice(A,1),p.setValue(_,P)},b=_=>{const A=p.getValues("thinkFeelDo")||{thinks:[],feels:[],does:[]},j={...A,[_]:[...A[_]||[],""]};p.setValue("thinkFeelDo",j)},x=(_,A,j)=>{const P=p.getValues("thinkFeelDo")||{thinks:[],feels:[],does:[]},k=[...P[_]||[]];k[A]=j;const O={...P,[_]:k};p.setValue("thinkFeelDo",O)},w=(_,A)=>{const j=p.getValues("thinkFeelDo")||{thinks:[],feels:[],does:[]},P=[...j[_]||[]];P.splice(A,1);const k={...j,[_]:P};p.setValue("thinkFeelDo",k)},S=(_,A)=>{const P={...p.getValues("oceanTraits")||{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},[_]:A};p.setValue("oceanTraits",P)};async function C(_,A=!1){var j,P,k,O,E;if(A&&l>=1){console.log("Max retry attempts reached, stopping retry loop"),Fe.error("Authentication failed after multiple attempts",{description:"Please try logging in manually (user/pass)"}),d("/login",{state:{from:"/synthetic-users"}}),s(!1);return}A?(u(R=>R+1),console.log(`Retry attempt ${l+1}`)):u(0),s(!0);try{if(!f)try{console.log("Not authenticated, attempting login with default credentials before submission"),await h("user","pass"),console.log("Login successful before persona creation")}catch(D){console.error("Login failed before persona creation:",D),Fe.error("Authentication required",{description:"Please log in before creating personas. Default: user/pass"}),d("/login",{state:{from:"/synthetic-users"}}),s(!1);return}const R=`persona-generation-${Date.now()}`,M=t&&e?` in "${e}" folder`:"",G=n>1?`${n} personas`:"persona";console.log(`UserCreator - Creating ${G}${M}`),Fe.createPersistent({id:R,title:`Generating ${G}...`,description:`Creating synthetic user profile${n>1?"s":""}${M}`,type:"info"});const L={..._,oceanTraits:_.oceanTraits||{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},thinkFeelDo:_.thinkFeelDo||{thinks:[],feels:[],does:[]},folderId:t||void 0},V={id:`temp-${Date.now()}`,...L},I=JSON.parse(localStorage.getItem("tempPersonas")||"[]");if(I.push(V),localStorage.setItem("tempPersonas",JSON.stringify(I)),n===1)try{if(!localStorage.getItem("auth_token")){console.error("No authentication token found"),Fe.error("Authentication required",{description:"No valid token found. Please log in again."});try{console.log("No token found, attempting new login"),await h("user","pass"),console.log("Login successful, token:",((j=localStorage.getItem("auth_token"))==null?void 0:j.substring(0,10))+"...")}catch(Q){throw console.error("Login retry failed:",Q),new Error("Authentication failed after retry")}}console.log("Sending persona creation request to API with auth token");const X=await Rr.create(L);console.log("Persona created successfully:",X),Fe.updatePersistent(R,{title:"Synthetic user created successfully",description:`Created profile for ${_.name}`,type:"success"})}catch(D){throw console.error("Error creating persona via API:",D),D.response&&D.response.status===401&&Fe.error("Authentication error",{description:"Failed to authenticate with server. Please try again."}),D}else{const D=[];D.push(L);for(let X=1;X{d("/synthetic-users?mode=view")},300)}catch(R){if(console.error("Error creating personas:",R),R.response&&R.response.status===401||R.message&&R.message.includes("Authentication failed")&&l<1)try{console.log("Got auth error, attempting login retry with default credentials"),localStorage.removeItem("auth_token");const M=await ty.login("user","pass");if((k=M==null?void 0:M.data)!=null&&k.access_token){localStorage.setItem("auth_token",M.data.access_token),localStorage.setItem("user",JSON.stringify(M.data.user)),console.log("Manual login successful, got new token:",M.data.access_token.substring(0,10)+"..."),Fe.info("Logged in with default account, retrying submission..."),setTimeout(()=>{C(_,!0)},500);return}else throw new Error("No access token received")}catch(M){console.error("Login retry failed:",M),Fe.error("Authentication error",{description:"Cannot authenticate with server. Please contact support."})}else Fe.updatePersistent(generationToastId,{title:"Failed to create synthetic users",description:((E=(O=R.response)==null?void 0:O.data)==null?void 0:E.message)||R.message||"An unexpected error occurred",type:"error"})}finally{s(!1)}}return a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-6",children:[a.jsx("h2",{className:"text-2xl font-sf font-semibold",children:"Create Synthetic Users"}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(ee,{variant:"outline",size:"sm",onClick:()=>r(Math.max(1,n-1)),children:"-"}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(Dr,{size:16,className:"text-muted-foreground"}),a.jsx("span",{className:"text-sm font-medium",children:n})]}),a.jsx(ee,{variant:"outline",size:"sm",onClick:()=>r(n+1),children:"+"})]})]}),a.jsx(W0,{...p,children:a.jsxs("form",{onSubmit:p.handleSubmit(C),className:"space-y-6",children:[a.jsxs(fl,{defaultValue:"basic",children:[a.jsxs(Va,{className:"grid w-full grid-cols-6",children:[a.jsx(pn,{value:"basic",children:"Basic"}),a.jsx(pn,{value:"cooper",children:"Cooper"}),a.jsx(pn,{value:"personality",children:"Personality"}),a.jsx(pn,{value:"demographics",children:"Demographics"}),a.jsx(pn,{value:"lifestyle",children:"Lifestyle"}),a.jsx(pn,{value:"extended",children:"Extended"})]}),a.jsx(mn,{value:"basic",className:"mt-6",children:a.jsx(ut,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"name",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Name"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"Jane Smith",..._})}),a.jsx(xt,{})]})}),a.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[a.jsx(_t,{control:p.control,name:"age",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Age Range"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select age range"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"18-24",children:"18-24"}),a.jsx(ae,{value:"25-34",children:"25-34"}),a.jsx(ae,{value:"35-44",children:"35-44"}),a.jsx(ae,{value:"45-54",children:"45-54"}),a.jsx(ae,{value:"55-64",children:"55-64"}),a.jsx(ae,{value:"65+",children:"65+"})]})]}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"gender",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Gender"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select gender"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Male",children:"Male"}),a.jsx(ae,{value:"Female",children:"Female"}),a.jsx(ae,{value:"Non-binary",children:"Non-binary"}),a.jsx(ae,{value:"Other",children:"Other"})]})]}),a.jsx(xt,{})]})})]}),a.jsx(_t,{control:p.control,name:"occupation",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Occupation"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"Software Engineer",..._})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"education",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Education"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select education level"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"High School",children:"High School"}),a.jsx(ae,{value:"Some College",children:"Some College"}),a.jsx(ae,{value:"Associate's Degree",children:"Associate's Degree"}),a.jsx(ae,{value:"Bachelor's Degree",children:"Bachelor's Degree"}),a.jsx(ae,{value:"Master's Degree",children:"Master's Degree"}),a.jsx(ae,{value:"PhD",children:"PhD"})]})]}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"location",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Location"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"New York, USA",..._})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"ethnicity",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Ethnicity (Optional)"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select ethnicity"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"white",children:"White"}),a.jsx(ae,{value:"black",children:"Black"}),a.jsx(ae,{value:"asian",children:"Asian"}),a.jsx(ae,{value:"hispanic",children:"Hispanic/Latino"}),a.jsx(ae,{value:"native-american",children:"Native American"}),a.jsx(ae,{value:"middle-eastern",children:"Middle Eastern"}),a.jsx(ae,{value:"mixed",children:"Mixed"}),a.jsx(ae,{value:"other",children:"Other"}),a.jsx(ae,{value:"prefer-not-to-say",children:"Prefer not to say"})]})]}),a.jsx(xt,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"personality",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Personality Traits"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Curious, analytical, detail-oriented",..._,rows:3})}),a.jsx(Fn,{children:"Describe key personality traits that define this user"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"interests",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Interests"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Technology, fitness, cooking, travel",..._,rows:3})}),a.jsx(Fn,{children:"List interests, hobbies and activities this user enjoys"}),a.jsx(xt,{})]})}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("h3",{className:"font-medium text-sm",children:"Behavioral Attributes"}),a.jsx(_t,{control:p.control,name:"techSavviness",render:({field:_})=>a.jsxs(gt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(vt,{children:"Tech Savviness"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(yt,{children:a.jsx(wr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"brandLoyalty",render:({field:_})=>a.jsxs(gt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(vt,{children:"Brand Loyalty"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(yt,{children:a.jsx(wr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"priceConsciousness",render:({field:_})=>a.jsxs(gt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(vt,{children:"Price Consciousness"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(yt,{children:a.jsx(wr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"environmentalConcern",render:({field:_})=>a.jsxs(gt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(vt,{children:"Environmental Concern"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(yt,{children:a.jsx(wr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(xt,{})]})}),a.jsxs("div",{className:"grid grid-cols-2 gap-4 pt-2",children:[a.jsx(_t,{control:p.control,name:"hasPurchasingPower",render:({field:_})=>a.jsxs(gt,{className:"flex items-center justify-between",children:[a.jsx(vt,{children:"Purchasing Power"}),a.jsx(yt,{children:a.jsx(ym,{checked:_.value,onCheckedChange:_.onChange})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"hasChildren",render:({field:_})=>a.jsxs(gt,{className:"flex items-center justify-between",children:[a.jsx(vt,{children:"Has Children"}),a.jsx(yt,{children:a.jsx(ym,{checked:_.value,onCheckedChange:_.onChange})}),a.jsx(xt,{})]})})]})]})]})]})})})}),a.jsxs(mn,{value:"cooper",className:"mt-6 space-y-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"mb-4",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Goals"}),(p.watch("goals")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>m("goals",A,j.target.value),placeholder:"Enter a goal"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("goals",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>g("goals"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Goal"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Frustrations"}),(p.watch("frustrations")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>m("frustrations",A,j.target.value),placeholder:"Enter a frustration"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("frustrations",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>g("frustrations"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Frustration"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Motivations"}),(p.watch("motivations")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>m("motivations",A,j.target.value),placeholder:"Enter a motivation"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("motivations",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>g("motivations"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Motivation"]})]})]})}),a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Think, Feel, Do"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Thinks"}),((p.watch("thinkFeelDo")||{thinks:[],feels:[],does:[]}).thinks||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>x("thinks",A,j.target.value),placeholder:"What they think"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>w("thinks",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>b("thinks"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Thought"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Feels"}),((p.watch("thinkFeelDo")||{thinks:[],feels:[],does:[]}).feels||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>x("feels",A,j.target.value),placeholder:"What they feel"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>w("feels",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>b("feels"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Feeling"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Does"}),((p.watch("thinkFeelDo")||{thinks:[],feels:[],does:[]}).does||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>x("does",A,j.target.value),placeholder:"What they do"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>w("does",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>b("does"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Action"]})]})]})]})}),a.jsx(ut,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"scenarioType",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Scenario Section Title"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"Life Scenarios",..._})}),a.jsx(Fn,{children:'Custom title for the scenarios section (e.g., "Customer Journey", "Use Cases")'}),a.jsx(xt,{})]})}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Usage Scenarios"}),(p.watch("scenarios")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-start gap-2 mb-2",children:[a.jsx(ht,{value:_,onChange:j=>m("scenarios",A,j.target.value),rows:2,placeholder:"Describe a usage scenario"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("scenarios",A),className:"mt-2",children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>g("scenarios"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Scenario"]})]})]})})})]}),a.jsx(mn,{value:"personality",className:"mt-6",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"OCEAN Personality Traits"}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Openness to Experience"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{openness:50}).openness||50,"%"]})]}),a.jsx(wr,{value:[(p.watch("oceanTraits")||{openness:50}).openness||50],onValueChange:_=>S("openness",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Creativity, curiosity, and openness to new ideas"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Conscientiousness"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{conscientiousness:50}).conscientiousness||50,"%"]})]}),a.jsx(wr,{value:[(p.watch("oceanTraits")||{conscientiousness:50}).conscientiousness||50],onValueChange:_=>S("conscientiousness",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Organization, responsibility, and self-discipline"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Extraversion"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{extraversion:50}).extraversion||50,"%"]})]}),a.jsx(wr,{value:[(p.watch("oceanTraits")||{extraversion:50}).extraversion||50],onValueChange:_=>S("extraversion",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Sociability, assertiveness, and talkativeness"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Agreeableness"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{agreeableness:50}).agreeableness||50,"%"]})]}),a.jsx(wr,{value:[(p.watch("oceanTraits")||{agreeableness:50}).agreeableness||50],onValueChange:_=>S("agreeableness",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Compassion, cooperation, and concern for others"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Neuroticism"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{neuroticism:50}).neuroticism||50,"%"]})]}),a.jsx(wr,{value:[(p.watch("oceanTraits")||{neuroticism:50}).neuroticism||50],onValueChange:_=>S("neuroticism",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Emotional reactivity, anxiety, and sensitivity to stress"})]})]})]})})}),a.jsx(mn,{value:"demographics",className:"mt-6",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Demographic Information"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"socialGrade",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Social Grade"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select social grade"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"A",children:"A - Higher managerial"}),a.jsx(ae,{value:"B",children:"B - Intermediate managerial"}),a.jsx(ae,{value:"C1",children:"C1 - Supervisory or clerical"}),a.jsx(ae,{value:"C2",children:"C2 - Skilled manual workers"}),a.jsx(ae,{value:"D",children:"D - Semi and unskilled manual workers"}),a.jsx(ae,{value:"E",children:"E - State pensioners, unemployed"})]})]}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"householdIncome",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Household Income"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select income range"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Under $25k",children:"Under $25,000"}),a.jsx(ae,{value:"$25k-$50k",children:"$25,000 - $50,000"}),a.jsx(ae,{value:"$50k-$75k",children:"$50,000 - $75,000"}),a.jsx(ae,{value:"$75k-$100k",children:"$75,000 - $100,000"}),a.jsx(ae,{value:"$100k-$150k",children:"$100,000 - $150,000"}),a.jsx(ae,{value:"$150k-$250k",children:"$150,000 - $250,000"}),a.jsx(ae,{value:"Over $250k",children:"Over $250,000"}),a.jsx(ae,{value:"Prefer not to say",children:"Prefer not to say"})]})]}),a.jsx(xt,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"householdComposition",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Household Composition"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select household type"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Single person",children:"Single person"}),a.jsx(ae,{value:"Couple without children",children:"Couple without children"}),a.jsx(ae,{value:"Couple with children",children:"Couple with children"}),a.jsx(ae,{value:"Single parent",children:"Single parent"}),a.jsx(ae,{value:"Multi-generational",children:"Multi-generational"}),a.jsx(ae,{value:"Shared housing",children:"Shared housing"}),a.jsx(ae,{value:"Other",children:"Other"})]})]}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"livingSituation",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Living Situation"}),a.jsxs(Un,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select living situation"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Own home",children:"Own home"}),a.jsx(ae,{value:"Rent apartment",children:"Rent apartment"}),a.jsx(ae,{value:"Rent house",children:"Rent house"}),a.jsx(ae,{value:"Live with family",children:"Live with family"}),a.jsx(ae,{value:"Student housing",children:"Student housing"}),a.jsx(ae,{value:"Assisted living",children:"Assisted living"}),a.jsx(ae,{value:"Other",children:"Other"})]})]}),a.jsx(xt,{})]})})]})]})]})})}),a.jsx(mn,{value:"lifestyle",className:"mt-6",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Lifestyle & Behavior"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"mediaConsumption",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Media Consumption"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"TV shows, podcasts, news sources, social media platforms",..._,rows:3})}),a.jsx(Fn,{children:"Describe media consumption habits and preferences"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"deviceUsage",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Device Usage"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Smartphone, laptop, tablet, smart TV, gaming console",..._,rows:3})}),a.jsx(Fn,{children:"Primary devices and usage patterns"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"shoppingHabits",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Shopping Habits"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Online vs in-store, frequency, preferred retailers",..._,rows:3})}),a.jsx(Fn,{children:"Shopping behavior and preferences"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"brandPreferences",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Brand Preferences"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Favorite brands, brand values alignment",..._,rows:3})}),a.jsx(Fn,{children:"Preferred brands and reasoning"}),a.jsx(xt,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"communicationPreferences",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Communication Preferences"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Email, phone, text, video calls, in-person",..._,rows:3})}),a.jsx(Fn,{children:"Preferred communication methods and channels"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"paymentMethods",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Payment Methods"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Credit cards, digital wallets, cash, BNPL",..._,rows:3})}),a.jsx(Fn,{children:"Preferred payment methods and financial tools"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"purchaseBehaviour",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Purchase Behavior"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Research habits, decision factors, impulse vs planned buying",..._,rows:3})}),a.jsx(Fn,{children:"How they approach making purchase decisions"}),a.jsx(xt,{})]})})]})]})]})})}),a.jsxs(mn,{value:"extended",className:"mt-6 space-y-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Extended Profile"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"coreValues",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Core Values"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Key principles and values that guide decisions",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"lifestyleChoices",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Lifestyle Choices"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Health, fitness, diet, work-life balance preferences",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"socialActivities",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Social Activities"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Social hobbies, community involvement, networking",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"categoryKnowledge",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Category Knowledge"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Expertise in specific product/service categories",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"decisionInfluences",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Decision Influences"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"What factors most influence their decisions",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"painPoints",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Pain Points"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Common challenges and friction points",..._,rows:3})}),a.jsx(xt,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"journeyContext",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Journey Context"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Current life stage and contextual factors",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"keyTouchpoints",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Key Touchpoints"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Important interaction points and channels",..._,rows:3})}),a.jsx(xt,{})]})}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("h4",{className:"font-medium text-sm",children:"Self-Determination Needs"}),a.jsx(_t,{control:p.control,name:"selfDeterminationNeeds.autonomy",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Autonomy"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Need for independence and self-direction",..._,rows:2})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"selfDeterminationNeeds.competence",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Competence"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Need to feel capable and effective",..._,rows:2})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"selfDeterminationNeeds.relatedness",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Relatedness"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Need for connection and belonging",..._,rows:2})}),a.jsx(xt,{})]})})]})]})]})]})}),a.jsx(ut,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Fears & Concerns"}),(p.watch("fears")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:_,onChange:j=>m("fears",A,j.target.value),placeholder:"Enter a fear or concern"}),a.jsx(ee,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("fears",A),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(ee,{variant:"outline",size:"sm",type:"button",onClick:()=>g("fears"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Fear/Concern"]})]}),a.jsx(_t,{control:p.control,name:"narrative",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Personal Narrative"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Personal story, background, key life experiences",..._,rows:4})}),a.jsx(Fn,{children:"A brief narrative that captures their personal story"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:p.control,name:"additionalInformation",render:({field:_})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Additional Information"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Any other relevant details or context",..._,rows:4})}),a.jsx(Fn,{children:"Additional context or details not covered elsewhere"}),a.jsx(xt,{})]})})]})})})]})]}),a.jsxs("div",{className:"flex justify-end space-x-2",children:[a.jsx(ee,{variant:"outline",type:"button",onClick:()=>p.reset(),children:"Reset"}),a.jsxs(ee,{type:"submit",disabled:i,children:[i?a.jsx(tZ,{className:"mr-2 h-4 w-4 animate-spin"}):a.jsx(DE,{className:"mr-2 h-4 w-4"}),i?"Creating...":`Create ${n>1?`${n} Users`:"User"}`]})]})]})})]})}var T1=["Enter"," "],ale=["ArrowDown","PageUp","Home"],dH=["ArrowUp","PageDown","End"],cle=[...ale,...dH],lle={ltr:[...T1,"ArrowRight"],rtl:[...T1,"ArrowLeft"]},ule={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Ng="Menu",[xm,dle,fle]=Y0(Ng),[ku,fH]=Fi(Ng,[fle,Mf,Wf]),iw=Mf(),hH=Wf(),[hle,Ou]=ku(Ng),[ple,Tg]=ku(Ng),pH=t=>{const{__scopeMenu:e,open:n=!1,children:r,dir:i,onOpenChange:s,modal:o=!0}=t,c=iw(e),[l,u]=v.useState(null),d=v.useRef(!1),f=Cr(s),h=Pu(i);return v.useEffect(()=>{const p=()=>{d.current=!0,document.addEventListener("pointerdown",g,{capture:!0,once:!0}),document.addEventListener("pointermove",g,{capture:!0,once:!0})},g=()=>d.current=!1;return document.addEventListener("keydown",p,{capture:!0}),()=>{document.removeEventListener("keydown",p,{capture:!0}),document.removeEventListener("pointerdown",g,{capture:!0}),document.removeEventListener("pointermove",g,{capture:!0})}},[]),a.jsx(P4,{...c,children:a.jsx(hle,{scope:e,open:n,onOpenChange:f,content:l,onContentChange:u,children:a.jsx(ple,{scope:e,onClose:v.useCallback(()=>f(!1),[f]),isUsingKeyboardRef:d,dir:h,modal:o,children:r})})})};pH.displayName=Ng;var mle="MenuAnchor",CT=v.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t,i=iw(n);return a.jsx(bE,{...i,...r,ref:e})});CT.displayName=mle;var _T="MenuPortal",[gle,mH]=ku(_T,{forceMount:void 0}),gH=t=>{const{__scopeMenu:e,forceMount:n,children:r,container:i}=t,s=Ou(_T,e);return a.jsx(gle,{scope:e,forceMount:n,children:a.jsx(Kr,{present:n||s.open,children:a.jsx(f0,{asChild:!0,container:i,children:r})})})};gH.displayName=_T;var Cs="MenuContent",[vle,AT]=ku(Cs),vH=v.forwardRef((t,e)=>{const n=mH(Cs,t.__scopeMenu),{forceMount:r=n.forceMount,...i}=t,s=Ou(Cs,t.__scopeMenu),o=Tg(Cs,t.__scopeMenu);return a.jsx(xm.Provider,{scope:t.__scopeMenu,children:a.jsx(Kr,{present:r||s.open,children:a.jsx(xm.Slot,{scope:t.__scopeMenu,children:o.modal?a.jsx(yle,{...i,ref:e}):a.jsx(xle,{...i,ref:e})})})})}),yle=v.forwardRef((t,e)=>{const n=Ou(Cs,t.__scopeMenu),r=v.useRef(null),i=Ot(e,r);return v.useEffect(()=>{const s=r.current;if(s)return uT(s)},[]),a.jsx(jT,{...t,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:Ne(t.onFocusOutside,s=>s.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),xle=v.forwardRef((t,e)=>{const n=Ou(Cs,t.__scopeMenu);return a.jsx(jT,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),jT=v.forwardRef((t,e)=>{const{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:s,onCloseAutoFocus:o,disableOutsidePointerEvents:c,onEntryFocus:l,onEscapeKeyDown:u,onPointerDownOutside:d,onFocusOutside:f,onInteractOutside:h,onDismiss:p,disableOutsideScroll:g,...m}=t,y=Ou(Cs,n),b=Tg(Cs,n),x=iw(n),w=hH(n),S=dle(n),[C,_]=v.useState(null),A=v.useRef(null),j=Ot(e,A,y.onContentChange),P=v.useRef(0),k=v.useRef(""),O=v.useRef(0),E=v.useRef(null),R=v.useRef("right"),M=v.useRef(0),G=g?J0:v.Fragment,L=g?{as:Ho,allowPinchZoom:!0}:void 0,V=D=>{var F,ce;const X=k.current+D,Q=S().filter(te=>!te.disabled),J=document.activeElement,ye=(F=Q.find(te=>te.ref.current===J))==null?void 0:F.textValue,U=Q.map(te=>te.textValue),ne=kle(U,X,ye),ue=(ce=Q.find(te=>te.textValue===ne))==null?void 0:ce.ref.current;(function te(pe){k.current=pe,window.clearTimeout(P.current),pe!==""&&(P.current=window.setTimeout(()=>te(""),1e3))})(X),ue&&setTimeout(()=>ue.focus())};v.useEffect(()=>()=>window.clearTimeout(P.current),[]),lT();const I=v.useCallback(D=>{var Q,J;return R.current===((Q=E.current)==null?void 0:Q.side)&&Ile(D,(J=E.current)==null?void 0:J.area)},[]);return a.jsx(vle,{scope:n,searchRef:k,onItemEnter:v.useCallback(D=>{I(D)&&D.preventDefault()},[I]),onItemLeave:v.useCallback(D=>{var X;I(D)||((X=A.current)==null||X.focus(),_(null))},[I]),onTriggerLeave:v.useCallback(D=>{I(D)&&D.preventDefault()},[I]),pointerGraceTimerRef:O,onPointerGraceIntentChange:v.useCallback(D=>{E.current=D},[]),children:a.jsx(G,{...L,children:a.jsx(Q0,{asChild:!0,trapped:i,onMountAutoFocus:Ne(s,D=>{var X;D.preventDefault(),(X=A.current)==null||X.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:a.jsx(fg,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:u,onPointerDownOutside:d,onFocusOutside:f,onInteractOutside:h,onDismiss:p,children:a.jsx(xT,{asChild:!0,...w,dir:b.dir,orientation:"vertical",loop:r,currentTabStopId:C,onCurrentTabStopIdChange:_,onEntryFocus:Ne(l,D=>{b.isUsingKeyboardRef.current||D.preventDefault()}),preventScrollOnEntryFocus:!0,children:a.jsx(wE,{role:"menu","aria-orientation":"vertical","data-state":IH(y.open),"data-radix-menu-content":"",dir:b.dir,...x,...m,ref:j,style:{outline:"none",...m.style},onKeyDown:Ne(m.onKeyDown,D=>{const Q=D.target.closest("[data-radix-menu-content]")===D.currentTarget,J=D.ctrlKey||D.altKey||D.metaKey,ye=D.key.length===1;Q&&(D.key==="Tab"&&D.preventDefault(),!J&&ye&&V(D.key));const U=A.current;if(D.target!==U||!cle.includes(D.key))return;D.preventDefault();const ue=S().filter(F=>!F.disabled).map(F=>F.ref.current);dH.includes(D.key)&&ue.reverse(),Tle(ue)}),onBlur:Ne(t.onBlur,D=>{D.currentTarget.contains(D.target)||(window.clearTimeout(P.current),k.current="")}),onPointerMove:Ne(t.onPointerMove,bm(D=>{const X=D.target,Q=M.current!==D.clientX;if(D.currentTarget.contains(X)&&Q){const J=D.clientX>M.current?"right":"left";R.current=J,M.current=D.clientX}}))})})})})})})});vH.displayName=Cs;var ble="MenuGroup",ET=v.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t;return a.jsx(it.div,{role:"group",...r,ref:e})});ET.displayName=ble;var wle="MenuLabel",yH=v.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t;return a.jsx(it.div,{...r,ref:e})});yH.displayName=wle;var kx="MenuItem",_R="menu.itemSelect",sw=v.forwardRef((t,e)=>{const{disabled:n=!1,onSelect:r,...i}=t,s=v.useRef(null),o=Tg(kx,t.__scopeMenu),c=AT(kx,t.__scopeMenu),l=Ot(e,s),u=v.useRef(!1),d=()=>{const f=s.current;if(!n&&f){const h=new CustomEvent(_R,{bubbles:!0,cancelable:!0});f.addEventListener(_R,p=>r==null?void 0:r(p),{once:!0}),l4(f,h),h.defaultPrevented?u.current=!1:o.onClose()}};return a.jsx(xH,{...i,ref:l,disabled:n,onClick:Ne(t.onClick,d),onPointerDown:f=>{var h;(h=t.onPointerDown)==null||h.call(t,f),u.current=!0},onPointerUp:Ne(t.onPointerUp,f=>{var h;u.current||(h=f.currentTarget)==null||h.click()}),onKeyDown:Ne(t.onKeyDown,f=>{const h=c.searchRef.current!=="";n||h&&f.key===" "||T1.includes(f.key)&&(f.currentTarget.click(),f.preventDefault())})})});sw.displayName=kx;var xH=v.forwardRef((t,e)=>{const{__scopeMenu:n,disabled:r=!1,textValue:i,...s}=t,o=AT(kx,n),c=hH(n),l=v.useRef(null),u=Ot(e,l),[d,f]=v.useState(!1),[h,p]=v.useState("");return v.useEffect(()=>{const g=l.current;g&&p((g.textContent??"").trim())},[s.children]),a.jsx(xm.ItemSlot,{scope:n,disabled:r,textValue:i??h,children:a.jsx(bT,{asChild:!0,...c,focusable:!r,children:a.jsx(it.div,{role:"menuitem","data-highlighted":d?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...s,ref:u,onPointerMove:Ne(t.onPointerMove,bm(g=>{r?o.onItemLeave(g):(o.onItemEnter(g),g.defaultPrevented||g.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:Ne(t.onPointerLeave,bm(g=>o.onItemLeave(g))),onFocus:Ne(t.onFocus,()=>f(!0)),onBlur:Ne(t.onBlur,()=>f(!1))})})})}),Sle="MenuCheckboxItem",bH=v.forwardRef((t,e)=>{const{checked:n=!1,onCheckedChange:r,...i}=t;return a.jsx(AH,{scope:t.__scopeMenu,checked:n,children:a.jsx(sw,{role:"menuitemcheckbox","aria-checked":Ox(n)?"mixed":n,...i,ref:e,"data-state":TT(n),onSelect:Ne(i.onSelect,()=>r==null?void 0:r(Ox(n)?!0:!n),{checkForDefaultPrevented:!1})})})});bH.displayName=Sle;var wH="MenuRadioGroup",[Cle,_le]=ku(wH,{value:void 0,onValueChange:()=>{}}),SH=v.forwardRef((t,e)=>{const{value:n,onValueChange:r,...i}=t,s=Cr(r);return a.jsx(Cle,{scope:t.__scopeMenu,value:n,onValueChange:s,children:a.jsx(ET,{...i,ref:e})})});SH.displayName=wH;var CH="MenuRadioItem",_H=v.forwardRef((t,e)=>{const{value:n,...r}=t,i=_le(CH,t.__scopeMenu),s=n===i.value;return a.jsx(AH,{scope:t.__scopeMenu,checked:s,children:a.jsx(sw,{role:"menuitemradio","aria-checked":s,...r,ref:e,"data-state":TT(s),onSelect:Ne(r.onSelect,()=>{var o;return(o=i.onValueChange)==null?void 0:o.call(i,n)},{checkForDefaultPrevented:!1})})})});_H.displayName=CH;var NT="MenuItemIndicator",[AH,Ale]=ku(NT,{checked:!1}),jH=v.forwardRef((t,e)=>{const{__scopeMenu:n,forceMount:r,...i}=t,s=Ale(NT,n);return a.jsx(Kr,{present:r||Ox(s.checked)||s.checked===!0,children:a.jsx(it.span,{...i,ref:e,"data-state":TT(s.checked)})})});jH.displayName=NT;var jle="MenuSeparator",EH=v.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t;return a.jsx(it.div,{role:"separator","aria-orientation":"horizontal",...r,ref:e})});EH.displayName=jle;var Ele="MenuArrow",NH=v.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t,i=iw(n);return a.jsx(SE,{...i,...r,ref:e})});NH.displayName=Ele;var Nle="MenuSub",[pFe,TH]=ku(Nle),Wh="MenuSubTrigger",PH=v.forwardRef((t,e)=>{const n=Ou(Wh,t.__scopeMenu),r=Tg(Wh,t.__scopeMenu),i=TH(Wh,t.__scopeMenu),s=AT(Wh,t.__scopeMenu),o=v.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:l}=s,u={__scopeMenu:t.__scopeMenu},d=v.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return v.useEffect(()=>d,[d]),v.useEffect(()=>{const f=c.current;return()=>{window.clearTimeout(f),l(null)}},[c,l]),a.jsx(CT,{asChild:!0,...u,children:a.jsx(xH,{id:i.triggerId,"aria-haspopup":"menu","aria-expanded":n.open,"aria-controls":i.contentId,"data-state":IH(n.open),...t,ref:c0(e,i.onTriggerChange),onClick:f=>{var h;(h=t.onClick)==null||h.call(t,f),!(t.disabled||f.defaultPrevented)&&(f.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:Ne(t.onPointerMove,bm(f=>{s.onItemEnter(f),!f.defaultPrevented&&!t.disabled&&!n.open&&!o.current&&(s.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:Ne(t.onPointerLeave,bm(f=>{var p,g;d();const h=(p=n.content)==null?void 0:p.getBoundingClientRect();if(h){const m=(g=n.content)==null?void 0:g.dataset.side,y=m==="right",b=y?-5:5,x=h[y?"left":"right"],w=h[y?"right":"left"];s.onPointerGraceIntentChange({area:[{x:f.clientX+b,y:f.clientY},{x,y:h.top},{x:w,y:h.top},{x:w,y:h.bottom},{x,y:h.bottom}],side:m}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>s.onPointerGraceIntentChange(null),300)}else{if(s.onTriggerLeave(f),f.defaultPrevented)return;s.onPointerGraceIntentChange(null)}})),onKeyDown:Ne(t.onKeyDown,f=>{var p;const h=s.searchRef.current!=="";t.disabled||h&&f.key===" "||lle[r.dir].includes(f.key)&&(n.onOpenChange(!0),(p=n.content)==null||p.focus(),f.preventDefault())})})})});PH.displayName=Wh;var kH="MenuSubContent",OH=v.forwardRef((t,e)=>{const n=mH(Cs,t.__scopeMenu),{forceMount:r=n.forceMount,...i}=t,s=Ou(Cs,t.__scopeMenu),o=Tg(Cs,t.__scopeMenu),c=TH(kH,t.__scopeMenu),l=v.useRef(null),u=Ot(e,l);return a.jsx(xm.Provider,{scope:t.__scopeMenu,children:a.jsx(Kr,{present:r||s.open,children:a.jsx(xm.Slot,{scope:t.__scopeMenu,children:a.jsx(jT,{id:c.contentId,"aria-labelledby":c.triggerId,...i,ref:u,align:"start",side:o.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:d=>{var f;o.isUsingKeyboardRef.current&&((f=l.current)==null||f.focus()),d.preventDefault()},onCloseAutoFocus:d=>d.preventDefault(),onFocusOutside:Ne(t.onFocusOutside,d=>{d.target!==c.trigger&&s.onOpenChange(!1)}),onEscapeKeyDown:Ne(t.onEscapeKeyDown,d=>{o.onClose(),d.preventDefault()}),onKeyDown:Ne(t.onKeyDown,d=>{var p;const f=d.currentTarget.contains(d.target),h=ule[o.dir].includes(d.key);f&&h&&(s.onOpenChange(!1),(p=c.trigger)==null||p.focus(),d.preventDefault())})})})})})});OH.displayName=kH;function IH(t){return t?"open":"closed"}function Ox(t){return t==="indeterminate"}function TT(t){return Ox(t)?"indeterminate":t?"checked":"unchecked"}function Tle(t){const e=document.activeElement;for(const n of t)if(n===e||(n.focus(),document.activeElement!==e))return}function Ple(t,e){return t.map((n,r)=>t[(e+r)%t.length])}function kle(t,e,n){const i=e.length>1&&Array.from(e).every(u=>u===e[0])?e[0]:e,s=n?t.indexOf(n):-1;let o=Ple(t,Math.max(s,0));i.length===1&&(o=o.filter(u=>u!==n));const l=o.find(u=>u.toLowerCase().startsWith(i.toLowerCase()));return l!==n?l:void 0}function Ole(t,e){const{x:n,y:r}=t;let i=!1;for(let s=0,o=e.length-1;sr!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function Ile(t,e){if(!e)return!1;const n={x:t.clientX,y:t.clientY};return Ole(n,e)}function bm(t){return e=>e.pointerType==="mouse"?t(e):void 0}var Rle=pH,Mle=CT,Dle=gH,$le=vH,Lle=ET,Fle=yH,Ule=sw,Ble=bH,Hle=SH,zle=_H,Vle=jH,Gle=EH,Kle=NH,Wle=PH,qle=OH,PT="DropdownMenu",[Yle,mFe]=Fi(PT,[fH]),Si=fH(),[Qle,RH]=Yle(PT),MH=t=>{const{__scopeDropdownMenu:e,children:n,dir:r,open:i,defaultOpen:s,onOpenChange:o,modal:c=!0}=t,l=Si(e),u=v.useRef(null),[d=!1,f]=ao({prop:i,defaultProp:s,onChange:o});return a.jsx(Qle,{scope:e,triggerId:Xs(),triggerRef:u,contentId:Xs(),open:d,onOpenChange:f,onOpenToggle:v.useCallback(()=>f(h=>!h),[f]),modal:c,children:a.jsx(Rle,{...l,open:d,onOpenChange:f,dir:r,modal:c,children:n})})};MH.displayName=PT;var DH="DropdownMenuTrigger",$H=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,disabled:r=!1,...i}=t,s=RH(DH,n),o=Si(n);return a.jsx(Mle,{asChild:!0,...o,children:a.jsx(it.button,{type:"button",id:s.triggerId,"aria-haspopup":"menu","aria-expanded":s.open,"aria-controls":s.open?s.contentId:void 0,"data-state":s.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...i,ref:c0(e,s.triggerRef),onPointerDown:Ne(t.onPointerDown,c=>{!r&&c.button===0&&c.ctrlKey===!1&&(s.onOpenToggle(),s.open||c.preventDefault())}),onKeyDown:Ne(t.onKeyDown,c=>{r||(["Enter"," "].includes(c.key)&&s.onOpenToggle(),c.key==="ArrowDown"&&s.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(c.key)&&c.preventDefault())})})})});$H.displayName=DH;var Xle="DropdownMenuPortal",LH=t=>{const{__scopeDropdownMenu:e,...n}=t,r=Si(e);return a.jsx(Dle,{...r,...n})};LH.displayName=Xle;var FH="DropdownMenuContent",UH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=RH(FH,n),s=Si(n),o=v.useRef(!1);return a.jsx($le,{id:i.contentId,"aria-labelledby":i.triggerId,...s,...r,ref:e,onCloseAutoFocus:Ne(t.onCloseAutoFocus,c=>{var l;o.current||(l=i.triggerRef.current)==null||l.focus(),o.current=!1,c.preventDefault()}),onInteractOutside:Ne(t.onInteractOutside,c=>{const l=c.detail.originalEvent,u=l.button===0&&l.ctrlKey===!0,d=l.button===2||u;(!i.modal||d)&&(o.current=!0)}),style:{...t.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});UH.displayName=FH;var Jle="DropdownMenuGroup",Zle=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Lle,{...i,...r,ref:e})});Zle.displayName=Jle;var eue="DropdownMenuLabel",BH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Fle,{...i,...r,ref:e})});BH.displayName=eue;var tue="DropdownMenuItem",HH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Ule,{...i,...r,ref:e})});HH.displayName=tue;var nue="DropdownMenuCheckboxItem",zH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Ble,{...i,...r,ref:e})});zH.displayName=nue;var rue="DropdownMenuRadioGroup",iue=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Hle,{...i,...r,ref:e})});iue.displayName=rue;var sue="DropdownMenuRadioItem",VH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(zle,{...i,...r,ref:e})});VH.displayName=sue;var oue="DropdownMenuItemIndicator",GH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Vle,{...i,...r,ref:e})});GH.displayName=oue;var aue="DropdownMenuSeparator",KH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Gle,{...i,...r,ref:e})});KH.displayName=aue;var cue="DropdownMenuArrow",lue=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Kle,{...i,...r,ref:e})});lue.displayName=cue;var uue="DropdownMenuSubTrigger",WH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(Wle,{...i,...r,ref:e})});WH.displayName=uue;var due="DropdownMenuSubContent",qH=v.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=Si(n);return a.jsx(qle,{...i,...r,ref:e,style:{...t.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});qH.displayName=due;var fue=MH,hue=$H,pue=LH,YH=UH,QH=BH,XH=HH,JH=zH,ZH=VH,ez=GH,tz=KH,nz=WH,rz=qH;const P1=fue,k1=hue,mue=v.forwardRef(({className:t,inset:e,children:n,...r},i)=>a.jsxs(nz,{ref:i,className:Pe("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",e&&"pl-8",t),...r,children:[n,a.jsx(us,{className:"ml-auto h-4 w-4"})]}));mue.displayName=nz.displayName;const gue=v.forwardRef(({className:t,...e},n)=>a.jsx(rz,{ref:n,className:Pe("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...e}));gue.displayName=rz.displayName;const Ix=v.forwardRef(({className:t,sideOffset:e=4,...n},r)=>a.jsx(pue,{children:a.jsx(YH,{ref:r,sideOffset:e,className:Pe("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...n})}));Ix.displayName=YH.displayName;const ic=v.forwardRef(({className:t,inset:e,...n},r)=>a.jsx(XH,{ref:r,className:Pe("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e&&"pl-8",t),...n}));ic.displayName=XH.displayName;const vue=v.forwardRef(({className:t,children:e,checked:n,...r},i)=>a.jsxs(JH,{ref:i,className:Pe("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),checked:n,...r,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(ez,{children:a.jsx(Es,{className:"h-4 w-4"})})}),e]}));vue.displayName=JH.displayName;const yue=v.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(ZH,{ref:r,className:Pe("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...n,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(ez,{children:a.jsx(RE,{className:"h-2 w-2 fill-current"})})}),e]}));yue.displayName=ZH.displayName;const xue=v.forwardRef(({className:t,inset:e,...n},r)=>a.jsx(QH,{ref:r,className:Pe("px-2 py-1.5 text-sm font-semibold",e&&"pl-8",t),...n}));xue.displayName=QH.displayName;const bue=v.forwardRef(({className:t,...e},n)=>a.jsx(tz,{ref:n,className:Pe("-mx-1 my-1 h-px bg-muted",t),...e}));bue.displayName=tz.displayName;var kT="Dialog",[iz,sz]=Fi(kT),[wue,mo]=iz(kT),oz=t=>{const{__scopeDialog:e,children:n,open:r,defaultOpen:i,onOpenChange:s,modal:o=!0}=t,c=v.useRef(null),l=v.useRef(null),[u=!1,d]=ao({prop:r,defaultProp:i,onChange:s});return a.jsx(wue,{scope:e,triggerRef:c,contentRef:l,contentId:Xs(),titleId:Xs(),descriptionId:Xs(),open:u,onOpenChange:d,onOpenToggle:v.useCallback(()=>d(f=>!f),[d]),modal:o,children:n})};oz.displayName=kT;var az="DialogTrigger",cz=v.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=mo(az,n),s=Ot(e,i.triggerRef);return a.jsx(it.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":RT(i.open),...r,ref:s,onClick:Ne(t.onClick,i.onOpenToggle)})});cz.displayName=az;var OT="DialogPortal",[Sue,lz]=iz(OT,{forceMount:void 0}),uz=t=>{const{__scopeDialog:e,forceMount:n,children:r,container:i}=t,s=mo(OT,e);return a.jsx(Sue,{scope:e,forceMount:n,children:v.Children.map(r,o=>a.jsx(Kr,{present:n||s.open,children:a.jsx(f0,{asChild:!0,container:i,children:o})}))})};uz.displayName=OT;var Rx="DialogOverlay",dz=v.forwardRef((t,e)=>{const n=lz(Rx,t.__scopeDialog),{forceMount:r=n.forceMount,...i}=t,s=mo(Rx,t.__scopeDialog);return s.modal?a.jsx(Kr,{present:r||s.open,children:a.jsx(Cue,{...i,ref:e})}):null});dz.displayName=Rx;var Cue=v.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=mo(Rx,n);return a.jsx(J0,{as:Ho,allowPinchZoom:!0,shards:[i.contentRef],children:a.jsx(it.div,{"data-state":RT(i.open),...r,ref:e,style:{pointerEvents:"auto",...r.style}})})}),bu="DialogContent",fz=v.forwardRef((t,e)=>{const n=lz(bu,t.__scopeDialog),{forceMount:r=n.forceMount,...i}=t,s=mo(bu,t.__scopeDialog);return a.jsx(Kr,{present:r||s.open,children:s.modal?a.jsx(_ue,{...i,ref:e}):a.jsx(Aue,{...i,ref:e})})});fz.displayName=bu;var _ue=v.forwardRef((t,e)=>{const n=mo(bu,t.__scopeDialog),r=v.useRef(null),i=Ot(e,n.contentRef,r);return v.useEffect(()=>{const s=r.current;if(s)return uT(s)},[]),a.jsx(hz,{...t,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Ne(t.onCloseAutoFocus,s=>{var o;s.preventDefault(),(o=n.triggerRef.current)==null||o.focus()}),onPointerDownOutside:Ne(t.onPointerDownOutside,s=>{const o=s.detail.originalEvent,c=o.button===0&&o.ctrlKey===!0;(o.button===2||c)&&s.preventDefault()}),onFocusOutside:Ne(t.onFocusOutside,s=>s.preventDefault())})}),Aue=v.forwardRef((t,e)=>{const n=mo(bu,t.__scopeDialog),r=v.useRef(!1),i=v.useRef(!1);return a.jsx(hz,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{var o,c;(o=t.onCloseAutoFocus)==null||o.call(t,s),s.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),s.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:s=>{var l,u;(l=t.onInteractOutside)==null||l.call(t,s),s.defaultPrevented||(r.current=!0,s.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const o=s.target;((u=n.triggerRef.current)==null?void 0:u.contains(o))&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&i.current&&s.preventDefault()}})}),hz=v.forwardRef((t,e)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:s,...o}=t,c=mo(bu,n),l=v.useRef(null),u=Ot(e,l);return lT(),a.jsxs(a.Fragment,{children:[a.jsx(Q0,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:s,children:a.jsx(fg,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":RT(c.open),...o,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),a.jsxs(a.Fragment,{children:[a.jsx(Eue,{titleId:c.titleId}),a.jsx(Tue,{contentRef:l,descriptionId:c.descriptionId})]})]})}),IT="DialogTitle",pz=v.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=mo(IT,n);return a.jsx(it.h2,{id:i.titleId,...r,ref:e})});pz.displayName=IT;var mz="DialogDescription",gz=v.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=mo(mz,n);return a.jsx(it.p,{id:i.descriptionId,...r,ref:e})});gz.displayName=mz;var vz="DialogClose",yz=v.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=mo(vz,n);return a.jsx(it.button,{type:"button",...r,ref:e,onClick:Ne(t.onClick,()=>i.onOpenChange(!1))})});yz.displayName=vz;function RT(t){return t?"open":"closed"}var xz="DialogTitleWarning",[jue,bz]=H9(xz,{contentName:bu,titleName:IT,docsSlug:"dialog"}),Eue=({titleId:t})=>{const e=bz(xz),n=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. - -If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component. - -For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return v.useEffect(()=>{t&&(document.getElementById(t)||console.error(n))},[n,t]),null},Nue="DialogDescriptionWarning",Tue=({contentRef:t,descriptionId:e})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${bz(Nue).contentName}}.`;return v.useEffect(()=>{var s;const i=(s=t.current)==null?void 0:s.getAttribute("aria-describedby");e&&i&&(document.getElementById(e)||console.warn(r))},[r,t,e]),null},wz=oz,Pue=cz,Sz=uz,MT=dz,DT=fz,$T=pz,LT=gz,FT=yz,Cz="AlertDialog",[kue,gFe]=Fi(Cz,[sz]),Ga=sz(),_z=t=>{const{__scopeAlertDialog:e,...n}=t,r=Ga(e);return a.jsx(wz,{...r,...n,modal:!0})};_z.displayName=Cz;var Oue="AlertDialogTrigger",Iue=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=Ga(n);return a.jsx(Pue,{...i,...r,ref:e})});Iue.displayName=Oue;var Rue="AlertDialogPortal",Az=t=>{const{__scopeAlertDialog:e,...n}=t,r=Ga(e);return a.jsx(Sz,{...r,...n})};Az.displayName=Rue;var Mue="AlertDialogOverlay",jz=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=Ga(n);return a.jsx(MT,{...i,...r,ref:e})});jz.displayName=Mue;var jd="AlertDialogContent",[Due,$ue]=kue(jd),Ez=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,children:r,...i}=t,s=Ga(n),o=v.useRef(null),c=Ot(e,o),l=v.useRef(null);return a.jsx(jue,{contentName:jd,titleName:Nz,docsSlug:"alert-dialog",children:a.jsx(Due,{scope:n,cancelRef:l,children:a.jsxs(DT,{role:"alertdialog",...s,...i,ref:c,onOpenAutoFocus:Ne(i.onOpenAutoFocus,u=>{var d;u.preventDefault(),(d=l.current)==null||d.focus({preventScroll:!0})}),onPointerDownOutside:u=>u.preventDefault(),onInteractOutside:u=>u.preventDefault(),children:[a.jsx(dE,{children:r}),a.jsx(Fue,{contentRef:o})]})})})});Ez.displayName=jd;var Nz="AlertDialogTitle",Tz=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=Ga(n);return a.jsx($T,{...i,...r,ref:e})});Tz.displayName=Nz;var Pz="AlertDialogDescription",kz=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=Ga(n);return a.jsx(LT,{...i,...r,ref:e})});kz.displayName=Pz;var Lue="AlertDialogAction",Oz=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=Ga(n);return a.jsx(FT,{...i,...r,ref:e})});Oz.displayName=Lue;var Iz="AlertDialogCancel",Rz=v.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,{cancelRef:i}=$ue(Iz,n),s=Ga(n),o=Ot(e,i);return a.jsx(FT,{...s,...r,ref:o})});Rz.displayName=Iz;var Fue=({contentRef:t})=>{const e=`\`${jd}\` requires a description for the component to be accessible for screen reader users. - -You can add a description to the \`${jd}\` by passing a \`${Pz}\` component as a child, which also benefits sighted users by adding visible context to the dialog. - -Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${jd}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. - -For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return v.useEffect(()=>{var r;document.getElementById((r=t.current)==null?void 0:r.getAttribute("aria-describedby"))||console.warn(e)},[e,t]),null},Uue=_z,Bue=Az,Mz=jz,Dz=Ez,$z=Oz,Lz=Rz,Fz=Tz,Uz=kz;const O1=Uue,Hue=Bue,Bz=v.forwardRef(({className:t,...e},n)=>a.jsx(Mz,{className:Pe("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...e,ref:n}));Bz.displayName=Mz.displayName;const Mx=v.forwardRef(({className:t,...e},n)=>a.jsxs(Hue,{children:[a.jsx(Bz,{}),a.jsx(Dz,{ref:n,className:Pe("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...e})]}));Mx.displayName=Dz.displayName;const Dx=({className:t,...e})=>a.jsx("div",{className:Pe("flex flex-col space-y-2 text-center sm:text-left",t),...e});Dx.displayName="AlertDialogHeader";const $x=({className:t,...e})=>a.jsx("div",{className:Pe("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...e});$x.displayName="AlertDialogFooter";const Lx=v.forwardRef(({className:t,...e},n)=>a.jsx(Fz,{ref:n,className:Pe("text-lg font-semibold",t),...e}));Lx.displayName=Fz.displayName;const Fx=v.forwardRef(({className:t,...e},n)=>a.jsx(Uz,{ref:n,className:Pe("text-sm text-muted-foreground",t),...e}));Fx.displayName=Uz.displayName;const Ux=v.forwardRef(({className:t,...e},n)=>a.jsx($z,{ref:n,className:Pe(JN(),t),...e}));Ux.displayName=$z.displayName;const Bx=v.forwardRef(({className:t,...e},n)=>a.jsx(Lz,{ref:n,className:Pe(JN({variant:"outline"}),"mt-2 sm:mt-0",t),...e}));Bx.displayName=Lz.displayName;const Jl=wz,zue=Sz,Hz=v.forwardRef(({className:t,...e},n)=>a.jsx(MT,{ref:n,className:Pe("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...e}));Hz.displayName=MT.displayName;const $c=v.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(zue,{children:[a.jsx(Hz,{}),a.jsxs(DT,{ref:r,className:Pe("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...n,children:[e,a.jsxs(FT,{className:"absolute right-4 top-4 z-[100] rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[a.jsx(Ri,{className:"h-4 w-4"}),a.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));$c.displayName=DT.displayName;const Lc=({className:t,...e})=>a.jsx("div",{className:Pe("flex flex-col space-y-1.5 text-center sm:text-left",t),...e});Lc.displayName="DialogHeader";const Fc=({className:t,...e})=>a.jsx("div",{className:Pe("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...e});Fc.displayName="DialogFooter";const Uc=v.forwardRef(({className:t,...e},n)=>a.jsx($T,{ref:n,className:Pe("text-lg font-semibold leading-none tracking-tight",t),...e}));Uc.displayName=$T.displayName;const Zl=v.forwardRef(({className:t,...e},n)=>a.jsx(LT,{ref:n,className:Pe("text-sm text-muted-foreground",t),...e}));Zl.displayName=LT.displayName;var UT="Radio",[Vue,zz]=Fi(UT),[Gue,Kue]=Vue(UT),Vz=v.forwardRef((t,e)=>{const{__scopeRadio:n,name:r,checked:i=!1,required:s,disabled:o,value:c="on",onCheck:l,form:u,...d}=t,[f,h]=v.useState(null),p=Ot(e,y=>h(y)),g=v.useRef(!1),m=f?u||!!f.closest("form"):!0;return a.jsxs(Gue,{scope:n,checked:i,disabled:o,children:[a.jsx(it.button,{type:"button",role:"radio","aria-checked":i,"data-state":Wz(i),"data-disabled":o?"":void 0,disabled:o,value:c,...d,ref:p,onClick:Ne(t.onClick,y=>{i||l==null||l(),m&&(g.current=y.isPropagationStopped(),g.current||y.stopPropagation())})}),m&&a.jsx(Wue,{control:f,bubbles:!g.current,name:r,value:c,checked:i,required:s,disabled:o,form:u,style:{transform:"translateX(-100%)"}})]})});Vz.displayName=UT;var Gz="RadioIndicator",Kz=v.forwardRef((t,e)=>{const{__scopeRadio:n,forceMount:r,...i}=t,s=Kue(Gz,n);return a.jsx(Kr,{present:r||s.checked,children:a.jsx(it.span,{"data-state":Wz(s.checked),"data-disabled":s.disabled?"":void 0,...i,ref:e})})});Kz.displayName=Gz;var Wue=t=>{const{control:e,checked:n,bubbles:r=!0,...i}=t,s=v.useRef(null),o=Sg(n),c=pg(e);return v.useEffect(()=>{const l=s.current,u=window.HTMLInputElement.prototype,f=Object.getOwnPropertyDescriptor(u,"checked").set;if(o!==n&&f){const h=new Event("click",{bubbles:r});f.call(l,n),l.dispatchEvent(h)}},[o,n,r]),a.jsx("input",{type:"radio","aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:s,style:{...t.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function Wz(t){return t?"checked":"unchecked"}var que=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],BT="RadioGroup",[Yue,vFe]=Fi(BT,[Wf,zz]),qz=Wf(),Yz=zz(),[Que,Xue]=Yue(BT),Qz=v.forwardRef((t,e)=>{const{__scopeRadioGroup:n,name:r,defaultValue:i,value:s,required:o=!1,disabled:c=!1,orientation:l,dir:u,loop:d=!0,onValueChange:f,...h}=t,p=qz(n),g=Pu(u),[m,y]=ao({prop:s,defaultProp:i,onChange:f});return a.jsx(Que,{scope:n,name:r,required:o,disabled:c,value:m,onValueChange:y,children:a.jsx(xT,{asChild:!0,...p,orientation:l,dir:g,loop:d,children:a.jsx(it.div,{role:"radiogroup","aria-required":o,"aria-orientation":l,"data-disabled":c?"":void 0,dir:g,...h,ref:e})})})});Qz.displayName=BT;var Xz="RadioGroupItem",Jz=v.forwardRef((t,e)=>{const{__scopeRadioGroup:n,disabled:r,...i}=t,s=Xue(Xz,n),o=s.disabled||r,c=qz(n),l=Yz(n),u=v.useRef(null),d=Ot(e,u),f=s.value===i.value,h=v.useRef(!1);return v.useEffect(()=>{const p=m=>{que.includes(m.key)&&(h.current=!0)},g=()=>h.current=!1;return document.addEventListener("keydown",p),document.addEventListener("keyup",g),()=>{document.removeEventListener("keydown",p),document.removeEventListener("keyup",g)}},[]),a.jsx(bT,{asChild:!0,...c,focusable:!o,active:f,children:a.jsx(Vz,{disabled:o,required:s.required,checked:f,...l,...i,name:s.name,ref:d,onCheck:()=>s.onValueChange(i.value),onKeyDown:Ne(p=>{p.key==="Enter"&&p.preventDefault()}),onFocus:Ne(i.onFocus,()=>{var p;h.current&&((p=u.current)==null||p.click())})})})});Jz.displayName=Xz;var Jue="RadioGroupIndicator",Zz=v.forwardRef((t,e)=>{const{__scopeRadioGroup:n,...r}=t,i=Yz(n);return a.jsx(Kz,{...i,...r,ref:e})});Zz.displayName=Jue;var eV=Qz,tV=Jz,Zue=Zz;const I1=v.forwardRef(({className:t,...e},n)=>a.jsx(eV,{className:Pe("grid gap-2",t),...e,ref:n}));I1.displayName=eV.displayName;const qh=v.forwardRef(({className:t,...e},n)=>a.jsx(tV,{ref:n,className:Pe("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",t),...e,children:a.jsx(Zue,{className:"flex items-center justify-center",children:a.jsx(RE,{className:"h-2.5 w-2.5 fill-current text-current"})})}));qh.displayName=tV.displayName;var HT="Checkbox",[ede,yFe]=Fi(HT),[tde,nde]=ede(HT),nV=v.forwardRef((t,e)=>{const{__scopeCheckbox:n,name:r,checked:i,defaultChecked:s,required:o,disabled:c,value:l="on",onCheckedChange:u,form:d,...f}=t,[h,p]=v.useState(null),g=Ot(e,S=>p(S)),m=v.useRef(!1),y=h?d||!!h.closest("form"):!0,[b=!1,x]=ao({prop:i,defaultProp:s,onChange:u}),w=v.useRef(b);return v.useEffect(()=>{const S=h==null?void 0:h.form;if(S){const C=()=>x(w.current);return S.addEventListener("reset",C),()=>S.removeEventListener("reset",C)}},[h,x]),a.jsxs(tde,{scope:n,state:b,disabled:c,children:[a.jsx(it.button,{type:"button",role:"checkbox","aria-checked":Bc(b)?"mixed":b,"aria-required":o,"data-state":sV(b),"data-disabled":c?"":void 0,disabled:c,value:l,...f,ref:g,onKeyDown:Ne(t.onKeyDown,S=>{S.key==="Enter"&&S.preventDefault()}),onClick:Ne(t.onClick,S=>{x(C=>Bc(C)?!0:!C),y&&(m.current=S.isPropagationStopped(),m.current||S.stopPropagation())})}),y&&a.jsx(rde,{control:h,bubbles:!m.current,name:r,value:l,checked:b,required:o,disabled:c,form:d,style:{transform:"translateX(-100%)"},defaultChecked:Bc(s)?!1:s})]})});nV.displayName=HT;var rV="CheckboxIndicator",iV=v.forwardRef((t,e)=>{const{__scopeCheckbox:n,forceMount:r,...i}=t,s=nde(rV,n);return a.jsx(Kr,{present:r||Bc(s.state)||s.state===!0,children:a.jsx(it.span,{"data-state":sV(s.state),"data-disabled":s.disabled?"":void 0,...i,ref:e,style:{pointerEvents:"none",...t.style}})})});iV.displayName=rV;var rde=t=>{const{control:e,checked:n,bubbles:r=!0,defaultChecked:i,...s}=t,o=v.useRef(null),c=Sg(n),l=pg(e);v.useEffect(()=>{const d=o.current,f=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(f,"checked").set;if(c!==n&&p){const g=new Event("click",{bubbles:r});d.indeterminate=Bc(n),p.call(d,Bc(n)?!1:n),d.dispatchEvent(g)}},[c,n,r]);const u=v.useRef(Bc(n)?!1:n);return a.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:i??u.current,...s,tabIndex:-1,ref:o,style:{...t.style,...l,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function Bc(t){return t==="indeterminate"}function sV(t){return Bc(t)?"indeterminate":t?"checked":"unchecked"}var oV=nV,ide=iV;const $l=v.forwardRef(({className:t,...e},n)=>a.jsx(oV,{ref:n,className:Pe("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",t),...e,children:a.jsx(ide,{className:Pe("flex items-center justify-center text-current"),children:a.jsx(Es,{className:"h-4 w-4"})})}));$l.displayName=oV.displayName;const zT=({isActive:t,isComplete:e,hasError:n,label:r,onComplete:i,className:s})=>{const[o,c]=v.useState(0),[l,u]=v.useState("progressing"),[d,f]=v.useState(!1),h=v.useRef(null),p=v.useRef(null),g=()=>{h.current&&(clearInterval(h.current),h.current=null),p.current&&(clearTimeout(p.current),p.current=null)},m=()=>{g(),c(0),u("progressing"),f(!1)},y=S=>{g(),u("completing");const C=100-S,_=50,A=500/_,j=C/A;let P=0;h.current=setInterval(()=>{P++;const k=S+j*P;k>=100||P>=A?(c(100),u("completed"),g(),p.current=setTimeout(()=>{u("hiding"),setTimeout(()=>{m(),i==null||i()},300)},2e3)):c(k)},_)},b=()=>{l==="progressing"&&y(o)},x=()=>{l==="waiting"&&y(90)},w=()=>{g()};return v.useEffect(()=>{if(t&&!d){f(!0),c(0),u("progressing");const S=90/540;let C=0;h.current=setInterval(()=>{C+=S,C>=90?(c(90),u("waiting"),g()):c(C)},100)}return e&&l==="progressing"&&b(),e&&l==="waiting"&&x(),n&&(l==="progressing"||l==="waiting")&&w(),!t&&d&&m(),()=>{t||g()}},[t,e,n,l,d]),v.useEffect(()=>()=>{g()},[]),d?a.jsxs("div",{className:Pe("w-full space-y-2",s),children:[r&&a.jsxs("div",{className:"flex justify-between items-center text-sm text-muted-foreground",children:[a.jsx("span",{children:l==="waiting"?`${r} - finalizing...`:r}),a.jsxs("span",{children:[Math.round(o),"%"]})]}),a.jsx(wc,{value:o,className:Pe("w-full transition-all duration-200",n&&"opacity-75",l==="completed"&&"bg-green-100")}),n&&a.jsx("div",{className:"text-sm text-red-600",children:"Generation failed. Please try again."}),l==="completed"&&!n&&a.jsx("div",{className:"text-sm text-green-600",children:"Generation completed successfully!"})]}):null},Gn="all",sde=()=>{var Os,ea,ta,yl;const t=v.useCallback(()=>{document.body.style.pointerEvents==="none"&&(console.log("ensureBodyInteractive: Fixing body pointer-events..."),document.body.style.pointerEvents="auto")},[]),e=ar(),[n]=$J(),{loadPersonas:r}=j6(),{clearNavigationState:i}=xg(),[s,o]=v.useState("view"),[c,l]=v.useState("ai"),[u,d]=v.useState("");v.useState(null);const[f,h]=v.useState(Gn),[p,g]=v.useState(!1),[m,y]=v.useState("");v.useEffect(()=>{const q=n.get("mode");(q==="view"||q==="create")&&o(q)},[n]);const[b,x]=v.useState([]),[w,S]=v.useState([]),[C,_]=v.useState(!0);v.useState(null);const[A,j]=v.useState(new Set),[P,k]=v.useState(!1),[O,E]=v.useState(null),[R,M]=v.useState(""),[G,L]=v.useState(!1),[V,I]=v.useState(null),[D,X]=v.useState(!1),[Q,J]=v.useState(null),[ye,U]=v.useState(!1),[ne,ue]=v.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[],folderStatus:[]}),[F,ce]=v.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[],folderStatus:[]}),[te,pe]=v.useState(!1),[we,Y]=v.useState(!1),[nt,Ue]=v.useState(!1),[at,Be]=v.useState(!1),[Bt,N]=v.useState("gemini-2.5-pro"),$=()=>{pe(!1),Y(!1),Ue(!1)},B=q=>{i(),e(`/synthetic-users/${q._id||q.id}`)},K=q=>{const Oe={age:new Set,gender:new Set,occupation:new Set,location:new Set,techSavviness:new Set,ethnicity:new Set};return q.forEach(Ge=>{if(Ge.age&&Oe.age.add(Ge.age),Ge.gender&&Oe.gender.add(Ge.gender),Ge.occupation&&Oe.occupation.add(Ge.occupation),Ge.location&&Oe.location.add(Ge.location),Ge.techSavviness!==void 0){const mt=Ge.techSavviness<30?"Low (0-30)":Ge.techSavviness<70?"Medium (31-70)":"High (71-100)";Oe.techSavviness.add(mt)}Ge.ethnicity&&Oe.ethnicity.add(Ge.ethnicity)}),{age:Array.from(Oe.age).sort(),gender:Array.from(Oe.gender).sort(),occupation:Array.from(Oe.occupation).sort(),location:Array.from(Oe.location).sort(),techSavviness:Array.from(Oe.techSavviness).sort((Ge,mt)=>{const tt=["Low (0-30)","Medium (31-70)","High (71-100)"];return tt.indexOf(Ge)-tt.indexOf(mt)}),ethnicity:Array.from(Oe.ethnicity).sort()}},Z=()=>{U(!1),setTimeout(()=>{ue({...F})},0)},H=()=>{ce({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[],folderStatus:[]})},re=(q,Oe)=>{ce(Ge=>{const mt={...Ge};return mt[q].includes(Oe)?mt[q]=mt[q].filter(tt=>tt!==Oe):mt[q]=[...mt[q],Oe],mt})},me=async()=>{try{const Ge=(await Eo.getAll()).data.map(mt=>({...mt,id:mt._id}));return S(Ge),Ge}catch(q){return console.error("Error fetching folders:",q),Fe.error("Failed to load folders"),S([]),[]}},be=async()=>{_(!0);try{const Ge=(await Rr.getAll()).data;{const tt=[...Ge.map(wt=>({...wt,id:wt.id||wt._id}))];try{(async()=>{const dn=await r();console.log("Loaded stored personas (for debugging only):",dn?dn.length:0)})()}catch(wt){console.warn("Error loading stored personas:",wt)}x(tt)}}catch(Oe){console.error("Error fetching personas:",Oe),Fe.error("Failed to load personas"),x([])}finally{_(!1)}};v.useEffect(()=>((async()=>{try{const[,]=await Promise.all([me(),be()])}catch(Oe){console.error("Error loading data:",Oe)}})(),()=>{}),[t]),v.useEffect(()=>{var q;if(s==="view")be();else if(s==="create"&&(console.log(`Switching to create mode with folder: ${f}, ${f!==Gn?"NOT default":"IS default"}`),f!==Gn)){const Oe=(q=w.find(Ge=>Ge.id===f))==null?void 0:q.name;console.log(`Selected folder for creation: ${f} (${Oe})`)}},[s]),v.useEffect(()=>{be();const q=()=>{window.location.pathname.includes("/synthetic-users")&&!window.location.pathname.includes("/synthetic-users/")&&(console.log("Navigation to synthetic users page detected, refreshing data"),be())},Oe=()=>{console.log("Synthetic users navigation event detected, refreshing data"),be()};console.log("Setting up MutationObserver for body style");const Ge=new MutationObserver(mt=>{mt.forEach(tt=>{tt.type==="attributes"&&tt.attributeName==="style"&&document.body.style.pointerEvents==="none"&&(console.log("MutationObserver detected pointer-events: none, fixing..."),t())})});return Ge.observe(document.body,{attributes:!0,attributeFilter:["style"]}),t(),window.addEventListener("popstate",q),window.addEventListener("syntheticUsersNavigation",Oe),()=>{window.removeEventListener("popstate",q),window.removeEventListener("syntheticUsersNavigation",Oe),console.log("Disconnecting MutationObserver"),Ge.disconnect()}},[]);const ke=async()=>{if(!m.trim()){Fe.error("Please enter a folder name");return}try{const q=await Eo.create({name:m.trim(),persona_ids:[]});await me(),y(""),g(!1),Fe.success(`Folder "${m}" created`)}catch(q){console.error("Error creating folder:",q),Fe.error("Failed to create folder")}},Se=()=>{y(""),g(!1)},qe=q=>{E(q),M(q.name)},st=async()=>{if(!O||!R.trim()){E(null);return}try{await Eo.update(O._id,{name:R.trim()}),await me(),E(null),Fe.success(`Folder renamed to "${R}"`)}catch(q){console.error("Error renaming folder:",q),Fe.error("Failed to rename folder"),E(null)}},Dt=()=>{E(null),M("")},We=q=>{I(q),L(!0)},Je=async()=>{if(V)try{await Eo.delete(V._id),await me(),(f===V._id||f===V.id)&&h(Gn),L(!1),I(null),Fe.success(`Folder "${V.name}" deleted`)}catch(q){console.error("Error deleting folder:",q),Fe.error("Failed to delete folder")}},At=async(q,Oe)=>{var dn;const Ge=q||A,mt=Oe||Q;if(!mt||Ge.size===0)return;const tt=Array.from(Ge),wt=tt.map(dt=>{const _n=b.find(on=>on.id===dt);return(_n==null?void 0:_n._id)||(_n==null?void 0:_n.id)||dt}).filter(Boolean);try{const dt=[],_n=[];if(mt!==Gn)try{await Eo.addPersonasBatch(mt,wt),dt.push(...tt)}catch(nn){console.error("Error adding personas to folder:",nn),_n.push(...tt)}else dt.push(...tt);await Promise.all([me(),be()]);const on=mt===Gn?"All Personas":((dn=w.find(nn=>nn._id===mt||nn.id===mt))==null?void 0:dn.name)||"folder";return dt.length>0&&Fe.success(`Added ${dt.length} persona${dt.length!==1?"s":""} to ${on}`),_n.length>0&&Fe.error(`Failed to add ${_n.length} persona${_n.length!==1?"s":""} to ${on}.`),q||j(new Set),{success:dt.length>0,successCount:dt.length,failureCount:_n.length}}catch(dt){return console.error("Error moving personas to folder:",dt),Fe.error("An unexpected error occurred while adding personas to folder."),{success:!1,error:dt}}},Yt=async()=>{var Ge,mt,tt;if(A.size===0||f===Gn)return;const q=Array.from(A),Oe=q.map(wt=>{const dn=b.find(dt=>dt.id===wt);return(dn==null?void 0:dn._id)||(dn==null?void 0:dn.id)||wt}).filter(Boolean);console.log("Removing personas from folder:",{selectedFolder:f,selectedIds:q,mongoIds:Oe,folderName:(Ge=w.find(wt=>wt._id===f))==null?void 0:Ge.name});try{await Eo.removePersonasBatch(f,Oe),await Promise.all([me(),be()]);const wt=((mt=w.find(dn=>dn._id===f))==null?void 0:mt.name)||"folder";Fe.success(`Removed ${q.length} persona${q.length!==1?"s":""} from ${wt}`),j(new Set)}catch(wt){console.error("Error removing personas from folder:",wt),console.error("Error details:",((tt=wt.response)==null?void 0:tt.data)||wt.message),Fe.error("Failed to remove personas from folder")}},Xn=q=>{j(Oe=>{const Ge=new Set(Oe);return Ge.has(q)?Ge.delete(q):Ge.add(q),Ge})},cr=()=>{A.size===jt.length?j(new Set):j(new Set(jt.map(q=>q.id)))},ct=async()=>{if(A.size===0)return;const q=Array.from(A);j(new Set),k(!1),_(!0);const Oe=[],Ge=[];for(const mt of q)try{const tt=b.find(dn=>dn.id===mt);if(!tt){console.error(`Could not find persona with id: ${mt}`),Ge.push(mt);continue}let wt=mt;tt._id&&(wt=tt._id.toString()),console.log(`Attempting to delete persona: ${wt}`),await Rr.delete(wt),Oe.push(mt)}catch(tt){console.error(`Failed to delete persona ${mt}:`,tt),Ge.push(mt)}x(mt=>mt.filter(tt=>!Oe.includes(tt.id))),await me(),_(!1),setTimeout(()=>{Oe.length>0&&Fe.success(`Successfully deleted ${Oe.length} persona${Oe.length!==1?"s":""}`),Ge.length>0&&Fe.error(`Failed to delete ${Ge.length} persona${Ge.length!==1?"s":""}`),(Oe.length>0||Ge.length>0)&&be()},50)},jt=b.filter(q=>{const Oe=q.name.toLowerCase().includes(u.toLowerCase())||q.occupation.toLowerCase().includes(u.toLowerCase())||q.location.toLowerCase().includes(u.toLowerCase()),Ge=(ne.age.length===0||ne.age.includes(q.age))&&(ne.gender.length===0||ne.gender.includes(q.gender))&&(ne.occupation.length===0||ne.occupation.includes(q.occupation))&&(ne.location.length===0||ne.location.includes(q.location))&&(ne.ethnicity.length===0||q.ethnicity&&ne.ethnicity.includes(q.ethnicity))&&(ne.techSavviness.length===0||q.techSavviness!==void 0&&ne.techSavviness.includes(q.techSavviness<30?"Low (0-30)":q.techSavviness<70?"Medium (31-70)":"High (71-100)"))&&(ne.folderStatus.length===0||ne.folderStatus.includes("hasFolder")&&ne.folderStatus.includes("noFolder")||ne.folderStatus.includes("hasFolder")&&!ne.folderStatus.includes("noFolder")&&(q.folder_ids&&q.folder_ids.length>0||q.folder_id&&q.folder_id!==Gn||q.folderId&&q.folderId!==Gn)||ne.folderStatus.includes("noFolder")&&!ne.folderStatus.includes("hasFolder")&&(!q.folder_ids||q.folder_ids.length===0)&&(!q.folder_id||q.folder_id===Gn)&&(!q.folderId||q.folderId===Gn));return f===Gn||q.folder_ids&&Array.isArray(q.folder_ids)&&q.folder_ids.includes(f)||q.folder_id===f||q.folderId===f?Oe&&Ge:!1}),ot=(q,Oe)=>{const Ge=new Date().toISOString().split("T")[0],mt=q.length;let tt=`# Persona Summary Report - -`;return tt+=`**Folder:** ${Oe} -`,tt+=`**Date:** ${Ge} -`,tt+=`**Total Personas:** ${mt} - -`,mt===0?(tt+=`No personas found in this folder. -`,tt):(q.forEach((wt,dn)=>{tt+=`## ${wt.name} - -`,tt+=`### Demographics -`,tt+=`- **Age:** ${wt.age} -`,tt+=`- **Gender:** ${wt.gender} -`,tt+=`- **Occupation:** ${wt.occupation} -`,tt+=`- **Location:** ${wt.location} - -`,wt.aiSynthesizedBio&&(tt+=`### AI-Synthesized Bio -`,tt+=`${wt.aiSynthesizedBio} - -`),wt.qualitativeAttributes&&wt.qualitativeAttributes.length>0&&(tt+=`### Key Attributes -`,wt.qualitativeAttributes.forEach(dt=>{tt+=`- 🏷️ ${dt} -`}),tt+=` -`),wt.topPersonalityTraits&&wt.topPersonalityTraits.length>0&&(tt+=`### Top Personality Traits -`,wt.topPersonalityTraits.forEach(dt=>{tt+=`- 🧠 ${dt} -`}),tt+=` -`),dn{if(jt.length===0){Fe.error("No personas to download");return}Be(!0)},gn=async()=>{var Ge,mt,tt,wt,dn;const q=f===Gn?"All Personas":((Ge=w.find(dt=>dt.id===f))==null?void 0:Ge.name)||"Unknown Folder",Oe=jt.map(dt=>dt._id||dt.id);console.log(`🤖 Frontend: User selected ${Bt} for persona summary download`),Be(!1),pe(!0),Y(!1),Ue(!1),_(!0);try{Fe.info("Generating persona summaries...",{description:`Processing ${jt.length} persona${jt.length!==1?"s":""} with AI`});const dt=await la.batchGenerateSummaries(Oe,.7,Bt),{summaries:_n,summary_stats:on,errors:nn}=dt.data,lr=new Date().toISOString().split("T")[0],z=`persona-summary-${q.toLowerCase().replace(/\s+/g,"-")}-${lr}.md`;let he=`# Persona Summary Report - -`;he+=`**Folder:** ${q} -`,he+=`**Date:** ${lr} -`,he+=`**Total Personas:** ${on.total_requested} -`,he+=`**Successfully Processed:** ${on.total_successful} -`,on.total_failed>0&&(he+=`**Failed to Process:** ${on.total_failed} -`),he+=` ---- - -`,_n.length===0?he+=`No persona summaries could be generated. -`:_n.forEach((an,Ci)=>{he+=`# ${an.persona_name} - -`,he+=`${an.summary} - -`,Ci<_n.length-1&&(he+=`--- - -`)}),nn&&(((mt=nn.failed_summaries)==null?void 0:mt.length)>0||((tt=nn.missing_personas)==null?void 0:tt.length)>0)&&(he+=` ---- - -## Processing Errors - -`,((wt=nn.failed_summaries)==null?void 0:wt.length)>0&&(he+=`### Failed to Generate Summaries -`,nn.failed_summaries.forEach(an=>{he+=`- **${an.persona_name}** (ID: ${an.persona_id}): ${an.error} -`}),he+=` -`),((dn=nn.missing_personas)==null?void 0:dn.length)>0&&(he+=`### Missing Personas -`,nn.missing_personas.forEach(an=>{he+=`- ID: ${an} -`})));const fe=document.createElement("a"),De=new Blob([he],{type:"text/markdown"});fe.href=URL.createObjectURL(De),fe.download=z,document.body.appendChild(fe),fe.click(),document.body.removeChild(fe),Y(!0);const Nt=Bt==="gpt-4.1"?"GPT-4.1":"Gemini 2.5 Pro";on.total_successful===on.total_requested?Fe.success("Persona summary downloaded",{description:`Successfully processed all ${on.total_successful} persona${on.total_successful!==1?"s":""} from "${q}" using ${Nt}`}):Fe.success("Persona summary downloaded with warnings",{description:`Processed ${on.total_successful} of ${on.total_requested} personas from "${q}" using ${Nt}`})}catch(dt){console.error("Error generating persona summaries:",dt),dt.response?(console.error("Error response data:",dt.response.data),console.error("Error response status:",dt.response.status),console.error("Error response headers:",dt.response.headers)):dt.request?console.error("Error request:",dt.request):console.error("Error message:",dt.message),Ue(!0),Fe.error("AI summary generation failed, creating basic summary",{description:"Using simplified format due to processing error"});try{const _n=new Date().toISOString().split("T")[0],on=`persona-summary-basic-${q.toLowerCase().replace(/\s+/g,"-")}-${_n}.md`,nn=ot(jt,q),lr=document.createElement("a"),z=new Blob([nn],{type:"text/markdown"});lr.href=URL.createObjectURL(z),lr.download=on,document.body.appendChild(lr),lr.click(),document.body.removeChild(lr)}catch{Fe.error("Failed to create persona summary",{description:"Unable to generate summary in any format"})}}finally{_(!1)}};return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(_a,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900",children:"Synthetic Personas"}),a.jsx("p",{className:"text-slate-600 mt-1",children:"Create and manage AI-generated research participants"})]}),a.jsx("div",{className:"mt-4 sm:mt-0 flex flex-col items-end gap-3",children:a.jsxs("div",{className:"flex items-center gap-3",children:[s==="view"&&jt.length>0&&a.jsxs(ee,{variant:"outline",onClick:Ze,disabled:te,className:"flex items-center gap-2 hover-transition",children:[a.jsx(Xc,{className:"h-4 w-4"}),te?"Generating Summary...":"Download Persona Summary"]}),a.jsx(ee,{onClick:()=>o(s==="view"?"create":"view"),className:"hover-transition",children:s==="view"?"Create New Personas":"View All Personas"})]})})]}),s==="view"&&jt.length>0&&te&&a.jsx("div",{className:"mb-6",children:a.jsx(zT,{isActive:te,isComplete:we,hasError:nt,label:"Generating comprehensive persona summaries",onComplete:$,className:"max-w-4xl mx-auto"})}),s==="view"?a.jsx(a.Fragment,{children:a.jsxs("div",{className:"flex flex-col md:flex-row gap-6 mb-6",children:[a.jsxs("div",{className:"w-full md:w-64 space-y-4",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"text-sm font-medium",children:"Folders"}),a.jsx(ee,{variant:"ghost",size:"sm",onClick:()=>g(!0),className:"h-7 w-7 p-0",children:a.jsx(u5,{className:"h-4 w-4"})})]}),a.jsxs("div",{className:"space-y-1",children:[a.jsxs("button",{onClick:()=>h(Gn),className:`w-full flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${f===Gn?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx("span",{children:"All Personas"})]}),w.map(q=>a.jsx("div",{className:"flex items-center justify-between group",children:O&&O._id===q._id?a.jsxs("div",{className:"flex-1 flex items-center px-3 py-2 space-x-2",children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx(Wt,{value:R,onChange:Oe=>M(Oe.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:Oe=>{Oe.key==="Enter"?st():Oe.key==="Escape"&&Dt()}}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:st,className:"h-7 w-7 p-0",children:a.jsx(Es,{className:"h-4 w-4"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:Dt,className:"h-7 w-7 p-0",children:a.jsx(Ri,{className:"h-4 w-4"})})]}):a.jsxs(a.Fragment,{children:[a.jsxs("button",{onClick:()=>h(q._id),className:`flex-1 flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${f===q._id?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx("span",{children:q.name}),a.jsx("span",{className:"text-muted-foreground text-xs ml-auto",children:b.filter(Oe=>Oe.folder_ids&&Oe.folder_ids.includes(q._id)).length})]}),a.jsxs(P1,{children:[a.jsx(k1,{asChild:!0,children:a.jsx(ee,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 opacity-0 group-hover:opacity-100",children:a.jsx(B_,{className:"h-4 w-4"})})}),a.jsxs(Ix,{align:"end",children:[a.jsx(ic,{onClick:()=>qe(q),children:"Rename"}),a.jsx(ic,{className:"text-red-600",onClick:()=>We(q),children:"Delete"})]})]})]})},q._id)),p&&a.jsxs("div",{className:"flex items-center px-3 py-2 space-x-2",children:[a.jsxs("div",{className:"flex-1 flex items-center space-x-2",children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx(Wt,{value:m,onChange:q=>y(q.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:q=>{q.key==="Enter"?ke():q.key==="Escape"&&Se()}})]}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:ke,className:"h-7 w-7 p-0",children:a.jsx(Es,{className:"h-4 w-4"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:Se,className:"h-7 w-7 p-0",children:a.jsx(Ri,{className:"h-4 w-4"})})]})]})]}),a.jsxs("div",{className:"flex-1",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 mb-6",children:[a.jsxs("div",{className:"relative flex-1",children:[a.jsx($E,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Wt,{placeholder:"Search personas by name, occupation, or location...",className:"pl-10 bg-white",value:u,onChange:q=>d(q.target.value)})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[A.size>0&&a.jsxs(P1,{children:[a.jsx(k1,{asChild:!0,children:a.jsxs(ee,{variant:"outline",size:"sm",className:"flex items-center gap-2",onClick:q=>{q.stopPropagation()},children:[a.jsxs("span",{children:["Actions (",A.size,")"]}),a.jsx(B_,{className:"h-4 w-4"})]})}),a.jsxs(Ix,{align:"end",onCloseAutoFocus:q=>{q.preventDefault()},children:[a.jsxs(ic,{className:"flex items-center gap-2 cursor-pointer",onClick:q=>{q.preventDefault(),q.stopPropagation();const Oe=Array.from(A);e("/focus-groups",{state:{mode:"create",preSelectedParticipants:Oe}})},children:[a.jsx(Vo,{className:"h-4 w-4"}),"Create Focus Group with selected Personas"]}),a.jsxs(ic,{className:"flex items-center gap-2 cursor-pointer",onClick:q=>{q.preventDefault(),q.stopPropagation(),k(!0)},children:[a.jsx(qn,{className:"h-4 w-4"}),"Delete"]}),a.jsxs(ic,{className:"flex items-center gap-2 cursor-pointer",onClick:q=>{q.preventDefault(),q.stopPropagation(),X(!0)},children:[a.jsx(ds,{className:"h-4 w-4"}),"Move to folder"]}),f!==Gn&&a.jsxs(ic,{className:"flex items-center gap-2 cursor-pointer",onClick:q=>{q.preventDefault(),q.stopPropagation(),Yt()},children:[a.jsx(Ri,{className:"h-4 w-4"}),"Remove from ",((Os=w.find(q=>q._id===f))==null?void 0:Os.name)||"folder"]})]})]}),a.jsxs(ee,{variant:"outline",className:"flex items-center gap-2",onClick:()=>U(!0),children:[a.jsx(ME,{className:"h-4 w-4"}),a.jsxs("span",{children:["Filter",Object.values(ne).some(q=>q.length>0)?` (${Object.values(ne).reduce((q,Oe)=>q+Oe.length,0)})`:""]})]})]})]}),a.jsxs("div",{className:"glass-panel rounded-xl p-6 mb-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Dr,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:f===Gn?"Your Synthetic Persona Library":((ea=w.find(q=>q._id===f))==null?void 0:ea.name)||"Personas"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:["(",jt.length,")"]})]}),jt.length>0&&a.jsxs("div",{className:"flex items-center",children:[a.jsx($l,{id:"select-all",checked:jt.length>0&&A.size===jt.length,onCheckedChange:cr,className:"mr-2"}),a.jsx("label",{htmlFor:"select-all",className:"text-sm cursor-pointer",children:"Select All"})]})]}),jt.length>0?a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-1 lg:grid-cols-2 xl:grid-cols-2 gap-4",children:jt.map(q=>a.jsx("div",{className:"relative group",children:a.jsx(fT,{user:q,selected:A.has(q.id),onClick:()=>B(q),onSelectionToggle:Oe=>{Oe.stopPropagation(),Xn(q.id)},showAddToFolderButton:!1,folders:w})},q.id))}):a.jsx("div",{className:"text-center py-12",children:a.jsx("p",{className:"text-muted-foreground",children:"No personas found matching your criteria."})})]}),a.jsx(O1,{open:P,onOpenChange:q=>{k(q||!1)},children:a.jsxs(Mx,{onInteractOutside:q=>{q.preventDefault()},children:[a.jsxs(Dx,{children:[a.jsx(Lx,{children:"Delete Personas"}),a.jsxs(Fx,{children:["Are you sure you want to delete ",A.size," selected persona",A.size!==1?"s":"","? This action cannot be undone."]})]}),a.jsxs($x,{children:[a.jsx(Bx,{onClick:()=>{setTimeout(()=>j(new Set),50)},children:"Cancel"}),a.jsx(Ux,{onClick:ct,className:"bg-red-600 hover:bg-red-700",children:"Delete"})]})]})}),a.jsx(O1,{open:G,onOpenChange:q=>{L(q||!1)},children:a.jsxs(Mx,{children:[a.jsxs(Dx,{children:[a.jsx(Lx,{children:"Delete Folder"}),a.jsxs(Fx,{children:['Are you sure you want to delete the folder "',V==null?void 0:V.name,'"?',a.jsx("br",{}),a.jsx("br",{}),a.jsx("strong",{children:"Note:"})," Any personas in this folder will not be deleted - they will still be available under 'All Personas' after folder deletion."]})]}),a.jsxs($x,{children:[a.jsx(Bx,{children:"Cancel"}),a.jsx(Ux,{onClick:Je,className:"bg-red-600 hover:bg-red-700",children:"Delete"})]})]})}),a.jsx(Jl,{open:D,onOpenChange:q=>{X(q||!1)},children:a.jsxs($c,{className:"z-50",children:[a.jsxs(Lc,{children:[a.jsx(Uc,{children:"Move to Folder"}),a.jsxs(Zl,{children:["Choose a folder to move ",A.size," selected persona",A.size!==1?"s":""," to."]})]}),a.jsx("div",{className:"py-4",children:a.jsxs(I1,{value:Q||"",onValueChange:J,className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(qh,{value:Gn,id:"folder-all"}),a.jsxs(hs,{htmlFor:"folder-all",className:"flex items-center gap-2",children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx("span",{children:"All Personas (Remove from folders)"})]})]}),w.map(q=>a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(qh,{value:q._id,id:`folder-${q._id}`}),a.jsxs(hs,{htmlFor:`folder-${q._id}`,className:"flex items-center gap-2",children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx("span",{children:q.name})]})]},q._id))]})}),a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",onClick:q=>{q.preventDefault(),q.stopPropagation(),X(!1),J(null)},children:"Cancel"}),a.jsx(ee,{onClick:async q=>{if(q.preventDefault(),q.stopPropagation(),!Q)return;const Oe=new Set(A),Ge=Q;if(X(!1),J(null),Ge&&Oe.size>0){_(!0);try{await At(Oe,Ge)}finally{_(!1),j(new Set)}}},disabled:!Q,children:"Move"})]})]})}),a.jsx(Jl,{open:ye,onOpenChange:q=>{q?(U(q),ce({...ne})):(A.size>0&&j(new Set),U(!1))},children:a.jsxs($c,{className:"max-w-4xl max-h-[80vh] flex flex-col",onInteractOutside:q=>{q.preventDefault()},children:[a.jsx("div",{className:"sticky top-0 bg-background border-b shadow-sm pb-4 z-10",children:a.jsxs(Lc,{children:[a.jsx(Uc,{children:"Filter Personas"}),a.jsx(Zl,{children:"Select attributes to filter personas by. Multiple selections within a category use OR logic, different categories use AND logic. Filter options dynamically update to show only relevant values."})]})}),a.jsxs("div",{className:"flex-1 overflow-y-auto px-1 py-4 space-y-6",children:[Object.values(F).some(q=>q.length>0)&&a.jsx("div",{className:"bg-muted/30 p-3 rounded-md",children:a.jsxs("p",{className:"text-sm text-muted-foreground",children:[Object.values(F).reduce((q,Oe)=>q+Oe.length,0)," active filters"]})}),a.jsx("div",{className:"space-y-4",children:(()=>{const q=tt=>{const wt={...F};wt[tt]=[];const dn=b.filter(dt=>Object.entries(wt).every(([_n,on])=>{if(on.length===0)return!0;const nn=_n;if(nn==="techSavviness"&&dt.techSavviness!==void 0){const lr=dt.techSavviness<30?"Low (0-30)":dt.techSavviness<70?"Medium (31-70)":"High (71-100)";return on.includes(lr)}else{if(nn==="age"&&dt.age)return on.includes(dt.age);if(nn==="gender"&&dt.gender)return on.includes(dt.gender);if(nn==="occupation"&&dt.occupation)return on.includes(dt.occupation);if(nn==="location"&&dt.location)return on.includes(dt.location);if(nn==="ethnicity"&&dt.ethnicity)return on.includes(dt.ethnicity)}return!0}));return K(dn)},Oe=Object.values(F).every(tt=>tt.length===0),Ge=K(b),mt=(tt,wt,dn,dt=1)=>{const _n=F[wt],on=[...new Set([...dn,..._n])].sort();return on.length===0?null:a.jsxs("div",{className:"mb-6",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:tt}),a.jsx("div",{className:`grid grid-cols-1 ${dt===2?"sm:grid-cols-2":dt===3?"sm:grid-cols-2 md:grid-cols-3":""} gap-2`,children:on.map(nn=>{const lr=F[wt].includes(nn),z=dn.includes(nn);return a.jsxs("div",{className:`flex items-center space-x-2 ${!z&&!lr?"opacity-50":""}`,children:[a.jsx($l,{id:`${wt}-${nn}`,checked:lr,onCheckedChange:()=>re(wt,nn),disabled:!z&&!lr}),a.jsxs(hs,{htmlFor:`${wt}-${nn}`,className:"truncate overflow-hidden",children:[nn,lr&&!z&&a.jsx("span",{className:"ml-1 text-xs text-muted-foreground",children:"(no matches)"})]})]},nn)})})]})};return a.jsxs(a.Fragment,{children:[mt("Gender","gender",Oe?Ge.gender:q("gender").gender,3),mt("Age","age",Oe?Ge.age:q("age").age,3),mt("Ethnicity","ethnicity",Oe?Ge.ethnicity:q("ethnicity").ethnicity,2),mt("Location","location",Oe?Ge.location:q("location").location,2),mt("Occupation","occupation",Oe?Ge.occupation:q("occupation").occupation,2),mt("Tech Savviness","techSavviness",Oe?Ge.techSavviness:q("techSavviness").techSavviness,3),a.jsxs("div",{className:"mb-6",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:"Folder Assignment"}),a.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx($l,{id:"folderStatus-hasFolder",checked:F.folderStatus.includes("hasFolder"),onCheckedChange:()=>re("folderStatus","hasFolder")}),a.jsx(hs,{htmlFor:"folderStatus-hasFolder",className:"truncate overflow-hidden",children:"Has folder assignment"})]}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx($l,{id:"folderStatus-noFolder",checked:F.folderStatus.includes("noFolder"),onCheckedChange:()=>re("folderStatus","noFolder")}),a.jsx(hs,{htmlFor:"folderStatus-noFolder",className:"truncate overflow-hidden",children:"No folder assignment"})]})]})]}),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-6"})]})})()})]}),a.jsx("div",{className:"sticky bottom-0 bg-background border-t shadow-[0_-2px_4px_rgba(0,0,0,0.05)] pt-4 z-10",children:a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",onClick:H,children:"Reset"}),a.jsx(ee,{onClick:Z,children:"Apply Filters"})]})})]})}),a.jsx(Jl,{open:at,onOpenChange:Be,children:a.jsxs($c,{children:[a.jsxs(Lc,{children:[a.jsx(Uc,{children:"Select AI Model for Summary Generation"}),a.jsx(Zl,{children:"Choose which AI model to use for generating persona summaries"})]}),a.jsx("div",{className:"py-4",children:a.jsxs(I1,{value:Bt,onValueChange:N,className:"space-y-3",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(qh,{value:"gemini-2.5-pro",id:"download-gemini"}),a.jsx(hs,{htmlFor:"download-gemini",className:"text-sm font-medium",children:"Gemini 2.5 Pro"})]}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(qh,{value:"gpt-4.1",id:"download-gpt"}),a.jsx(hs,{htmlFor:"download-gpt",className:"text-sm font-medium",children:"GPT-4.1"})]})]})}),a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",onClick:()=>Be(!1),children:"Cancel"}),a.jsx(ee,{onClick:gn,children:"Generate Summary"})]})]})})]})]})}):a.jsxs(fl,{defaultValue:"ai",onValueChange:q=>l(q),children:[a.jsxs(Va,{className:"grid w-full grid-cols-2 mb-6",children:[a.jsx(pn,{value:"ai",children:"AI Recruiter"}),a.jsx(pn,{value:"manual",children:"Manual Creation"})]}),a.jsxs(mn,{value:"ai",children:[console.log(`Rendering AIRecruiter with targetFolderId: ${f!==Gn?f:"null"}`),console.log("Current folders:",w.map(q=>({id:q.id,name:q.name}))),a.jsx(gce,{targetFolderId:f!==Gn?f:null,targetFolderName:f!==Gn?(ta=w.find(q=>q.id===f))==null?void 0:ta.name:null})]}),a.jsx(mn,{value:"manual",children:a.jsx(ole,{targetFolderId:f!==Gn?f:null,targetFolderName:f!==Gn?(yl=w.find(q=>q.id===f))==null?void 0:yl.name:null})})]})]})]})},VT=T.memo(t=>{const{discussionGuide:e,moderatorStatus:n,onSectionSelect:r,onSetPosition:i,onSave:s,showProgress:o=!0,collapsible:c=!0,defaultExpanded:l=!1,className:u,onDownload:d,isDownloading:f=!1,focusGroupId:h,onEditingChange:p}=t,g=typeof e=="string",m=v.useMemo(()=>g?null:e,[e,g]),[y,b]=v.useState(new Set),[x,w]=v.useState(null),[S,C]=v.useState(null),[_,A]=v.useState(!1),[j,P]=v.useState(null),[k,O]=v.useState("");v.useEffect(()=>{p&&p(!!x)},[x,p]),v.useEffect(()=>{if(x&&m){const N=m.sections.find($=>$.id===x);N&&!S&&C({...N})}},[m,x,S]);const E=N=>{w(N.id),C({...N}),b($=>new Set($).add(N.id))},R=()=>{w(null),C(null)},M=v.useCallback(N=>{C($=>$&&{...$,...N})},[]),G=v.useCallback((N,$,B)=>{C(K=>{if(!K)return K;const Z={...K};if(B==="question"&&Z.questions){if(Z.questions.findIndex(re=>re.id===N)!==-1)return Z.questions=Z.questions.map(re=>re.id===N?{...re,...$}:re),Z}else if(B==="activity"&&Z.activities&&Z.activities.findIndex(re=>re.id===N)!==-1)return Z.activities=Z.activities.map(re=>re.id===N?{...re,...$}:re),Z;return Z.subsections&&(Z.subsections=Z.subsections.map(H=>{const re={...H};return B==="question"&&re.questions?re.questions.findIndex(be=>be.id===N)!==-1&&(re.questions=re.questions.map(be=>be.id===N?{...be,...$}:be)):B==="activity"&&re.activities&&re.activities.findIndex(be=>be.id===N)!==-1&&(re.activities=re.activities.map(be=>be.id===N?{...be,...$}:be)),re})),Z})},[]),L=N=>{if(!S)return;const $={id:`${N}-${Date.now()}`,content:`New ${N}`,type:N==="question"?"open_ended":"discussion",time_limit:void 0},B={...S};N==="question"?B.questions=[...B.questions||[],$]:B.activities=[...B.activities||[],$],C(B)},V=(N,$)=>{if(!S||!S.subsections)return;const B={id:`${$}-${Date.now()}`,content:`New ${$}`,type:$==="question"?"open_ended":"discussion",time_limit:void 0},K=[...S.subsections],Z={...K[N]};$==="question"?Z.questions=[...Z.questions||[],B]:Z.activities=[...Z.activities||[],B],K[N]=Z,C(H=>H&&{...H,subsections:K})},I=()=>{if(!S)return;const N={id:`subsection-${Date.now()}`,title:"New Subsection",questions:[],activities:[]},$=[...S.subsections||[],N];C(B=>B&&{...B,subsections:$})},D=N=>{if(!S||!S.subsections)return;const $=S.subsections.filter((B,K)=>K!==N);C(B=>B&&{...B,subsections:$})},X=(N,$)=>{var K,Z;if(!S)return;const B={...S};$==="question"?B.questions=(K=B.questions)==null?void 0:K.filter(H=>H.id!==N):B.activities=(Z=B.activities)==null?void 0:Z.filter(H=>H.id!==N),C(B)},Q=async()=>{if(!(!S||!m||!s)){A(!0);try{const N={...m,sections:m.sections.map($=>$.id===x?S:$)};await s(N),R(),se.success("Section updated successfully")}catch(N){console.error("Error saving section:",N),se.error("Failed to save section")}finally{A(!1)}}},J=N=>{b($=>{const B=new Set($);return B.has(N)?B.delete(N):B.add(N),B})};v.useEffect(()=>{m&&m.sections.length>0&&b(l?new Set(m.sections.map(N=>N.id)):new Set)},[l,m]);const ye=(N,$,B,K)=>{if(!n||n.legacy_format)return null;const Z=n.moderator_position;if(Z.section_index!==N)return Z.section_index>N?"completed":null;if(K!==void 0){if(Z.subsection_index===void 0)return null;if(Z.subsection_index!==K)return Z.subsection_index>K?"completed":null}else if(Z.subsection_index!==void 0)return"completed";return Z.item_type!==B?B==="activity"&&Z.item_type==="question"?"completed":null:Z.item_index===$?"current":Z.item_index>$?"completed":null},U=(N,$)=>N===`New ${$}`,ne=v.useCallback((N,$,B)=>{if($<0||$>=N.length||B<0||B>=N.length)return N;const K=[...N],[Z]=K.splice($,1);return K.splice(B,0,Z),K},[]),ue=v.useCallback((N,$)=>$>0,[]),F=v.useCallback((N,$)=>${if(!S||!S.subsections)return;const $=S.subsections;if(ue($,N)){const B=ne($,N,N-1);C(K=>K&&{...K,subsections:B})}},[S,ue,ne]),te=v.useCallback(N=>{if(!S||!S.subsections)return;const $=S.subsections;if(F($,N)){const B=ne($,N,N+1);C(K=>K&&{...K,subsections:B})}},[S,F,ne]),pe=v.useCallback((N,$)=>{P(N),O($)},[]),we=v.useCallback(()=>{P(null),O("")},[]),Y=v.useCallback(()=>{if(!j||!S||!S.subsections)return;const N=S.subsections.map($=>$.id===j?{...$,title:k.trim()}:$);C($=>$&&{...$,subsections:N}),we()},[j,S,k,we]),nt=v.useCallback((N,$,B,K)=>{if(!S)return;const Z=$==="question"?"questions":"activities";if(K!==void 0){const H=S.subsections||[];if(K>=0&&KSe&&{...Se,subsections:ke})}}}else{const H=S[Z]||[];if(ue(H,B)){const re=ne(H,B,B-1);C(me=>me&&{...me,[Z]:re})}}},[S,ue,ne]),Ue=v.useCallback((N,$,B,K)=>{if(!S)return;const Z=$==="question"?"questions":"activities";if(K!==void 0){const H=S.subsections||[];if(K>=0&&KSe&&{...Se,subsections:ke})}}}else{const H=S[Z]||[];if(F(H,B)){const re=ne(H,B,B+1);C(me=>me&&{...me,[Z]:re})}}},[S,F,ne]),at=(N,$,B,K,Z)=>{var Dt,We,Je,At,Yt,Xn,cr,ct,jt;const H=m==null?void 0:m.sections[$],re=x===(H==null?void 0:H.id),me=ye($,B,K,Z),be=me==="current",ke=me==="completed",qe=(ot=>{var Ze,gn;return((gn=(Ze=ot.metadata)==null?void 0:Ze.visual_asset)==null?void 0:gn.filename)||null})(N),st=U(N.content,K);return re?a.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg border bg-white border-blue-200",children:[a.jsxs("div",{className:"flex-shrink-0 flex flex-col gap-1",children:[a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>nt(N.id,K,B,Z),disabled:(()=>{if(Z!==void 0){const Ze=((S==null?void 0:S.subsections)||[])[Z],gn=(Ze==null?void 0:Ze[K==="question"?"questions":"activities"])||[];return!ue(gn,B)}else{const ot=(S==null?void 0:S[K==="question"?"questions":"activities"])||[];return!ue(ot,B)}})(),className:"h-6 w-6 p-0",title:"Move item up",children:a.jsx(uu,{className:"h-3 w-3"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>Ue(N.id,K,B,Z),disabled:(()=>{if(Z!==void 0){const Ze=((S==null?void 0:S.subsections)||[])[Z],gn=(Ze==null?void 0:Ze[K==="question"?"questions":"activities"])||[];return!F(gn,B)}else{const ot=(S==null?void 0:S[K==="question"?"questions":"activities"])||[];return!F(ot,B)}})(),className:"h-6 w-6 p-0",title:"Move item down",children:a.jsx(Ra,{className:"h-3 w-3"})})]}),a.jsxs("div",{className:"flex-1 min-w-0 space-y-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Hn,{variant:"outline",className:"text-xs",children:K==="activity"?a.jsxs(a.Fragment,{children:[a.jsx(ha,{className:"h-3 w-3 mr-1"}),typeof N.type=="string"?N.type.replace("_"," "):String(N.type||"unknown")]}):a.jsxs(a.Fragment,{children:[a.jsx(jo,{className:"h-3 w-3 mr-1"}),typeof N.type=="string"?N.type.replace("_"," "):String(N.type||"unknown")]})}),N.time_limit&&a.jsxs("div",{className:"flex items-center gap-1 text-xs text-slate-500",children:[a.jsx(Kp,{className:"h-3 w-3"}),a.jsx(Wt,{type:"number",value:N.time_limit,onChange:ot=>G(N.id,{time_limit:parseInt(ot.target.value)||void 0},K),className:"w-16 h-6 text-xs",placeholder:"min"}),"min"]})]}),a.jsx(ht,{value:st?"":N.content,onChange:ot=>G(N.id,{content:ot.target.value},K),placeholder:st?N.content:"Enter content...",className:"min-h-[60px]"}),K==="question"&&a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium text-slate-700 mb-1 block",children:"Probe Questions (one per line)"}),a.jsx(ht,{value:((Dt=N.probes)==null?void 0:Dt.join(` -`))||"",onChange:ot=>{const Ze=ot.target.value.trim()?ot.target.value.split(` -`).filter(gn=>gn.trim()):[];G(N.id,{probes:Ze},K)},placeholder:"Enter probe questions, one per line...",className:"min-h-[40px]"})]}),(((We=N.metadata)==null?void 0:We.image_url)||((Je=N.metadata)==null?void 0:Je.image_id)||qe)&&a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(op,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Visual Aid"})]}),(At=N.metadata)!=null&&At.image_url?a.jsx("img",{src:N.metadata.image_url,alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):(Yt=N.metadata)!=null&&Yt.image_id&&h?a.jsx("img",{src:pt.getAssetUrl(h,N.metadata.image_id),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):qe&&h?a.jsx("img",{src:pt.getAssetUrl(h,qe),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):null]})]}),a.jsx("div",{className:"flex-shrink-0",children:a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>X(N.id,K),className:"h-8 w-8 p-0 text-red-600 hover:text-red-700",children:a.jsx(qn,{className:"h-3 w-3"})})})]},`edit-item-${N.id}`):a.jsxs("div",{className:Pe("flex items-start gap-3 p-3 rounded-lg border transition-colors",be&&"bg-blue-50 border-blue-200",ke&&"bg-green-50 border-green-200",!be&&!ke&&"bg-slate-50 border-slate-200",r&&"cursor-pointer hover:bg-slate-100"),onClick:()=>r==null?void 0:r(m.sections[$].id,N.id),children:[a.jsx("div",{className:"flex-shrink-0 mt-1",children:ke?a.jsx(IE,{className:"h-4 w-4 text-green-600"}):be?a.jsx(l5,{className:"h-4 w-4 text-blue-600"}):a.jsx(RE,{className:"h-4 w-4 text-slate-400"})}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[a.jsx(Hn,{variant:"outline",className:"text-xs whitespace-nowrap",children:K==="activity"?a.jsxs(a.Fragment,{children:[a.jsx(ha,{className:"h-3 w-3 mr-1"}),typeof N.type=="string"?N.type.replace("_"," "):String(N.type||"unknown")]}):a.jsxs(a.Fragment,{children:[a.jsx(jo,{className:"h-3 w-3 mr-1"}),typeof N.type=="string"?N.type.replace("_"," "):String(N.type||"unknown")]})}),N.time_limit&&a.jsxs("div",{className:"flex items-center gap-1 text-xs text-slate-500 whitespace-nowrap",children:[a.jsx(Kp,{className:"h-3 w-3"}),N.time_limit," min"]}),i&&a.jsxs(ee,{size:"sm",variant:"ghost",onClick:ot=>{ot.stopPropagation();const Ze=m.sections[$],gn=K==="activity"?`Activity ${B+1}`:`Question ${B+1}`;i(Ze.id,N.id,N.content,Ze.title,gn,K,N.metadata)},className:"h-6 px-2 ml-auto",children:[a.jsx(Xv,{className:"h-3 w-3 mr-1"}),"Set Position"]})]}),a.jsx("p",{className:"text-sm text-slate-700 whitespace-pre-wrap",children:N.content}),N.probes&&N.probes.length>0&&a.jsxs("div",{className:"mt-2 pl-4 border-l-2 border-slate-200",children:[a.jsx("p",{className:"text-xs font-medium text-slate-600 mb-1",children:"Probe Questions:"}),a.jsx("ul",{className:"space-y-1",children:N.probes.map((ot,Ze)=>a.jsxs("li",{className:"text-xs text-slate-600",children:["• ",ot]},Ze))})]}),(((Xn=N.metadata)==null?void 0:Xn.image_url)||((cr=N.metadata)==null?void 0:cr.image_id)||qe)&&a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(op,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Visual Aid"})]}),(ct=N.metadata)!=null&&ct.image_url?a.jsx("img",{src:N.metadata.image_url,alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):(jt=N.metadata)!=null&&jt.image_id&&h?a.jsx("img",{src:pt.getAssetUrl(h,N.metadata.image_id),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):qe&&h?a.jsx("img",{src:pt.getAssetUrl(h,qe),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):null]})]})]},N.id)},Be=(N,$)=>{var re,me,be,ke;const B=y.has(N.id),K=x===N.id,Z=K?S:N,H=(n==null?void 0:n.moderator_position.section_index)===$;return a.jsxs("div",{className:Pe("border rounded-lg overflow-hidden transition-colors",H&&"border-blue-500 shadow-md",!H&&"border-slate-200"),children:[a.jsxs("div",{className:Pe("px-4 py-3 flex items-center justify-between cursor-pointer hover:bg-slate-50 transition-colors",H&&"bg-blue-50"),onClick:()=>!K&&J(N.id),children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("div",{className:"transition-transform",style:{transform:B?"rotate(90deg)":"rotate(0deg)"},children:a.jsx(us,{className:"h-5 w-5 text-slate-500"})}),a.jsx("h3",{className:"font-semibold text-slate-800",children:K?a.jsx(Wt,{value:Z.title,onChange:Se=>M({title:Se.target.value}),onClick:Se=>Se.stopPropagation(),className:"font-semibold"}):Z.title}),H&&a.jsx(Hn,{variant:"default",className:"text-xs",children:"Current"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[s&&!K&&a.jsx(ee,{size:"sm",variant:"ghost",onClick:Se=>{Se.stopPropagation(),E(N)},className:"h-8 px-2",children:a.jsx(V_,{className:"h-3 w-3"})}),K&&a.jsxs("div",{className:"flex items-center gap-2",onClick:Se=>Se.stopPropagation(),children:[a.jsxs(ee,{size:"sm",variant:"default",onClick:Q,disabled:_,className:"h-8",children:[_?a.jsx(Js,{className:"h-3 w-3 animate-spin"}):a.jsx(DE,{className:"h-3 w-3"}),a.jsx("span",{className:"ml-1",children:"Save"})]}),a.jsxs(ee,{size:"sm",variant:"ghost",onClick:R,disabled:_,className:"h-8",children:[a.jsx(Ri,{className:"h-3 w-3"}),a.jsx("span",{className:"ml-1",children:"Cancel"})]})]})]})]}),B&&a.jsxs("div",{className:"px-4 py-3 border-t border-slate-200 space-y-4",children:[Z.content&&a.jsx("div",{className:"prose prose-sm max-w-none",children:K?a.jsx(ht,{value:Z.content,onChange:Se=>M({content:Se.target.value}),placeholder:"Section introduction or context...",className:"min-h-[80px] w-full"}):a.jsx("p",{className:"text-slate-700",children:Z.content})}),Z.activities&&Z.activities.length>0||K?a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h5",{className:"font-medium text-slate-700 flex items-center gap-2",children:[a.jsx(ha,{className:"h-4 w-4"}),"Activities"]}),K&&a.jsxs(ee,{size:"sm",variant:"outline",onClick:()=>L("activity"),className:"h-7",children:[a.jsx(ha,{className:"h-3 w-3 mr-1"}),"Add Activity"]})]}),a.jsx("div",{className:"space-y-2",children:(re=Z.activities)==null?void 0:re.map((Se,qe)=>at(Se,$,qe,"activity"))})]}):null,Z.questions&&Z.questions.length>0||K?a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h5",{className:"font-medium text-slate-700 flex items-center gap-2",children:[a.jsx(jo,{className:"h-4 w-4"}),"Questions"]}),K&&a.jsxs(ee,{size:"sm",variant:"outline",onClick:()=>L("question"),className:"h-7",children:[a.jsx(jo,{className:"h-3 w-3 mr-1"}),"Add Question"]})]}),a.jsx("div",{className:"space-y-2",children:(me=Z.questions)==null?void 0:me.map((Se,qe)=>at(Se,$,qe,"question"))})]}):null,K&&a.jsx("div",{className:"space-y-2",children:a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h5",{className:"font-medium text-slate-700 flex items-center gap-2",children:[a.jsx(Xv,{className:"h-4 w-4"}),"Subsections"]}),a.jsxs(ee,{size:"sm",variant:"outline",onClick:I,className:"h-7",children:[a.jsx(Xv,{className:"h-3 w-3 mr-1"}),"Add Subsection"]})]})}),Z.subsections&&Z.subsections.length>0&&a.jsx("div",{className:"space-y-3 ml-4",children:Z.subsections.map((Se,qe)=>{var st,Dt;return a.jsxs("div",{className:"border-l-2 border-slate-200 pl-4",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[K&&a.jsxs("div",{className:"flex flex-col gap-1",children:[a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>ce(qe),disabled:!ue(Z.subsections||[],qe),className:"h-7 w-7 p-0",title:"Move subsection up",children:a.jsx(uu,{className:"h-4 w-4"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>te(qe),disabled:!F(Z.subsections||[],qe),className:"h-7 w-7 p-0",title:"Move subsection down",children:a.jsx(Ra,{className:"h-4 w-4"})})]}),K&&j===Se.id?a.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[a.jsx(Wt,{value:k,onChange:We=>O(We.target.value),className:"flex-1",onKeyDown:We=>{We.key==="Enter"?Y():We.key==="Escape"&&we()},autoFocus:!0}),a.jsx(ee,{size:"sm",onClick:Y,children:a.jsx(Es,{className:"h-3 w-3"})}),a.jsx(ee,{size:"sm",variant:"outline",onClick:we,children:a.jsx(Ri,{className:"h-3 w-3"})})]}):a.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[a.jsx("h5",{className:Pe("font-medium text-slate-700",K&&"cursor-pointer hover:text-blue-600"),onClick:()=>K&&pe(Se.id,Se.title),children:Se.title}),K&&a.jsxs(a.Fragment,{children:[a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>pe(Se.id,Se.title),className:"h-6 w-6 p-0 opacity-60 hover:opacity-100",children:a.jsx(V_,{className:"h-3 w-3"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>D(qe),className:"h-6 w-6 p-0 opacity-60 hover:opacity-100 text-red-600 hover:text-red-700",title:"Delete subsection",children:a.jsx(qn,{className:"h-3 w-3"})})]})]})]}),Se.questions&&Se.questions.length>0||K?a.jsxs("div",{className:"space-y-2 mb-3",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h6",{className:"text-sm font-medium text-slate-600 flex items-center gap-1",children:[a.jsx(jo,{className:"h-3 w-3"}),"Questions"]}),K&&a.jsxs(ee,{size:"sm",variant:"outline",onClick:()=>V(qe,"question"),className:"h-6",children:[a.jsx(jo,{className:"h-3 w-3 mr-1"}),"Add Question"]})]}),a.jsx("div",{className:"space-y-2",children:(st=Se.questions)==null?void 0:st.map((We,Je)=>at(We,$,Je,"question",qe))})]}):null,Se.activities&&Se.activities.length>0||K?a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h6",{className:"text-sm font-medium text-slate-600 flex items-center gap-1",children:[a.jsx(ha,{className:"h-3 w-3"}),"Activities"]}),K&&a.jsxs(ee,{size:"sm",variant:"outline",onClick:()=>V(qe,"activity"),className:"h-6",children:[a.jsx(ha,{className:"h-3 w-3 mr-1"}),"Add Activity"]})]}),a.jsx("div",{className:"space-y-2",children:(Dt=Se.activities)==null?void 0:Dt.map((We,Je)=>at(We,$,Je,"activity",qe))})]}):null]},Se.id)})}),(((be=N.metadata)==null?void 0:be.image_url)||((ke=N.metadata)==null?void 0:ke.image_id))&&a.jsxs("div",{className:"mt-4",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(op,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Visual Aid"})]}),N.metadata.image_url?a.jsx("img",{src:N.metadata.image_url,alt:"Visual aid for section",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):N.metadata.image_id&&h?a.jsx("img",{src:pt.getAssetUrl(h,N.metadata.image_id),alt:"Visual aid for section",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):null]})]})]},N.id)};if(g)return a.jsxs("div",{className:Pe("space-y-4",u),children:[o&&n&&a.jsxs("div",{className:"mb-4",children:[a.jsxs("div",{className:"flex items-center justify-between text-sm text-slate-600 mb-2",children:[a.jsx("span",{children:"Progress"}),a.jsxs("span",{children:[Math.round(n.progress),"%"]})]}),a.jsx("div",{className:"w-full bg-slate-200 rounded-full h-2",children:a.jsx("div",{className:"bg-blue-600 h-2 rounded-full transition-all",style:{width:`${n.progress}%`}})})]}),a.jsxs("div",{className:"bg-white rounded-lg border border-slate-200 p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsx("h2",{className:"text-xl font-semibold text-slate-800",children:"Discussion Guide"}),d&&a.jsxs(ee,{size:"sm",variant:"outline",onClick:d,disabled:f,children:[f?a.jsx(Js,{className:"h-4 w-4 animate-spin mr-2"}):a.jsx(Xc,{className:"h-4 w-4 mr-2"}),"Download"]})]}),a.jsx("div",{className:"prose prose-sm max-w-none",children:a.jsx("pre",{className:"whitespace-pre-wrap text-sm text-slate-700 font-sans",children:e})}),n&&a.jsxs("div",{className:"mt-6 p-4 bg-blue-50 rounded-lg border border-blue-200",children:[a.jsx("h3",{className:"font-medium text-blue-900 mb-2",children:"Current Position"}),a.jsx("p",{className:"text-sm text-blue-800",children:n.current_section}),n.current_item&&a.jsx("p",{className:"text-sm text-blue-700 mt-1",children:n.current_item})]})]})]});if(!m)return a.jsx("div",{className:Pe("bg-slate-50 rounded-lg p-8 text-center",u),children:a.jsx("p",{className:"text-slate-600",children:"No discussion guide available"})});const Bt=a.jsxs("div",{className:"space-y-4",children:[o&&n&&a.jsxs("div",{className:"mb-4",children:[a.jsxs("div",{className:"flex items-center justify-between text-sm text-slate-600 mb-2",children:[a.jsx("span",{children:"Overall Progress"}),a.jsxs("span",{children:[Math.round(n.progress),"%"]})]}),a.jsx("div",{className:"w-full bg-slate-200 rounded-full h-2",children:a.jsx("div",{className:"bg-blue-600 h-2 rounded-full transition-all",style:{width:`${n.progress}%`}})}),a.jsxs("div",{className:"flex items-center justify-between text-xs text-slate-500 mt-2",children:[a.jsxs("span",{children:["Section ",n.moderator_position.section_index+1," of ",n.total_sections]}),a.jsxs("span",{children:[Math.round(n.section_progress),"% of current section"]})]})]}),a.jsx("div",{className:"space-y-3",children:m.sections.map((N,$)=>Be(N,$))})]});return c?a.jsxs(Ag,{defaultOpen:l,className:u,children:[a.jsx(jg,{asChild:!0,children:a.jsxs("div",{className:"flex items-center justify-between p-4 bg-white rounded-lg border border-slate-200 cursor-pointer hover:bg-slate-50 transition-colors",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(us,{className:"h-5 w-5 text-slate-500 transition-transform data-[state=open]:rotate-90"}),a.jsx("h2",{className:"text-lg font-semibold text-slate-800",children:m.title||"Discussion Guide"}),a.jsxs(Hn,{variant:"outline",className:"text-xs",children:[m.total_duration," min"]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[n&&a.jsxs(Hn,{variant:n.progress===100?"success":"default",className:"text-xs",children:[Math.round(n.progress),"% Complete"]}),d&&a.jsx(ee,{size:"sm",variant:"outline",onClick:N=>{N.stopPropagation(),d()},disabled:f,children:f?a.jsx(Js,{className:"h-4 w-4 animate-spin"}):a.jsx(Xc,{className:"h-4 w-4"})})]})]})}),a.jsx(Eg,{className:"mt-4",children:Bt})]}):a.jsx("div",{className:u,children:Bt})});VT.displayName="DiscussionGuideViewer";const xl="all",ode=Ie.object({researchBrief:Ie.string().min(10,{message:"Research brief must be at least 10 characters."}),focusGroupName:Ie.string().min(3,{message:"Focus group name must be at least 3 characters."}),discussionTopics:Ie.string().min(10,{message:"Discussion topics are required."}),duration:Ie.string().min(1,{message:"Duration is required."}),llm_model:Ie.string().optional(),reasoning_effort:Ie.string().optional(),verbosity:Ie.string().optional()});function ade({draftToEdit:t,onDraftSaved:e,preSelectedParticipants:n=[]}={}){console.log("FocusGroupModerator component rendering, draftToEdit:",t);const r=ar();Ui();const{setPreviousRoute:i,navigationState:s,clearNavigationState:o}=xg(),[c,l]=v.useState("setup"),[u,d]=v.useState(!1),[f,h]=v.useState(!1),[p,g]=v.useState(!1),[m,y]=v.useState(null),[b,x]=v.useState(null),[w,S]=v.useState(!1),C=v.useRef(m);C.current=m;const _=v.useRef(!1),A=z=>z&&typeof z=="object"&&z.title&&z.sections,[j,P]=v.useState([]),[k,O]=v.useState([]),[E,R]=v.useState(!1),[M,G]=v.useState([]),[L,V]=v.useState(!1),[I,D]=v.useState(!1),[X,Q]=v.useState([]),[J,ye]=v.useState(xl),[U,ne]=v.useState(!1),[ue,F]=v.useState(""),[ce,te]=v.useState(null),[pe,we]=v.useState(""),[Y,nt]=v.useState(""),[Ue,at]=v.useState(!1),[Be,Bt]=v.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[]}),[N,$]=v.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[]}),[B,K]=v.useState("idle"),[Z,H]=v.useState(null),[re,me]=v.useState(0),be=v.useRef(null),ke=v.useRef(!1),Se=v.useRef(!1),qe=z=>{i("/focus-groups",{focusGroupId:b,focusGroupTab:"participants",isNewFocusGroup:!t,focusGroupData:{name:Ze.getValues("name"),description:Ze.getValues("description"),selectedParticipants:j,discussionGuide:m}}),r(`/synthetic-users/${z.id}`)},st=z=>{const he={age:new Set,gender:new Set,occupation:new Set,location:new Set,techSavviness:new Set,ethnicity:new Set};return z.forEach(fe=>{if(fe.age&&he.age.add(fe.age),fe.gender&&he.gender.add(fe.gender),fe.occupation&&he.occupation.add(fe.occupation),fe.location&&he.location.add(fe.location),fe.techSavviness!==void 0){const De=fe.techSavviness<30?"Low (0-30)":fe.techSavviness<70?"Medium (31-70)":"High (71-100)";he.techSavviness.add(De)}fe.ethnicity&&he.ethnicity.add(fe.ethnicity)}),{age:Array.from(he.age).sort(),gender:Array.from(he.gender).sort(),occupation:Array.from(he.occupation).sort(),location:Array.from(he.location).sort(),techSavviness:Array.from(he.techSavviness).sort((fe,De)=>{const Nt=["Low (0-30)","Medium (31-70)","High (71-100)"];return Nt.indexOf(fe)-Nt.indexOf(De)}),ethnicity:Array.from(he.ethnicity).sort()}},Dt=z=>{const he={...N};he[z]=[];const fe=M.filter(De=>{let Nt=!0;return J!==xl&&(Nt=!1,De.folder_ids&&Array.isArray(De.folder_ids)&&(Nt=De.folder_ids.includes(J)),!Nt&&(De.folder_id===J||De.folderId===J)&&(Nt=!0)),Nt?Object.entries(he).every(([an,Ci])=>{if(Ci.length===0)return!0;const ie=an;if(ie==="techSavviness"&&De.techSavviness!==void 0){const le=De.techSavviness<30?"Low (0-30)":De.techSavviness<70?"Medium (31-70)":"High (71-100)";return Ci.includes(le)}else{if(ie==="age"&&De.age)return Ci.includes(De.age);if(ie==="gender"&&De.gender)return Ci.includes(De.gender);if(ie==="occupation"&&De.occupation)return Ci.includes(De.occupation);if(ie==="location"&&De.location)return Ci.includes(De.location);if(ie==="ethnicity"&&De.ethnicity)return Ci.includes(De.ethnicity)}return!0}):!1});return st(fe)},We=()=>{at(!1),setTimeout(()=>{Bt({...N})},0)},Je=()=>{$({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[]})},At=(z,he)=>{$(fe=>{const De={...fe};return De[z].includes(he)?De[z]=De[z].filter(Nt=>Nt!==he):De[z]=[...De[z],he],De})},Yt=async()=>{try{const fe=(await Eo.getAll()).data.map(De=>({...De,id:De._id}));return Q(fe),fe}catch(z){return console.error("Error fetching folders:",z),se.error("Failed to load folders"),Q([]),[]}},Xn=async()=>{if(!ue.trim()){se.error("Please enter a folder name");return}try{const z=await Eo.create({name:ue.trim()});await Yt(),F(""),ne(!1),se.success(`Folder "${ue}" created`)}catch(z){console.error("Error creating folder:",z),se.error("Failed to create folder")}},cr=()=>{F(""),ne(!1)},ct=z=>{te(z),we(z.name)},jt=async()=>{if(!ce||!pe.trim()){te(null);return}try{await Eo.update(ce._id,{name:pe.trim()}),await Yt(),te(null),se.success(`Folder renamed to "${pe}"`)}catch(z){console.error("Error renaming folder:",z),se.error("Failed to rename folder"),te(null)}},ot=()=>{te(null),we("")};v.useEffect(()=>{const z=async()=>{V(!0);try{const fe=await Rr.getAll();console.log("Fetched personas for FocusGroupModerator:",fe.data),Array.isArray(fe.data)&&fe.data.length>0?G(fe.data):(console.warn("No personas returned from API or invalid format",fe.data),se.warning("No participants available"))}catch(fe){console.error("Error fetching personas:",fe),se.error("Failed to load participants")}finally{V(!1)}};(async()=>{await Promise.all([Yt(),z()])})()},[]),console.log("About to initialize form with useForm hook");const Ze=V0({resolver:G0(ode),defaultValues:{researchBrief:"",focusGroupName:"",discussionTopics:"",duration:"60",llm_model:"gemini-2.5-pro",reasoning_effort:"medium",verbosity:"medium"}});console.log("Form initialized successfully");const gn=()=>{c!=="setup"||Se.current||(be.current&&clearTimeout(be.current),be.current=setTimeout(async()=>{if(ke.current)return;const z=Ze.getValues(),he={name:z.focusGroupName||"",description:z.researchBrief||"",objective:z.researchBrief||"",topic:z.discussionTopics||"",duration:z.duration?parseInt(z.duration):60,llm_model:z.llm_model||"gemini-2.5-pro",reasoning_effort:z.reasoning_effort||"medium",verbosity:z.verbosity||"medium",participants:j,participants_count:j.length,status:"draft",date:new Date().toISOString(),uploadedAssets:k.map(fe=>fe.filename||fe.original_name||"unknown")};if(!(Z&&JSON.stringify(he)===JSON.stringify(Z))&&!(!he.name&&!he.description&&!he.topic)){ke.current=!0,K("saving");try{let fe=b||(t==null?void 0:t.id)||(t==null?void 0:t._id);if(console.log("Auto-save: draftFocusGroupId =",b),console.log("Auto-save: draftToEdit ID =",(t==null?void 0:t.id)||(t==null?void 0:t._id)),console.log("Auto-save: using focusGroupId =",fe),console.log("Auto-save: llm_model in currentData =",he.llm_model),console.log("Auto-save: duration in currentData =",he.duration),fe)console.log("Auto-save: Updating existing focus group:",fe),await pt.update(fe,he),console.log("Auto-save: Updated existing draft:",fe);else{console.log("Auto-save: Creating NEW focus group (no existing ID)");const De=await pt.create(he);fe=De.data.focus_group_id||De.data.id||De.data._id,x(fe),console.log("Auto-save: Created new draft with ID:",fe)}H(he),K("saved"),me(0),setTimeout(()=>{K("idle")},2e3)}catch(fe){if(console.error("Auto-save failed:",fe),K("error"),me(De=>De+1),re<3){const De=Math.pow(2,re)*2e3;setTimeout(()=>{gn()},De)}else se.error("Auto-save failed",{description:"Your changes may not be saved. Please check your connection."})}finally{ke.current=!1}}},2e3))},Os=async z=>{try{R(!0);const he=await pt.getAssets(z);O(he.data.assets||[])}catch(he){console.error("Error fetching backend assets:",he),se.error("Failed to load asset information")}finally{R(!1)}},ea=Ze.watch(),ta=v.useRef(""),yl=v.useRef("");v.useEffect(()=>{const z=JSON.stringify(ea);c==="setup"&&z!==ta.current&&(ta.current=z,gn())},[ea,c]),v.useEffect(()=>{const z=JSON.stringify(j);c==="setup"&&z!==yl.current&&(yl.current=z,gn())},[j,c]),v.useEffect(()=>(c!=="setup"&&be.current&&clearTimeout(be.current),()=>{be.current&&clearTimeout(be.current)}),[c]),v.useEffect(()=>{if(console.log("Draft loading effect - draftToEdit:",t,"draftLoadedRef.current:",_.current),!t){_.current=!1;return}if(t&&!_.current){console.log("Loading draft focus group:",t),Se.current=!0,_.current=!0;const z=t.id||t._id;x(z),console.log("Setting draft ID from draftToEdit:",z),z&&Os(z),t.name&&Ze.setValue("focusGroupName",t.name),(t.description||t.objective)&&Ze.setValue("researchBrief",t.description||t.objective||""),t.topic&&Ze.setValue("discussionTopics",t.topic),t.duration&&Ze.setValue("duration",t.duration.toString()),t.llm_model&&Ze.setValue("llm_model",t.llm_model),t.reasoning_effort&&Ze.setValue("reasoning_effort",t.reasoning_effort),t.verbosity&&Ze.setValue("verbosity",t.verbosity),t.discussionGuide&&(y(t.discussionGuide),(!s.focusGroupTab||s.previousRoute!=="/focus-groups")&&l("review")),t.participants&&Array.isArray(t.participants)&&P(t.participants);const he={name:t.name||"",description:t.description||t.objective||"",objective:t.description||t.objective||"",topic:t.topic||"",duration:t.duration||60,llm_model:t.llm_model||"gemini-2.5-pro",reasoning_effort:t.reasoning_effort||"medium",verbosity:t.verbosity||"medium",participants:t.participants||[],participants_count:(t.participants||[]).length,status:"draft",date:t.date||new Date().toISOString(),uploadedAssets:k.map(fe=>fe.filename||fe.original_name||"unknown")};H(he),console.log("Set lastSavedData to current draft:",he),se.success("Draft focus group loaded",{description:"Continue editing your focus group setup"}),setTimeout(()=>{Se.current=!1;const fe=JSON.stringify(Ze.getValues());ta.current=fe},1e3)}},[t,Ze]),v.useEffect(()=>{n.length>0&&(console.log("Pre-selected participants received:",n),P(n),l("participants"))},[n]),v.useEffect(()=>{s.focusGroupTab&&s.previousRoute==="/focus-groups"&&setTimeout(()=>{l(s.focusGroupTab),o()},0)},[s.focusGroupTab,t,o]),v.useEffect(()=>{t||setTimeout(()=>{Se.current=!1;const z=JSON.stringify(Ze.getValues());ta.current=z},500)},[t,Ze]);const q=()=>{if(B==="idle")return null;const he={saving:{text:"Saving...",className:"text-blue-600 bg-blue-50"},saved:{text:"All changes saved",className:"text-green-600 bg-green-50"},error:{text:"Save failed - retrying...",className:"text-red-600 bg-red-50"}}[B];return a.jsx("div",{className:`fixed top-16 left-1/2 transform -translate-x-1/2 z-50 px-3 py-1 rounded-md text-sm font-medium border shadow-sm ${he.className}`,children:he.text})},Oe=async(z,he)=>{var fe,De;d(!0),h(!1),g(!1);try{const Nt={name:z.focusGroupName,description:z.researchBrief,objective:z.researchBrief,topic:z.discussionTopics,duration:parseInt(z.duration),llm_model:z.llm_model,reasoning_effort:z.reasoning_effort,verbosity:z.verbosity},an=he?await pt.generateDiscussionGuideForGroup(he,Nt):await pt.generateDiscussionGuide(Nt);if(an.data&&an.data.discussionGuide)return h(!0),an.data.discussionGuide;throw new Error("Failed to generate discussion guide")}catch(Nt){console.error("Error generating discussion guide:",Nt),g(!0);let an="Unknown error occurred";throw(De=(fe=Nt==null?void 0:Nt.response)==null?void 0:fe.data)!=null&&De.error?an=Nt.response.data.error:Nt!=null&&Nt.message&&(an=Nt.message),an.includes("500")||an.includes("internal error")||an.includes("Internal Server Error")?se.error("AI service temporarily unavailable",{description:"The discussion guide generator is experiencing issues. Please try again in a few minutes.",action:{label:"Retry",onClick:()=>Oe(z)}}):se.error("Failed to generate discussion guide",{description:an,action:{label:"Retry",onClick:()=>Oe(z)}}),Nt}},Ge=()=>{d(!1),h(!1),g(!1)};async function mt(z){try{let he=b;if(!he){const fe={name:z.focusGroupName,status:"draft",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(z.duration),topic:z.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:z.researchBrief,objective:z.researchBrief,llm_model:z.llm_model,reasoning_effort:z.reasoning_effort,verbosity:z.verbosity},De=await pt.create(fe);he=De.data.focus_group_id||De.data.id||De.data._id,x(he),console.log("Draft focus group created for discussion guide generation:",De,"with ID:",he)}if(he)try{const fe={name:z.focusGroupName,participants:j,participants_count:j.length,duration:parseInt(z.duration),topic:z.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:z.researchBrief,objective:z.researchBrief,llm_model:z.llm_model,reasoning_effort:z.reasoning_effort,verbosity:z.verbosity};await pt.update(he,fe),console.log("Focus group updated with latest form values before guide generation"),console.log(`🔄 Updated focus group ${he} with model: ${z.llm_model}`)}catch(fe){console.error("Failed to update focus group before guide generation:",fe)}try{const fe=await Oe(z,he);y(fe);try{const De={name:z.focusGroupName,status:"draft",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(z.duration),topic:z.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:z.researchBrief,objective:z.researchBrief,llm_model:z.llm_model,reasoning_effort:z.reasoning_effort,verbosity:z.verbosity,discussionGuide:fe};await pt.update(he,De),console.log("Focus group updated with discussion guide"),se.success("Progress saved as draft",{description:"Your focus group setup has been automatically saved"})}catch(De){console.error("Failed to update focus group with discussion guide:",De),se.error("Failed to save draft",{description:"Discussion guide generated, but draft save failed"})}l("review"),se.success("Discussion guide generated",{description:"Review and edit before proceeding"})}catch(fe){console.error("Discussion guide generation failed:",fe),se.error("Discussion guide generation failed",{description:"Please go back to the setup tab and try generating again. Check your inputs and try a different AI model if the issue persists.",duration:8e3});return}}catch(he){console.error("Error in focus group creation flow:",he),se.error("Focus group creation failed",{description:he.message||"An unexpected error occurred"})}}const tt=(()=>{var he;const z=M.filter(fe=>{const De=fe.name.toLowerCase().includes(Y.toLowerCase())||fe.occupation&&fe.occupation.toLowerCase().includes(Y.toLowerCase())||fe.location&&fe.location.toLowerCase().includes(Y.toLowerCase()),Nt=(Be.age.length===0||Be.age.includes(fe.age))&&(Be.gender.length===0||Be.gender.includes(fe.gender))&&(Be.occupation.length===0||Be.occupation.includes(fe.occupation))&&(Be.location.length===0||Be.location.includes(fe.location))&&(Be.ethnicity.length===0||fe.ethnicity&&Be.ethnicity.includes(fe.ethnicity))&&(Be.techSavviness.length===0||fe.techSavviness!==void 0&&Be.techSavviness.includes(fe.techSavviness<30?"Low (0-30)":fe.techSavviness<70?"Medium (31-70)":"High (71-100)"))&&!0;let an=!0;return J!==xl&&(an=!1,fe.folder_ids&&Array.isArray(fe.folder_ids)&&(an=fe.folder_ids.includes(J)),an||(fe.folder_id===J||fe.folderId===J)&&(an=!0)),De&&Nt&&an});if(console.log(`Filtered personas: ${z.length}/${M.length}`),console.log(`Selected folder: ${J===xl?"All Personas":((he=X.find(fe=>fe._id===J||fe.id===J))==null?void 0:he.name)||J}`),J!==xl){const fe=X.find(De=>De._id===J||De.id===J);if(fe){const De=M.filter(Nt=>Nt.folder_ids&&Array.isArray(Nt.folder_ids)?Nt.folder_ids.includes(J):Nt.folder_id===J||Nt.folderId===J);console.log(`Folder details: ${fe.name}, ID: ${fe._id}, Contains: ${De.length} personas`),console.log("Personas in this folder:",De.map(Nt=>Nt.name))}}return z})(),wt=z=>{console.log("Toggling selection for participant ID:",z),P(he=>{const fe=he.includes(z);console.log("Current selection:",{id:z,isCurrentlySelected:fe,currentSelections:[...he]});const De=fe?he.filter(Nt=>Nt!==z):[...he,z];return console.log("New selection:",De),De})},dn=async()=>{try{const z=Ze.getValues(),he={name:z.focusGroupName,status:"in-progress",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(z.duration),topic:z.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),discussionGuide:m},De=(await pt.create(he)).data;return console.log("Focus group created successfully:",De),De.focus_group_id}catch(z){throw console.error("Error saving focus group:",z),z}},dt=v.useCallback(async()=>{if(!C.current){se.error("No discussion guide available",{description:"Please generate a discussion guide first"});return}D(!0);try{const{downloadDiscussionGuideAsMarkdown:z}=await Vie(async()=>{const{downloadDiscussionGuideAsMarkdown:fe}=await import("./discussionGuideMarkdown-eMXneipz.js");return{downloadDiscussionGuideAsMarkdown:fe}},[]),he=Ze.getValues();z(C.current,he.focusGroupName),se.success("Discussion guide downloaded",{description:"The guide has been saved to your downloads folder"})}catch(z){console.error("Error downloading discussion guide:",z),se.error("Download failed",{description:"Unable to download the discussion guide. Please try again."})}finally{D(!1)}},[Ze]),_n=v.useCallback(async z=>{console.log("📝 handleSaveDiscussionGuide called with:",z),w?(C.current=z,console.log("📝 Skipping discussionGuide state update during editing to preserve focus")):(y(z),se.success("Discussion guide updated",{description:"Your changes have been saved."}))},[w]),on=v.useCallback(z=>{console.log("📝 Discussion guide editing state changed:",z),S(z),!z&&C.current&&(console.log("📝 Updating discussionGuide state after editing ended"),y(C.current))},[]),nn=v.useCallback(()=>{},[]),lr=async()=>{if(!Ze.getValues().focusGroupName){se.error("Missing focus group name",{description:"Please provide a name for the focus group"});return}if(!m){se.error("Missing discussion guide",{description:"Please generate a discussion guide first"});return}if(j.length<1){se.error("Not enough participants",{description:"Please select at least one participant for the focus group"});return}console.log("Starting focus group with participants:",j);try{se.loading("Creating focus group...");let z;if(b){const he=Ze.getValues(),fe={name:he.focusGroupName,status:"in-progress",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(he.duration),topic:he.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:he.researchBrief,objective:he.researchBrief,discussionGuide:m},De=await pt.update(b,fe);z=b,console.log("Draft focus group updated to in-progress:",De),e&&e()}else z=await dn();se.dismiss(),se.success("Focus group created successfully",{description:"The AI moderator is now running the session"}),r(`/focus-groups/${z}`)}catch(z){se.dismiss(),z!=null&&z.message,console.error("Failed to start focus group:",z),se.error("Failed to create focus group",{description:"Please try again or check your connection"})}};return a.jsxs(a.Fragment,{children:[a.jsx(q,{}),a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-6",children:[a.jsx(Vo,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"AI Focus Group Moderator"})]}),u&&a.jsx("div",{className:"mb-6",children:a.jsx(zT,{isActive:u,isComplete:f,hasError:p,label:"Generating discussion guide",onComplete:Ge})}),a.jsxs(fl,{value:c,onValueChange:l,children:[a.jsxs(Va,{className:"grid w-full grid-cols-3 mb-6",children:[a.jsx(pn,{value:"setup",children:"Setup"}),a.jsx(pn,{value:"review",children:"Review & Edit"}),a.jsx(pn,{value:"participants",children:"Participants"})]}),a.jsx(mn,{value:"setup",children:a.jsx(W0,{...Ze,children:a.jsxs("form",{onSubmit:Ze.handleSubmit(mt),className:"space-y-6",children:[a.jsx(_t,{control:Ze.control,name:"focusGroupName",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Focus Group Name"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"e.g., Mobile App UX Evaluation",...z})}),a.jsx(Fn,{children:"Give your focus group a descriptive name"}),a.jsx(xt,{})]})}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx(_t,{control:Ze.control,name:"researchBrief",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Research Brief"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"Describe your research objectives...",className:"h-36",...z})}),a.jsx(Fn,{children:"Provide context about what you want to learn"}),a.jsx(xt,{})]})}),a.jsxs("div",{className:"space-y-6",children:[a.jsx(_t,{control:Ze.control,name:"discussionTopics",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Discussion Topics"}),a.jsx(yt,{children:a.jsx(ht,{placeholder:"List main topics to cover, separated by commas",className:"h-24",...z})}),a.jsx(Fn,{children:"E.g., User experience, feature preferences, pain points"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:Ze.control,name:"duration",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Duration (minutes)"}),a.jsxs(Un,{onValueChange:z.onChange,value:z.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select duration"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"30",children:"30 minutes"}),a.jsx(ae,{value:"45",children:"45 minutes"}),a.jsx(ae,{value:"60",children:"60 minutes"}),a.jsx(ae,{value:"90",children:"90 minutes"}),a.jsx(ae,{value:"120",children:"120 minutes"})]})]}),a.jsx(Fn,{children:"How long should the focus group session last?"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:Ze.control,name:"llm_model",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"AI Model"}),a.jsxs(Un,{onValueChange:z.onChange,value:z.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select AI model"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"gemini-2.5-pro",children:"Gemini 2.5 Pro"}),a.jsx(ae,{value:"gpt-4.1",children:"GPT-4.1"}),a.jsx(ae,{value:"gpt-5",children:"GPT-5"})]})]}),a.jsx(Fn,{children:"Choose which AI model to use for generating responses and discussion guides"}),a.jsx(xt,{})]})}),Ze.watch("llm_model")==="gpt-5"&&a.jsxs(a.Fragment,{children:[a.jsx(_t,{control:Ze.control,name:"reasoning_effort",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Reasoning Effort"}),a.jsxs(Un,{onValueChange:z.onChange,value:z.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select reasoning effort"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"minimal",children:"Minimal - Fast responses"}),a.jsx(ae,{value:"low",children:"Low - Quick thinking"}),a.jsx(ae,{value:"medium",children:"Medium - Balanced (default)"}),a.jsx(ae,{value:"high",children:"High - Deep reasoning"})]})]}),a.jsx(Fn,{children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx("div",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx(xt,{})]})}),a.jsx(_t,{control:Ze.control,name:"verbosity",render:({field:z})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Response Verbosity"}),a.jsxs(Un,{onValueChange:z.onChange,value:z.value,children:[a.jsx(yt,{children:a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select verbosity level"})})}),a.jsxs($n,{children:[a.jsx(ae,{value:"low",children:"Low - Concise responses"}),a.jsx(ae,{value:"medium",children:"Medium - Balanced length (default)"}),a.jsx(ae,{value:"high",children:"High - Detailed responses"})]})]}),a.jsx(Fn,{children:"Controls how detailed and lengthy GPT-5's responses will be"}),a.jsx("div",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx(xt,{})]})})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 mb-2 block",children:"Creative Assets (Optional)"}),a.jsx(A3,{focusGroupId:b,disabled:!b,onUploadComplete:z=>{O(z)},onUploadError:z=>{console.error("Asset upload error:",z)},onAssetsChange:z=>{O(z)},maxAssets:10,maxFileSize:10,allowedTypes:["image/*","application/pdf","video/*","text/*","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],label:"Asset Upload",description:"Provide any files you wish the moderator to use in the focus group session. This could include mockups, designs, documents, or other materials for discussion.",enableRenaming:!0}),a.jsx("p",{className:"text-sm text-muted-foreground mt-2",children:"Upload visuals that you want feedback on during the session"})]}),a.jsx("div",{className:"space-y-3",children:a.jsx("div",{className:"flex justify-end",children:a.jsxs(ee,{type:"submit",disabled:u,className:"min-w-32",children:[a.jsx(Vo,{className:"mr-2 h-4 w-4"}),u?"Generating...":"Generate Discussion Guide"]})})})]})})}),a.jsx(mn,{value:"review",children:a.jsxs("div",{className:"space-y-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("div",{className:"flex items-center justify-between mb-4",children:a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("h3",{className:"font-sf text-lg font-medium",children:"AI-Generated Discussion Guide"}),m&&a.jsx(Hn,{variant:"outline",className:"text-xs",children:A(m)?"Structured JSON":"Legacy Text"})]})}),a.jsx("div",{className:"prose max-w-none",children:m?a.jsx(VT,{discussionGuide:m,showProgress:!1,collapsible:!0,defaultExpanded:!0,className:"border-0",onSave:_n,onDownload:dt,onSectionSelect:nn,isDownloading:I,focusGroupId:b,onEditingChange:on}):a.jsx("div",{className:"bg-slate-50 p-4 rounded border text-center text-slate-600",children:p?a.jsxs("div",{children:[a.jsx("p",{className:"mb-2",children:"Discussion guide generation failed."}),a.jsxs("p",{className:"text-sm",children:["Go back to the ",a.jsx("strong",{children:"Setup"})," tab and try generating again. Check your inputs and try a different AI model if the issue persists."]})]}):a.jsx("p",{children:'No discussion guide generated yet. Complete the setup and click "Generate Discussion Guide" to create one.'})})})]})}),k.length>0&&a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:"Creative Assets"}),a.jsxs("div",{className:"space-y-3",children:[a.jsx("p",{className:"text-sm text-slate-600",children:"Assets that will be referenced in the discussion guide:"}),a.jsx("div",{className:"space-y-2",children:k.map((z,he)=>{var De;const fe=z.user_assigned_name||`Asset ${he+1}`;return a.jsxs("div",{className:"flex items-center gap-3 p-3 border rounded-lg bg-slate-50",children:[a.jsx("div",{className:"w-10 h-10 bg-slate-200 rounded flex items-center justify-center flex-shrink-0",children:(De=z.mime_type)!=null&&De.startsWith("image/")?a.jsx("img",{src:pt.getAssetUrl(b,z.filename),alt:fe,className:"max-h-full max-w-full object-contain rounded"}):a.jsx(Wp,{className:"h-6 w-6 text-slate-600"})}),a.jsxs("div",{className:"flex-grow",children:[a.jsxs("p",{className:"font-medium text-sm",children:['"',fe,'"']}),a.jsx("p",{className:"text-xs text-slate-500",children:"Will appear in discussion guide"})]})]},z.filename)})}),a.jsx("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:a.jsxs("p",{className:"text-sm text-blue-700",children:[a.jsx("strong",{children:"Note:"})," To rename assets, go back to the Setup tab and click the edit icon next to each asset."]})})]})]})}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx(ee,{variant:"outline",onClick:()=>l("setup"),children:"Back to Setup"}),a.jsxs(ee,{onClick:()=>l("participants"),children:["Select Participants",a.jsx(Dr,{className:"ml-2 h-4 w-4"})]})]})]})}),a.jsxs(mn,{value:"participants",children:[a.jsxs("div",{className:"flex flex-col md:flex-row gap-6",children:[a.jsxs("div",{className:"w-full md:w-64 space-y-4",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"text-sm font-medium",children:"Folders"}),a.jsx(ee,{variant:"ghost",size:"sm",onClick:()=>{console.log("Clicked 'Create new folder' button"),ne(!0)},className:"h-7 w-7 p-0",children:a.jsx(u5,{className:"h-4 w-4"})})]}),a.jsxs("div",{className:"space-y-1",children:[a.jsxs("button",{onClick:()=>{console.log("Clicked 'All Personas' folder"),console.log("All personas count:",M.length),ye(xl),setTimeout(()=>{console.log(`Will show all ${M.length} personas`)},0)},className:`w-full flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${J===xl?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx("span",{children:"All Personas"})]}),X.map(z=>a.jsx("div",{className:"flex items-center justify-between group",children:ce&&ce._id===z._id?a.jsxs("div",{className:"flex-1 flex items-center px-3 py-2 space-x-2",children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx(Wt,{value:pe,onChange:he=>we(he.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:he=>{he.key==="Enter"?jt():he.key==="Escape"&&ot()}}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>{console.log(`Confirming folder rename: "${ce==null?void 0:ce.name}" to "${pe}"`),jt()},className:"h-7 w-7 p-0",children:a.jsx(Es,{className:"h-4 w-4"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>{console.log(`Cancelling rename of folder: "${ce==null?void 0:ce.name}"`),ot()},className:"h-7 w-7 p-0",children:a.jsx(Ri,{className:"h-4 w-4"})})]}):a.jsxs(a.Fragment,{children:[a.jsxs("button",{onClick:()=>{console.log(`Clicked folder: ${z.name} (ID: ${z._id})`);const he=M.filter(fe=>fe.folder_ids&&Array.isArray(fe.folder_ids)?fe.folder_ids.includes(z._id):fe.folder_id===z._id||fe.folderId===z._id);console.log(`Current persona count in folder: ${he.length}`),console.log("All personas count:",M.length),ye(z._id),setTimeout(()=>{console.log(`Will show ${he.length} personas after filtering`),console.log("Filtered personas:",he.map(fe=>fe.name))},0)},className:`flex-1 flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${J===z._id?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx("span",{children:z.name}),a.jsx("span",{className:"text-muted-foreground text-xs ml-auto",children:M.filter(he=>he.folder_ids&&Array.isArray(he.folder_ids)?he.folder_ids.includes(z._id):he.folder_id===z._id||he.folderId===z._id).length})]}),a.jsxs(P1,{children:[a.jsx(k1,{asChild:!0,children:a.jsx(ee,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 opacity-0 group-hover:opacity-100",children:a.jsx(B_,{className:"h-4 w-4"})})}),a.jsx(Ix,{align:"end",children:a.jsx(ic,{onClick:()=>{console.log(`Initiating rename for folder: ${z.name} (ID: ${z.id})`),ct(z)},children:"Rename"})})]})]})},z._id)),U&&a.jsxs("div",{className:"flex items-center px-3 py-2 space-x-2",children:[a.jsxs("div",{className:"flex-1 flex items-center space-x-2",children:[a.jsx(ds,{className:"h-4 w-4"}),a.jsx(Wt,{value:ue,onChange:z=>F(z.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:z=>{z.key==="Enter"?Xn():z.key==="Escape"&&cr()}})]}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>{console.log(`Confirming creation of new folder: "${ue}"`),Xn()},className:"h-7 w-7 p-0",children:a.jsx(Es,{className:"h-4 w-4"})}),a.jsx(ee,{size:"sm",variant:"ghost",onClick:()=>{console.log("Cancelling folder creation"),cr()},className:"h-7 w-7 p-0",children:a.jsx(Ri,{className:"h-4 w-4"})})]})]})]}),a.jsxs("div",{className:"flex-1",children:[a.jsx(ut,{className:"mb-4",children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"flex flex-col space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Select Participants"}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(Dr,{className:"h-5 w-5 mr-2 text-muted-foreground"}),a.jsxs("span",{className:"text-sm font-medium",children:[j.length," of ",tt.length," selected"]})]})]}),a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4",children:[a.jsxs("div",{className:"relative flex-1",children:[a.jsx($E,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Wt,{placeholder:"Search personas by name, occupation, or location...",className:"pl-10 bg-white",value:Y,onChange:z=>nt(z.target.value)})]}),a.jsxs(ee,{variant:"outline",className:"flex items-center gap-2",onClick:()=>at(!0),children:[a.jsx(ME,{className:"h-4 w-4"}),a.jsxs("span",{children:["Filter",Object.values(Be).some(z=>z.length>0)?` (${Object.values(Be).reduce((z,he)=>z+he.length,0)})`:""]})]})]}),L?a.jsx("div",{className:"flex justify-center items-center py-12",children:a.jsx(Js,{className:"h-8 w-8 animate-spin text-primary"})}):tt.length>0?a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:tt.map(z=>{const he=z._id||z.id;return a.jsx(fT,{user:{id:he,_id:z._id,name:z.name,age:z.age,gender:z.gender,occupation:z.occupation,location:z.location||"Unknown",techSavviness:z.techSavviness||50,personality:z.personality||"No description available",oceanTraits:z.oceanTraits,qualitativeAttributes:z.qualitativeAttributes,topPersonalityTraits:z.topPersonalityTraits,aiSynthesizedBio:z.aiSynthesizedBio},selected:j.includes(he),onSelectionToggle:()=>wt(he),onViewDetails:qe},he)})}):a.jsx("div",{className:"text-center py-12",children:a.jsx("p",{className:"text-muted-foreground",children:"No personas available matching your criteria."})})]})})}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx(ee,{variant:"outline",onClick:()=>l("review"),children:"Back to Review"}),a.jsxs(ee,{onClick:lr,disabled:j.length<1||!m,children:[a.jsx(oZ,{className:"mr-2 h-4 w-4"}),"Start Focus Group Session"]})]})]})]}),a.jsx(Jl,{open:Ue,onOpenChange:z=>{z?(at(z),$({...Be})):at(!1)},children:a.jsxs($c,{className:"max-w-4xl max-h-[80vh] overflow-y-auto",children:[a.jsxs(Lc,{children:[a.jsx(Uc,{children:"Filter Personas"}),a.jsx(Zl,{children:"Select attributes to filter personas by. Multiple selections within a category use OR logic, different categories use AND logic."})]}),a.jsxs("div",{className:"py-4 space-y-6",children:[Object.values(N).some(z=>z.length>0)&&a.jsx("div",{className:"bg-muted/30 p-3 rounded-md",children:a.jsxs("p",{className:"text-sm text-muted-foreground",children:[Object.values(N).reduce((z,he)=>z+he.length,0)," active filters"]})}),(()=>{const z=st(M),he=Object.values(N).every(De=>De.length===0),fe=(De,Nt,an=1)=>{const Ci=he?z[Nt]:Dt(Nt)[Nt],ie=N[Nt],le=[...new Set([...Ci,...ie])].sort();return le.length===0?null:a.jsxs("div",{className:"mb-6",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:De}),a.jsx("div",{className:`grid grid-cols-1 ${an===2?"sm:grid-cols-2":an===3?"sm:grid-cols-2 md:grid-cols-3":""} gap-2`,children:le.map(Te=>{const $e=N[Nt].includes(Te),He=Ci.includes(Te);return a.jsxs("div",{className:`flex items-center space-x-2 ${!He&&!$e?"opacity-50":""}`,children:[a.jsx($l,{id:`${Nt}-${Te}`,checked:$e,onCheckedChange:()=>At(Nt,Te),disabled:!He&&!$e}),a.jsxs(hs,{htmlFor:`${Nt}-${Te}`,className:"truncate overflow-hidden",children:[Te,$e&&!He&&a.jsx("span",{className:"ml-1 text-xs text-muted-foreground",children:"(no matches)"})]})]},Te)})})]})};return a.jsxs(a.Fragment,{children:[fe("Gender","gender",3),fe("Age","age",3),fe("Ethnicity","ethnicity",2),fe("Location","location",2),fe("Occupation","occupation",2),fe("Tech Savviness","techSavviness",3),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-6"})]})})()]}),a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",onClick:Je,children:"Reset"}),a.jsx(ee,{onClick:We,children:"Apply Filters"})]})]})})]})]})]})]})}const cde=[{id:"1",name:"Mobile App UX Evaluation",status:"completed",participants:6,date:"2023-06-10T14:00:00Z",duration:60,topic:"user-experience"},{id:"2",name:"Product Feature Feedback",status:"scheduled",participants:8,date:"2023-06-15T10:00:00Z",duration:90,topic:"product-feedback"},{id:"3",name:"Marketing Campaign Testing",status:"in-progress",participants:5,date:"2023-06-12T15:30:00Z",duration:45,topic:"creative-testing"},{id:"4",name:"Website Navigation Study",status:"scheduled",participants:7,date:"2023-06-18T13:00:00Z",duration:60,topic:"user-experience"}],lde={completed:"bg-green-100 text-green-800 border-green-200",scheduled:"bg-blue-100 text-blue-800 border-blue-200","in-progress":"bg-amber-100 text-amber-800 border-amber-200",active:"bg-amber-100 text-amber-800 border-amber-200",paused:"bg-purple-100 text-purple-800 border-purple-200",new:"bg-slate-100 text-slate-800 border-slate-200",ai_mode:"bg-amber-100 text-amber-800 border-amber-200",draft:"bg-gray-100 text-gray-800 border-gray-200"},ude=()=>{console.log("FocusGroups component rendering");const[t,e]=v.useState("view"),[n,r]=v.useState(""),[i,s]=v.useState([]),[o,c]=v.useState(!0),[l,u]=v.useState([]),[d,f]=v.useState(!1),[h,p]=v.useState(!1),[g,m]=v.useState(null),y=ar(),b=Ui(),[x,w]=v.useState([]),S=v.useRef(!0),C=async(E=!0)=>{if(console.log("fetchFocusGroups called with isMountedCheck:",E),console.log("isMounted.current:",S.current),E&&!S.current){console.log("Exiting early: component not mounted");return}console.log("Setting loading to true and making API call"),c(!0);try{console.log("Calling focusGroupsApi.getAll()");const R=await pt.getAll();if(console.log("API response received:",R),!E||S.current){const M=R.data.map(G=>({...G,id:G.id||G._id,participants_count:Array.isArray(G.participants)?G.participants.length:typeof G.participants=="number"?G.participants:0}));s(M)}}catch(R){console.error("Error fetching focus groups:",R),(!E||S.current)&&(Fe.error("Failed to load focus groups"),s(cde))}finally{(!E||S.current)&&c(!1)}},_=async E=>{try{const R=await pt.getById(E);R&&R.data&&(m(R.data),e("create"))}catch(R){console.error("Error fetching focus group for edit:",R),Fe.error("Failed to load focus group for editing")}};v.useEffect(()=>(console.log("useEffect running - about to fetch focus groups"),C(),()=>{console.log("useEffect cleanup - setting isMounted to false"),S.current=!1}),[]),v.useEffect(()=>{console.log("Mode change useEffect running, mode:",t),t==="view"&&(console.log("Mode is view, calling fetchFocusGroups"),C())},[t]),v.useEffect(()=>{const E=b.state;(E==null?void 0:E.mode)==="create"&&(E!=null&&E.preSelectedParticipants)&&(w(E.preSelectedParticipants),e("create"),y(b.pathname,{replace:!0,state:null}))},[b.state,b.pathname,y]),v.useEffect(()=>{const E=new URLSearchParams(b.search),R=E.get("mode"),M=E.get("id"),G=E.get("tab");if(R==="create")e("create"),m(null);else if(R==="edit"&&M){const L=i.find(V=>(V._id||V.id)===M);L?(m(L),e("create")):_(M)}if(R||M||G){const L=b.pathname;y(L,{replace:!0})}},[b.search,i,y,b.pathname]);const A=i.filter(E=>E.name.toLowerCase().includes(n.toLowerCase())||E.topic.toLowerCase().includes(n.toLowerCase())),j=E=>new Date(E).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),P=E=>new Date(E).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}),k=E=>{u(R=>R.includes(E)?R.filter(M=>M!==E):[...R,E])},O=async()=>{if(l.length!==0){p(!0);try{const E=l.map(R=>pt.delete(R));await Promise.all(E),s(R=>R.filter(M=>!l.includes(M.id||M._id||""))),u([]),Fe.success(`${l.length} focus group${l.length>1?"s":""} deleted successfully`)}catch(E){console.error("Error deleting focus groups:",E),Fe.error("Failed to delete focus groups")}finally{p(!1),f(!1)}}};return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(_a,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900",children:"Focus Groups"}),a.jsx("p",{className:"text-slate-600 mt-1",children:"Set up and manage AI-moderated research sessions"})]}),a.jsx("div",{className:"mt-4 sm:mt-0",children:a.jsx(ee,{onClick:()=>{console.log("Create New Focus Group button clicked, current mode:",t);try{t==="view"?(console.log("Setting draft to null and switching to create mode"),m(null),e("create")):(console.log("Switching back to view mode"),e("view"))}catch(E){console.error("Error in Create New Focus Group onClick:",E)}},className:"hover-transition",children:t==="view"?"Create New Focus Group":"View All Focus Groups"})})]}),t==="view"?a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 mb-6",children:[a.jsxs("div",{className:"relative flex-1",children:[a.jsx($E,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Wt,{placeholder:"Search focus groups by name or topic...",className:"pl-10 bg-white",value:n,onChange:E=>r(E.target.value)})]}),a.jsxs(ee,{variant:"outline",className:"flex items-center gap-2",children:[a.jsx(ME,{className:"h-4 w-4"}),a.jsx("span",{children:"Filter"})]})]}),a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-6",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Vo,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"Your Focus Groups"})]}),l.length>0&&a.jsxs(ee,{variant:"destructive",size:"sm",onClick:()=>f(!0),disabled:h,className:"flex items-center gap-2",children:[a.jsx(qn,{className:"h-4 w-4"}),"Delete Selected (",l.length,")"]})]}),o?a.jsx("div",{className:"flex justify-center items-center py-12",children:a.jsx(Js,{className:"h-8 w-8 animate-spin text-primary"})}):A.length>0?a.jsx("div",{className:"space-y-4",children:A.map(E=>a.jsx("div",{className:"glass-card rounded-xl overflow-hidden hover:shadow-md button-transition",children:a.jsxs("div",{className:"flex flex-col md:flex-row",children:[a.jsxs("div",{className:"flex-1 p-6",children:[a.jsxs("div",{className:"flex items-start justify-between",children:[a.jsxs("div",{className:"flex items-start gap-3",children:[a.jsx($l,{id:`select-${E.id||E._id}`,checked:l.includes(E.id||E._id||""),onCheckedChange:()=>k(E.id||E._id||""),className:"mt-1"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-2",children:E.name}),a.jsxs("div",{className:"flex flex-wrap items-center gap-3 text-sm text-muted-foreground",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(BJ,{className:"h-4 w-4 mr-1"}),j(E.date)]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(Kp,{className:"h-4 w-4 mr-1"}),P(E.date)]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(Dr,{className:"h-4 w-4 mr-1"}),E.participants_count||(Array.isArray(E.participants)?E.participants.length:0)," participant",E.participants_count>1||Array.isArray(E.participants)&&E.participants.length>1?"s":""]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(Kp,{className:"h-4 w-4 mr-1"}),E.duration," min"]})]})]})]}),a.jsxs("div",{className:Pe("px-3 py-1 rounded-full text-xs font-medium border",lde[E.status]||"bg-gray-100 text-gray-800 border-gray-200"),children:[E.status==="completed"&&"Completed",E.status==="scheduled"&&"Scheduled",E.status==="in-progress"&&"In Progress",E.status==="active"&&"In Progress",E.status==="ai_mode"&&"In Progress",E.status==="paused"&&"Paused",E.status==="new"&&"Not Started",E.status==="draft"&&"Draft",!["completed","scheduled","in-progress","active","ai_mode","paused","new","draft"].includes(E.status)&&E.status]})]}),a.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[a.jsxs("div",{className:"px-3 py-1 bg-slate-100 rounded-full text-xs font-medium text-slate-800",children:[E.topic==="user-experience"&&"User Experience",E.topic==="product-feedback"&&"Product Feedback",E.topic==="creative-testing"&&"Creative Testing",E.topic==="messaging-evaluation"&&"Messaging Evaluation",E.topic&&!["user-experience","product-feedback","creative-testing","messaging-evaluation"].includes(E.topic)&&E.topic.charAt(0).toUpperCase()+E.topic.slice(1).replace(/-/g," ")]}),a.jsx("div",{className:"px-3 py-1 bg-slate-100 rounded-full text-xs font-medium text-slate-800",children:"AI Moderated"})]})]}),a.jsx("div",{className:"bg-slate-50 p-6 flex flex-col justify-center items-center md:border-l border-slate-100",children:a.jsx(ee,{variant:E.status==="in-progress"||E.status==="active"||E.status==="ai_mode"?"default":E.status==="new"||E.status==="draft"?"outline":"default",className:Pe("w-full hover-transition",E.status==="new"?"bg-slate-200 text-slate-700 hover:bg-slate-300 border-slate-300":"",E.status==="draft"?"bg-gray-200 text-gray-700 hover:bg-gray-300 border-gray-300":""),onClick:()=>{if(E.status==="draft")m(E),e("create");else{const R=E.id||E._id;console.log("Navigating to focus group:",R),y(`/focus-groups/${R}`)}},children:E.status==="completed"?a.jsxs(a.Fragment,{children:["View Session",a.jsx(us,{className:"ml-2 h-4 w-4"})]}):E.status==="in-progress"||E.status==="active"||E.status==="ai_mode"?a.jsxs(a.Fragment,{children:["Join Session",a.jsx(us,{className:"ml-2 h-4 w-4"})]}):E.status==="paused"?a.jsxs(a.Fragment,{children:["Session Details",a.jsx(us,{className:"ml-2 h-4 w-4"})]}):E.status==="scheduled"?a.jsxs(a.Fragment,{children:["View Details",a.jsx(us,{className:"ml-2 h-4 w-4"})]}):E.status==="new"?a.jsxs(a.Fragment,{children:["View Session",a.jsx(us,{className:"ml-2 h-4 w-4"})]}):E.status==="draft"?a.jsxs(a.Fragment,{children:["Edit",a.jsx(us,{className:"ml-2 h-4 w-4"})]}):a.jsxs(a.Fragment,{children:["View Session",a.jsx(us,{className:"ml-2 h-4 w-4"})]})})})]})},E.id))}):a.jsx("div",{className:"text-center py-12",children:a.jsx("p",{className:"text-muted-foreground",children:"No focus groups found matching your search criteria."})})]})]}):a.jsx(ade,{draftToEdit:g,preSelectedParticipants:x,onDraftSaved:()=>{m(null),e("view"),w([]),C()}})]}),a.jsx(O1,{open:d,onOpenChange:f,children:a.jsxs(Mx,{children:[a.jsxs(Dx,{children:[a.jsxs(Lx,{children:["Delete ",l.length," Focus Group",l.length!==1?"s":"","?"]}),a.jsxs(Fx,{children:["This action cannot be undone. This will permanently delete the selected focus group",l.length!==1?"s":""," and remove all data associated with ",l.length!==1?"them":"it","."]})]}),a.jsxs($x,{children:[a.jsx(Bx,{disabled:h,children:"Cancel"}),a.jsx(Ux,{onClick:E=>{E.preventDefault(),O()},disabled:h,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:h?a.jsxs(a.Fragment,{children:[a.jsx(Js,{className:"mr-2 h-4 w-4 animate-spin"}),"Deleting..."]}):a.jsx(a.Fragment,{children:"Delete"})})]})]})})]})},dde=({participants:t,selectedParticipantIds:e,onToggleParticipantFilter:n})=>{const r=ar(),{id:i}=OE(),{setPreviousRoute:s}=xg(),o=l=>{const u=l.id||l._id;u&&i&&(s(`/focus-groups/${i}`,{focusGroupId:i}),r(`/personas/${u}`))},c=l=>{const u=l.id||l._id;u&&n(u)};return a.jsx("div",{className:"w-full lg:w-64 shrink-0",children:a.jsxs("div",{className:"glass-panel rounded-xl p-4",children:[a.jsxs("h2",{className:"font-sf text-lg font-semibold flex items-center mb-3",children:[a.jsx(Dr,{className:"h-5 w-5 text-primary mr-2"})," Participants"]}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex items-center p-2 bg-primary/5 rounded-lg",children:[a.jsx(va,{className:"h-8 w-8 text-primary mr-3"}),a.jsxs("div",{children:[a.jsx("p",{className:"font-medium text-primary",children:"AI Moderator"}),a.jsx("p",{className:"text-xs text-slate-500",children:"Session facilitator"})]})]}),t.map(l=>{const u=l.id||l._id,d=e.includes(u);return a.jsxs("div",{className:`flex items-center p-2 rounded-lg transition-colors ${d?"bg-blue-50 border border-blue-200":"hover:bg-slate-100"}`,children:[a.jsx("div",{className:"cursor-pointer mr-3",onClick:()=>o(l),title:`View ${l.name}'s profile`,children:a.jsx("img",{src:_g(l),alt:l.name,className:"h-8 w-8 rounded-full object-cover"})}),a.jsxs("div",{className:"flex-1",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx("p",{className:"font-medium cursor-pointer hover:text-blue-600 transition-colors",onClick:()=>c(l),title:`Filter to show only ${l.name}'s messages`,children:l.name}),d&&a.jsx(Es,{className:"h-4 w-4 text-blue-600 ml-2"})]}),a.jsx("p",{className:"text-xs text-slate-500",children:l.occupation})]})]},l.id)})]})]})})};function fde(t,e){return v.useReducer((n,r)=>e[n][r]??n,t)}var GT="ScrollArea",[aV,xFe]=Fi(GT),[hde,Ts]=aV(GT),cV=v.forwardRef((t,e)=>{const{__scopeScrollArea:n,type:r="hover",dir:i,scrollHideDelay:s=600,...o}=t,[c,l]=v.useState(null),[u,d]=v.useState(null),[f,h]=v.useState(null),[p,g]=v.useState(null),[m,y]=v.useState(null),[b,x]=v.useState(0),[w,S]=v.useState(0),[C,_]=v.useState(!1),[A,j]=v.useState(!1),P=Ot(e,O=>l(O)),k=Pu(i);return a.jsx(hde,{scope:n,type:r,dir:k,scrollHideDelay:s,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:h,scrollbarX:p,onScrollbarXChange:g,scrollbarXEnabled:C,onScrollbarXEnabledChange:_,scrollbarY:m,onScrollbarYChange:y,scrollbarYEnabled:A,onScrollbarYEnabledChange:j,onCornerWidthChange:x,onCornerHeightChange:S,children:a.jsx(it.div,{dir:k,...o,ref:P,style:{position:"relative","--radix-scroll-area-corner-width":b+"px","--radix-scroll-area-corner-height":w+"px",...t.style}})})});cV.displayName=GT;var lV="ScrollAreaViewport",uV=v.forwardRef((t,e)=>{const{__scopeScrollArea:n,children:r,asChild:i,nonce:s,...o}=t,c=Ts(lV,n),l=v.useRef(null),u=Ot(e,l,c.onViewportChange);return a.jsxs(a.Fragment,{children:[a.jsx("style",{dangerouslySetInnerHTML:{__html:` -[data-radix-scroll-area-viewport] { - scrollbar-width: none; - -ms-overflow-style: none; - -webkit-overflow-scrolling: touch; -} -[data-radix-scroll-area-viewport]::-webkit-scrollbar { - display: none; -} -:where([data-radix-scroll-area-viewport]) { - display: flex; - flex-direction: column; - align-items: stretch; -} -:where([data-radix-scroll-area-content]) { - flex-grow: 1; -} -`},nonce:s}),a.jsx(it.div,{"data-radix-scroll-area-viewport":"",...o,asChild:i,ref:u,style:{overflowX:c.scrollbarXEnabled?"scroll":"hidden",overflowY:c.scrollbarYEnabled?"scroll":"hidden",...t.style},children:Cde({asChild:i,children:r},d=>a.jsx("div",{"data-radix-scroll-area-content":"",ref:c.onContentChange,style:{minWidth:c.scrollbarXEnabled?"fit-content":void 0},children:d}))})]})});uV.displayName=lV;var Xo="ScrollAreaScrollbar",KT=v.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=Ts(Xo,t.__scopeScrollArea),{onScrollbarXEnabledChange:s,onScrollbarYEnabledChange:o}=i,c=t.orientation==="horizontal";return v.useEffect(()=>(c?s(!0):o(!0),()=>{c?s(!1):o(!1)}),[c,s,o]),i.type==="hover"?a.jsx(pde,{...r,ref:e,forceMount:n}):i.type==="scroll"?a.jsx(mde,{...r,ref:e,forceMount:n}):i.type==="auto"?a.jsx(dV,{...r,ref:e,forceMount:n}):i.type==="always"?a.jsx(WT,{...r,ref:e}):null});KT.displayName=Xo;var pde=v.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=Ts(Xo,t.__scopeScrollArea),[s,o]=v.useState(!1);return v.useEffect(()=>{const c=i.scrollArea;let l=0;if(c){const u=()=>{window.clearTimeout(l),o(!0)},d=()=>{l=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return c.addEventListener("pointerenter",u),c.addEventListener("pointerleave",d),()=>{window.clearTimeout(l),c.removeEventListener("pointerenter",u),c.removeEventListener("pointerleave",d)}}},[i.scrollArea,i.scrollHideDelay]),a.jsx(Kr,{present:n||s,children:a.jsx(dV,{"data-state":s?"visible":"hidden",...r,ref:e})})}),mde=v.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=Ts(Xo,t.__scopeScrollArea),s=t.orientation==="horizontal",o=aw(()=>l("SCROLL_END"),100),[c,l]=fde("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return v.useEffect(()=>{if(c==="idle"){const u=window.setTimeout(()=>l("HIDE"),i.scrollHideDelay);return()=>window.clearTimeout(u)}},[c,i.scrollHideDelay,l]),v.useEffect(()=>{const u=i.viewport,d=s?"scrollLeft":"scrollTop";if(u){let f=u[d];const h=()=>{const p=u[d];f!==p&&(l("SCROLL"),o()),f=p};return u.addEventListener("scroll",h),()=>u.removeEventListener("scroll",h)}},[i.viewport,s,l,o]),a.jsx(Kr,{present:n||c!=="hidden",children:a.jsx(WT,{"data-state":c==="hidden"?"hidden":"visible",...r,ref:e,onPointerEnter:Ne(t.onPointerEnter,()=>l("POINTER_ENTER")),onPointerLeave:Ne(t.onPointerLeave,()=>l("POINTER_LEAVE"))})})}),dV=v.forwardRef((t,e)=>{const n=Ts(Xo,t.__scopeScrollArea),{forceMount:r,...i}=t,[s,o]=v.useState(!1),c=t.orientation==="horizontal",l=aw(()=>{if(n.viewport){const u=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=t,i=Ts(Xo,t.__scopeScrollArea),s=v.useRef(null),o=v.useRef(0),[c,l]=v.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=gV(c.viewport,c.content),d={...r,sizes:c,onSizesChange:l,hasThumb:u>0&&u<1,onThumbChange:h=>s.current=h,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:h=>o.current=h};function f(h,p){return wde(h,o.current,c,p)}return n==="horizontal"?a.jsx(gde,{...d,ref:e,onThumbPositionChange:()=>{if(i.viewport&&s.current){const h=i.viewport.scrollLeft,p=AR(h,c,i.dir);s.current.style.transform=`translate3d(${p}px, 0, 0)`}},onWheelScroll:h=>{i.viewport&&(i.viewport.scrollLeft=h)},onDragScroll:h=>{i.viewport&&(i.viewport.scrollLeft=f(h,i.dir))}}):n==="vertical"?a.jsx(vde,{...d,ref:e,onThumbPositionChange:()=>{if(i.viewport&&s.current){const h=i.viewport.scrollTop,p=AR(h,c);s.current.style.transform=`translate3d(0, ${p}px, 0)`}},onWheelScroll:h=>{i.viewport&&(i.viewport.scrollTop=h)},onDragScroll:h=>{i.viewport&&(i.viewport.scrollTop=f(h))}}):null}),gde=v.forwardRef((t,e)=>{const{sizes:n,onSizesChange:r,...i}=t,s=Ts(Xo,t.__scopeScrollArea),[o,c]=v.useState(),l=v.useRef(null),u=Ot(e,l,s.onScrollbarXChange);return v.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),a.jsx(hV,{"data-orientation":"horizontal",...i,ref:u,sizes:n,style:{bottom:0,left:s.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:s.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":ow(n)+"px",...t.style},onThumbPointerDown:d=>t.onThumbPointerDown(d.x),onDragScroll:d=>t.onDragScroll(d.x),onWheelScroll:(d,f)=>{if(s.viewport){const h=s.viewport.scrollLeft+d.deltaX;t.onWheelScroll(h),yV(h,f)&&d.preventDefault()}},onResize:()=>{l.current&&s.viewport&&o&&r({content:s.viewport.scrollWidth,viewport:s.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:zx(o.paddingLeft),paddingEnd:zx(o.paddingRight)}})}})}),vde=v.forwardRef((t,e)=>{const{sizes:n,onSizesChange:r,...i}=t,s=Ts(Xo,t.__scopeScrollArea),[o,c]=v.useState(),l=v.useRef(null),u=Ot(e,l,s.onScrollbarYChange);return v.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),a.jsx(hV,{"data-orientation":"vertical",...i,ref:u,sizes:n,style:{top:0,right:s.dir==="ltr"?0:void 0,left:s.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":ow(n)+"px",...t.style},onThumbPointerDown:d=>t.onThumbPointerDown(d.y),onDragScroll:d=>t.onDragScroll(d.y),onWheelScroll:(d,f)=>{if(s.viewport){const h=s.viewport.scrollTop+d.deltaY;t.onWheelScroll(h),yV(h,f)&&d.preventDefault()}},onResize:()=>{l.current&&s.viewport&&o&&r({content:s.viewport.scrollHeight,viewport:s.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:zx(o.paddingTop),paddingEnd:zx(o.paddingBottom)}})}})}),[yde,fV]=aV(Xo),hV=v.forwardRef((t,e)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:s,onThumbPointerUp:o,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:u,onWheelScroll:d,onResize:f,...h}=t,p=Ts(Xo,n),[g,m]=v.useState(null),y=Ot(e,P=>m(P)),b=v.useRef(null),x=v.useRef(""),w=p.viewport,S=r.content-r.viewport,C=Cr(d),_=Cr(l),A=aw(f,10);function j(P){if(b.current){const k=P.clientX-b.current.left,O=P.clientY-b.current.top;u({x:k,y:O})}}return v.useEffect(()=>{const P=k=>{const O=k.target;(g==null?void 0:g.contains(O))&&C(k,S)};return document.addEventListener("wheel",P,{passive:!1}),()=>document.removeEventListener("wheel",P,{passive:!1})},[w,g,S,C]),v.useEffect(_,[r,_]),tf(g,A),tf(p.content,A),a.jsx(yde,{scope:n,scrollbar:g,hasThumb:i,onThumbChange:Cr(s),onThumbPointerUp:Cr(o),onThumbPositionChange:_,onThumbPointerDown:Cr(c),children:a.jsx(it.div,{...h,ref:y,style:{position:"absolute",...h.style},onPointerDown:Ne(t.onPointerDown,P=>{P.button===0&&(P.target.setPointerCapture(P.pointerId),b.current=g.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",p.viewport&&(p.viewport.style.scrollBehavior="auto"),j(P))}),onPointerMove:Ne(t.onPointerMove,j),onPointerUp:Ne(t.onPointerUp,P=>{const k=P.target;k.hasPointerCapture(P.pointerId)&&k.releasePointerCapture(P.pointerId),document.body.style.webkitUserSelect=x.current,p.viewport&&(p.viewport.style.scrollBehavior=""),b.current=null})})})}),Hx="ScrollAreaThumb",pV=v.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=fV(Hx,t.__scopeScrollArea);return a.jsx(Kr,{present:n||i.hasThumb,children:a.jsx(xde,{ref:e,...r})})}),xde=v.forwardRef((t,e)=>{const{__scopeScrollArea:n,style:r,...i}=t,s=Ts(Hx,n),o=fV(Hx,n),{onThumbPositionChange:c}=o,l=Ot(e,f=>o.onThumbChange(f)),u=v.useRef(),d=aw(()=>{u.current&&(u.current(),u.current=void 0)},100);return v.useEffect(()=>{const f=s.viewport;if(f){const h=()=>{if(d(),!u.current){const p=Sde(f,c);u.current=p,c()}};return c(),f.addEventListener("scroll",h),()=>f.removeEventListener("scroll",h)}},[s.viewport,d,c]),a.jsx(it.div,{"data-state":o.hasThumb?"visible":"hidden",...i,ref:l,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:Ne(t.onPointerDownCapture,f=>{const p=f.target.getBoundingClientRect(),g=f.clientX-p.left,m=f.clientY-p.top;o.onThumbPointerDown({x:g,y:m})}),onPointerUp:Ne(t.onPointerUp,o.onThumbPointerUp)})});pV.displayName=Hx;var qT="ScrollAreaCorner",mV=v.forwardRef((t,e)=>{const n=Ts(qT,t.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?a.jsx(bde,{...t,ref:e}):null});mV.displayName=qT;var bde=v.forwardRef((t,e)=>{const{__scopeScrollArea:n,...r}=t,i=Ts(qT,n),[s,o]=v.useState(0),[c,l]=v.useState(0),u=!!(s&&c);return tf(i.scrollbarX,()=>{var f;const d=((f=i.scrollbarX)==null?void 0:f.offsetHeight)||0;i.onCornerHeightChange(d),l(d)}),tf(i.scrollbarY,()=>{var f;const d=((f=i.scrollbarY)==null?void 0:f.offsetWidth)||0;i.onCornerWidthChange(d),o(d)}),u?a.jsx(it.div,{...r,ref:e,style:{width:s,height:c,position:"absolute",right:i.dir==="ltr"?0:void 0,left:i.dir==="rtl"?0:void 0,bottom:0,...t.style}}):null});function zx(t){return t?parseInt(t,10):0}function gV(t,e){const n=t/e;return isNaN(n)?0:n}function ow(t){const e=gV(t.viewport,t.content),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,r=(t.scrollbar.size-n)*e;return Math.max(r,18)}function wde(t,e,n,r="ltr"){const i=ow(n),s=i/2,o=e||s,c=i-o,l=n.scrollbar.paddingStart+o,u=n.scrollbar.size-n.scrollbar.paddingEnd-c,d=n.content-n.viewport,f=r==="ltr"?[0,d]:[d*-1,0];return vV([l,u],f)(t)}function AR(t,e,n="ltr"){const r=ow(e),i=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,s=e.scrollbar.size-i,o=e.content-e.viewport,c=s-r,l=n==="ltr"?[0,o]:[o*-1,0],u=vm(t,l);return vV([0,o],[0,c])(u)}function vV(t,e){return n=>{if(t[0]===t[1]||e[0]===e[1])return e[0];const r=(e[1]-e[0])/(t[1]-t[0]);return e[0]+r*(n-t[0])}}function yV(t,e){return t>0&&t{})=>{let n={left:t.scrollLeft,top:t.scrollTop},r=0;return function i(){const s={left:t.scrollLeft,top:t.scrollTop},o=n.left!==s.left,c=n.top!==s.top;(o||c)&&e(),n=s,r=window.requestAnimationFrame(i)}(),()=>window.cancelAnimationFrame(r)};function aw(t,e){const n=Cr(t),r=v.useRef(0);return v.useEffect(()=>()=>window.clearTimeout(r.current),[]),v.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,e)},[n,e])}function tf(t,e){const n=Cr(e);Gr(()=>{let r=0;if(t){const i=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return i.observe(t),()=>{window.cancelAnimationFrame(r),i.unobserve(t)}}},[t,n])}function Cde(t,e){const{asChild:n,children:r}=t;if(!n)return typeof e=="function"?e(r):e;const i=v.Children.only(r);return v.cloneElement(i,{children:typeof e=="function"?e(i.props.children):e})}var xV=cV,_de=uV,Ade=mV;const cw=v.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(xV,{ref:r,className:Pe("relative overflow-hidden",t),...n,children:[a.jsx(_de,{className:"h-full w-full rounded-[inherit]",children:e}),a.jsx(bV,{}),a.jsx(Ade,{})]}));cw.displayName=xV.displayName;const bV=v.forwardRef(({className:t,orientation:e="vertical",...n},r)=>a.jsx(KT,{ref:r,orientation:e,className:Pe("flex touch-none select-none transition-colors",e==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",e==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",t),...n,children:a.jsx(pV,{className:"relative flex-1 rounded-full bg-border"})}));bV.displayName=KT.displayName;const jde=({participants:t,isVisible:e,selectedIndex:n,onSelect:r,onClose:i,position:s})=>{const o=v.useRef(null);return v.useEffect(()=>{const c=l=>{o.current&&!o.current.contains(l.target)&&i()};if(e)return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[e,i]),v.useEffect(()=>{if(e&&n>=0&&o.current){const c=o.current.children[n];c&&c.scrollIntoView({block:"nearest",behavior:"smooth"})}},[n,e]),!e||t.length===0?null:a.jsxs("div",{ref:o,className:"absolute z-50 w-64 max-h-48 overflow-y-auto bg-white border border-slate-200 rounded-lg shadow-lg",style:{top:s.top,left:s.left},children:[t.map((c,l)=>{const u=c.id||c._id,d=l===n;return a.jsxs("div",{className:`flex items-center p-3 cursor-pointer transition-colors ${d?"bg-blue-50 border-l-4 border-blue-500":"hover:bg-slate-50"}`,onClick:()=>r(c),children:[a.jsx("img",{src:_g(c),alt:c.name,className:"h-8 w-8 rounded-full object-cover mr-3 flex-shrink-0"}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("p",{className:`font-medium truncate ${d?"text-blue-900":"text-slate-900"}`,children:c.name}),a.jsx("p",{className:`text-sm truncate ${d?"text-blue-600":"text-slate-500"}`,children:c.occupation})]})]},u)}),t.length===0&&a.jsx("div",{className:"p-3 text-center text-slate-500 text-sm",children:"No participants found"})]})};function R1(t,e){const n=[],r=[],i=/@(\w+(?:\s+\w+)*?)(?=\s+and\s|\s+or\s|\s*[^\w\s]|\s*$)/g;let s;for(;(s=i.exec(t))!==null;){const o=s[1],c=s.index,l=s.index+s[0].length,u=e.find(d=>d.name.toLowerCase()===o.toLowerCase());if(u){const d=u.id||u._id;d&&(n.push({id:d,name:u.name,startIndex:c,endIndex:l}),r.includes(d)||r.push(d))}}return{text:t,mentions:n,mentionedParticipantIds:r}}function Ede(t,e){if(e.length===0)return[t];const n=[];let r=0;return[...e].sort((s,o)=>s.startIndex-o.startIndex).forEach((s,o)=>{s.startIndex>r&&n.push(t.slice(r,s.startIndex)),n.push(T.createElement("span",{key:`mention-${o}`,className:"text-blue-600 bg-blue-50 px-1 rounded font-medium"},`@${s.name}`)),r=s.endIndex}),r=0;n--){const r=t[n];if(r==="@"){if(n===0||/\s/.test(t[n-1]))return n}else if(/\s/.test(r))break}return null}function Pde(t,e,n){return t.slice(e+1,n).toLowerCase()}function kde(t,e){return e?t.filter(n=>n.name.toLowerCase().includes(e)):t}const wV=v.forwardRef(({value:t,onChange:e,participants:n,placeholder:r="Ask a question or provide guidance...",className:i="",disabled:s=!1},o)=>{const[c,l]=v.useState(!1),[u,d]=v.useState(0),[f,h]=v.useState({top:0,left:0}),[p,g]=v.useState(null),[m,y]=v.useState([]),b=v.useRef(null),x=v.useRef(null);v.useEffect(()=>{o&&b.current&&(typeof o=="function"?o(b.current):o.current=b.current)},[o]);const w=()=>{if(b.current&&x.current&&p!==null){const j=b.current,P=x.current,k=document.createElement("div");k.style.position="absolute",k.style.visibility="hidden",k.style.whiteSpace="pre",k.style.font=window.getComputedStyle(j).font,k.textContent=t.slice(0,p),document.body.appendChild(k);const O=k.offsetWidth;document.body.removeChild(k);const E=P.getBoundingClientRect(),R=j.getBoundingClientRect();h({top:R.height+4,left:Math.min(O,E.width-280)})}},S=j=>{const P=j.target.value,k=j.target.selectionStart||0,O=Tde(P,k);if(O!==null&&n.length>0){const R=Pde(P,O,k),M=kde(n,R);g(O),y(M),d(0),l(!0)}else l(!1),g(null);const E=R1(P,n);e(P,E)},C=j=>{if(c&&m.length>0)switch(j.key){case"ArrowDown":j.preventDefault(),d(P=>PP>0?P-1:m.length-1);break;case"Enter":case"Tab":j.preventDefault(),m[u]&&_(m[u]);break;case"Escape":j.preventDefault(),l(!1);break}},_=j=>{if(p!==null&&b.current){const P=b.current.selectionStart||0,{newText:k,newCursorPosition:O}=Nde(t,P,j,p),E=R1(k,n);e(k,E),setTimeout(()=>{b.current&&(b.current.focus(),b.current.setSelectionRange(O,O))},0),l(!1),g(null)}},A=()=>{l(!1),g(null)};return v.useEffect(()=>{c&&p!==null&&w()},[c,p,t]),a.jsxs("div",{ref:x,className:`relative ${i}`,children:[a.jsx("input",{ref:b,type:"text",value:t,onChange:S,onKeyDown:C,placeholder:r,disabled:s,className:"flex h-10 w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"}),a.jsx(jde,{participants:m,isVisible:c,selectedIndex:u,onSelect:_,onClose:A,position:f})]})});wV.displayName="MentionInput";const Ode=({message:t,persona:e,toggleHighlight:n,participants:r=[],focusGroupId:i})=>{const[s,o]=v.useState(!1),c=t.senderId==="moderator",l=t.senderId==="facilitator",u=R1(t.text,r),d=Ede(t.text,u.mentions),f=(c||l)&&(t.visualAsset||g(t.text))&&i,p=(()=>{if(t.visualAsset)return{filename:t.visualAsset.filename,displayReference:t.visualAsset.displayReference};{const y=g(t.text);return y?{filename:y,displayReference:y}:null}})();function g(y){const b=[/titled\s+['"]([^'"]+\.(jpg|jpeg|png))['\"]/i,/asset\s+['"]([^'"]+\.(jpg|jpeg|png))['\"]/i,/(fg-[a-f0-9]+-[a-f0-9]{32}\.(jpg|jpeg|png))/i];for(const x of b){const w=y.match(x);if(w)return w[1]}return null}const m=()=>{n()};return a.jsxs("div",{id:`message-${t.id}`,className:Pe("flex items-start p-3 rounded-lg transition-colors",t.highlighted?"bg-amber-50 border border-amber-200":"hover:bg-slate-50",c?"border-l-4 border-l-primary pl-4":"",l?"border-l-4 border-l-green-500 pl-4":""),onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),"data-highlighted":t.highlighted?"true":"false",children:[a.jsx("div",{className:"flex-shrink-0 mr-3",children:c?a.jsx("div",{className:"bg-primary/10 p-2 rounded-full",children:a.jsx(va,{className:"h-6 w-6 text-primary"})}):l?a.jsx("div",{className:"bg-green-100 p-2 rounded-full",children:a.jsx(qp,{className:"h-6 w-6 text-green-600"})}):e?a.jsx("div",{className:"bg-slate-100 p-2 rounded-full",children:a.jsx("img",{src:_g(e),alt:`${e.name} avatar`,className:"h-6 w-6 rounded-full object-cover"})}):a.jsx("div",{className:"bg-slate-100 p-2 rounded-full",children:a.jsx(GJ,{className:"h-6 w-6 text-slate-600"})})}),a.jsxs("div",{className:"flex-1",children:[a.jsxs("div",{className:"flex items-center mb-1",children:[a.jsx("span",{className:"font-medium mr-2",children:c?"AI Moderator":l?"Human Facilitator":(e==null?void 0:e.name)||"Unknown"}),!c&&!l&&e&&a.jsx(Hn,{variant:"outline",className:"text-xs font-normal",children:e.occupation}),a.jsx("span",{className:"text-xs text-slate-500 ml-auto",children:t.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),a.jsx("p",{className:"text-slate-700",children:!t.text||t.text.trim()===""||t.text==="..."?a.jsx("span",{className:"text-red-500 italic",children:"[No response content - AI generation may have failed]"}):d}),f&&p&&a.jsxs("div",{className:"mt-3 p-3 border rounded-lg bg-slate-50",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(op,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Creative Asset"}),p.displayReference!==p.filename&&a.jsxs("span",{className:"text-xs text-slate-500",children:["(",p.displayReference,")"]})]}),a.jsx("img",{src:pt.getAssetUrl(i,p.filename),alt:"Creative asset for review",className:"max-w-full h-auto rounded border shadow-sm",style:{maxHeight:"300px"},onError:y=>{var x;console.error("Failed to load creative asset:",pt.getAssetUrl(i,p.filename)),y.currentTarget.style.display="none";const b=document.createElement("div");b.className="text-xs text-slate-500 italic p-2 border rounded bg-slate-100",b.textContent=`Creative asset not found: ${p.displayReference}`,(x=y.currentTarget.parentNode)==null||x.appendChild(b)}})]}),a.jsx("div",{className:Pe("flex mt-2 space-x-2",!s&&!t.highlighted&&"hidden"),children:a.jsxs(ee,{variant:"ghost",size:"sm",onClick:m,className:"h-8 px-2 text-xs",children:[a.jsx(fZ,{className:Pe("h-3 w-3 mr-1",t.highlighted?"fill-amber-400 text-amber-400":"text-slate-400")}),t.highlighted?"Highlighted":"Highlight"]})})]})]})},Ide=({action:t})=>{switch(t){case"moderator_speak":return a.jsx(Vo,{className:"h-4 w-4 text-blue-500"});case"participant_respond":return a.jsx(Dr,{className:"h-4 w-4 text-green-500"});case"participant_interaction":return a.jsx(Dr,{className:"h-4 w-4 text-purple-500"});case"probe_trigger":return a.jsx(d5,{className:"h-4 w-4 text-orange-500"});case"end_session":return a.jsx(mZ,{className:"h-4 w-4 text-red-500"});default:return a.jsx(lu,{className:"h-4 w-4 text-gray-500"})}},Rde=({status:t})=>{switch(t){case"success":return a.jsx(IE,{className:"h-3 w-3 text-green-500"});case"error":return a.jsx(KJ,{className:"h-3 w-3 text-red-500"});case"pending":return a.jsx(Kp,{className:"h-3 w-3 text-yellow-500 animate-pulse"});default:return null}},Mde=({action:t})=>({moderator_speak:"Moderator",participant_respond:"Participant Response",participant_interaction:"Participant Interaction",probe_trigger:"Probe Question",end_session:"End Session"})[t]||t,Dde=t=>{try{return new Date(t).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return t}},$de=({entry:t,isLatest:e})=>{const[n,r]=v.useState(e);return a.jsx(ut,{className:`mb-2 ${e?"ring-2 ring-blue-200 bg-blue-50/50":""}`,children:a.jsxs(Ag,{open:n,onOpenChange:r,children:[a.jsx(jg,{asChild:!0,children:a.jsx(ji,{className:"pb-2 cursor-pointer hover:bg-gray-50/50 transition-colors",children:a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Ide,{action:t.action}),a.jsxs("div",{className:"flex flex-col",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("span",{className:"font-medium text-sm",children:a.jsx(Mde,{action:t.action})}),a.jsx(Rde,{status:t.execution_status})]}),a.jsx("span",{className:"text-xs text-gray-500",children:Dde(t.timestamp)})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[e&&a.jsx(Hn,{variant:"secondary",className:"text-xs",children:"Latest"}),n?a.jsx(uu,{className:"h-4 w-4 text-gray-400"}):a.jsx(Ra,{className:"h-4 w-4 text-gray-400"})]})]})})}),a.jsx(Eg,{children:a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium text-gray-700 mb-1",children:"AI Reasoning:"}),a.jsxs("p",{className:"text-sm text-gray-600 bg-gray-50 p-2 rounded italic",children:['"',t.reasoning,'"']})]}),t.details&&Object.keys(t.details).length>0&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium text-gray-700 mb-1",children:"Details:"}),a.jsx("div",{className:"text-xs text-gray-600 bg-gray-50 p-2 rounded font-mono",children:JSON.stringify(t.details,null,2)})]}),t.execution_result&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium text-gray-700 mb-1",children:"Execution Result:"}),a.jsx("div",{className:"text-xs text-gray-600 bg-gray-50 p-2 rounded",children:t.execution_result.error?a.jsxs("span",{className:"text-red-600",children:["Error: ",t.execution_result.error]}):a.jsx("span",{className:"text-green-600",children:t.execution_result.message||"Success"})})]})]})})})]})})},Lde=({reasoningHistory:t,isVisible:e,onToggle:n,isAiMode:r=!1})=>{const[i,s]=v.useState(!0);return v.useEffect(()=>{if(i&&t.length>0){const o=document.getElementById("reasoning-panel-content");o&&(o.scrollTop=0)}},[t.length,i]),a.jsx("div",{className:"border-t border-gray-200 bg-white",children:a.jsxs(Ag,{open:e,onOpenChange:n,children:[a.jsx(jg,{asChild:!0,children:a.jsxs("div",{className:"flex items-center justify-between p-3 cursor-pointer hover:bg-gray-50 transition-colors",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(lu,{className:"h-4 w-4 text-purple-600"}),a.jsx("span",{className:"font-medium text-sm",children:r?"AI Decision Reasoning":"AI Moderator Logic"}),r&&t.length>0&&a.jsx(Hn,{variant:"outline",className:"text-xs",children:t.length}),!r&&a.jsx(Hn,{variant:"secondary",className:"text-xs",children:"Manual Mode"})]}),e?a.jsx(uu,{className:"h-4 w-4 text-gray-400"}):a.jsx(Ra,{className:"h-4 w-4 text-gray-400"})]})}),a.jsx(Eg,{children:a.jsx("div",{className:"border-t border-gray-100",children:r?t.length===0?a.jsxs("div",{className:"p-4 text-center text-gray-500",children:[a.jsx(lu,{className:"h-8 w-8 mx-auto mb-2 text-gray-300"}),a.jsx("p",{className:"text-sm",children:"No AI decisions yet"}),a.jsx("p",{className:"text-xs text-gray-400",children:"Reasoning will appear here when the AI makes decisions"})]}):a.jsx(cw,{id:"reasoning-panel-content",className:"h-[25vh] p-3",children:a.jsx("div",{className:"space-y-2",children:t.map((o,c)=>a.jsx($de,{entry:o,isLatest:c===0},`${o.timestamp}-${c}`))})}):a.jsxs("div",{className:"p-4 text-center text-gray-500",children:[a.jsx(LE,{className:"h-8 w-8 mx-auto mb-2 text-gray-400"}),a.jsx("p",{className:"text-sm font-medium text-gray-700",children:"Manual Moderation Mode"}),a.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"You are currently moderating the discussion manually."}),a.jsx("p",{className:"text-xs text-gray-500 mt-2",children:"Switch to AI Mode to see automated reasoning and decisions."})]})})})]})})},Fde=({modeEvent:t})=>{const e=i=>i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),n=i=>{switch(i){case"ai_mode_started":return"AI Mode Started";case"manual_mode_started":return"Manual Moderation Enabled";case"ai_session_concluded":return"AI Discussion Concluded";default:return"Mode Changed"}},r=i=>{switch(i){case"ai_mode_started":return"text-blue-600";case"manual_mode_started":return"text-slate-600";case"ai_session_concluded":return"text-green-600";default:return"text-gray-600"}};return a.jsxs("div",{className:"flex items-center my-6 px-4",children:[a.jsx("div",{className:"flex-1 border-t border-gray-200"}),a.jsx("div",{className:`mx-4 px-3 py-1 bg-white border border-gray-200 rounded-full ${r(t.event_type)}`,children:a.jsxs("div",{className:"flex items-center space-x-2 text-xs font-medium",children:[a.jsx("span",{children:n(t.event_type)}),a.jsx("span",{className:"text-gray-400",children:"at"}),a.jsx("span",{children:e(t.timestamp)})]})}),a.jsx("div",{className:"flex-1 border-t border-gray-200"})]})},Ude=({messages:t,modeEvents:e,personas:n,isSpeaking:r,focusGroupId:i,isAiModeActive:s=!1,selectedParticipantIds:o,onToggleHighlight:c,onAdvanceDiscussion:l,onNewMessage:u,onStatusChange:d,isEditingDiscussionGuide:f=!1})=>{const[h,p]=v.useState(""),[g,m]=v.useState(null),[y,b]=v.useState(!1),[x,w]=v.useState(null),S=v.useRef(null),[C,_]=v.useState(-1),[A,j]=v.useState(!1),P=v.useRef(0),k=v.useRef(null),O=v.useRef(1e4),E=v.useRef(null),[R,M]=v.useState(!1),[G,L]=v.useState(!1),[V,I]=v.useState(!1),[D,X]=v.useState(null),Q=D!==null?D:s,[J,ye]=v.useState([]),[U,ne]=v.useState(!1),ue=U;v.useEffect(()=>{s&&i&&F()},[s,i]);const F=async()=>{if(i)try{s&&ce()}catch(H){console.error("Error checking autonomous status:",H)}},ce=async()=>{if(i)try{const H=await er.getReasoningHistory(i);ye(H.data.reasoning_history||[])}catch(H){console.error("Error fetching reasoning history:",H)}};v.useEffect(()=>{R&&Y()},[t,R]),v.useEffect(()=>{let H;return s&&i&&(H=setInterval(()=>{ce(),F()},5e3)),()=>{H&&clearInterval(H)}},[s,i]),v.useEffect(()=>{P.current=t.length},[]),v.useEffect(()=>{const H=t.length,re=P.current;if(A&&H>re){const me=Date.now(),be=k.current;if(be&&me-be>=O.current)b(!1),j(!1),k.current=null;else if(be){const ke=O.current-(me-be);setTimeout(()=>{b(!1),j(!1),k.current=null},Math.max(0,ke))}else b(!1),j(!1)}P.current=H},[t.length,A]);const te=H=>n.find(re=>re.id===H||re._id===H),pe=o.length===0?t:t.filter(H=>H.senderId==="moderator"||H.senderId==="facilitator"||o.includes(H.senderId)),we=()=>{const H=[];return pe.forEach(re=>{H.push({type:"message",data:re,timestamp:re.timestamp})}),e.forEach(re=>{H.push({type:"mode_event",data:re,timestamp:re.timestamp})}),H.sort((re,me)=>re.timestamp.getTime()-me.timestamp.getTime())},Y=()=>{if(!f&&E.current){const H=E.current.closest("[data-radix-scroll-area-viewport]");if(H){const re=E.current.offsetTop-H.clientHeight+50,me=H.scrollTop,be=re-me,ke=300;let Se=null;const qe=st=>{Se||(Se=st);const Dt=st-Se,We=Math.min(Dt/ke,1),Je=1-Math.pow(1-We,3);H.scrollTop=me+be*Je,We<1&&window.requestAnimationFrame(qe)};window.requestAnimationFrame(qe)}else E.current.scrollIntoView({behavior:"smooth",block:"end"})}},nt=async H=>{var Se,qe;if(H.preventDefault(),!h.trim())return;let re=h,me=null,be=null;const ke=g;p(""),m(null),b(!0),j(!0),k.current=Date.now();try{if(x){try{se.info("Uploading creative asset...",{description:"Please wait while we upload your image."});const We=new FormData;We.append("assets",x);const Je=await pt.uploadAssets(i,We);console.log("Upload response:",Je==null?void 0:Je.data);const At=Je==null?void 0:Je.data;if(At&&At.assets&&At.assets.length>0?(me=At.assets[0].filename,console.log("Successfully got filename from upload response:",me)):console.error("Invalid upload response structure:",At),me){try{const Yt=await pt.getAssets(i),Xn=((Se=Yt==null?void 0:Yt.data)==null?void 0:Se.assets)||[],cr=Xn.find(jt=>jt.filename===me);let ct="the uploaded asset";cr&&(cr.user_assigned_name?ct=cr.user_assigned_name:ct=`Asset ${Xn.findIndex(ot=>ot.filename===me)+1}`),be={filename:me,displayReference:ct},re=`Please review ${ct}. ${h}`,console.log("Using display reference in message:",ct)}catch(Yt){console.error("Error fetching asset metadata:",Yt),re=`Please review the uploaded asset. ${h}`,be={filename:me,displayReference:"the uploaded asset"}}se.success("Creative asset uploaded successfully",{description:"The image has been attached to your message."})}}catch(We){console.error("Error uploading file:",We),console.error("Upload error details:",(qe=We.response)==null?void 0:qe.data),se.error("Failed to upload creative asset",{description:"Your message will be sent without the attachment."})}B()}const st={text:re,type:"question",senderId:"facilitator"};me&&(st.attached_assets=[me],st.activates_visual_context=!0,be&&(st.visualAsset=be));const Dt=await pt.sendMessage(i,st);console.log("Message sent to API:",Dt),setTimeout(()=>{Y()},100),ke&&ke.mentionedParticipantIds.length>0?setTimeout(()=>{K(ke.mentionedParticipantIds,re)},500):(b(!1),j(!1),k.current=null)}catch(st){console.error("Error sending message:",st),b(!1),j(!1),k.current=null;const Dt={id:`msg-${Date.now()}`,senderId:"facilitator",text:h,timestamp:new Date,type:"question"};u(Dt),setTimeout(()=>{Y()},100),se.error("Failed to send message to server",{description:"Message will be shown locally but not saved."})}},Ue=()=>{for(let H=t.length-1;H>=0;H--)if(t[H].senderId==="moderator"&&t[H].type==="question")return t[H].text;for(let H=t.length-1;H>=0;H--)if(t[H].senderId==="moderator")return t[H].text;return"What are your thoughts on this topic?"},at=(H,re)=>{if(!H||!H.sections||!re)return null;const{section_index:me,subsection_index:be,item_index:ke,item_type:Se}=re,qe=H.sections,st=We=>{const Je=[];return We.questions&&We.questions.forEach((At,Yt)=>{Je.push({...At,type:"question",index:Yt})}),We.activities&&We.activities.forEach((At,Yt)=>{Je.push({...At,type:"activity",index:Yt})}),Je.sort((At,Yt)=>At.type!==Yt.type?At.type==="question"?-1:1:At.index-Yt.index)};if(me>=qe.length)return{completed:!0};const Dt=qe[me];if(be!==void 0&&Dt.subsections){if(be>=Dt.subsections.length)return at(H,{section_index:me+1,subsection_index:void 0,item_index:0,item_type:"question"});const We=Dt.subsections[be],Je=st(We),At=Je.findIndex(Yt=>Yt.type===Se&&Yt.index===ke);if(At0){const Je=We.findIndex(At=>At.type===Se&&At.index===ke);if(Je0?at(H,{section_index:me,subsection_index:0,item_index:0,item_type:"question"}):at(H,{section_index:me+1,subsection_index:void 0,item_index:0,item_type:"question"})}},Be=async()=>{var H,re,me;if(i)try{b(!0),j(!0),k.current=Date.now(),se.info("Advancing discussion...",{description:"Moving to the next question in the discussion guide."});const[be,ke]=await Promise.all([er.getModeratorStatus(i),pt.getById(i)]);if(!((H=be==null?void 0:be.data)!=null&&H.status)||!((re=ke==null?void 0:ke.data)!=null&&re.discussionGuide))throw new Error("Could not fetch moderator status or discussion guide");const Se=be.data.status,qe=ke.data.discussionGuide;if(!qe.sections)throw new Error("Discussion guide does not have a structured format");const st=at(qe,Se.moderator_position);if(!st)throw new Error("Could not determine next discussion item");if(st.completed){se.success("Discussion guide completed",{description:"All sections of the discussion guide have been covered."});const We={id:`msg-${Date.now()}`,senderId:"moderator",text:"We have covered all the questions in our discussion guide. Thank you all for your valuable insights and participation in this focus group session.",timestamp:new Date,type:"system"};u(We),b(!1),j(!1),k.current=null;return}await er.setModeratorPosition(i,st.sectionId,st.itemId);const Dt={id:`msg-${Date.now()}`,senderId:"moderator",text:st.content,timestamp:new Date,type:"question"};try{const We=await pt.sendMessage(i,{senderId:"moderator",text:Dt.text,type:"question"});(me=We==null?void 0:We.data)!=null&&me.message_id&&(Dt.id=We.data.message_id)}catch(We){console.warn("Failed to save message to API, showing locally:",We)}u(Dt),b(!1),j(!1),k.current=null,setTimeout(()=>{Y()},100),se.success("Discussion advanced",{description:`Moved to: ${st.section.title}${st.subsection?` > ${st.subsection.title}`:""}`}),d&&setTimeout(()=>d(),500)}catch(be){console.error("Error advancing discussion:",be),se.error("Failed to advance discussion",{description:be.message||"There was a problem advancing to the next question."}),b(!1),j(!1),k.current=null}},Bt=async()=>{var H,re,me,be;if(i){console.log("Starting AI Mode: setting autonomousLoading to true"),I(!0);try{console.log("Starting AI Mode: calling API...");const Se=await Promise.race([er.startAutonomousConversation(i),new Promise((qe,st)=>setTimeout(()=>st(new Error("API call timeout after 30 seconds")),3e4))]);if(console.log("Starting AI Mode: API response received:",Se),Se.data.error){se.error("Failed to start autonomous conversation",{description:Se.data.error}),I(!1);return}se.success("Autonomous conversation started",{description:"The AI is now managing the focus group conversation"}),X(!0);try{console.log("Starting AI Mode: calling onStatusChange..."),d&&(await d(),console.log("Starting AI Mode: onStatusChange completed successfully"))}catch(qe){console.error("Starting AI Mode: onStatusChange failed:",qe)}console.log("Starting AI Mode: resetting autonomousLoading to false"),I(!1),ce()}catch(ke){console.error("Error starting autonomous conversation:",ke),ke.response&&ke.response.data&&console.error("Backend error details:",ke.response.data);const Se=((re=(H=ke.response)==null?void 0:H.data)==null?void 0:re.message)||((be=(me=ke.response)==null?void 0:me.data)==null?void 0:be.error)||"Please check your connection and try again";se.error("Failed to start autonomous conversation",{description:Se}),I(!1)}}},N=async()=>{if(i){console.log("Stopping AI Mode: setting autonomousLoading to true"),I(!0);try{const H=await er.stopAutonomousConversation(i,"manual_stop");if(H.data.error){se.error("Failed to stop autonomous conversation",{description:H.data.error}),I(!1);return}ye([]),se.success("Autonomous conversation stopped",{description:"You can now moderate the discussion manually"}),X(!1);try{console.log("Stopping AI Mode: calling onStatusChange..."),d&&(await d(),console.log("Stopping AI Mode: onStatusChange completed successfully"))}catch(re){console.error("Stopping AI Mode: onStatusChange failed:",re)}console.log("Stopping AI Mode: resetting autonomousLoading to false"),I(!1)}catch(H){console.error("Error stopping autonomous conversation:",H),se.error("Failed to stop autonomous conversation"),I(!1)}}},$=H=>{var me;const re=(me=H.target.files)==null?void 0:me[0];if(re){if(!re.type.startsWith("image/")){se.error("Please select an image file",{description:"Only image files (JPG, PNG, etc.) are supported for creative review."});return}if(re.size>10*1024*1024){se.error("File too large",{description:"Please select an image smaller than 10MB."});return}w(re),se.success(`Image selected: ${re.name}`,{description:"The image will be attached to your next message."})}},B=()=>{w(null),S.current&&(S.current.value="")},K=async(H,re)=>{var me;if(!(!i||H.length===0))try{b(!0),j(!0),k.current=Date.now(),se.info("Generating responses from mentioned participants...",{description:`Generating responses from ${H.length} mentioned participant(s).`});for(const be of H){const ke=n.find(Se=>(Se._id||Se.id)===be);if(!ke){console.warn(`Mentioned participant ${be} not found in focus group`);continue}try{const Se=await er.generateResponse(i,be,re||"Continue the conversation based on the latest moderator message.");if((me=Se==null?void 0:Se.data)!=null&&me.response){console.log("Generated response from mentioned participant:",Se.data);const qe={id:Se.data.message_id||`msg-${Date.now()}-${be}`,senderId:be,text:Se.data.response,timestamp:new Date(Se.data.timestamp||Se.data.created_at||new Date),type:"response"};u(qe),se.success(`Response generated from ${ke.name}`,{description:Se.data.response.substring(0,100)+"..."})}}catch(Se){console.error(`Error generating response from ${ke.name}:`,Se),se.error(`Failed to generate response from ${ke.name}`)}}b(!1),j(!1),k.current=null}catch(be){console.error("Error generating mentioned responses:",be),se.error("Failed to generate responses from mentioned participants"),b(!1),j(!1),k.current=null}},Z=async()=>{var H,re,me,be;if(i){if(n.length===0){se.error("No participants available",{description:"Add participants to the focus group before generating responses."});return}try{b(!0),j(!0),k.current=Date.now(),se.info("AI is selecting participant...",{description:"Analyzing the conversation to choose the best respondent."});const ke=await er.makeConversationDecision(i,.7,"manual");if(!ke||!ke.data||!ke.data.decision)throw new Error("Empty decision response from AI");const Se=ke.data.decision;if(Se.action==="participant_respond"){const qe=Se.details.participant_id,st=Se.details.topic_context,Dt=Se.reasoning,We=n.find(At=>(At._id||At.id)===qe);if(!We)throw new Error(`Selected participant ${qe} not found in focus group`);se.info("Generating response...",{description:`AI selected ${We.name}: ${Dt.substring(0,100)}${Dt.length>100?"...":""}`});const Je=await er.generateResponse(i,qe,st);if(!Je||!Je.data)throw new Error("Empty response from API");if((H=Je==null?void 0:Je.data)!=null&&H.message_id&&((re=Je==null?void 0:Je.data)!=null&&re.response)){const At={id:Je.data.message_id,senderId:qe,text:Je.data.response,timestamp:new Date(Je.data.timestamp||Je.data.created_at||new Date),type:"response",highlighted:!1};u(At),b(!1),j(!1),k.current=null,setTimeout(()=>{Y()},100)}else throw new Error("Failed to generate or save AI response")}else{if(console.log("AI suggested different action:",Se.action),Se.action==="moderator_speak"){se.info("AI suggests moderator intervention",{description:`AI reasoning: ${Se.reasoning.substring(0,100)}${Se.reasoning.length>100?"...":""}`}),b(!1),j(!1),k.current=null;return}se.warning("Using fallback participant selection",{description:`AI suggested "${Se.action}" but generating participant response anyway.`});const qe=(C+1)%n.length,st=n[qe],Dt=Ue(),We=st._id||st.id,Je=await er.generateResponse(i,We,Dt);if((me=Je==null?void 0:Je.data)!=null&&me.message_id&&((be=Je==null?void 0:Je.data)!=null&&be.response)){const At={id:Je.data.message_id,senderId:We,text:Je.data.response,timestamp:new Date(Je.data.timestamp||Je.data.created_at||new Date),type:"response",highlighted:!1};u(At),b(!1),j(!1),k.current=null,setTimeout(()=>{Y()},100),_(qe)}}}catch(ke){console.error("Error generating AI response:",ke),se.error("Failed to generate AI response",{description:"There was a problem connecting to the server."}),b(!1),j(!1),k.current=null}}};return a.jsxs("div",{className:"glass-panel rounded-xl p-4 flex flex-col h-full",children:[a.jsx("div",{className:"flex-1 min-h-0 mb-4",children:a.jsxs(cw,{className:"h-full pr-4",children:[a.jsxs("div",{className:"space-y-4",children:[we().map(H=>H.type==="message"?a.jsx(Ode,{message:H.data,persona:H.data.senderId!=="moderator"&&H.data.senderId!=="facilitator"?te(H.data.senderId):null,toggleHighlight:()=>c(H.data.id),participants:n,focusGroupId:i},H.data.id):a.jsx(Fde,{modeEvent:H.data},H.data.id)),(y||s)&&a.jsxs("div",{className:"flex items-center space-x-2 text-sm text-slate-500 animate-pulse",children:[a.jsx("div",{className:"bg-primary/10 p-2 rounded-full",children:s?a.jsx(va,{className:"h-4 w-4 text-primary animate-spin"}):a.jsx(jo,{className:"h-4 w-4 text-primary"})}),a.jsx("span",{children:s?"AI is generating next response...":"Generating AI response..."})]}),a.jsx("div",{className:"h-8"}),a.jsx("div",{ref:E,className:"h-1"})]}),!R&&pe.length>6&&a.jsx("div",{className:"sticky bottom-5 ml-auto mr-5 z-10 w-fit",children:a.jsx(ee,{size:"sm",className:"rounded-full shadow-md h-10 w-10 p-0",onClick:Y,title:"Scroll to bottom",children:a.jsx(qO,{className:"h-4 w-4"})})})]})}),a.jsx(Lde,{reasoningHistory:J,isVisible:ue,onToggle:()=>ne(!U),isAiMode:s}),a.jsxs("div",{className:"pt-4 border-t border-slate-200 w-full",children:[x&&a.jsxs("div",{className:"mb-2 p-2 bg-blue-50 border border-blue-200 rounded-md flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(ZO,{className:"h-4 w-4 text-blue-600"}),a.jsx("span",{className:"text-sm text-blue-700",children:x.name}),a.jsxs("span",{className:"text-xs text-blue-500",children:["(",(x.size/1024/1024).toFixed(1)," MB)"]})]}),a.jsx(ee,{type:"button",variant:"ghost",size:"sm",onClick:B,className:"h-6 w-6 p-0 text-blue-600 hover:text-blue-800",children:"×"})]}),a.jsxs("form",{onSubmit:nt,className:"flex items-center gap-2 w-full",children:[a.jsx("input",{ref:S,type:"file",accept:"image/*",onChange:$,className:"hidden"}),a.jsx(wV,{value:h,onChange:(H,re)=>{p(H),m(re||null)},participants:n,placeholder:"Ask a question or provide guidance...",className:"flex-1 min-w-0",disabled:!1}),a.jsx(ee,{type:"button",variant:"outline",size:"sm",onClick:()=>{var H;return(H=S.current)==null?void 0:H.click()},className:"hover-transition shrink-0 px-3",disabled:!1,title:"Attach image for creative review",children:a.jsx(ZO,{className:"h-4 w-4"})}),a.jsxs(ee,{type:"submit",variant:"default",className:"hover-transition shrink-0",disabled:!1,children:[a.jsx(Vo,{className:"mr-2 h-4 w-4"}),"Send"]})]}),a.jsxs("div",{className:"flex justify-between items-center mt-3",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx("p",{className:"text-sm text-slate-500",children:r?"Speaking...":s?"AI mode active":"Manual moderation mode"}),a.jsx(ee,{variant:"outline",size:"sm",onClick:Q?N:Bt,disabled:V,className:`hover-transition ${Q?"bg-red-50 text-red-600 hover:bg-red-100":"bg-blue-50 text-blue-600 hover:bg-blue-100"}`,title:Q?"Stop AI mode and return to manual":"Start autonomous AI conversation",children:V?a.jsxs(a.Fragment,{children:[a.jsx(va,{className:"mr-1 h-3 w-3 animate-spin"}),s?"Stopping...":"Starting..."]}):Q?a.jsxs(a.Fragment,{children:[a.jsx(va,{className:"mr-1 h-3 w-3"}),"Stop AI Mode"]}):a.jsxs(a.Fragment,{children:[a.jsx(va,{className:"mr-1 h-3 w-3"}),"Start AI Mode"]})}),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>{M(!R),R||Y()},className:`hover-transition ${R?"bg-blue-50 text-blue-600 hover:bg-blue-100":""}`,title:R?"Disable auto-scroll":"Enable auto-scroll",children:[a.jsx(qO,{className:"h-3 w-3 mr-1"}),"Auto-scroll"]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[!s&&a.jsxs(a.Fragment,{children:[a.jsxs(ee,{variant:"outline",onClick:Be,className:`hover-transition ${n.length===0?"bg-red-50":""}`,disabled:y,title:n.length===0?"Add participants to the focus group first":"Advance to the next part of the discussion guide",children:[a.jsx(Vo,{className:"mr-2 h-4 w-4"}),n.length===0?"No Participants":"Advance Discussion"]}),a.jsxs(ee,{variant:"ghost",size:"sm",onClick:Z,className:`hover-transition ${n.length===0?"bg-red-50":""}`,disabled:y||n.length===0,title:"Generate a participant response to the current topic",children:[a.jsx(jo,{className:"mr-1 h-3 w-3"}),"Get Response"]})]}),s&&a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsxs("div",{className:"flex items-center gap-1 text-sm text-slate-600",children:[a.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),a.jsx("span",{children:"AI Active"})]}),a.jsx(ee,{variant:"outline",size:"sm",onClick:()=>L(!G),className:"hover-transition",title:"Show autonomous conversation controls",children:a.jsx(LE,{className:"h-3 w-3"})})]})]})]})]})]})},Bde=({themes:t,messages:e,personas:n=[],onThemeDelete:r,onQuoteClick:i})=>{const s=(d,f)=>{d.stopPropagation(),r&&(r(f),se.success("Theme deleted successfully"))},o=d=>n.find(f=>f.id===d||f._id===d),c=d=>{let f=d;const h=d.match(/^\[MSG_ID:[^\]]+\]\s*(.*)$/);h&&(f=h[1]);const p=f.match(/^\[([^\]]+)\]:\s*(.*)$/);if(p)return{persona:p[1],text:p[2]};const g=f.match(/^([^:]+):\s*(.*)$/);return g&&g[1].trim()!==f.trim()?{persona:g[1].trim(),text:g[2]}:{persona:null,text:f}},l=t.filter(d=>"source"in d?d.source==="highlight":!0),u=t.filter(d=>"source"in d&&d.source==="generated");return a.jsxs("div",{className:"glass-panel rounded-xl p-6 h-[70vh] flex flex-col overflow-hidden",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(du,{className:"h-5 w-5 text-primary mr-2"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"Key Themes"})]}),a.jsxs("div",{className:"overflow-auto",children:[u.length>0&&a.jsxs("div",{className:"mb-8",children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(lu,{className:"h-4 w-4 text-primary mr-2"}),a.jsx("h3",{className:"font-medium",children:"AI-Generated Themes"})]}),a.jsx("div",{className:"grid grid-cols-1 gap-4 mb-4",children:u.map(d=>a.jsxs(ut,{className:"hover:shadow-md transition-shadow relative group",children:[r&&a.jsx("button",{className:"absolute top-2 right-2 p-1 rounded-full bg-slate-200 opacity-0 group-hover:opacity-100 transition-opacity",onClick:f=>s(f,d.id),children:a.jsx(Ri,{className:"h-3 w-3 text-slate-700"})}),a.jsx(ji,{className:"pb-2",children:a.jsx(qi,{className:"text-base",children:d.title})}),a.jsxs(Rt,{children:[a.jsx("p",{className:"text-sm text-slate-600 mb-2",children:d.description}),d.quotes&&d.quotes.length>0&&a.jsxs("div",{className:"mt-3",children:[a.jsx("h4",{className:"text-xs font-medium text-slate-700 mb-2",children:"Supporting Quotes:"}),a.jsx("div",{className:"space-y-2",children:d.quotes.map((f,h)=>{const p=typeof f=="object"&&f!==null,g=p?f.text:f,m=p?f.speaker:c(f).persona,y=p?f.message_id:void 0,b=p?f.original:f;return a.jsxs("div",{className:"bg-slate-50 p-2 rounded text-xs text-slate-600 border-l-2 border-slate-200 cursor-pointer hover:bg-slate-100 transition-colors",onClick:x=>{x.stopPropagation(),i&&i(p?f:b,y)},title:y?`Message ID: ${y}`:"Click to find original message",children:[m&&a.jsxs("span",{className:"font-semibold text-slate-700 mr-1",children:[m,":"]}),'"',g,'"',y&&a.jsx("span",{className:"ml-2 text-xs text-green-600 opacity-70",children:"✓"})]},h)})})]})]})]},d.id))})]}),l.length>0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(sZ,{className:"h-4 w-4 text-primary mr-2"}),a.jsx("h3",{className:"font-medium",children:"Highlighted Comments"})]}),a.jsx("div",{className:"grid grid-cols-1 gap-4 mb-4",children:l.map(d=>{const f=d.messages.length>0?e.find(y=>y.id===d.messages[0]):null,h=(f==null?void 0:f.text)||d.text,p=h.length>200?h.substring(0,200)+"...":h,g=f==null?void 0:f.senderId;let m="";if(g==="moderator")m="AI Moderator";else if(g==="facilitator")m="Human Facilitator";else if(g){const y=o(g);m=(y==null?void 0:y.name)||"Unknown Participant"}return a.jsxs(ut,{className:"hover:shadow-md hover:bg-slate-50 transition-all cursor-pointer relative group",onClick:y=>{y.stopPropagation(),i&&f&&i(f.text,f.id)},title:"Click to view in discussion",children:[r&&a.jsx("button",{className:"absolute top-2 right-2 p-1 rounded-full bg-slate-200 opacity-0 group-hover:opacity-100 transition-opacity z-10",onClick:y=>s(y,d.id),children:a.jsx(Ri,{className:"h-3 w-3 text-slate-700"})}),a.jsx(ji,{className:"pb-2",children:a.jsx(qi,{className:"text-sm font-medium text-slate-800 line-clamp-2",children:m&&a.jsx("span",{className:"text-primary font-semibold",children:m})})}),a.jsxs(Rt,{className:"pt-0",children:[a.jsxs("p",{className:"text-sm text-slate-600 leading-relaxed",children:['"',p,'"']}),a.jsxs("div",{className:"mt-2 flex items-center text-xs text-slate-400",children:[a.jsx(jo,{className:"h-3 w-3 mr-1"}),"Click to view in discussion"]})]})]},d.id)})})]}),t.length===0&&a.jsxs("div",{className:"flex flex-col items-center justify-center p-8 text-center bg-slate-50 rounded-lg",children:[a.jsx(du,{className:"h-8 w-8 text-slate-400 mb-3"}),a.jsx("p",{className:"text-slate-600",children:"No themes have been identified yet."}),a.jsx("p",{className:"text-sm text-slate-500 mt-2",children:"Highlight important messages in the discussion or generate themes automatically."})]})]})]})},Hde=({themes:t,messages:e,personas:n,focusGroupId:r,onThemesGenerated:i,onThemeDelete:s,onQuoteClick:o,onGenerateKeyThemes:c})=>{const l=()=>{if(!t||t.length===0){se.warning("No themes to export",{description:"Generate some themes first before exporting."});return}let u=`# Key Themes Analysis - -`;const d=t.filter(g=>"source"in g&&g.source==="generated");if(d.length===0){se.warning("No AI-generated themes to export",{description:"Only AI-generated themes are included in the export."});return}d.forEach((g,m)=>{u+=`## ${m+1}. ${g.title} - -`,u+=`${g.description} - -`,g.quotes&&g.quotes.length>0&&(u+=`**Supporting Quotes:** - -`,g.quotes.forEach(y=>{if(typeof y=="string")u+=`> ${y} - -`;else{let b="";y.speaker&&(b+=`**${y.speaker}:** `),b+=y.text,u+=`> ${b} - -`}})),u+=`--- - -`});const f=new Blob([u],{type:"text/markdown"}),h=URL.createObjectURL(f),p=document.createElement("a");p.href=h,p.download=`key-themes-${new Date().toISOString().split("T")[0]}.md`,document.body.appendChild(p),p.click(),document.body.removeChild(p),URL.revokeObjectURL(h),se.success("Themes exported successfully",{description:`Downloaded ${d.length} themes as markdown file.`})};return a.jsxs("div",{className:"flex flex-col h-full",children:[a.jsxs("div",{className:"mb-4 space-y-2",children:[a.jsxs(ee,{onClick:c,className:"w-full",children:[a.jsx(vZ,{className:"mr-2 h-4 w-4"}),"Analyze Discussion for Key Themes"]}),a.jsxs(ee,{onClick:l,disabled:!t||t.length===0,variant:"outline",className:"w-full",children:[a.jsx(Xc,{className:"mr-2 h-4 w-4"}),"Export Themes"]})]}),a.jsx("div",{className:"flex-grow overflow-hidden",children:a.jsx(Bde,{themes:t,messages:e,personas:n,onThemeDelete:s,focusGroupId:r,onQuoteClick:o})})]})};var zde=Array.isArray,Bi=zde,Vde=typeof Hg=="object"&&Hg&&Hg.Object===Object&&Hg,SV=Vde,Gde=SV,Kde=typeof self=="object"&&self&&self.Object===Object&&self,Wde=Gde||Kde||Function("return this")(),Jo=Wde,qde=Jo,Yde=qde.Symbol,Pg=Yde,jR=Pg,CV=Object.prototype,Qde=CV.hasOwnProperty,Xde=CV.toString,jh=jR?jR.toStringTag:void 0;function Jde(t){var e=Qde.call(t,jh),n=t[jh];try{t[jh]=void 0;var r=!0}catch{}var i=Xde.call(t);return r&&(e?t[jh]=n:delete t[jh]),i}var Zde=Jde,efe=Object.prototype,tfe=efe.toString;function nfe(t){return tfe.call(t)}var rfe=nfe,ER=Pg,ife=Zde,sfe=rfe,ofe="[object Null]",afe="[object Undefined]",NR=ER?ER.toStringTag:void 0;function cfe(t){return t==null?t===void 0?afe:ofe:NR&&NR in Object(t)?ife(t):sfe(t)}var Ka=cfe;function lfe(t){return t!=null&&typeof t=="object"}var Wa=lfe,ufe=Ka,dfe=Wa,ffe="[object Symbol]";function hfe(t){return typeof t=="symbol"||dfe(t)&&ufe(t)==ffe}var qf=hfe,pfe=Bi,mfe=qf,gfe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,vfe=/^\w*$/;function yfe(t,e){if(pfe(t))return!1;var n=typeof t;return n=="number"||n=="symbol"||n=="boolean"||t==null||mfe(t)?!0:vfe.test(t)||!gfe.test(t)||e!=null&&t in Object(e)}var YT=yfe;function xfe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var hl=xfe;const Yf=un(hl);var bfe=Ka,wfe=hl,Sfe="[object AsyncFunction]",Cfe="[object Function]",_fe="[object GeneratorFunction]",Afe="[object Proxy]";function jfe(t){if(!wfe(t))return!1;var e=bfe(t);return e==Cfe||e==_fe||e==Sfe||e==Afe}var QT=jfe;const Et=un(QT);var Efe=Jo,Nfe=Efe["__core-js_shared__"],Tfe=Nfe,nC=Tfe,TR=function(){var t=/[^.]+$/.exec(nC&&nC.keys&&nC.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function Pfe(t){return!!TR&&TR in t}var kfe=Pfe,Ofe=Function.prototype,Ife=Ofe.toString;function Rfe(t){if(t!=null){try{return Ife.call(t)}catch{}try{return t+""}catch{}}return""}var _V=Rfe,Mfe=QT,Dfe=kfe,$fe=hl,Lfe=_V,Ffe=/[\\^$.*+?()[\]{}|]/g,Ufe=/^\[object .+?Constructor\]$/,Bfe=Function.prototype,Hfe=Object.prototype,zfe=Bfe.toString,Vfe=Hfe.hasOwnProperty,Gfe=RegExp("^"+zfe.call(Vfe).replace(Ffe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Kfe(t){if(!$fe(t)||Dfe(t))return!1;var e=Mfe(t)?Gfe:Ufe;return e.test(Lfe(t))}var Wfe=Kfe;function qfe(t,e){return t==null?void 0:t[e]}var Yfe=qfe,Qfe=Wfe,Xfe=Yfe;function Jfe(t,e){var n=Xfe(t,e);return Qfe(n)?n:void 0}var Iu=Jfe,Zfe=Iu,ehe=Zfe(Object,"create"),lw=ehe,PR=lw;function the(){this.__data__=PR?PR(null):{},this.size=0}var nhe=the;function rhe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var ihe=rhe,she=lw,ohe="__lodash_hash_undefined__",ahe=Object.prototype,che=ahe.hasOwnProperty;function lhe(t){var e=this.__data__;if(she){var n=e[t];return n===ohe?void 0:n}return che.call(e,t)?e[t]:void 0}var uhe=lhe,dhe=lw,fhe=Object.prototype,hhe=fhe.hasOwnProperty;function phe(t){var e=this.__data__;return dhe?e[t]!==void 0:hhe.call(e,t)}var mhe=phe,ghe=lw,vhe="__lodash_hash_undefined__";function yhe(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=ghe&&e===void 0?vhe:e,this}var xhe=yhe,bhe=nhe,whe=ihe,She=uhe,Che=mhe,_he=xhe;function Qf(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e-1}var Bhe=Uhe,Hhe=uw;function zhe(t,e){var n=this.__data__,r=Hhe(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var Vhe=zhe,Ghe=Ehe,Khe=Mhe,Whe=Lhe,qhe=Bhe,Yhe=Vhe;function Xf(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e0?1:-1},Ll=function(e){return kg(e)&&e.indexOf("%")===e.length-1},Ee=function(e){return gme(e)&&!Zf(e)},Er=function(e){return Ee(e)||kg(e)},bme=0,eh=function(e){var n=++bme;return"".concat(e||"").concat(n)},gi=function(e,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!Ee(e)&&!kg(e))return r;var s;if(Ll(e)){var o=e.indexOf("%");s=n*parseFloat(e.slice(0,o))/100}else s=+e;return Zf(s)&&(s=r),i&&s>n&&(s=n),s},dc=function(e){if(!e)return null;var n=Object.keys(e);return n&&n.length?e[n[0]]:null},wme=function(e){if(!Array.isArray(e))return!1;for(var n=e.length,r={},i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Eme(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function D1(t){"@babel/helpers - typeof";return D1=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D1(t)}var $R={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart"},Aa=function(e){return typeof e=="string"?e:e?e.displayName||e.name||"Component":""},LR=null,iC=null,oP=function t(e){if(e===LR&&Array.isArray(iC))return iC;var n=[];return v.Children.forEach(e,function(r){$t(r)||(IV.isFragment(r)?n=n.concat(t(r.props.children)):n.push(r))}),iC=n,LR=e,n};function _s(t,e){var n=[],r=[];return Array.isArray(e)?r=e.map(function(i){return Aa(i)}):r=[Aa(e)],oP(t).forEach(function(i){var s=ns(i,"type.displayName")||ns(i,"type.name");r.indexOf(s)!==-1&&n.push(i)}),n}function Wi(t,e){var n=_s(t,e);return n&&n[0]}var FR=function(e){if(!e||!e.props)return!1;var n=e.props,r=n.width,i=n.height;return!(!Ee(r)||r<=0||!Ee(i)||i<=0)},Nme=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],Tme=function(e){return e&&e.type&&kg(e.type)&&Nme.indexOf(e.type)>=0},Pme=function(e){return e&&D1(e)==="object"&&"clipDot"in e},kme=function(e,n,r,i){var s,o=(s=rC==null?void 0:rC[i])!==null&&s!==void 0?s:[];return!Et(e)&&(i&&o.includes(n)||Cme.includes(n))||r&&sP.includes(n)},rt=function(e,n,r){if(!e||typeof e=="function"||typeof e=="boolean")return null;var i=e;if(v.isValidElement(e)&&(i=e.props),!Yf(i))return null;var s={};return Object.keys(i).forEach(function(o){var c;kme((c=i)===null||c===void 0?void 0:c[o],o,n,r)&&(s[o]=i[o])}),s},$1=function t(e,n){if(e===n)return!0;var r=v.Children.count(e);if(r!==v.Children.count(n))return!1;if(r===0)return!0;if(r===1)return UR(Array.isArray(e)?e[0]:e,Array.isArray(n)?n[0]:n);for(var i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Dme(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function F1(t){var e=t.children,n=t.width,r=t.height,i=t.viewBox,s=t.className,o=t.style,c=t.title,l=t.desc,u=Mme(t,Rme),d=i||{width:n,height:r,x:0,y:0},f=Mt("recharts-surface",s);return T.createElement("svg",L1({},rt(u,!0,"svg"),{className:f,width:n,height:r,style:o,viewBox:"".concat(d.x," ").concat(d.y," ").concat(d.width," ").concat(d.height)}),T.createElement("title",null,c),T.createElement("desc",null,l),e)}var $me=["children","className"];function U1(){return U1=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Fme(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var Xt=T.forwardRef(function(t,e){var n=t.children,r=t.className,i=Lme(t,$me),s=Mt("recharts-layer",r);return T.createElement("g",U1({className:s},rt(i,!0),{ref:e}),n)}),to=function(e,n){for(var r=arguments.length,i=new Array(r>2?r-2:0),s=2;si?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var s=Array(i);++r=r?t:Hme(t,e,n)}var Vme=zme,Gme="\\ud800-\\udfff",Kme="\\u0300-\\u036f",Wme="\\ufe20-\\ufe2f",qme="\\u20d0-\\u20ff",Yme=Kme+Wme+qme,Qme="\\ufe0e\\ufe0f",Xme="\\u200d",Jme=RegExp("["+Xme+Gme+Yme+Qme+"]");function Zme(t){return Jme.test(t)}var MV=Zme;function ege(t){return t.split("")}var tge=ege,DV="\\ud800-\\udfff",nge="\\u0300-\\u036f",rge="\\ufe20-\\ufe2f",ige="\\u20d0-\\u20ff",sge=nge+rge+ige,oge="\\ufe0e\\ufe0f",age="["+DV+"]",B1="["+sge+"]",H1="\\ud83c[\\udffb-\\udfff]",cge="(?:"+B1+"|"+H1+")",$V="[^"+DV+"]",LV="(?:\\ud83c[\\udde6-\\uddff]){2}",FV="[\\ud800-\\udbff][\\udc00-\\udfff]",lge="\\u200d",UV=cge+"?",BV="["+oge+"]?",uge="(?:"+lge+"(?:"+[$V,LV,FV].join("|")+")"+BV+UV+")*",dge=BV+UV+uge,fge="(?:"+[$V+B1+"?",B1,LV,FV,age].join("|")+")",hge=RegExp(H1+"(?="+H1+")|"+fge+dge,"g");function pge(t){return t.match(hge)||[]}var mge=pge,gge=tge,vge=MV,yge=mge;function xge(t){return vge(t)?yge(t):gge(t)}var bge=xge,wge=Vme,Sge=MV,Cge=bge,_ge=NV;function Age(t){return function(e){e=_ge(e);var n=Sge(e)?Cge(e):void 0,r=n?n[0]:e.charAt(0),i=n?wge(n,1).join(""):e.slice(1);return r[t]()+i}}var jge=Age,Ege=jge,Nge=Ege("toUpperCase"),Tge=Nge;const _w=un(Tge);function Tn(t){return function(){return t}}const HV=Math.cos,Kx=Math.sin,go=Math.sqrt,Wx=Math.PI,Aw=2*Wx,z1=Math.PI,V1=2*z1,jl=1e-6,Pge=V1-jl;function zV(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return zV;const n=10**e;return function(r){this._+=r[0];for(let i=1,s=r.length;ijl)if(!(Math.abs(f*l-u*d)>jl)||!s)this._append`L${this._x1=e},${this._y1=n}`;else{let p=r-o,g=i-c,m=l*l+u*u,y=p*p+g*g,b=Math.sqrt(m),x=Math.sqrt(h),w=s*Math.tan((z1-Math.acos((m+h-y)/(2*b*x)))/2),S=w/x,C=w/b;Math.abs(S-1)>jl&&this._append`L${e+S*d},${n+S*f}`,this._append`A${s},${s},0,0,${+(f*p>d*g)},${this._x1=e+C*l},${this._y1=n+C*u}`}}arc(e,n,r,i,s,o){if(e=+e,n=+n,r=+r,o=!!o,r<0)throw new Error(`negative radius: ${r}`);let c=r*Math.cos(i),l=r*Math.sin(i),u=e+c,d=n+l,f=1^o,h=o?i-s:s-i;this._x1===null?this._append`M${u},${d}`:(Math.abs(this._x1-u)>jl||Math.abs(this._y1-d)>jl)&&this._append`L${u},${d}`,r&&(h<0&&(h=h%V1+V1),h>Pge?this._append`A${r},${r},0,1,${f},${e-c},${n-l}A${r},${r},0,1,${f},${this._x1=u},${this._y1=d}`:h>jl&&this._append`A${r},${r},0,${+(h>=z1)},${f},${this._x1=e+r*Math.cos(s)},${this._y1=n+r*Math.sin(s)}`)}rect(e,n,r,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+n}h${r=+r}v${+i}h${-r}Z`}toString(){return this._}}function aP(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(n==null)e=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);e=r}return t},()=>new Oge(e)}function cP(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function VV(t){this._context=t}VV.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function jw(t){return new VV(t)}function GV(t){return t[0]}function KV(t){return t[1]}function WV(t,e){var n=Tn(!0),r=null,i=jw,s=null,o=aP(c);t=typeof t=="function"?t:t===void 0?GV:Tn(t),e=typeof e=="function"?e:e===void 0?KV:Tn(e);function c(l){var u,d=(l=cP(l)).length,f,h=!1,p;for(r==null&&(s=i(p=o())),u=0;u<=d;++u)!(u=p;--g)c.point(w[g],S[g]);c.lineEnd(),c.areaEnd()}b&&(w[h]=+t(y,h,f),S[h]=+e(y,h,f),c.point(r?+r(y,h,f):w[h],n?+n(y,h,f):S[h]))}if(x)return c=null,x+""||null}function d(){return WV().defined(i).curve(o).context(s)}return u.x=function(f){return arguments.length?(t=typeof f=="function"?f:Tn(+f),r=null,u):t},u.x0=function(f){return arguments.length?(t=typeof f=="function"?f:Tn(+f),u):t},u.x1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:Tn(+f),u):r},u.y=function(f){return arguments.length?(e=typeof f=="function"?f:Tn(+f),n=null,u):e},u.y0=function(f){return arguments.length?(e=typeof f=="function"?f:Tn(+f),u):e},u.y1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:Tn(+f),u):n},u.lineX0=u.lineY0=function(){return d().x(t).y(e)},u.lineY1=function(){return d().x(t).y(n)},u.lineX1=function(){return d().x(r).y(e)},u.defined=function(f){return arguments.length?(i=typeof f=="function"?f:Tn(!!f),u):i},u.curve=function(f){return arguments.length?(o=f,s!=null&&(c=o(s)),u):o},u.context=function(f){return arguments.length?(f==null?s=c=null:c=o(s=f),u):s},u}class qV{constructor(e,n){this._context=e,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,n){switch(e=+e,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,n):this._context.moveTo(e,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,n,e,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,e,this._y0,e,n);break}}this._x0=e,this._y0=n}}function Ige(t){return new qV(t,!0)}function Rge(t){return new qV(t,!1)}const lP={draw(t,e){const n=go(e/Wx);t.moveTo(n,0),t.arc(0,0,n,0,Aw)}},Mge={draw(t,e){const n=go(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},YV=go(1/3),Dge=YV*2,$ge={draw(t,e){const n=go(e/Dge),r=n*YV;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},Lge={draw(t,e){const n=go(e),r=-n/2;t.rect(r,r,n,n)}},Fge=.8908130915292852,QV=Kx(Wx/10)/Kx(7*Wx/10),Uge=Kx(Aw/10)*QV,Bge=-HV(Aw/10)*QV,Hge={draw(t,e){const n=go(e*Fge),r=Uge*n,i=Bge*n;t.moveTo(0,-n),t.lineTo(r,i);for(let s=1;s<5;++s){const o=Aw*s/5,c=HV(o),l=Kx(o);t.lineTo(l*n,-c*n),t.lineTo(c*r-l*i,l*r+c*i)}t.closePath()}},sC=go(3),zge={draw(t,e){const n=-go(e/(sC*3));t.moveTo(0,n*2),t.lineTo(-sC*n,-n),t.lineTo(sC*n,-n),t.closePath()}},os=-.5,as=go(3)/2,G1=1/go(12),Vge=(G1/2+1)*3,Gge={draw(t,e){const n=go(e/Vge),r=n/2,i=n*G1,s=r,o=n*G1+n,c=-s,l=o;t.moveTo(r,i),t.lineTo(s,o),t.lineTo(c,l),t.lineTo(os*r-as*i,as*r+os*i),t.lineTo(os*s-as*o,as*s+os*o),t.lineTo(os*c-as*l,as*c+os*l),t.lineTo(os*r+as*i,os*i-as*r),t.lineTo(os*s+as*o,os*o-as*s),t.lineTo(os*c+as*l,os*l-as*c),t.closePath()}};function Kge(t,e){let n=null,r=aP(i);t=typeof t=="function"?t:Tn(t||lP),e=typeof e=="function"?e:Tn(e===void 0?64:+e);function i(){let s;if(n||(n=s=r()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),s)return n=null,s+""||null}return i.type=function(s){return arguments.length?(t=typeof s=="function"?s:Tn(s),i):t},i.size=function(s){return arguments.length?(e=typeof s=="function"?s:Tn(+s),i):e},i.context=function(s){return arguments.length?(n=s??null,i):n},i}function qx(){}function Yx(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function XV(t){this._context=t}XV.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Yx(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Yx(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Wge(t){return new XV(t)}function JV(t){this._context=t}JV.prototype={areaStart:qx,areaEnd:qx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Yx(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function qge(t){return new JV(t)}function ZV(t){this._context=t}ZV.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Yx(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Yge(t){return new ZV(t)}function eG(t){this._context=t}eG.prototype={areaStart:qx,areaEnd:qx,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function Qge(t){return new eG(t)}function HR(t){return t<0?-1:1}function zR(t,e,n){var r=t._x1-t._x0,i=e-t._x1,s=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),c=(s*i+o*r)/(r+i);return(HR(s)+HR(o))*Math.min(Math.abs(s),Math.abs(o),.5*Math.abs(c))||0}function VR(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function oC(t,e,n){var r=t._x0,i=t._y0,s=t._x1,o=t._y1,c=(s-r)/3;t._context.bezierCurveTo(r+c,i+c*e,s-c,o-c*n,s,o)}function Qx(t){this._context=t}Qx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:oC(this,this._t0,VR(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,oC(this,VR(this,n=zR(this,t,e)),n);break;default:oC(this,this._t0,n=zR(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}};function tG(t){this._context=new nG(t)}(tG.prototype=Object.create(Qx.prototype)).point=function(t,e){Qx.prototype.point.call(this,e,t)};function nG(t){this._context=t}nG.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,s){this._context.bezierCurveTo(e,t,r,n,s,i)}};function Xge(t){return new Qx(t)}function Jge(t){return new tG(t)}function rG(t){this._context=t}rG.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),n===2)this._context.lineTo(t[1],e[1]);else for(var r=GR(t),i=GR(e),s=0,o=1;o=0;--e)i[e]=(o[e]-i[e+1])/s[e];for(s[n-1]=(t[n]+i[n-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}break}}this._x=t,this._y=e}};function eve(t){return new Ew(t,.5)}function tve(t){return new Ew(t,0)}function nve(t){return new Ew(t,1)}function nf(t,e){if((o=t.length)>1)for(var n=1,r,i,s=t[e[0]],o,c=s.length;n=0;)n[e]=e;return n}function rve(t,e){return t[e]}function ive(t){const e=[];return e.key=t,e}function sve(){var t=Tn([]),e=K1,n=nf,r=rve;function i(s){var o=Array.from(t.apply(this,arguments),ive),c,l=o.length,u=-1,d;for(const f of s)for(c=0,++u;c0){for(var n,r,i=0,s=t[0].length,o;i0){for(var n=0,r=t[e[0]],i,s=r.length;n0)||!((s=(i=t[e[0]]).length)>0))){for(var n=0,r=1,i,s,o;r=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function pve(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var iG={symbolCircle:lP,symbolCross:Mge,symbolDiamond:$ge,symbolSquare:Lge,symbolStar:Hge,symbolTriangle:zge,symbolWye:Gge},mve=Math.PI/180,gve=function(e){var n="symbol".concat(_w(e));return iG[n]||lP},vve=function(e,n,r){if(n==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var i=18*mve;return 1.25*e*e*(Math.tan(i)-Math.tan(i*2)*Math.pow(Math.tan(i),2))}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},yve=function(e,n){iG["symbol".concat(_w(e))]=n},uP=function(e){var n=e.type,r=n===void 0?"circle":n,i=e.size,s=i===void 0?64:i,o=e.sizeType,c=o===void 0?"area":o,l=hve(e,lve),u=WR(WR({},l),{},{type:r,size:s,sizeType:c}),d=function(){var y=gve(r),b=Kge().type(y).size(vve(s,c,r));return b()},f=u.className,h=u.cx,p=u.cy,g=rt(u,!0);return h===+h&&p===+p&&s===+s?T.createElement("path",W1({},g,{className:Mt("recharts-symbols",f),transform:"translate(".concat(h,", ").concat(p,")"),d:d()})):null};uP.registerSymbol=yve;function rf(t){"@babel/helpers - typeof";return rf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},rf(t)}function q1(){return q1=Object.assign?Object.assign.bind():function(t){for(var e=1;e`);var x=p.inactive?u:p.color;return T.createElement("li",q1({className:y,style:f,key:"legend-item-".concat(g)},wu(r.props,p,g)),T.createElement(F1,{width:o,height:o,viewBox:d,style:h},r.renderIcon(p)),T.createElement("span",{className:"recharts-legend-item-text",style:{color:x}},m?m(b,p,g):b))})}},{key:"render",value:function(){var r=this.props,i=r.payload,s=r.layout,o=r.align;if(!i||!i.length)return null;var c={padding:0,margin:0,textAlign:s==="horizontal"?o:"left"};return T.createElement("ul",{className:"recharts-default-legend",style:c},this.renderItems())}}])}(v.PureComponent);Sm(dP,"displayName","Legend");Sm(dP,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var Nve=dw;function Tve(){this.__data__=new Nve,this.size=0}var Pve=Tve;function kve(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}var Ove=kve;function Ive(t){return this.__data__.get(t)}var Rve=Ive;function Mve(t){return this.__data__.has(t)}var Dve=Mve,$ve=dw,Lve=JT,Fve=ZT,Uve=200;function Bve(t,e){var n=this.__data__;if(n instanceof $ve){var r=n.__data__;if(!Lve||r.lengthc))return!1;var u=s.get(t),d=s.get(e);if(u&&d)return u==e&&d==t;var f=-1,h=!0,p=n&lye?new sye:void 0;for(s.set(t,e),s.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=hxe}var mP=pxe,mxe=Ka,gxe=mP,vxe=Wa,yxe="[object Arguments]",xxe="[object Array]",bxe="[object Boolean]",wxe="[object Date]",Sxe="[object Error]",Cxe="[object Function]",_xe="[object Map]",Axe="[object Number]",jxe="[object Object]",Exe="[object RegExp]",Nxe="[object Set]",Txe="[object String]",Pxe="[object WeakMap]",kxe="[object ArrayBuffer]",Oxe="[object DataView]",Ixe="[object Float32Array]",Rxe="[object Float64Array]",Mxe="[object Int8Array]",Dxe="[object Int16Array]",$xe="[object Int32Array]",Lxe="[object Uint8Array]",Fxe="[object Uint8ClampedArray]",Uxe="[object Uint16Array]",Bxe="[object Uint32Array]",In={};In[Ixe]=In[Rxe]=In[Mxe]=In[Dxe]=In[$xe]=In[Lxe]=In[Fxe]=In[Uxe]=In[Bxe]=!0;In[yxe]=In[xxe]=In[kxe]=In[bxe]=In[Oxe]=In[wxe]=In[Sxe]=In[Cxe]=In[_xe]=In[Axe]=In[jxe]=In[Exe]=In[Nxe]=In[Txe]=In[Pxe]=!1;function Hxe(t){return vxe(t)&&gxe(t.length)&&!!In[mxe(t)]}var zxe=Hxe;function Vxe(t){return function(e){return t(e)}}var mG=Vxe,eb={exports:{}};eb.exports;(function(t,e){var n=SV,r=e&&!e.nodeType&&e,i=r&&!0&&t&&!t.nodeType&&t,s=i&&i.exports===r,o=s&&n.process,c=function(){try{var l=i&&i.require&&i.require("util").types;return l||o&&o.binding&&o.binding("util")}catch{}}();t.exports=c})(eb,eb.exports);var Gxe=eb.exports,Kxe=zxe,Wxe=mG,e2=Gxe,t2=e2&&e2.isTypedArray,qxe=t2?Wxe(t2):Kxe,gG=qxe,Yxe=Jye,Qxe=hP,Xxe=Bi,Jxe=pG,Zxe=pP,ebe=gG,tbe=Object.prototype,nbe=tbe.hasOwnProperty;function rbe(t,e){var n=Xxe(t),r=!n&&Qxe(t),i=!n&&!r&&Jxe(t),s=!n&&!r&&!i&&ebe(t),o=n||r||i||s,c=o?Yxe(t.length,String):[],l=c.length;for(var u in t)(e||nbe.call(t,u))&&!(o&&(u=="length"||i&&(u=="offset"||u=="parent")||s&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||Zxe(u,l)))&&c.push(u);return c}var ibe=rbe,sbe=Object.prototype;function obe(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||sbe;return t===n}var abe=obe;function cbe(t,e){return function(n){return t(e(n))}}var vG=cbe,lbe=vG,ube=lbe(Object.keys,Object),dbe=ube,fbe=abe,hbe=dbe,pbe=Object.prototype,mbe=pbe.hasOwnProperty;function gbe(t){if(!fbe(t))return hbe(t);var e=[];for(var n in Object(t))mbe.call(t,n)&&n!="constructor"&&e.push(n);return e}var vbe=gbe,ybe=QT,xbe=mP;function bbe(t){return t!=null&&xbe(t.length)&&!ybe(t)}var Og=bbe,wbe=ibe,Sbe=vbe,Cbe=Og;function _be(t){return Cbe(t)?wbe(t):Sbe(t)}var Nw=_be,Abe=Uye,jbe=Qye,Ebe=Nw;function Nbe(t){return Abe(t,Ebe,jbe)}var Tbe=Nbe,n2=Tbe,Pbe=1,kbe=Object.prototype,Obe=kbe.hasOwnProperty;function Ibe(t,e,n,r,i,s){var o=n&Pbe,c=n2(t),l=c.length,u=n2(e),d=u.length;if(l!=d&&!o)return!1;for(var f=l;f--;){var h=c[f];if(!(o?h in e:Obe.call(e,h)))return!1}var p=s.get(t),g=s.get(e);if(p&&g)return p==e&&g==t;var m=!0;s.set(t,e),s.set(e,t);for(var y=o;++f-1}var kwe=Pwe;function Owe(t,e,n){for(var r=-1,i=t==null?0:t.length;++r=Wwe){var u=e?null:Gwe(t);if(u)return Kwe(u);o=!1,i=Vwe,l=new Bwe}else l=e?[]:c;e:for(;++r=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function lSe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function uSe(t){return t.value}function dSe(t,e){if(T.isValidElement(t))return T.cloneElement(t,e);if(typeof t=="function")return T.createElement(t,e);e.ref;var n=cSe(e,eSe);return T.createElement(dP,n)}var y2=1,ja=function(t){function e(){var n;tSe(this,e);for(var r=arguments.length,i=new Array(r),s=0;sy2||Math.abs(i.height-this.lastBoundingBox.height)>y2)&&(this.lastBoundingBox.width=i.width,this.lastBoundingBox.height=i.height,r&&r(i)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?sa({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var i=this.props,s=i.layout,o=i.align,c=i.verticalAlign,l=i.margin,u=i.chartWidth,d=i.chartHeight,f,h;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(o==="center"&&s==="vertical"){var p=this.getBBoxSnapshot();f={left:((u||0)-p.width)/2}}else f=o==="right"?{right:l&&l.right||0}:{left:l&&l.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(c==="middle"){var g=this.getBBoxSnapshot();h={top:((d||0)-g.height)/2}}else h=c==="bottom"?{bottom:l&&l.bottom||0}:{top:l&&l.top||0};return sa(sa({},f),h)}},{key:"render",value:function(){var r=this,i=this.props,s=i.content,o=i.width,c=i.height,l=i.wrapperStyle,u=i.payloadUniqBy,d=i.payload,f=sa(sa({position:"absolute",width:o||"auto",height:c||"auto"},this.getDefaultPosition(l)),l);return T.createElement("div",{className:"recharts-legend-wrapper",style:f,ref:function(p){r.wrapperNode=p}},dSe(s,sa(sa({},this.props),{},{payload:_G(d,u,uSe)})))}}],[{key:"getWithHeight",value:function(r,i){var s=sa(sa({},this.defaultProps),r.props),o=s.layout;return o==="vertical"&&Ee(r.props.height)?{height:r.props.height}:o==="horizontal"?{width:r.props.width||i}:null}}])}(v.PureComponent);Tw(ja,"displayName","Legend");Tw(ja,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var x2=Pg,fSe=hP,hSe=Bi,b2=x2?x2.isConcatSpreadable:void 0;function pSe(t){return hSe(t)||fSe(t)||!!(b2&&t&&t[b2])}var mSe=pSe,gSe=fG,vSe=mSe;function EG(t,e,n,r,i){var s=-1,o=t.length;for(n||(n=vSe),i||(i=[]);++s0&&n(c)?e>1?EG(c,e-1,n,r,i):gSe(i,c):r||(i[i.length]=c)}return i}var NG=EG;function ySe(t){return function(e,n,r){for(var i=-1,s=Object(e),o=r(e),c=o.length;c--;){var l=o[t?c:++i];if(n(s[l],l,s)===!1)break}return e}}var xSe=ySe,bSe=xSe,wSe=bSe(),SSe=wSe,CSe=SSe,_Se=Nw;function ASe(t,e){return t&&CSe(t,e,_Se)}var TG=ASe,jSe=Og;function ESe(t,e){return function(n,r){if(n==null)return n;if(!jSe(n))return t(n,r);for(var i=n.length,s=e?i:-1,o=Object(n);(e?s--:++se||s&&o&&l&&!c&&!u||r&&o&&l||!n&&l||!i)return 1;if(!r&&!s&&!u&&t=c)return l;var u=n[r];return l*(u=="desc"?-1:1)}}return t.index-e.index}var BSe=USe,uC=tP,HSe=nP,zSe=Zo,VSe=PG,GSe=DSe,KSe=mG,WSe=BSe,qSe=rh,YSe=Bi;function QSe(t,e,n){e.length?e=uC(e,function(s){return YSe(s)?function(o){return HSe(o,s.length===1?s[0]:s)}:s}):e=[qSe];var r=-1;e=uC(e,KSe(zSe));var i=VSe(t,function(s,o,c){var l=uC(e,function(u){return u(s)});return{criteria:l,index:++r,value:s}});return GSe(i,function(s,o){return WSe(s,o,n)})}var XSe=QSe;function JSe(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}var ZSe=JSe,eCe=ZSe,S2=Math.max;function tCe(t,e,n){return e=S2(e===void 0?t.length-1:e,0),function(){for(var r=arguments,i=-1,s=S2(r.length-e,0),o=Array(s);++i0){if(++e>=dCe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var mCe=pCe,gCe=uCe,vCe=mCe,yCe=vCe(gCe),xCe=yCe,bCe=rh,wCe=nCe,SCe=xCe;function CCe(t,e){return SCe(wCe(t,e,bCe),t+"")}var _Ce=CCe,ACe=XT,jCe=Og,ECe=pP,NCe=hl;function TCe(t,e,n){if(!NCe(n))return!1;var r=typeof e;return(r=="number"?jCe(n)&&ECe(e,n.length):r=="string"&&e in n)?ACe(n[e],t):!1}var Pw=TCe,PCe=NG,kCe=XSe,OCe=_Ce,_2=Pw,ICe=OCe(function(t,e){if(t==null)return[];var n=e.length;return n>1&&_2(t,e[0],e[1])?e=[]:n>2&&_2(e[0],e[1],e[2])&&(e=[e[0]]),kCe(t,PCe(e,1),[])}),RCe=ICe;const yP=un(RCe);function Cm(t){"@babel/helpers - typeof";return Cm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cm(t)}function nA(){return nA=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=e.x),"".concat(Eh,"-left"),Ee(n)&&e&&Ee(e.x)&&n=e.y),"".concat(Eh,"-top"),Ee(r)&&e&&Ee(e.y)&&rm?Math.max(d,l[r]):Math.max(f,l[r])}function YCe(t){var e=t.translateX,n=t.translateY,r=t.useTranslate3d;return{transform:r?"translate3d(".concat(e,"px, ").concat(n,"px, 0)"):"translate(".concat(e,"px, ").concat(n,"px)")}}function QCe(t){var e=t.allowEscapeViewBox,n=t.coordinate,r=t.offsetTopLeft,i=t.position,s=t.reverseDirection,o=t.tooltipBox,c=t.useTranslate3d,l=t.viewBox,u,d,f;return o.height>0&&o.width>0&&n?(d=E2({allowEscapeViewBox:e,coordinate:n,key:"x",offsetTopLeft:r,position:i,reverseDirection:s,tooltipDimension:o.width,viewBox:l,viewBoxDimension:l.width}),f=E2({allowEscapeViewBox:e,coordinate:n,key:"y",offsetTopLeft:r,position:i,reverseDirection:s,tooltipDimension:o.height,viewBox:l,viewBoxDimension:l.height}),u=YCe({translateX:d,translateY:f,useTranslate3d:c})):u=WCe,{cssProperties:u,cssClasses:qCe({translateX:d,translateY:f,coordinate:n})}}function of(t){"@babel/helpers - typeof";return of=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},of(t)}function N2(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function T2(t){for(var e=1;eP2||Math.abs(r.height-this.state.lastBoundingBox.height)>P2)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,i;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((i=this.props.coordinate)===null||i===void 0?void 0:i.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,i=this.props,s=i.active,o=i.allowEscapeViewBox,c=i.animationDuration,l=i.animationEasing,u=i.children,d=i.coordinate,f=i.hasPayload,h=i.isAnimationActive,p=i.offset,g=i.position,m=i.reverseDirection,y=i.useTranslate3d,b=i.viewBox,x=i.wrapperStyle,w=QCe({allowEscapeViewBox:o,coordinate:d,offsetTopLeft:p,position:g,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:y,viewBox:b}),S=w.cssClasses,C=w.cssProperties,_=T2(T2({transition:h&&s?"transform ".concat(c,"ms ").concat(l):void 0},C),{},{pointerEvents:"none",visibility:!this.state.dismissed&&s&&f?"visible":"hidden",position:"absolute",top:0,left:0},x);return T.createElement("div",{tabIndex:-1,className:S,style:_,ref:function(j){r.wrapperNode=j}},u)}}])}(v.PureComponent),o_e=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},no={isSsr:o_e(),get:function(e){return no[e]},set:function(e,n){if(typeof e=="string")no[e]=n;else{var r=Object.keys(e);r&&r.length&&r.forEach(function(i){no[i]=e[i]})}}};function af(t){"@babel/helpers - typeof";return af=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},af(t)}function k2(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function O2(t){for(var e=1;e0;return T.createElement(s_e,{allowEscapeViewBox:o,animationDuration:c,animationEasing:l,isAnimationActive:h,active:s,coordinate:d,hasPayload:_,offset:p,position:y,reverseDirection:b,useTranslate3d:x,viewBox:w,wrapperStyle:S},g_e(u,O2(O2({},this.props),{},{payload:C})))}}])}(v.PureComponent);xP(Zr,"displayName","Tooltip");xP(Zr,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!no.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var v_e=Jo,y_e=function(){return v_e.Date.now()},x_e=y_e,b_e=/\s/;function w_e(t){for(var e=t.length;e--&&b_e.test(t.charAt(e)););return e}var S_e=w_e,C_e=S_e,__e=/^\s+/;function A_e(t){return t&&t.slice(0,C_e(t)+1).replace(__e,"")}var j_e=A_e,E_e=j_e,I2=hl,N_e=qf,R2=NaN,T_e=/^[-+]0x[0-9a-f]+$/i,P_e=/^0b[01]+$/i,k_e=/^0o[0-7]+$/i,O_e=parseInt;function I_e(t){if(typeof t=="number")return t;if(N_e(t))return R2;if(I2(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=I2(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=E_e(t);var n=P_e.test(t);return n||k_e.test(t)?O_e(t.slice(2),n?2:8):T_e.test(t)?R2:+t}var DG=I_e,R_e=hl,fC=x_e,M2=DG,M_e="Expected a function",D_e=Math.max,$_e=Math.min;function L_e(t,e,n){var r,i,s,o,c,l,u=0,d=!1,f=!1,h=!0;if(typeof t!="function")throw new TypeError(M_e);e=M2(e)||0,R_e(n)&&(d=!!n.leading,f="maxWait"in n,s=f?D_e(M2(n.maxWait)||0,e):s,h="trailing"in n?!!n.trailing:h);function p(_){var A=r,j=i;return r=i=void 0,u=_,o=t.apply(j,A),o}function g(_){return u=_,c=setTimeout(b,e),d?p(_):o}function m(_){var A=_-l,j=_-u,P=e-A;return f?$_e(P,s-j):P}function y(_){var A=_-l,j=_-u;return l===void 0||A>=e||A<0||f&&j>=s}function b(){var _=fC();if(y(_))return x(_);c=setTimeout(b,m(_))}function x(_){return c=void 0,h&&r?p(_):(r=i=void 0,o)}function w(){c!==void 0&&clearTimeout(c),u=0,r=l=i=c=void 0}function S(){return c===void 0?o:x(fC())}function C(){var _=fC(),A=y(_);if(r=arguments,i=this,l=_,A){if(c===void 0)return g(l);if(f)return clearTimeout(c),c=setTimeout(b,e),p(l)}return c===void 0&&(c=setTimeout(b,e)),o}return C.cancel=w,C.flush=S,C}var F_e=L_e,U_e=F_e,B_e=hl,H_e="Expected a function";function z_e(t,e,n){var r=!0,i=!0;if(typeof t!="function")throw new TypeError(H_e);return B_e(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),U_e(t,e,{leading:r,maxWait:e,trailing:i})}var V_e=z_e;const $G=un(V_e);function Am(t){"@babel/helpers - typeof";return Am=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Am(t)}function D2(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Av(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&(R=$G(R,m,{trailing:!0,leading:!1}));var M=new ResizeObserver(R),G=C.current.getBoundingClientRect(),L=G.width,V=G.height;return O(L,V),M.observe(C.current),function(){M.disconnect()}},[O,m]);var E=v.useMemo(function(){var R=P.containerWidth,M=P.containerHeight;if(R<0||M<0)return null;to(Ll(o)||Ll(l),`The width(%s) and height(%s) are both fixed numbers, - maybe you don't need to use a ResponsiveContainer.`,o,l),to(!n||n>0,"The aspect(%s) must be greater than zero.",n);var G=Ll(o)?R:o,L=Ll(l)?M:l;n&&n>0&&(G?L=G/n:L&&(G=L*n),h&&L>h&&(L=h)),to(G>0||L>0,`The width(%s) and height(%s) of chart should be greater than 0, - please check the style of container, or the props width(%s) and height(%s), - or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the - height and width.`,G,L,o,l,d,f,n);var V=!Array.isArray(p)&&Aa(p.type).endsWith("Chart");return T.Children.map(p,function(I){return IV.isElement(I)?v.cloneElement(I,Av({width:G,height:L},V?{style:Av({height:"100%",width:"100%",maxHeight:L,maxWidth:G},I.props.style)}:{})):I})},[n,p,l,h,f,d,P,o]);return T.createElement("div",{id:y?"".concat(y):void 0,className:Mt("recharts-responsive-container",b),style:Av(Av({},S),{},{width:o,height:l,minWidth:d,minHeight:f,maxHeight:h}),ref:C},E)}),Ig=function(e){return null};Ig.displayName="Cell";function jm(t){"@babel/helpers - typeof";return jm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},jm(t)}function L2(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function oA(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{};if(e==null||no.isSsr)return{width:0,height:0};var r=i1e(n),i=JSON.stringify({text:e,copyStyle:r});if(zu.widthCache[i])return zu.widthCache[i];try{var s=document.getElementById(F2);s||(s=document.createElement("span"),s.setAttribute("id",F2),s.setAttribute("aria-hidden","true"),document.body.appendChild(s));var o=oA(oA({},r1e),r);Object.assign(s.style,o),s.textContent="".concat(e);var c=s.getBoundingClientRect(),l={width:c.width,height:c.height};return zu.widthCache[i]=l,++zu.cacheCount>n1e&&(zu.cacheCount=0,zu.widthCache={}),l}catch{return{width:0,height:0}}},s1e=function(e){return{top:e.top+window.scrollY-document.documentElement.clientTop,left:e.left+window.scrollX-document.documentElement.clientLeft}};function Em(t){"@babel/helpers - typeof";return Em=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Em(t)}function ib(t,e){return l1e(t)||c1e(t,e)||a1e(t,e)||o1e()}function o1e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function a1e(t,e){if(t){if(typeof t=="string")return U2(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return U2(t,e)}}function U2(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function C1e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function K2(t,e){return E1e(t)||j1e(t,e)||A1e(t,e)||_1e()}function _1e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function A1e(t,e){if(t){if(typeof t=="string")return W2(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return W2(t,e)}}function W2(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:[];return G.reduce(function(L,V){var I=V.word,D=V.width,X=L[L.length-1];if(X&&(i==null||s||X.width+D+rV.width?L:V})};if(!d)return p;for(var m="…",y=function(G){var L=f.slice(0,G),V=BG({breakAll:u,style:l,children:L+m}).wordsWithComputedWidth,I=h(V),D=I.length>o||g(I).width>Number(i);return[D,I]},b=0,x=f.length-1,w=0,S;b<=x&&w<=f.length-1;){var C=Math.floor((b+x)/2),_=C-1,A=y(_),j=K2(A,2),P=j[0],k=j[1],O=y(C),E=K2(O,1),R=E[0];if(!P&&!R&&(b=C+1),P&&R&&(x=C-1),!P&&R){S=k;break}w++}return S||p},q2=function(e){var n=$t(e)?[]:e.toString().split(UG);return[{words:n}]},T1e=function(e){var n=e.width,r=e.scaleToFit,i=e.children,s=e.style,o=e.breakAll,c=e.maxLines;if((n||r)&&!no.isSsr){var l,u,d=BG({breakAll:o,children:i,style:s});if(d){var f=d.wordsWithComputedWidth,h=d.spaceWidth;l=f,u=h}else return q2(i);return N1e({breakAll:o,children:i,maxLines:c,style:s},l,u,n,r)}return q2(i)},Y2="#808080",Su=function(e){var n=e.x,r=n===void 0?0:n,i=e.y,s=i===void 0?0:i,o=e.lineHeight,c=o===void 0?"1em":o,l=e.capHeight,u=l===void 0?"0.71em":l,d=e.scaleToFit,f=d===void 0?!1:d,h=e.textAnchor,p=h===void 0?"start":h,g=e.verticalAnchor,m=g===void 0?"end":g,y=e.fill,b=y===void 0?Y2:y,x=G2(e,w1e),w=v.useMemo(function(){return T1e({breakAll:x.breakAll,children:x.children,maxLines:x.maxLines,scaleToFit:f,style:x.style,width:x.width})},[x.breakAll,x.children,x.maxLines,f,x.style,x.width]),S=x.dx,C=x.dy,_=x.angle,A=x.className,j=x.breakAll,P=G2(x,S1e);if(!Er(r)||!Er(s))return null;var k=r+(Ee(S)?S:0),O=s+(Ee(C)?C:0),E;switch(m){case"start":E=hC("calc(".concat(u,")"));break;case"middle":E=hC("calc(".concat((w.length-1)/2," * -").concat(c," + (").concat(u," / 2))"));break;default:E=hC("calc(".concat(w.length-1," * -").concat(c,")"));break}var R=[];if(f){var M=w[0].width,G=x.width;R.push("scale(".concat((Ee(G)?G/M:1)/M,")"))}return _&&R.push("rotate(".concat(_,", ").concat(k,", ").concat(O,")")),R.length&&(P.transform=R.join(" ")),T.createElement("text",aA({},rt(P,!0),{x:k,y:O,className:Mt("recharts-text",A),textAnchor:p,fill:b.includes("url")?Y2:b}),w.map(function(L,V){var I=L.words.join(j?"":" ");return T.createElement("tspan",{x:k,dy:V===0?E:c,key:"".concat(I,"-").concat(V)},I)}))};function zc(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}function P1e(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}function bP(t){let e,n,r;t.length!==2?(e=zc,n=(c,l)=>zc(t(c),l),r=(c,l)=>t(c)-l):(e=t===zc||t===P1e?t:k1e,n=t,r=t);function i(c,l,u=0,d=c.length){if(u>>1;n(c[f],l)<0?u=f+1:d=f}while(u>>1;n(c[f],l)<=0?u=f+1:d=f}while(uu&&r(c[f-1],l)>-r(c[f],l)?f-1:f}return{left:i,center:o,right:s}}function k1e(){return 0}function HG(t){return t===null?NaN:+t}function*O1e(t,e){for(let n of t)n!=null&&(n=+n)>=n&&(yield n)}const I1e=bP(zc),Rg=I1e.right;bP(HG).center;class Q2 extends Map{constructor(e,n=D1e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(X2(this,e))}has(e){return super.has(X2(this,e))}set(e,n){return super.set(R1e(this,e),n)}delete(e){return super.delete(M1e(this,e))}}function X2({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function R1e({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function M1e({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function D1e(t){return t!==null&&typeof t=="object"?t.valueOf():t}function $1e(t=zc){if(t===zc)return zG;if(typeof t!="function")throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||r===0?r:(t(n,n)===0)-(t(e,e)===0)}}function zG(t,e){return(t==null||!(t>=t))-(e==null||!(e>=e))||(te?1:0)}const L1e=Math.sqrt(50),F1e=Math.sqrt(10),U1e=Math.sqrt(2);function sb(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),s=r/Math.pow(10,i),o=s>=L1e?10:s>=F1e?5:s>=U1e?2:1;let c,l,u;return i<0?(u=Math.pow(10,-i)/o,c=Math.round(t*u),l=Math.round(e*u),c/ue&&--l,u=-u):(u=Math.pow(10,i)*o,c=Math.round(t/u),l=Math.round(e/u),c*ue&&--l),l0))return[];if(t===e)return[t];const r=e=i))return[];const c=s-i+1,l=new Array(c);if(r)if(o<0)for(let u=0;u=r)&&(n=r);return n}function Z2(t,e){let n;for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function VG(t,e,n=0,r=1/0,i){if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(t.length-1,r)),!(n<=e&&e<=r))return t;for(i=i===void 0?zG:$1e(i);r>n;){if(r-n>600){const l=r-n+1,u=e-n+1,d=Math.log(l),f=.5*Math.exp(2*d/3),h=.5*Math.sqrt(d*f*(l-f)/l)*(u-l/2<0?-1:1),p=Math.max(n,Math.floor(e-u*f/l+h)),g=Math.min(r,Math.floor(e+(l-u)*f/l+h));VG(t,e,p,g,i)}const s=t[e];let o=n,c=r;for(Nh(t,n,e),i(t[r],s)>0&&Nh(t,n,r);o0;)--c}i(t[n],s)===0?Nh(t,n,c):(++c,Nh(t,c,r)),c<=e&&(n=c+1),e<=c&&(r=c-1)}return t}function Nh(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function B1e(t,e,n){if(t=Float64Array.from(O1e(t)),!(!(r=t.length)||isNaN(e=+e))){if(e<=0||r<2)return Z2(t);if(e>=1)return J2(t);var r,i=(r-1)*e,s=Math.floor(i),o=J2(VG(t,s).subarray(0,s+1)),c=Z2(t.subarray(s+1));return o+(c-o)*(i-s)}}function H1e(t,e,n=HG){if(!(!(r=t.length)||isNaN(e=+e))){if(e<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,s=Math.floor(i),o=+n(t[s],s,t),c=+n(t[s+1],s+1,t);return o+(c-o)*(i-s)}}function z1e(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,s=new Array(i);++r>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?Ev(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?Ev(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=G1e.exec(t))?new Pi(e[1],e[2],e[3],1):(e=K1e.exec(t))?new Pi(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=W1e.exec(t))?Ev(e[1],e[2],e[3],e[4]):(e=q1e.exec(t))?Ev(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Y1e.exec(t))?oM(e[1],e[2]/100,e[3]/100,1):(e=Q1e.exec(t))?oM(e[1],e[2]/100,e[3]/100,e[4]):eM.hasOwnProperty(t)?rM(eM[t]):t==="transparent"?new Pi(NaN,NaN,NaN,0):null}function rM(t){return new Pi(t>>16&255,t>>8&255,t&255,1)}function Ev(t,e,n,r){return r<=0&&(t=e=n=NaN),new Pi(t,e,n,r)}function Z1e(t){return t instanceof Mg||(t=km(t)),t?(t=t.rgb(),new Pi(t.r,t.g,t.b,t.opacity)):new Pi}function fA(t,e,n,r){return arguments.length===1?Z1e(t):new Pi(t,e,n,r??1)}function Pi(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}SP(Pi,fA,KG(Mg,{brighter(t){return t=t==null?ob:Math.pow(ob,t),new Pi(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Tm:Math.pow(Tm,t),new Pi(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Pi(eu(this.r),eu(this.g),eu(this.b),ab(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:iM,formatHex:iM,formatHex8:eAe,formatRgb:sM,toString:sM}));function iM(){return`#${Fl(this.r)}${Fl(this.g)}${Fl(this.b)}`}function eAe(){return`#${Fl(this.r)}${Fl(this.g)}${Fl(this.b)}${Fl((isNaN(this.opacity)?1:this.opacity)*255)}`}function sM(){const t=ab(this.opacity);return`${t===1?"rgb(":"rgba("}${eu(this.r)}, ${eu(this.g)}, ${eu(this.b)}${t===1?")":`, ${t})`}`}function ab(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function eu(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Fl(t){return t=eu(t),(t<16?"0":"")+t.toString(16)}function oM(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ks(t,e,n,r)}function WG(t){if(t instanceof Ks)return new Ks(t.h,t.s,t.l,t.opacity);if(t instanceof Mg||(t=km(t)),!t)return new Ks;if(t instanceof Ks)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),s=Math.max(e,n,r),o=NaN,c=s-i,l=(s+i)/2;return c?(e===s?o=(n-r)/c+(n0&&l<1?0:o,new Ks(o,c,l,t.opacity)}function tAe(t,e,n,r){return arguments.length===1?WG(t):new Ks(t,e,n,r??1)}function Ks(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}SP(Ks,tAe,KG(Mg,{brighter(t){return t=t==null?ob:Math.pow(ob,t),new Ks(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Tm:Math.pow(Tm,t),new Ks(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Pi(pC(t>=240?t-240:t+120,i,r),pC(t,i,r),pC(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Ks(aM(this.h),Nv(this.s),Nv(this.l),ab(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=ab(this.opacity);return`${t===1?"hsl(":"hsla("}${aM(this.h)}, ${Nv(this.s)*100}%, ${Nv(this.l)*100}%${t===1?")":`, ${t})`}`}}));function aM(t){return t=(t||0)%360,t<0?t+360:t}function Nv(t){return Math.max(0,Math.min(1,t||0))}function pC(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const CP=t=>()=>t;function nAe(t,e){return function(n){return t+n*e}}function rAe(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function iAe(t){return(t=+t)==1?qG:function(e,n){return n-e?rAe(e,n,t):CP(isNaN(e)?n:e)}}function qG(t,e){var n=e-t;return n?nAe(t,n):CP(isNaN(t)?e:t)}const cM=function t(e){var n=iAe(e);function r(i,s){var o=n((i=fA(i)).r,(s=fA(s)).r),c=n(i.g,s.g),l=n(i.b,s.b),u=qG(i.opacity,s.opacity);return function(d){return i.r=o(d),i.g=c(d),i.b=l(d),i.opacity=u(d),i+""}}return r.gamma=t,r}(1);function sAe(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(s){for(i=0;in&&(s=e.slice(n,s),c[o]?c[o]+=s:c[++o]=s),(r=r[0])===(i=i[0])?c[o]?c[o]+=i:c[++o]=i:(c[++o]=null,l.push({i:o,x:cb(r,i)})),n=mC.lastIndex;return ne&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function gAe(t,e,n){var r=t[0],i=t[1],s=e[0],o=e[1];return i2?vAe:gAe,l=u=null,f}function f(h){return h==null||isNaN(h=+h)?s:(l||(l=c(t.map(r),e,n)))(r(o(h)))}return f.invert=function(h){return o(i((u||(u=c(e,t.map(r),cb)))(h)))},f.domain=function(h){return arguments.length?(t=Array.from(h,lb),d()):t.slice()},f.range=function(h){return arguments.length?(e=Array.from(h),d()):e.slice()},f.rangeRound=function(h){return e=Array.from(h),n=_P,d()},f.clamp=function(h){return arguments.length?(o=h?!0:vi,d()):o!==vi},f.interpolate=function(h){return arguments.length?(n=h,d()):n},f.unknown=function(h){return arguments.length?(s=h,f):s},function(h,p){return r=h,i=p,d()}}function AP(){return kw()(vi,vi)}function yAe(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function ub(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function cf(t){return t=ub(Math.abs(t)),t?t[1]:NaN}function xAe(t,e){return function(n,r){for(var i=n.length,s=[],o=0,c=t[0],l=0;i>0&&c>0&&(l+c+1>r&&(c=Math.max(1,r-l)),s.push(n.substring(i-=c,i+c)),!((l+=c+1)>r));)c=t[o=(o+1)%t.length];return s.reverse().join(e)}}function bAe(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var wAe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Om(t){if(!(e=wAe.exec(t)))throw new Error("invalid format: "+t);var e;return new jP({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Om.prototype=jP.prototype;function jP(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}jP.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function SAe(t){e:for(var e=t.length,n=1,r=-1,i;n0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var YG;function CAe(t,e){var n=ub(t,e);if(!n)return t+"";var r=n[0],i=n[1],s=i-(YG=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return s===o?r:s>o?r+new Array(s-o+1).join("0"):s>0?r.slice(0,s)+"."+r.slice(s):"0."+new Array(1-s).join("0")+ub(t,Math.max(0,e+s-1))[0]}function uM(t,e){var n=ub(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const dM={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:yAe,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>uM(t*100,e),r:uM,s:CAe,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function fM(t){return t}var hM=Array.prototype.map,pM=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function _Ae(t){var e=t.grouping===void 0||t.thousands===void 0?fM:xAe(hM.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?fM:bAe(hM.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",c=t.minus===void 0?"−":t.minus+"",l=t.nan===void 0?"NaN":t.nan+"";function u(f){f=Om(f);var h=f.fill,p=f.align,g=f.sign,m=f.symbol,y=f.zero,b=f.width,x=f.comma,w=f.precision,S=f.trim,C=f.type;C==="n"?(x=!0,C="g"):dM[C]||(w===void 0&&(w=12),S=!0,C="g"),(y||h==="0"&&p==="=")&&(y=!0,h="0",p="=");var _=m==="$"?n:m==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",A=m==="$"?r:/[%p]/.test(C)?o:"",j=dM[C],P=/[defgprs%]/.test(C);w=w===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function k(O){var E=_,R=A,M,G,L;if(C==="c")R=j(O)+R,O="";else{O=+O;var V=O<0||1/O<0;if(O=isNaN(O)?l:j(Math.abs(O),w),S&&(O=SAe(O)),V&&+O==0&&g!=="+"&&(V=!1),E=(V?g==="("?g:c:g==="-"||g==="("?"":g)+E,R=(C==="s"?pM[8+YG/3]:"")+R+(V&&g==="("?")":""),P){for(M=-1,G=O.length;++ML||L>57){R=(L===46?i+O.slice(M+1):O.slice(M))+R,O=O.slice(0,M);break}}}x&&!y&&(O=e(O,1/0));var I=E.length+O.length+R.length,D=I>1)+E+O+R+D.slice(I);break;default:O=D+E+O+R;break}return s(O)}return k.toString=function(){return f+""},k}function d(f,h){var p=u((f=Om(f),f.type="f",f)),g=Math.max(-8,Math.min(8,Math.floor(cf(h)/3)))*3,m=Math.pow(10,-g),y=pM[8+g/3];return function(b){return p(m*b)+y}}return{format:u,formatPrefix:d}}var Tv,EP,QG;AAe({thousands:",",grouping:[3],currency:["$",""]});function AAe(t){return Tv=_Ae(t),EP=Tv.format,QG=Tv.formatPrefix,Tv}function jAe(t){return Math.max(0,-cf(Math.abs(t)))}function EAe(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(cf(e)/3)))*3-cf(Math.abs(t)))}function NAe(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,cf(e)-cf(t))+1}function XG(t,e,n,r){var i=uA(t,e,n),s;switch(r=Om(r??",f"),r.type){case"s":{var o=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(s=EAe(i,o))&&(r.precision=s),QG(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(s=NAe(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=s-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(s=jAe(i))&&(r.precision=s-(r.type==="%")*2);break}}return EP(r)}function pl(t){var e=t.domain;return t.ticks=function(n){var r=e();return cA(r[0],r[r.length-1],n??10)},t.tickFormat=function(n,r){var i=e();return XG(i[0],i[i.length-1],n??10,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,s=r.length-1,o=r[i],c=r[s],l,u,d=10;for(c0;){if(u=lA(o,c,n),u===l)return r[i]=o,r[s]=c,e(r);if(u>0)o=Math.floor(o/u)*u,c=Math.ceil(c/u)*u;else if(u<0)o=Math.ceil(o*u)/u,c=Math.floor(c*u)/u;else break;l=u}return t},t}function db(){var t=AP();return t.copy=function(){return Dg(t,db())},ks.apply(t,arguments),pl(t)}function JG(t){var e;function n(r){return r==null||isNaN(r=+r)?e:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(t=Array.from(r,lb),n):t.slice()},n.unknown=function(r){return arguments.length?(e=r,n):e},n.copy=function(){return JG(t).unknown(e)},t=arguments.length?Array.from(t,lb):[0,1],pl(n)}function ZG(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],s=t[r],o;return sMath.pow(t,e)}function IAe(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}function vM(t){return(e,n)=>-t(-e,n)}function NP(t){const e=t(mM,gM),n=e.domain;let r=10,i,s;function o(){return i=IAe(r),s=OAe(r),n()[0]<0?(i=vM(i),s=vM(s),t(TAe,PAe)):t(mM,gM),e}return e.base=function(c){return arguments.length?(r=+c,o()):r},e.domain=function(c){return arguments.length?(n(c),o()):n()},e.ticks=c=>{const l=n();let u=l[0],d=l[l.length-1];const f=d0){for(;h<=p;++h)for(g=1;gd)break;b.push(m)}}else for(;h<=p;++h)for(g=r-1;g>=1;--g)if(m=h>0?g/s(-h):g*s(h),!(md)break;b.push(m)}b.length*2{if(c==null&&(c=10),l==null&&(l=r===10?"s":","),typeof l!="function"&&(!(r%1)&&(l=Om(l)).precision==null&&(l.trim=!0),l=EP(l)),c===1/0)return l;const u=Math.max(1,r*c/e.ticks().length);return d=>{let f=d/s(Math.round(i(d)));return f*rn(ZG(n(),{floor:c=>s(Math.floor(i(c))),ceil:c=>s(Math.ceil(i(c)))})),e}function e8(){const t=NP(kw()).domain([1,10]);return t.copy=()=>Dg(t,e8()).base(t.base()),ks.apply(t,arguments),t}function yM(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function xM(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function TP(t){var e=1,n=t(yM(e),xM(e));return n.constant=function(r){return arguments.length?t(yM(e=+r),xM(e)):e},pl(n)}function t8(){var t=TP(kw());return t.copy=function(){return Dg(t,t8()).constant(t.constant())},ks.apply(t,arguments)}function bM(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function RAe(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function MAe(t){return t<0?-t*t:t*t}function PP(t){var e=t(vi,vi),n=1;function r(){return n===1?t(vi,vi):n===.5?t(RAe,MAe):t(bM(n),bM(1/n))}return e.exponent=function(i){return arguments.length?(n=+i,r()):n},pl(e)}function kP(){var t=PP(kw());return t.copy=function(){return Dg(t,kP()).exponent(t.exponent())},ks.apply(t,arguments),t}function DAe(){return kP.apply(null,arguments).exponent(.5)}function wM(t){return Math.sign(t)*t*t}function $Ae(t){return Math.sign(t)*Math.sqrt(Math.abs(t))}function n8(){var t=AP(),e=[0,1],n=!1,r;function i(s){var o=$Ae(t(s));return isNaN(o)?r:n?Math.round(o):o}return i.invert=function(s){return t.invert(wM(s))},i.domain=function(s){return arguments.length?(t.domain(s),i):t.domain()},i.range=function(s){return arguments.length?(t.range((e=Array.from(s,lb)).map(wM)),i):e.slice()},i.rangeRound=function(s){return i.range(s).round(!0)},i.round=function(s){return arguments.length?(n=!!s,i):n},i.clamp=function(s){return arguments.length?(t.clamp(s),i):t.clamp()},i.unknown=function(s){return arguments.length?(r=s,i):r},i.copy=function(){return n8(t.domain(),e).round(n).clamp(t.clamp()).unknown(r)},ks.apply(i,arguments),pl(i)}function r8(){var t=[],e=[],n=[],r;function i(){var o=0,c=Math.max(1,e.length);for(n=new Array(c-1);++o0?n[c-1]:t[0],c=n?[r[n-1],e]:[r[u-1],r[u]]},o.unknown=function(l){return arguments.length&&(s=l),o},o.thresholds=function(){return r.slice()},o.copy=function(){return i8().domain([t,e]).range(i).unknown(s)},ks.apply(pl(o),arguments)}function s8(){var t=[.5],e=[0,1],n,r=1;function i(s){return s!=null&&s<=s?e[Rg(t,s,0,r)]:n}return i.domain=function(s){return arguments.length?(t=Array.from(s),r=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(s){return arguments.length?(e=Array.from(s),r=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(s){var o=e.indexOf(s);return[t[o-1],t[o]]},i.unknown=function(s){return arguments.length?(n=s,i):n},i.copy=function(){return s8().domain(t).range(e).unknown(n)},ks.apply(i,arguments)}const gC=new Date,vC=new Date;function Nr(t,e,n,r){function i(s){return t(s=arguments.length===0?new Date:new Date(+s)),s}return i.floor=s=>(t(s=new Date(+s)),s),i.ceil=s=>(t(s=new Date(s-1)),e(s,1),t(s),s),i.round=s=>{const o=i(s),c=i.ceil(s);return s-o(e(s=new Date(+s),o==null?1:Math.floor(o)),s),i.range=(s,o,c)=>{const l=[];if(s=i.ceil(s),c=c==null?1:Math.floor(c),!(s0))return l;let u;do l.push(u=new Date(+s)),e(s,c),t(s);while(uNr(o=>{if(o>=o)for(;t(o),!s(o);)o.setTime(o-1)},(o,c)=>{if(o>=o)if(c<0)for(;++c<=0;)for(;e(o,-1),!s(o););else for(;--c>=0;)for(;e(o,1),!s(o););}),n&&(i.count=(s,o)=>(gC.setTime(+s),vC.setTime(+o),t(gC),t(vC),Math.floor(n(gC,vC))),i.every=s=>(s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(r?o=>r(o)%s===0:o=>i.count(0,o)%s===0):i)),i}const fb=Nr(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);fb.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?Nr(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):fb);fb.range;const ba=1e3,ws=ba*60,wa=ws*60,La=wa*24,OP=La*7,SM=La*30,yC=La*365,Ul=Nr(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ba)},(t,e)=>(e-t)/ba,t=>t.getUTCSeconds());Ul.range;const IP=Nr(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ba)},(t,e)=>{t.setTime(+t+e*ws)},(t,e)=>(e-t)/ws,t=>t.getMinutes());IP.range;const RP=Nr(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*ws)},(t,e)=>(e-t)/ws,t=>t.getUTCMinutes());RP.range;const MP=Nr(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ba-t.getMinutes()*ws)},(t,e)=>{t.setTime(+t+e*wa)},(t,e)=>(e-t)/wa,t=>t.getHours());MP.range;const DP=Nr(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*wa)},(t,e)=>(e-t)/wa,t=>t.getUTCHours());DP.range;const $g=Nr(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*ws)/La,t=>t.getDate()-1);$g.range;const Ow=Nr(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/La,t=>t.getUTCDate()-1);Ow.range;const o8=Nr(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/La,t=>Math.floor(t/La));o8.range;function Ru(t){return Nr(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*ws)/OP)}const Iw=Ru(0),hb=Ru(1),LAe=Ru(2),FAe=Ru(3),lf=Ru(4),UAe=Ru(5),BAe=Ru(6);Iw.range;hb.range;LAe.range;FAe.range;lf.range;UAe.range;BAe.range;function Mu(t){return Nr(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/OP)}const Rw=Mu(0),pb=Mu(1),HAe=Mu(2),zAe=Mu(3),uf=Mu(4),VAe=Mu(5),GAe=Mu(6);Rw.range;pb.range;HAe.range;zAe.range;uf.range;VAe.range;GAe.range;const $P=Nr(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());$P.range;const LP=Nr(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());LP.range;const Fa=Nr(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());Fa.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:Nr(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});Fa.range;const Ua=Nr(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());Ua.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:Nr(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});Ua.range;function a8(t,e,n,r,i,s){const o=[[Ul,1,ba],[Ul,5,5*ba],[Ul,15,15*ba],[Ul,30,30*ba],[s,1,ws],[s,5,5*ws],[s,15,15*ws],[s,30,30*ws],[i,1,wa],[i,3,3*wa],[i,6,6*wa],[i,12,12*wa],[r,1,La],[r,2,2*La],[n,1,OP],[e,1,SM],[e,3,3*SM],[t,1,yC]];function c(u,d,f){const h=dy).right(o,h);if(p===o.length)return t.every(uA(u/yC,d/yC,f));if(p===0)return fb.every(Math.max(uA(u,d,f),1));const[g,m]=o[h/o[p-1][2]53)return null;"w"in Y||(Y.w=1),"Z"in Y?(Ue=bC(Th(Y.y,0,1)),at=Ue.getUTCDay(),Ue=at>4||at===0?pb.ceil(Ue):pb(Ue),Ue=Ow.offset(Ue,(Y.V-1)*7),Y.y=Ue.getUTCFullYear(),Y.m=Ue.getUTCMonth(),Y.d=Ue.getUTCDate()+(Y.w+6)%7):(Ue=xC(Th(Y.y,0,1)),at=Ue.getDay(),Ue=at>4||at===0?hb.ceil(Ue):hb(Ue),Ue=$g.offset(Ue,(Y.V-1)*7),Y.y=Ue.getFullYear(),Y.m=Ue.getMonth(),Y.d=Ue.getDate()+(Y.w+6)%7)}else("W"in Y||"U"in Y)&&("w"in Y||(Y.w="u"in Y?Y.u%7:"W"in Y?1:0),at="Z"in Y?bC(Th(Y.y,0,1)).getUTCDay():xC(Th(Y.y,0,1)).getDay(),Y.m=0,Y.d="W"in Y?(Y.w+6)%7+Y.W*7-(at+5)%7:Y.w+Y.U*7-(at+6)%7);return"Z"in Y?(Y.H+=Y.Z/100|0,Y.M+=Y.Z%100,bC(Y)):xC(Y)}}function j(te,pe,we,Y){for(var nt=0,Ue=pe.length,at=we.length,Be,Bt;nt=at)return-1;if(Be=pe.charCodeAt(nt++),Be===37){if(Be=pe.charAt(nt++),Bt=C[Be in CM?pe.charAt(nt++):Be],!Bt||(Y=Bt(te,we,Y))<0)return-1}else if(Be!=we.charCodeAt(Y++))return-1}return Y}function P(te,pe,we){var Y=u.exec(pe.slice(we));return Y?(te.p=d.get(Y[0].toLowerCase()),we+Y[0].length):-1}function k(te,pe,we){var Y=p.exec(pe.slice(we));return Y?(te.w=g.get(Y[0].toLowerCase()),we+Y[0].length):-1}function O(te,pe,we){var Y=f.exec(pe.slice(we));return Y?(te.w=h.get(Y[0].toLowerCase()),we+Y[0].length):-1}function E(te,pe,we){var Y=b.exec(pe.slice(we));return Y?(te.m=x.get(Y[0].toLowerCase()),we+Y[0].length):-1}function R(te,pe,we){var Y=m.exec(pe.slice(we));return Y?(te.m=y.get(Y[0].toLowerCase()),we+Y[0].length):-1}function M(te,pe,we){return j(te,e,pe,we)}function G(te,pe,we){return j(te,n,pe,we)}function L(te,pe,we){return j(te,r,pe,we)}function V(te){return o[te.getDay()]}function I(te){return s[te.getDay()]}function D(te){return l[te.getMonth()]}function X(te){return c[te.getMonth()]}function Q(te){return i[+(te.getHours()>=12)]}function J(te){return 1+~~(te.getMonth()/3)}function ye(te){return o[te.getUTCDay()]}function U(te){return s[te.getUTCDay()]}function ne(te){return l[te.getUTCMonth()]}function ue(te){return c[te.getUTCMonth()]}function F(te){return i[+(te.getUTCHours()>=12)]}function ce(te){return 1+~~(te.getUTCMonth()/3)}return{format:function(te){var pe=_(te+="",w);return pe.toString=function(){return te},pe},parse:function(te){var pe=A(te+="",!1);return pe.toString=function(){return te},pe},utcFormat:function(te){var pe=_(te+="",S);return pe.toString=function(){return te},pe},utcParse:function(te){var pe=A(te+="",!0);return pe.toString=function(){return te},pe}}}var CM={"-":"",_:" ",0:"0"},$r=/^\s*\d+/,XAe=/^%/,JAe=/[\\^$*+?|[\]().{}]/g;function cn(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",s=i.length;return r+(s[e.toLowerCase(),n]))}function eje(t,e,n){var r=$r.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function tje(t,e,n){var r=$r.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function nje(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function rje(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function ije(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function _M(t,e,n){var r=$r.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function AM(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function sje(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function oje(t,e,n){var r=$r.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function aje(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function jM(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function cje(t,e,n){var r=$r.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function EM(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function lje(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function uje(t,e,n){var r=$r.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function dje(t,e,n){var r=$r.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function fje(t,e,n){var r=$r.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function hje(t,e,n){var r=XAe.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function pje(t,e,n){var r=$r.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function mje(t,e,n){var r=$r.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function NM(t,e){return cn(t.getDate(),e,2)}function gje(t,e){return cn(t.getHours(),e,2)}function vje(t,e){return cn(t.getHours()%12||12,e,2)}function yje(t,e){return cn(1+$g.count(Fa(t),t),e,3)}function c8(t,e){return cn(t.getMilliseconds(),e,3)}function xje(t,e){return c8(t,e)+"000"}function bje(t,e){return cn(t.getMonth()+1,e,2)}function wje(t,e){return cn(t.getMinutes(),e,2)}function Sje(t,e){return cn(t.getSeconds(),e,2)}function Cje(t){var e=t.getDay();return e===0?7:e}function _je(t,e){return cn(Iw.count(Fa(t)-1,t),e,2)}function l8(t){var e=t.getDay();return e>=4||e===0?lf(t):lf.ceil(t)}function Aje(t,e){return t=l8(t),cn(lf.count(Fa(t),t)+(Fa(t).getDay()===4),e,2)}function jje(t){return t.getDay()}function Eje(t,e){return cn(hb.count(Fa(t)-1,t),e,2)}function Nje(t,e){return cn(t.getFullYear()%100,e,2)}function Tje(t,e){return t=l8(t),cn(t.getFullYear()%100,e,2)}function Pje(t,e){return cn(t.getFullYear()%1e4,e,4)}function kje(t,e){var n=t.getDay();return t=n>=4||n===0?lf(t):lf.ceil(t),cn(t.getFullYear()%1e4,e,4)}function Oje(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+cn(e/60|0,"0",2)+cn(e%60,"0",2)}function TM(t,e){return cn(t.getUTCDate(),e,2)}function Ije(t,e){return cn(t.getUTCHours(),e,2)}function Rje(t,e){return cn(t.getUTCHours()%12||12,e,2)}function Mje(t,e){return cn(1+Ow.count(Ua(t),t),e,3)}function u8(t,e){return cn(t.getUTCMilliseconds(),e,3)}function Dje(t,e){return u8(t,e)+"000"}function $je(t,e){return cn(t.getUTCMonth()+1,e,2)}function Lje(t,e){return cn(t.getUTCMinutes(),e,2)}function Fje(t,e){return cn(t.getUTCSeconds(),e,2)}function Uje(t){var e=t.getUTCDay();return e===0?7:e}function Bje(t,e){return cn(Rw.count(Ua(t)-1,t),e,2)}function d8(t){var e=t.getUTCDay();return e>=4||e===0?uf(t):uf.ceil(t)}function Hje(t,e){return t=d8(t),cn(uf.count(Ua(t),t)+(Ua(t).getUTCDay()===4),e,2)}function zje(t){return t.getUTCDay()}function Vje(t,e){return cn(pb.count(Ua(t)-1,t),e,2)}function Gje(t,e){return cn(t.getUTCFullYear()%100,e,2)}function Kje(t,e){return t=d8(t),cn(t.getUTCFullYear()%100,e,2)}function Wje(t,e){return cn(t.getUTCFullYear()%1e4,e,4)}function qje(t,e){var n=t.getUTCDay();return t=n>=4||n===0?uf(t):uf.ceil(t),cn(t.getUTCFullYear()%1e4,e,4)}function Yje(){return"+0000"}function PM(){return"%"}function kM(t){return+t}function OM(t){return Math.floor(+t/1e3)}var Vu,f8,h8;Qje({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Qje(t){return Vu=QAe(t),f8=Vu.format,Vu.parse,h8=Vu.utcFormat,Vu.utcParse,Vu}function Xje(t){return new Date(t)}function Jje(t){return t instanceof Date?+t:+new Date(+t)}function FP(t,e,n,r,i,s,o,c,l,u){var d=AP(),f=d.invert,h=d.domain,p=u(".%L"),g=u(":%S"),m=u("%I:%M"),y=u("%I %p"),b=u("%a %d"),x=u("%b %d"),w=u("%B"),S=u("%Y");function C(_){return(l(_)<_?p:c(_)<_?g:o(_)<_?m:s(_)<_?y:r(_)<_?i(_)<_?b:x:n(_)<_?w:S)(_)}return d.invert=function(_){return new Date(f(_))},d.domain=function(_){return arguments.length?h(Array.from(_,Jje)):h().map(Xje)},d.ticks=function(_){var A=h();return t(A[0],A[A.length-1],_??10)},d.tickFormat=function(_,A){return A==null?C:u(A)},d.nice=function(_){var A=h();return(!_||typeof _.range!="function")&&(_=e(A[0],A[A.length-1],_??10)),_?h(ZG(A,_)):d},d.copy=function(){return Dg(d,FP(t,e,n,r,i,s,o,c,l,u))},d}function Zje(){return ks.apply(FP(qAe,YAe,Fa,$P,Iw,$g,MP,IP,Ul,f8).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function eEe(){return ks.apply(FP(KAe,WAe,Ua,LP,Rw,Ow,DP,RP,Ul,h8).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Mw(){var t=0,e=1,n,r,i,s,o=vi,c=!1,l;function u(f){return f==null||isNaN(f=+f)?l:o(i===0?.5:(f=(s(f)-n)*i,c?Math.max(0,Math.min(1,f)):f))}u.domain=function(f){return arguments.length?([t,e]=f,n=s(t=+t),r=s(e=+e),i=n===r?0:1/(r-n),u):[t,e]},u.clamp=function(f){return arguments.length?(c=!!f,u):c},u.interpolator=function(f){return arguments.length?(o=f,u):o};function d(f){return function(h){var p,g;return arguments.length?([p,g]=h,o=f(p,g),u):[o(0),o(1)]}}return u.range=d(ih),u.rangeRound=d(_P),u.unknown=function(f){return arguments.length?(l=f,u):l},function(f){return s=f,n=f(t),r=f(e),i=n===r?0:1/(r-n),u}}function ml(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function p8(){var t=pl(Mw()(vi));return t.copy=function(){return ml(t,p8())},qa.apply(t,arguments)}function m8(){var t=NP(Mw()).domain([1,10]);return t.copy=function(){return ml(t,m8()).base(t.base())},qa.apply(t,arguments)}function g8(){var t=TP(Mw());return t.copy=function(){return ml(t,g8()).constant(t.constant())},qa.apply(t,arguments)}function UP(){var t=PP(Mw());return t.copy=function(){return ml(t,UP()).exponent(t.exponent())},qa.apply(t,arguments)}function tEe(){return UP.apply(null,arguments).exponent(.5)}function v8(){var t=[],e=vi;function n(r){if(r!=null&&!isNaN(r=+r))return e((Rg(t,r,1)-1)/(t.length-1))}return n.domain=function(r){if(!arguments.length)return t.slice();t=[];for(let i of r)i!=null&&!isNaN(i=+i)&&t.push(i);return t.sort(zc),n},n.interpolator=function(r){return arguments.length?(e=r,n):e},n.range=function(){return t.map((r,i)=>e(i/(t.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(i,s)=>B1e(t,s/r))},n.copy=function(){return v8(e).domain(t)},qa.apply(n,arguments)}function Dw(){var t=0,e=.5,n=1,r=1,i,s,o,c,l,u=vi,d,f=!1,h;function p(m){return isNaN(m=+m)?h:(m=.5+((m=+d(m))-s)*(r*me}var w8=sEe,oEe=$w,aEe=w8,cEe=rh;function lEe(t){return t&&t.length?oEe(t,cEe,aEe):void 0}var uEe=lEe;const Sc=un(uEe);function dEe(t,e){return tt.e^s.s<0?1:-1;for(r=s.d.length,i=t.d.length,e=0,n=rt.d[e]^s.s<0?1:-1;return r===i?0:r>i^s.s<0?1:-1};Xe.decimalPlaces=Xe.dp=function(){var t=this,e=t.d.length-1,n=(e-t.e)*Mn;if(e=t.d[e],e)for(;e%10==0;e/=10)n--;return n<0?0:n};Xe.dividedBy=Xe.div=function(t){return Ea(this,new this.constructor(t))};Xe.dividedToIntegerBy=Xe.idiv=function(t){var e=this,n=e.constructor;return En(Ea(e,new n(t),0,1),n.precision)};Xe.equals=Xe.eq=function(t){return!this.cmp(t)};Xe.exponent=function(){return gr(this)};Xe.greaterThan=Xe.gt=function(t){return this.cmp(t)>0};Xe.greaterThanOrEqualTo=Xe.gte=function(t){return this.cmp(t)>=0};Xe.isInteger=Xe.isint=function(){return this.e>this.d.length-2};Xe.isNegative=Xe.isneg=function(){return this.s<0};Xe.isPositive=Xe.ispos=function(){return this.s>0};Xe.isZero=function(){return this.s===0};Xe.lessThan=Xe.lt=function(t){return this.cmp(t)<0};Xe.lessThanOrEqualTo=Xe.lte=function(t){return this.cmp(t)<1};Xe.logarithm=Xe.log=function(t){var e,n=this,r=n.constructor,i=r.precision,s=i+5;if(t===void 0)t=new r(10);else if(t=new r(t),t.s<1||t.eq(Qi))throw Error(Ns+"NaN");if(n.s<1)throw Error(Ns+(n.s?"NaN":"-Infinity"));return n.eq(Qi)?new r(0):(Vn=!1,e=Ea(Im(n,s),Im(t,s),s),Vn=!0,En(e,i))};Xe.minus=Xe.sub=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?j8(e,t):_8(e,(t.s=-t.s,t))};Xe.modulo=Xe.mod=function(t){var e,n=this,r=n.constructor,i=r.precision;if(t=new r(t),!t.s)throw Error(Ns+"NaN");return n.s?(Vn=!1,e=Ea(n,t,0,1).times(t),Vn=!0,n.minus(e)):En(new r(n),i)};Xe.naturalExponential=Xe.exp=function(){return A8(this)};Xe.naturalLogarithm=Xe.ln=function(){return Im(this)};Xe.negated=Xe.neg=function(){var t=new this.constructor(this);return t.s=-t.s||0,t};Xe.plus=Xe.add=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?_8(e,t):j8(e,(t.s=-t.s,t))};Xe.precision=Xe.sd=function(t){var e,n,r,i=this;if(t!==void 0&&t!==!!t&&t!==1&&t!==0)throw Error(tu+t);if(e=gr(i)+1,r=i.d.length-1,n=r*Mn+1,r=i.d[r],r){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return t&&e>n?e:n};Xe.squareRoot=Xe.sqrt=function(){var t,e,n,r,i,s,o,c=this,l=c.constructor;if(c.s<1){if(!c.s)return new l(0);throw Error(Ns+"NaN")}for(t=gr(c),Vn=!1,i=Math.sqrt(+c),i==0||i==1/0?(e=Io(c.d),(e.length+t)%2==0&&(e+="0"),i=Math.sqrt(e),t=oh((t+1)/2)-(t<0||t%2),i==1/0?e="5e"+t:(e=i.toExponential(),e=e.slice(0,e.indexOf("e")+1)+t),r=new l(e)):r=new l(i.toString()),n=l.precision,i=o=n+3;;)if(s=r,r=s.plus(Ea(c,s,o+2)).times(.5),Io(s.d).slice(0,o)===(e=Io(r.d)).slice(0,o)){if(e=e.slice(o-3,o+1),i==o&&e=="4999"){if(En(s,n+1,0),s.times(s).eq(c)){r=s;break}}else if(e!="9999")break;o+=4}return Vn=!0,En(r,n)};Xe.times=Xe.mul=function(t){var e,n,r,i,s,o,c,l,u,d=this,f=d.constructor,h=d.d,p=(t=new f(t)).d;if(!d.s||!t.s)return new f(0);for(t.s*=d.s,n=d.e+t.e,l=h.length,u=p.length,l=0;){for(e=0,i=l+r;i>r;)c=s[i]+p[r]*h[i-r-1]+e,s[i--]=c%Pr|0,e=c/Pr|0;s[i]=(s[i]+e)%Pr|0}for(;!s[--o];)s.pop();return e?++n:s.shift(),t.d=s,t.e=n,Vn?En(t,f.precision):t};Xe.toDecimalPlaces=Xe.todp=function(t,e){var n=this,r=n.constructor;return n=new r(n),t===void 0?n:(Wo(t,0,sh),e===void 0?e=r.rounding:Wo(e,0,8),En(n,t+gr(n)+1,e))};Xe.toExponential=function(t,e){var n,r=this,i=r.constructor;return t===void 0?n=_u(r,!0):(Wo(t,0,sh),e===void 0?e=i.rounding:Wo(e,0,8),r=En(new i(r),t+1,e),n=_u(r,!0,t+1)),n};Xe.toFixed=function(t,e){var n,r,i=this,s=i.constructor;return t===void 0?_u(i):(Wo(t,0,sh),e===void 0?e=s.rounding:Wo(e,0,8),r=En(new s(i),t+gr(i)+1,e),n=_u(r.abs(),!1,t+gr(r)+1),i.isneg()&&!i.isZero()?"-"+n:n)};Xe.toInteger=Xe.toint=function(){var t=this,e=t.constructor;return En(new e(t),gr(t)+1,e.rounding)};Xe.toNumber=function(){return+this};Xe.toPower=Xe.pow=function(t){var e,n,r,i,s,o,c=this,l=c.constructor,u=12,d=+(t=new l(t));if(!t.s)return new l(Qi);if(c=new l(c),!c.s){if(t.s<1)throw Error(Ns+"Infinity");return c}if(c.eq(Qi))return c;if(r=l.precision,t.eq(Qi))return En(c,r);if(e=t.e,n=t.d.length-1,o=e>=n,s=c.s,o){if((n=d<0?-d:d)<=C8){for(i=new l(Qi),e=Math.ceil(r/Mn+4),Vn=!1;n%2&&(i=i.times(c),MM(i.d,e)),n=oh(n/2),n!==0;)c=c.times(c),MM(c.d,e);return Vn=!0,t.s<0?new l(Qi).div(i):En(i,r)}}else if(s<0)throw Error(Ns+"NaN");return s=s<0&&t.d[Math.max(e,n)]&1?-1:1,c.s=1,Vn=!1,i=t.times(Im(c,r+u)),Vn=!0,i=A8(i),i.s=s,i};Xe.toPrecision=function(t,e){var n,r,i=this,s=i.constructor;return t===void 0?(n=gr(i),r=_u(i,n<=s.toExpNeg||n>=s.toExpPos)):(Wo(t,1,sh),e===void 0?e=s.rounding:Wo(e,0,8),i=En(new s(i),t,e),n=gr(i),r=_u(i,t<=n||n<=s.toExpNeg,t)),r};Xe.toSignificantDigits=Xe.tosd=function(t,e){var n=this,r=n.constructor;return t===void 0?(t=r.precision,e=r.rounding):(Wo(t,1,sh),e===void 0?e=r.rounding:Wo(e,0,8)),En(new r(n),t,e)};Xe.toString=Xe.valueOf=Xe.val=Xe.toJSON=Xe[Symbol.for("nodejs.util.inspect.custom")]=function(){var t=this,e=gr(t),n=t.constructor;return _u(t,e<=n.toExpNeg||e>=n.toExpPos)};function _8(t,e){var n,r,i,s,o,c,l,u,d=t.constructor,f=d.precision;if(!t.s||!e.s)return e.s||(e=new d(t)),Vn?En(e,f):e;if(l=t.d,u=e.d,o=t.e,i=e.e,l=l.slice(),s=o-i,s){for(s<0?(r=l,s=-s,c=u.length):(r=u,i=o,c=l.length),o=Math.ceil(f/Mn),c=o>c?o+1:c+1,s>c&&(s=c,r.length=1),r.reverse();s--;)r.push(0);r.reverse()}for(c=l.length,s=u.length,c-s<0&&(s=c,r=u,u=l,l=r),n=0;s;)n=(l[--s]=l[s]+u[s]+n)/Pr|0,l[s]%=Pr;for(n&&(l.unshift(n),++i),c=l.length;l[--c]==0;)l.pop();return e.d=l,e.e=i,Vn?En(e,f):e}function Wo(t,e,n){if(t!==~~t||tn)throw Error(tu+t)}function Io(t){var e,n,r,i=t.length-1,s="",o=t[0];if(i>0){for(s+=o,e=1;eo?1:-1;else for(c=l=0;ci[c]?1:-1;break}return l}function n(r,i,s){for(var o=0;s--;)r[s]-=o,o=r[s]1;)r.shift()}return function(r,i,s,o){var c,l,u,d,f,h,p,g,m,y,b,x,w,S,C,_,A,j,P=r.constructor,k=r.s==i.s?1:-1,O=r.d,E=i.d;if(!r.s)return new P(r);if(!i.s)throw Error(Ns+"Division by zero");for(l=r.e-i.e,A=E.length,C=O.length,p=new P(k),g=p.d=[],u=0;E[u]==(O[u]||0);)++u;if(E[u]>(O[u]||0)&&--l,s==null?x=s=P.precision:o?x=s+(gr(r)-gr(i))+1:x=s,x<0)return new P(0);if(x=x/Mn+2|0,u=0,A==1)for(d=0,E=E[0],x++;(u1&&(E=t(E,d),O=t(O,d),A=E.length,C=O.length),S=A,m=O.slice(0,A),y=m.length;y=Pr/2&&++_;do d=0,c=e(E,m,A,y),c<0?(b=m[0],A!=y&&(b=b*Pr+(m[1]||0)),d=b/_|0,d>1?(d>=Pr&&(d=Pr-1),f=t(E,d),h=f.length,y=m.length,c=e(f,m,h,y),c==1&&(d--,n(f,A16)throw Error(HP+gr(t));if(!t.s)return new d(Qi);for(e==null?(Vn=!1,c=f):c=e,o=new d(.03125);t.abs().gte(.1);)t=t.times(o),u+=5;for(r=Math.log(Nl(2,u))/Math.LN10*2+5|0,c+=r,n=i=s=new d(Qi),d.precision=c;;){if(i=En(i.times(t),c),n=n.times(++l),o=s.plus(Ea(i,n,c)),Io(o.d).slice(0,c)===Io(s.d).slice(0,c)){for(;u--;)s=En(s.times(s),c);return d.precision=f,e==null?(Vn=!0,En(s,f)):s}s=o}}function gr(t){for(var e=t.e*Mn,n=t.d[0];n>=10;n/=10)e++;return e}function wC(t,e,n){if(e>t.LN10.sd())throw Vn=!0,n&&(t.precision=n),Error(Ns+"LN10 precision limit exceeded");return En(new t(t.LN10),e)}function sc(t){for(var e="";t--;)e+="0";return e}function Im(t,e){var n,r,i,s,o,c,l,u,d,f=1,h=10,p=t,g=p.d,m=p.constructor,y=m.precision;if(p.s<1)throw Error(Ns+(p.s?"NaN":"-Infinity"));if(p.eq(Qi))return new m(0);if(e==null?(Vn=!1,u=y):u=e,p.eq(10))return e==null&&(Vn=!0),wC(m,u);if(u+=h,m.precision=u,n=Io(g),r=n.charAt(0),s=gr(p),Math.abs(s)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)p=p.times(t),n=Io(p.d),r=n.charAt(0),f++;s=gr(p),r>1?(p=new m("0."+n),s++):p=new m(r+"."+n.slice(1))}else return l=wC(m,u+2,y).times(s+""),p=Im(new m(r+"."+n.slice(1)),u-h).plus(l),m.precision=y,e==null?(Vn=!0,En(p,y)):p;for(c=o=p=Ea(p.minus(Qi),p.plus(Qi),u),d=En(p.times(p),u),i=3;;){if(o=En(o.times(d),u),l=c.plus(Ea(o,new m(i),u)),Io(l.d).slice(0,u)===Io(c.d).slice(0,u))return c=c.times(2),s!==0&&(c=c.plus(wC(m,u+2,y).times(s+""))),c=Ea(c,new m(f),u),m.precision=y,e==null?(Vn=!0,En(c,y)):c;c=l,i+=2}}function RM(t,e){var n,r,i;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;e.charCodeAt(r)===48;)++r;for(i=e.length;e.charCodeAt(i-1)===48;)--i;if(e=e.slice(r,i),e){if(i-=r,n=n-r-1,t.e=oh(n/Mn),t.d=[],r=(n+1)%Mn,n<0&&(r+=Mn),rmb||t.e<-mb))throw Error(HP+n)}else t.s=0,t.e=0,t.d=[0];return t}function En(t,e,n){var r,i,s,o,c,l,u,d,f=t.d;for(o=1,s=f[0];s>=10;s/=10)o++;if(r=e-o,r<0)r+=Mn,i=e,u=f[d=0];else{if(d=Math.ceil((r+1)/Mn),s=f.length,d>=s)return t;for(u=s=f[d],o=1;s>=10;s/=10)o++;r%=Mn,i=r-Mn+o}if(n!==void 0&&(s=Nl(10,o-i-1),c=u/s%10|0,l=e<0||f[d+1]!==void 0||u%s,l=n<4?(c||l)&&(n==0||n==(t.s<0?3:2)):c>5||c==5&&(n==4||l||n==6&&(r>0?i>0?u/Nl(10,o-i):0:f[d-1])%10&1||n==(t.s<0?8:7))),e<1||!f[0])return l?(s=gr(t),f.length=1,e=e-s-1,f[0]=Nl(10,(Mn-e%Mn)%Mn),t.e=oh(-e/Mn)||0):(f.length=1,f[0]=t.e=t.s=0),t;if(r==0?(f.length=d,s=1,d--):(f.length=d+1,s=Nl(10,Mn-r),f[d]=i>0?(u/Nl(10,o-i)%Nl(10,i)|0)*s:0),l)for(;;)if(d==0){(f[0]+=s)==Pr&&(f[0]=1,++t.e);break}else{if(f[d]+=s,f[d]!=Pr)break;f[d--]=0,s=1}for(r=f.length;f[--r]===0;)f.pop();if(Vn&&(t.e>mb||t.e<-mb))throw Error(HP+gr(t));return t}function j8(t,e){var n,r,i,s,o,c,l,u,d,f,h=t.constructor,p=h.precision;if(!t.s||!e.s)return e.s?e.s=-e.s:e=new h(t),Vn?En(e,p):e;if(l=t.d,f=e.d,r=e.e,u=t.e,l=l.slice(),o=u-r,o){for(d=o<0,d?(n=l,o=-o,c=f.length):(n=f,r=u,c=l.length),i=Math.max(Math.ceil(p/Mn),c)+2,o>i&&(o=i,n.length=1),n.reverse(),i=o;i--;)n.push(0);n.reverse()}else{for(i=l.length,c=f.length,d=i0;--i)l[c++]=0;for(i=f.length;i>o;){if(l[--i]0?s=s.charAt(0)+"."+s.slice(1)+sc(r):o>1&&(s=s.charAt(0)+"."+s.slice(1)),s=s+(i<0?"e":"e+")+i):i<0?(s="0."+sc(-i-1)+s,n&&(r=n-o)>0&&(s+=sc(r))):i>=o?(s+=sc(i+1-o),n&&(r=n-i-1)>0&&(s=s+"."+sc(r))):((r=i+1)0&&(i+1===o&&(s+="."),s+=sc(r))),t.s<0?"-"+s:s}function MM(t,e){if(t.length>e)return t.length=e,!0}function E8(t){var e,n,r;function i(s){var o=this;if(!(o instanceof i))return new i(s);if(o.constructor=i,s instanceof i){o.s=s.s,o.e=s.e,o.d=(s=s.d)?s.slice():s;return}if(typeof s=="number"){if(s*0!==0)throw Error(tu+s);if(s>0)o.s=1;else if(s<0)s=-s,o.s=-1;else{o.s=0,o.e=0,o.d=[0];return}if(s===~~s&&s<1e7){o.e=0,o.d=[s];return}return RM(o,s.toString())}else if(typeof s!="string")throw Error(tu+s);if(s.charCodeAt(0)===45?(s=s.slice(1),o.s=-1):o.s=1,OEe.test(s))RM(o,s);else throw Error(tu+s)}if(i.prototype=Xe,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=E8,i.config=i.set=IEe,t===void 0&&(t={}),t)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],e=0;e=i[e+1]&&r<=i[e+2])this[n]=r;else throw Error(tu+n+": "+r);if((r=t[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(tu+n+": "+r);return this}var zP=E8(kEe);Qi=new zP(1);const wn=zP;function REe(t){return LEe(t)||$Ee(t)||DEe(t)||MEe()}function MEe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function DEe(t,e){if(t){if(typeof t=="string")return mA(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mA(t,e)}}function $Ee(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function LEe(t){if(Array.isArray(t))return mA(t)}function mA(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=e?n.apply(void 0,i):t(e-o,DM(function(){for(var c=arguments.length,l=new Array(c),u=0;ut.length)&&(e=t.length);for(var n=0,r=new Array(e);n"u"||!(Symbol.iterator in Object(t)))){var n=[],r=!0,i=!1,s=void 0;try{for(var o=t[Symbol.iterator](),c;!(r=(c=o.next()).done)&&(n.push(c.value),!(e&&n.length===e));r=!0);}catch(l){i=!0,s=l}finally{try{!r&&o.return!=null&&o.return()}finally{if(i)throw s}}return n}}function ZEe(t){if(Array.isArray(t))return t}function O8(t){var e=Rm(t,2),n=e[0],r=e[1],i=n,s=r;return n>r&&(i=r,s=n),[i,s]}function I8(t,e,n){if(t.lte(0))return new wn(0);var r=Uw.getDigitCount(t.toNumber()),i=new wn(10).pow(r),s=t.div(i),o=r!==1?.05:.1,c=new wn(Math.ceil(s.div(o).toNumber())).add(n).mul(o),l=c.mul(i);return e?l:new wn(Math.ceil(l))}function eNe(t,e,n){var r=1,i=new wn(t);if(!i.isint()&&n){var s=Math.abs(t);s<1?(r=new wn(10).pow(Uw.getDigitCount(t)-1),i=new wn(Math.floor(i.div(r).toNumber())).mul(r)):s>1&&(i=new wn(Math.floor(t)))}else t===0?i=new wn(Math.floor((e-1)/2)):n||(i=new wn(Math.floor(t)));var o=Math.floor((e-1)/2),c=HEe(BEe(function(l){return i.add(new wn(l-o).mul(r)).toNumber()}),gA);return c(0,e)}function R8(t,e,n,r){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((e-t)/(n-1)))return{step:new wn(0),tickMin:new wn(0),tickMax:new wn(0)};var s=I8(new wn(e).sub(t).div(n-1),r,i),o;t<=0&&e>=0?o=new wn(0):(o=new wn(t).add(e).div(2),o=o.sub(new wn(o).mod(s)));var c=Math.ceil(o.sub(t).div(s).toNumber()),l=Math.ceil(new wn(e).sub(o).div(s).toNumber()),u=c+l+1;return u>n?R8(t,e,n,r,i+1):(u0?l+(n-u):l,c=e>0?c:c+(n-u)),{step:s,tickMin:o.sub(new wn(c).mul(s)),tickMax:o.add(new wn(l).mul(s))})}function tNe(t){var e=Rm(t,2),n=e[0],r=e[1],i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=Math.max(i,2),c=O8([n,r]),l=Rm(c,2),u=l[0],d=l[1];if(u===-1/0||d===1/0){var f=d===1/0?[u].concat(yA(gA(0,i-1).map(function(){return 1/0}))):[].concat(yA(gA(0,i-1).map(function(){return-1/0})),[d]);return n>r?vA(f):f}if(u===d)return eNe(u,i,s);var h=R8(u,d,o,s),p=h.step,g=h.tickMin,m=h.tickMax,y=Uw.rangeStep(g,m.add(new wn(.1).mul(p)),p);return n>r?vA(y):y}function nNe(t,e){var n=Rm(t,2),r=n[0],i=n[1],s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=O8([r,i]),c=Rm(o,2),l=c[0],u=c[1];if(l===-1/0||u===1/0)return[r,i];if(l===u)return[l];var d=Math.max(e,2),f=I8(new wn(u).sub(l).div(d-1),s,0),h=[].concat(yA(Uw.rangeStep(new wn(l),new wn(u).sub(new wn(.99).mul(f)),f)),[u]);return r>i?vA(h):h}var rNe=P8(tNe),iNe=P8(nNe),sNe="Invariant failed";function Au(t,e){throw new Error(sNe)}var oNe=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function df(t){"@babel/helpers - typeof";return df=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},df(t)}function gb(){return gb=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function hNe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function pNe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function mNe(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,o=-1,c=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(c<=1)return 0;if(s&&s.axisType==="angleAxis"&&Math.abs(Math.abs(s.range[1]-s.range[0])-360)<=1e-6)for(var l=s.range,u=0;u0?i[u-1].coordinate:i[c-1].coordinate,f=i[u].coordinate,h=u>=c-1?i[0].coordinate:i[u+1].coordinate,p=void 0;if(mi(f-d)!==mi(h-f)){var g=[];if(mi(h-f)===mi(l[1]-l[0])){p=h;var m=f+l[1]-l[0];g[0]=Math.min(m,(m+d)/2),g[1]=Math.max(m,(m+d)/2)}else{p=d;var y=h+l[1]-l[0];g[0]=Math.min(f,(y+f)/2),g[1]=Math.max(f,(y+f)/2)}var b=[Math.min(f,(p+f)/2),Math.max(f,(p+f)/2)];if(e>b[0]&&e<=b[1]||e>=g[0]&&e<=g[1]){o=i[u].index;break}}else{var x=Math.min(d,h),w=Math.max(d,h);if(e>(x+f)/2&&e<=(w+f)/2){o=i[u].index;break}}}else for(var S=0;S0&&S(r[S].coordinate+r[S-1].coordinate)/2&&e<=(r[S].coordinate+r[S+1].coordinate)/2||S===c-1&&e>(r[S].coordinate+r[S-1].coordinate)/2){o=r[S].index;break}return o},VP=function(e){var n,r=e,i=r.type.displayName,s=(n=e.type)!==null&&n!==void 0&&n.defaultProps?nr(nr({},e.type.defaultProps),e.props):e.props,o=s.stroke,c=s.fill,l;switch(i){case"Line":l=o;break;case"Area":case"Radar":l=o&&o!=="none"?o:c;break;default:l=c;break}return l},ONe=function(e){var n=e.barSize,r=e.totalSize,i=e.stackGroups,s=i===void 0?{}:i;if(!s)return{};for(var o={},c=Object.keys(s),l=0,u=c.length;l=0});if(b&&b.length){var x=b[0].type.defaultProps,w=x!==void 0?nr(nr({},x),b[0].props):b[0].props,S=w.barSize,C=w[y];o[C]||(o[C]=[]);var _=$t(S)?n:S;o[C].push({item:b[0],stackList:b.slice(1),barSize:$t(_)?void 0:gi(_,r,0)})}}return o},INe=function(e){var n=e.barGap,r=e.barCategoryGap,i=e.bandSize,s=e.sizeList,o=s===void 0?[]:s,c=e.maxBarSize,l=o.length;if(l<1)return null;var u=gi(n,i,0,!0),d,f=[];if(o[0].barSize===+o[0].barSize){var h=!1,p=i/l,g=o.reduce(function(S,C){return S+C.barSize||0},0);g+=(l-1)*u,g>=i&&(g-=(l-1)*u,u=0),g>=i&&p>0&&(h=!0,p*=.9,g=l*p);var m=(i-g)/2>>0,y={offset:m-u,size:0};d=o.reduce(function(S,C){var _={item:C.item,position:{offset:y.offset+y.size+u,size:h?p:C.barSize}},A=[].concat(FM(S),[_]);return y=A[A.length-1].position,C.stackList&&C.stackList.length&&C.stackList.forEach(function(j){A.push({item:j,position:y})}),A},f)}else{var b=gi(r,i,0,!0);i-2*b-(l-1)*u<=0&&(u=0);var x=(i-2*b-(l-1)*u)/l;x>1&&(x>>=0);var w=c===+c?Math.min(x,c):x;d=o.reduce(function(S,C,_){var A=[].concat(FM(S),[{item:C.item,position:{offset:b+(x+u)*_+(x-w)/2,size:w}}]);return C.stackList&&C.stackList.length&&C.stackList.forEach(function(j){A.push({item:j,position:A[A.length-1].position})}),A},f)}return d},RNe=function(e,n,r,i){var s=r.children,o=r.width,c=r.margin,l=o-(c.left||0)-(c.right||0),u=L8({children:s,legendWidth:l});if(u){var d=i||{},f=d.width,h=d.height,p=u.align,g=u.verticalAlign,m=u.layout;if((m==="vertical"||m==="horizontal"&&g==="middle")&&p!=="center"&&Ee(e[p]))return nr(nr({},e),{},Td({},p,e[p]+(f||0)));if((m==="horizontal"||m==="vertical"&&p==="center")&&g!=="middle"&&Ee(e[g]))return nr(nr({},e),{},Td({},g,e[g]+(h||0)))}return e},MNe=function(e,n,r){return $t(n)?!0:e==="horizontal"?n==="yAxis":e==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},F8=function(e,n,r,i,s){var o=n.props.children,c=_s(o,Bw).filter(function(u){return MNe(i,s,u.props.direction)});if(c&&c.length){var l=c.map(function(u){return u.props.dataKey});return e.reduce(function(u,d){var f=ir(d,r);if($t(f))return u;var h=Array.isArray(f)?[Lw(f),Sc(f)]:[f,f],p=l.reduce(function(g,m){var y=ir(d,m,0),b=h[0]-Math.abs(Array.isArray(y)?y[0]:y),x=h[1]+Math.abs(Array.isArray(y)?y[1]:y);return[Math.min(b,g[0]),Math.max(x,g[1])]},[1/0,-1/0]);return[Math.min(p[0],u[0]),Math.max(p[1],u[1])]},[1/0,-1/0])}return null},DNe=function(e,n,r,i,s){var o=n.map(function(c){return F8(e,c,r,s,i)}).filter(function(c){return!$t(c)});return o&&o.length?o.reduce(function(c,l){return[Math.min(c[0],l[0]),Math.max(c[1],l[1])]},[1/0,-1/0]):null},U8=function(e,n,r,i,s){var o=n.map(function(l){var u=l.props.dataKey;return r==="number"&&u&&F8(e,l,u,i)||vp(e,u,r,s)});if(r==="number")return o.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]);var c={};return o.reduce(function(l,u){for(var d=0,f=u.length;d=2?mi(c[0]-c[1])*2*u:u,n&&(e.ticks||e.niceTicks)){var d=(e.ticks||e.niceTicks).map(function(f){var h=s?s.indexOf(f):f;return{coordinate:i(h)+u,value:f,offset:u}});return d.filter(function(f){return!Zf(f.coordinate)})}return e.isCategorical&&e.categoricalDomain?e.categoricalDomain.map(function(f,h){return{coordinate:i(f)+u,value:f,index:h,offset:u}}):i.ticks&&!r?i.ticks(e.tickCount).map(function(f){return{coordinate:i(f)+u,value:f,offset:u}}):i.domain().map(function(f,h){return{coordinate:i(f)+u,value:s?s[f]:f,index:h,offset:u}})},SC=new WeakMap,Pv=function(e,n){if(typeof n!="function")return e;SC.has(e)||SC.set(e,new WeakMap);var r=SC.get(e);if(r.has(n))return r.get(n);var i=function(){e.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,i),i},z8=function(e,n,r){var i=e.scale,s=e.type,o=e.layout,c=e.axisType;if(i==="auto")return o==="radial"&&c==="radiusAxis"?{scale:Nm(),realScaleType:"band"}:o==="radial"&&c==="angleAxis"?{scale:db(),realScaleType:"linear"}:s==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:gp(),realScaleType:"point"}:s==="category"?{scale:Nm(),realScaleType:"band"}:{scale:db(),realScaleType:"linear"};if(kg(i)){var l="scale".concat(_w(i));return{scale:(IM[l]||gp)(),realScaleType:IM[l]?l:"point"}}return Et(i)?{scale:i}:{scale:gp(),realScaleType:"point"}},BM=1e-4,V8=function(e){var n=e.domain();if(!(!n||n.length<=2)){var r=n.length,i=e.range(),s=Math.min(i[0],i[1])-BM,o=Math.max(i[0],i[1])+BM,c=e(n[0]),l=e(n[r-1]);(co||lo)&&e.domain([n[0],n[r-1]])}},$Ne=function(e,n){if(!e)return null;for(var r=0,i=e.length;ri)&&(s[1]=i),s[0]>i&&(s[0]=i),s[1]=0?(e[c][r][0]=s,e[c][r][1]=s+l,s=e[c][r][1]):(e[c][r][0]=o,e[c][r][1]=o+l,o=e[c][r][1])}},UNe=function(e){var n=e.length;if(!(n<=0))for(var r=0,i=e[0].length;r=0?(e[o][r][0]=s,e[o][r][1]=s+c,s=e[o][r][1]):(e[o][r][0]=0,e[o][r][1]=0)}},BNe={sign:FNe,expand:ove,none:nf,silhouette:ave,wiggle:cve,positive:UNe},HNe=function(e,n,r){var i=n.map(function(c){return c.props.dataKey}),s=BNe[r],o=sve().keys(i).value(function(c,l){return+ir(c,l,0)}).order(K1).offset(s);return o(e)},zNe=function(e,n,r,i,s,o){if(!e)return null;var c=o?n.reverse():n,l={},u=c.reduce(function(f,h){var p,g=(p=h.type)!==null&&p!==void 0&&p.defaultProps?nr(nr({},h.type.defaultProps),h.props):h.props,m=g.stackId,y=g.hide;if(y)return f;var b=g[r],x=f[b]||{hasStack:!1,stackGroups:{}};if(Er(m)){var w=x.stackGroups[m]||{numericAxisId:r,cateAxisId:i,items:[]};w.items.push(h),x.hasStack=!0,x.stackGroups[m]=w}else x.stackGroups[eh("_stackId_")]={numericAxisId:r,cateAxisId:i,items:[h]};return nr(nr({},f),{},Td({},b,x))},l),d={};return Object.keys(u).reduce(function(f,h){var p=u[h];if(p.hasStack){var g={};p.stackGroups=Object.keys(p.stackGroups).reduce(function(m,y){var b=p.stackGroups[y];return nr(nr({},m),{},Td({},y,{numericAxisId:r,cateAxisId:i,items:b.items,stackedData:HNe(e,b.items,s)}))},g)}return nr(nr({},f),{},Td({},h,p))},d)},G8=function(e,n){var r=n.realScaleType,i=n.type,s=n.tickCount,o=n.originalDomain,c=n.allowDecimals,l=r||n.scale;if(l!=="auto"&&l!=="linear")return null;if(s&&i==="number"&&o&&(o[0]==="auto"||o[1]==="auto")){var u=e.domain();if(!u.length)return null;var d=rNe(u,s,c);return e.domain([Lw(d),Sc(d)]),{niceTicks:d}}if(s&&i==="number"){var f=e.domain(),h=iNe(f,s,c);return{niceTicks:h}}return null};function HM(t){var e=t.axis,n=t.ticks,r=t.bandSize,i=t.entry,s=t.index,o=t.dataKey;if(e.type==="category"){if(!e.allowDuplicatedCategory&&e.dataKey&&!$t(i[e.dataKey])){var c=Vx(n,"value",i[e.dataKey]);if(c)return c.coordinate+r/2}return n[s]?n[s].coordinate+r/2:null}var l=ir(i,$t(o)?e.dataKey:o);return $t(l)?null:e.scale(l)}var zM=function(e){var n=e.axis,r=e.ticks,i=e.offset,s=e.bandSize,o=e.entry,c=e.index;if(n.type==="category")return r[c]?r[c].coordinate+i:null;var l=ir(o,n.dataKey,n.domain[c]);return $t(l)?null:n.scale(l)-s/2+i},VNe=function(e){var n=e.numericAxis,r=n.scale.domain();if(n.type==="number"){var i=Math.min(r[0],r[1]),s=Math.max(r[0],r[1]);return i<=0&&s>=0?0:s<0?s:i}return r[0]},GNe=function(e,n){var r,i=(r=e.type)!==null&&r!==void 0&&r.defaultProps?nr(nr({},e.type.defaultProps),e.props):e.props,s=i.stackId;if(Er(s)){var o=n[s];if(o){var c=o.items.indexOf(e);return c>=0?o.stackedData[c]:null}}return null},KNe=function(e){return e.reduce(function(n,r){return[Lw(r.concat([n[0]]).filter(Ee)),Sc(r.concat([n[1]]).filter(Ee))]},[1/0,-1/0])},K8=function(e,n,r){return Object.keys(e).reduce(function(i,s){var o=e[s],c=o.stackedData,l=c.reduce(function(u,d){var f=KNe(d.slice(n,r+1));return[Math.min(u[0],f[0]),Math.max(u[1],f[1])]},[1/0,-1/0]);return[Math.min(l[0],i[0]),Math.max(l[1],i[1])]},[1/0,-1/0]).map(function(i){return i===1/0||i===-1/0?0:i})},VM=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,GM=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,SA=function(e,n,r){if(Et(e))return e(n,r);if(!Array.isArray(e))return n;var i=[];if(Ee(e[0]))i[0]=r?e[0]:Math.min(e[0],n[0]);else if(VM.test(e[0])){var s=+VM.exec(e[0])[1];i[0]=n[0]-s}else Et(e[0])?i[0]=e[0](n[0]):i[0]=n[0];if(Ee(e[1]))i[1]=r?e[1]:Math.max(e[1],n[1]);else if(GM.test(e[1])){var o=+GM.exec(e[1])[1];i[1]=n[1]+o}else Et(e[1])?i[1]=e[1](n[1]):i[1]=n[1];return i},yb=function(e,n,r){if(e&&e.scale&&e.scale.bandwidth){var i=e.scale.bandwidth();if(!r||i>0)return i}if(e&&n&&n.length>=2){for(var s=yP(n,function(f){return f.coordinate}),o=1/0,c=1,l=s.length;ct.length)&&(e=t.length);for(var n=0,r=new Array(e);n2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(e-(r.left||0)-(r.right||0)),Math.abs(n-(r.top||0)-(r.bottom||0)))/2},Q8=function(e,n,r,i,s){var o=e.width,c=e.height,l=e.startAngle,u=e.endAngle,d=gi(e.cx,o,o/2),f=gi(e.cy,c,c/2),h=Y8(o,c,r),p=gi(e.innerRadius,h,0),g=gi(e.outerRadius,h,h*.8),m=Object.keys(n);return m.reduce(function(y,b){var x=n[b],w=x.domain,S=x.reversed,C;if($t(x.range))i==="angleAxis"?C=[l,u]:i==="radiusAxis"&&(C=[p,g]),S&&(C=[C[1],C[0]]);else{C=x.range;var _=C,A=YNe(_,2);l=A[0],u=A[1]}var j=z8(x,s),P=j.realScaleType,k=j.scale;k.domain(w).range(C),V8(k);var O=G8(k,da(da({},x),{},{realScaleType:P})),E=da(da(da({},x),O),{},{range:C,radius:g,realScaleType:P,scale:k,cx:d,cy:f,innerRadius:p,outerRadius:g,startAngle:l,endAngle:u});return da(da({},y),{},q8({},b,E))},{})},tTe=function(e,n){var r=e.x,i=e.y,s=n.x,o=n.y;return Math.sqrt(Math.pow(r-s,2)+Math.pow(i-o,2))},nTe=function(e,n){var r=e.x,i=e.y,s=n.cx,o=n.cy,c=tTe({x:r,y:i},{x:s,y:o});if(c<=0)return{radius:c};var l=(r-s)/c,u=Math.acos(l);return i>o&&(u=2*Math.PI-u),{radius:c,angle:eTe(u),angleInRadian:u}},rTe=function(e){var n=e.startAngle,r=e.endAngle,i=Math.floor(n/360),s=Math.floor(r/360),o=Math.min(i,s);return{startAngle:n-o*360,endAngle:r-o*360}},iTe=function(e,n){var r=n.startAngle,i=n.endAngle,s=Math.floor(r/360),o=Math.floor(i/360),c=Math.min(s,o);return e+c*360},YM=function(e,n){var r=e.x,i=e.y,s=nTe({x:r,y:i},n),o=s.radius,c=s.angle,l=n.innerRadius,u=n.outerRadius;if(ou)return!1;if(o===0)return!0;var d=rTe(n),f=d.startAngle,h=d.endAngle,p=c,g;if(f<=h){for(;p>h;)p-=360;for(;p=f&&p<=h}else{for(;p>f;)p-=360;for(;p=h&&p<=f}return g?da(da({},n),{},{radius:o,angle:iTe(p,n)}):null},X8=function(e){return!v.isValidElement(e)&&!Et(e)&&typeof e!="boolean"?e.className:""};function Lm(t){"@babel/helpers - typeof";return Lm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Lm(t)}var sTe=["offset"];function oTe(t){return uTe(t)||lTe(t)||cTe(t)||aTe()}function aTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cTe(t,e){if(t){if(typeof t=="string")return CA(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return CA(t,e)}}function lTe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function uTe(t){if(Array.isArray(t))return CA(t)}function CA(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function fTe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function QM(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function yr(t){for(var e=1;e=0?1:-1,w,S;i==="insideStart"?(w=p+x*o,S=m):i==="insideEnd"?(w=g-x*o,S=!m):i==="end"&&(w=g+x*o,S=m),S=b<=0?S:!S;var C=ln(u,d,y,w),_=ln(u,d,y,w+(S?1:-1)*359),A="M".concat(C.x,",").concat(C.y,` - A`).concat(y,",").concat(y,",0,1,").concat(S?0:1,`, - `).concat(_.x,",").concat(_.y),j=$t(e.id)?eh("recharts-radial-line-"):e.id;return T.createElement("text",Fm({},r,{dominantBaseline:"central",className:Mt("recharts-radial-bar-label",c)}),T.createElement("defs",null,T.createElement("path",{id:j,d:A})),T.createElement("textPath",{xlinkHref:"#".concat(j)},n))},xTe=function(e){var n=e.viewBox,r=e.offset,i=e.position,s=n,o=s.cx,c=s.cy,l=s.innerRadius,u=s.outerRadius,d=s.startAngle,f=s.endAngle,h=(d+f)/2;if(i==="outside"){var p=ln(o,c,u+r,h),g=p.x,m=p.y;return{x:g,y:m,textAnchor:g>=o?"start":"end",verticalAnchor:"middle"}}if(i==="center")return{x:o,y:c,textAnchor:"middle",verticalAnchor:"middle"};if(i==="centerTop")return{x:o,y:c,textAnchor:"middle",verticalAnchor:"start"};if(i==="centerBottom")return{x:o,y:c,textAnchor:"middle",verticalAnchor:"end"};var y=(l+u)/2,b=ln(o,c,y,h),x=b.x,w=b.y;return{x,y:w,textAnchor:"middle",verticalAnchor:"middle"}},bTe=function(e){var n=e.viewBox,r=e.parentViewBox,i=e.offset,s=e.position,o=n,c=o.x,l=o.y,u=o.width,d=o.height,f=d>=0?1:-1,h=f*i,p=f>0?"end":"start",g=f>0?"start":"end",m=u>=0?1:-1,y=m*i,b=m>0?"end":"start",x=m>0?"start":"end";if(s==="top"){var w={x:c+u/2,y:l-f*i,textAnchor:"middle",verticalAnchor:p};return yr(yr({},w),r?{height:Math.max(l-r.y,0),width:u}:{})}if(s==="bottom"){var S={x:c+u/2,y:l+d+h,textAnchor:"middle",verticalAnchor:g};return yr(yr({},S),r?{height:Math.max(r.y+r.height-(l+d),0),width:u}:{})}if(s==="left"){var C={x:c-y,y:l+d/2,textAnchor:b,verticalAnchor:"middle"};return yr(yr({},C),r?{width:Math.max(C.x-r.x,0),height:d}:{})}if(s==="right"){var _={x:c+u+y,y:l+d/2,textAnchor:x,verticalAnchor:"middle"};return yr(yr({},_),r?{width:Math.max(r.x+r.width-_.x,0),height:d}:{})}var A=r?{width:u,height:d}:{};return s==="insideLeft"?yr({x:c+y,y:l+d/2,textAnchor:x,verticalAnchor:"middle"},A):s==="insideRight"?yr({x:c+u-y,y:l+d/2,textAnchor:b,verticalAnchor:"middle"},A):s==="insideTop"?yr({x:c+u/2,y:l+h,textAnchor:"middle",verticalAnchor:g},A):s==="insideBottom"?yr({x:c+u/2,y:l+d-h,textAnchor:"middle",verticalAnchor:p},A):s==="insideTopLeft"?yr({x:c+y,y:l+h,textAnchor:x,verticalAnchor:g},A):s==="insideTopRight"?yr({x:c+u-y,y:l+h,textAnchor:b,verticalAnchor:g},A):s==="insideBottomLeft"?yr({x:c+y,y:l+d-h,textAnchor:x,verticalAnchor:p},A):s==="insideBottomRight"?yr({x:c+u-y,y:l+d-h,textAnchor:b,verticalAnchor:p},A):Yf(s)&&(Ee(s.x)||Ll(s.x))&&(Ee(s.y)||Ll(s.y))?yr({x:c+gi(s.x,u),y:l+gi(s.y,d),textAnchor:"end",verticalAnchor:"end"},A):yr({x:c+u/2,y:l+d/2,textAnchor:"middle",verticalAnchor:"middle"},A)},wTe=function(e){return"cx"in e&&Ee(e.cx)};function Ir(t){var e=t.offset,n=e===void 0?5:e,r=dTe(t,sTe),i=yr({offset:n},r),s=i.viewBox,o=i.position,c=i.value,l=i.children,u=i.content,d=i.className,f=d===void 0?"":d,h=i.textBreakAll;if(!s||$t(c)&&$t(l)&&!v.isValidElement(u)&&!Et(u))return null;if(v.isValidElement(u))return v.cloneElement(u,i);var p;if(Et(u)){if(p=v.createElement(u,i),v.isValidElement(p))return p}else p=gTe(i);var g=wTe(s),m=rt(i,!0);if(g&&(o==="insideStart"||o==="insideEnd"||o==="end"))return yTe(i,p,m);var y=g?xTe(i):bTe(i);return T.createElement(Su,Fm({className:Mt("recharts-label",f)},m,y,{breakAll:h}),p)}Ir.displayName="Label";var J8=function(e){var n=e.cx,r=e.cy,i=e.angle,s=e.startAngle,o=e.endAngle,c=e.r,l=e.radius,u=e.innerRadius,d=e.outerRadius,f=e.x,h=e.y,p=e.top,g=e.left,m=e.width,y=e.height,b=e.clockWise,x=e.labelViewBox;if(x)return x;if(Ee(m)&&Ee(y)){if(Ee(f)&&Ee(h))return{x:f,y:h,width:m,height:y};if(Ee(p)&&Ee(g))return{x:p,y:g,width:m,height:y}}return Ee(f)&&Ee(h)?{x:f,y:h,width:0,height:0}:Ee(n)&&Ee(r)?{cx:n,cy:r,startAngle:s||i||0,endAngle:o||i||0,innerRadius:u||0,outerRadius:d||l||c||0,clockWise:b}:e.viewBox?e.viewBox:{}},STe=function(e,n){return e?e===!0?T.createElement(Ir,{key:"label-implicit",viewBox:n}):Er(e)?T.createElement(Ir,{key:"label-implicit",viewBox:n,value:e}):v.isValidElement(e)?e.type===Ir?v.cloneElement(e,{key:"label-implicit",viewBox:n}):T.createElement(Ir,{key:"label-implicit",content:e,viewBox:n}):Et(e)?T.createElement(Ir,{key:"label-implicit",content:e,viewBox:n}):Yf(e)?T.createElement(Ir,Fm({viewBox:n},e,{key:"label-implicit"})):null:null},CTe=function(e,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var i=e.children,s=J8(e),o=_s(i,Ir).map(function(l,u){return v.cloneElement(l,{viewBox:n||s,key:"label-".concat(u)})});if(!r)return o;var c=STe(e.label,n||s);return[c].concat(oTe(o))};Ir.parseViewBox=J8;Ir.renderCallByParent=CTe;function _Te(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ATe=_Te;const Z8=un(ATe);function Um(t){"@babel/helpers - typeof";return Um=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Um(t)}var jTe=["valueAccessor"],ETe=["data","dataKey","clockWise","id","textBreakAll"];function NTe(t){return OTe(t)||kTe(t)||PTe(t)||TTe()}function TTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function PTe(t,e){if(t){if(typeof t=="string")return _A(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _A(t,e)}}function kTe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function OTe(t){if(Array.isArray(t))return _A(t)}function _A(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function DTe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var $Te=function(e){return Array.isArray(e.value)?Z8(e.value):e.value};function Uo(t){var e=t.valueAccessor,n=e===void 0?$Te:e,r=ZM(t,jTe),i=r.data,s=r.dataKey,o=r.clockWise,c=r.id,l=r.textBreakAll,u=ZM(r,ETe);return!i||!i.length?null:T.createElement(Xt,{className:"recharts-label-list"},i.map(function(d,f){var h=$t(s)?n(d,f):ir(d&&d.payload,s),p=$t(c)?{}:{id:"".concat(c,"-").concat(f)};return T.createElement(Ir,bb({},rt(d,!0),u,p,{parentViewBox:d.parentViewBox,value:h,textBreakAll:l,viewBox:Ir.parseViewBox($t(o)?d:JM(JM({},d),{},{clockWise:o})),key:"label-".concat(f),index:f}))}))}Uo.displayName="LabelList";function LTe(t,e){return t?t===!0?T.createElement(Uo,{key:"labelList-implicit",data:e}):T.isValidElement(t)||Et(t)?T.createElement(Uo,{key:"labelList-implicit",data:e,content:t}):Yf(t)?T.createElement(Uo,bb({data:e},t,{key:"labelList-implicit"})):null:null}function FTe(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var r=t.children,i=_s(r,Uo).map(function(o,c){return v.cloneElement(o,{data:e,key:"labelList-".concat(c)})});if(!n)return i;var s=LTe(t.label,e);return[s].concat(NTe(i))}Uo.renderCallByParent=FTe;function Bm(t){"@babel/helpers - typeof";return Bm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Bm(t)}function AA(){return AA=Object.assign?Object.assign.bind():function(t){for(var e=1;e180),",").concat(+(o>u),`, - `).concat(f.x,",").concat(f.y,` - `);if(i>0){var p=ln(n,r,i,o),g=ln(n,r,i,u);h+="L ".concat(g.x,",").concat(g.y,` - A `).concat(i,",").concat(i,`,0, - `).concat(+(Math.abs(l)>180),",").concat(+(o<=u),`, - `).concat(p.x,",").concat(p.y," Z")}else h+="L ".concat(n,",").concat(r," Z");return h},VTe=function(e){var n=e.cx,r=e.cy,i=e.innerRadius,s=e.outerRadius,o=e.cornerRadius,c=e.forceCornerRadius,l=e.cornerIsExternal,u=e.startAngle,d=e.endAngle,f=mi(d-u),h=kv({cx:n,cy:r,radius:s,angle:u,sign:f,cornerRadius:o,cornerIsExternal:l}),p=h.circleTangency,g=h.lineTangency,m=h.theta,y=kv({cx:n,cy:r,radius:s,angle:d,sign:-f,cornerRadius:o,cornerIsExternal:l}),b=y.circleTangency,x=y.lineTangency,w=y.theta,S=l?Math.abs(u-d):Math.abs(u-d)-m-w;if(S<0)return c?"M ".concat(g.x,",").concat(g.y,` - a`).concat(o,",").concat(o,",0,0,1,").concat(o*2,`,0 - a`).concat(o,",").concat(o,",0,0,1,").concat(-o*2,`,0 - `):eK({cx:n,cy:r,innerRadius:i,outerRadius:s,startAngle:u,endAngle:d});var C="M ".concat(g.x,",").concat(g.y,` - A`).concat(o,",").concat(o,",0,0,").concat(+(f<0),",").concat(p.x,",").concat(p.y,` - A`).concat(s,",").concat(s,",0,").concat(+(S>180),",").concat(+(f<0),",").concat(b.x,",").concat(b.y,` - A`).concat(o,",").concat(o,",0,0,").concat(+(f<0),",").concat(x.x,",").concat(x.y,` - `);if(i>0){var _=kv({cx:n,cy:r,radius:i,angle:u,sign:f,isExternal:!0,cornerRadius:o,cornerIsExternal:l}),A=_.circleTangency,j=_.lineTangency,P=_.theta,k=kv({cx:n,cy:r,radius:i,angle:d,sign:-f,isExternal:!0,cornerRadius:o,cornerIsExternal:l}),O=k.circleTangency,E=k.lineTangency,R=k.theta,M=l?Math.abs(u-d):Math.abs(u-d)-P-R;if(M<0&&o===0)return"".concat(C,"L").concat(n,",").concat(r,"Z");C+="L".concat(E.x,",").concat(E.y,` - A`).concat(o,",").concat(o,",0,0,").concat(+(f<0),",").concat(O.x,",").concat(O.y,` - A`).concat(i,",").concat(i,",0,").concat(+(M>180),",").concat(+(f>0),",").concat(A.x,",").concat(A.y,` - A`).concat(o,",").concat(o,",0,0,").concat(+(f<0),",").concat(j.x,",").concat(j.y,"Z")}else C+="L".concat(n,",").concat(r,"Z");return C},GTe={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},tK=function(e){var n=tD(tD({},GTe),e),r=n.cx,i=n.cy,s=n.innerRadius,o=n.outerRadius,c=n.cornerRadius,l=n.forceCornerRadius,u=n.cornerIsExternal,d=n.startAngle,f=n.endAngle,h=n.className;if(o0&&Math.abs(d-f)<360?y=VTe({cx:r,cy:i,innerRadius:s,outerRadius:o,cornerRadius:Math.min(m,g/2),forceCornerRadius:l,cornerIsExternal:u,startAngle:d,endAngle:f}):y=eK({cx:r,cy:i,innerRadius:s,outerRadius:o,startAngle:d,endAngle:f}),T.createElement("path",AA({},rt(n,!0),{className:p,d:y,role:"img"}))};function Hm(t){"@babel/helpers - typeof";return Hm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hm(t)}function jA(){return jA=Object.assign?Object.assign.bind():function(t){for(var e=1;e0;)if(!n.equals(t[r],e[r],r,r,t,e,n))return!1;return!0}function oPe(t,e){return ah(t.getTime(),e.getTime())}function lD(t,e,n){if(t.size!==e.size)return!1;for(var r={},i=t.entries(),s=0,o,c;(o=i.next())&&!o.done;){for(var l=e.entries(),u=!1,d=0;(c=l.next())&&!c.done;){var f=o.value,h=f[0],p=f[1],g=c.value,m=g[0],y=g[1];!u&&!r[d]&&(u=n.equals(h,m,s,d,t,e,n)&&n.equals(p,y,h,m,t,e,n))&&(r[d]=!0),d++}if(!u)return!1;s++}return!0}function aPe(t,e,n){var r=cD(t),i=r.length;if(cD(e).length!==i)return!1;for(var s;i-- >0;)if(s=r[i],s===oK&&(t.$$typeof||e.$$typeof)&&t.$$typeof!==e.$$typeof||!sK(e,s)||!n.equals(t[s],e[s],s,s,t,e,n))return!1;return!0}function Rh(t,e,n){var r=oD(t),i=r.length;if(oD(e).length!==i)return!1;for(var s,o,c;i-- >0;)if(s=r[i],s===oK&&(t.$$typeof||e.$$typeof)&&t.$$typeof!==e.$$typeof||!sK(e,s)||!n.equals(t[s],e[s],s,s,t,e,n)||(o=aD(t,s),c=aD(e,s),(o||c)&&(!o||!c||o.configurable!==c.configurable||o.enumerable!==c.enumerable||o.writable!==c.writable)))return!1;return!0}function cPe(t,e){return ah(t.valueOf(),e.valueOf())}function lPe(t,e){return t.source===e.source&&t.flags===e.flags}function uD(t,e,n){if(t.size!==e.size)return!1;for(var r={},i=t.values(),s,o;(s=i.next())&&!s.done;){for(var c=e.values(),l=!1,u=0;(o=c.next())&&!o.done;)!l&&!r[u]&&(l=n.equals(s.value,o.value,s.value,o.value,t,e,n))&&(r[u]=!0),u++;if(!l)return!1}return!0}function uPe(t,e){var n=t.length;if(e.length!==n)return!1;for(;n-- >0;)if(t[n]!==e[n])return!1;return!0}var dPe="[object Arguments]",fPe="[object Boolean]",hPe="[object Date]",pPe="[object Map]",mPe="[object Number]",gPe="[object Object]",vPe="[object RegExp]",yPe="[object Set]",xPe="[object String]",bPe=Array.isArray,dD=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,fD=Object.assign,wPe=Object.prototype.toString.call.bind(Object.prototype.toString);function SPe(t){var e=t.areArraysEqual,n=t.areDatesEqual,r=t.areMapsEqual,i=t.areObjectsEqual,s=t.arePrimitiveWrappersEqual,o=t.areRegExpsEqual,c=t.areSetsEqual,l=t.areTypedArraysEqual;return function(d,f,h){if(d===f)return!0;if(d==null||f==null||typeof d!="object"||typeof f!="object")return d!==d&&f!==f;var p=d.constructor;if(p!==f.constructor)return!1;if(p===Object)return i(d,f,h);if(bPe(d))return e(d,f,h);if(dD!=null&&dD(d))return l(d,f,h);if(p===Date)return n(d,f,h);if(p===RegExp)return o(d,f,h);if(p===Map)return r(d,f,h);if(p===Set)return c(d,f,h);var g=wPe(d);return g===hPe?n(d,f,h):g===vPe?o(d,f,h):g===pPe?r(d,f,h):g===yPe?c(d,f,h):g===gPe?typeof d.then!="function"&&typeof f.then!="function"&&i(d,f,h):g===dPe?i(d,f,h):g===fPe||g===mPe||g===xPe?s(d,f,h):!1}}function CPe(t){var e=t.circular,n=t.createCustomConfig,r=t.strict,i={areArraysEqual:r?Rh:sPe,areDatesEqual:oPe,areMapsEqual:r?sD(lD,Rh):lD,areObjectsEqual:r?Rh:aPe,arePrimitiveWrappersEqual:cPe,areRegExpsEqual:lPe,areSetsEqual:r?sD(uD,Rh):uD,areTypedArraysEqual:r?Rh:uPe};if(n&&(i=fD({},i,n(i))),e){var s=Iv(i.areArraysEqual),o=Iv(i.areMapsEqual),c=Iv(i.areObjectsEqual),l=Iv(i.areSetsEqual);i=fD({},i,{areArraysEqual:s,areMapsEqual:o,areObjectsEqual:c,areSetsEqual:l})}return i}function _Pe(t){return function(e,n,r,i,s,o,c){return t(e,n,c)}}function APe(t){var e=t.circular,n=t.comparator,r=t.createState,i=t.equals,s=t.strict;if(r)return function(l,u){var d=r(),f=d.cache,h=f===void 0?e?new WeakMap:void 0:f,p=d.meta;return n(l,u,{cache:h,equals:i,meta:p,strict:s})};if(e)return function(l,u){return n(l,u,{cache:new WeakMap,equals:i,meta:void 0,strict:s})};var o={cache:void 0,equals:i,meta:void 0,strict:s};return function(l,u){return n(l,u,o)}}var jPe=gl();gl({strict:!0});gl({circular:!0});gl({circular:!0,strict:!0});gl({createInternalComparator:function(){return ah}});gl({strict:!0,createInternalComparator:function(){return ah}});gl({circular:!0,createInternalComparator:function(){return ah}});gl({circular:!0,createInternalComparator:function(){return ah},strict:!0});function gl(t){t===void 0&&(t={});var e=t.circular,n=e===void 0?!1:e,r=t.createInternalComparator,i=t.createState,s=t.strict,o=s===void 0?!1:s,c=CPe(t),l=SPe(c),u=r?r(l):_Pe(l);return APe({circular:n,comparator:l,createState:i,equals:u,strict:o})}function EPe(t){typeof requestAnimationFrame<"u"&&requestAnimationFrame(t)}function hD(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function i(s){n<0&&(n=s),s-n>e?(t(s),n=-1):EPe(i)};requestAnimationFrame(r)}function EA(t){"@babel/helpers - typeof";return EA=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},EA(t)}function NPe(t){return OPe(t)||kPe(t)||PPe(t)||TPe()}function TPe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function PPe(t,e){if(t){if(typeof t=="string")return pD(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pD(t,e)}}function pD(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1?1:b<0?0:b},m=function(b){for(var x=b>1?1:b,w=x,S=0;S<8;++S){var C=f(w)-x,_=p(w);if(Math.abs(C-x)0&&arguments[0]!==void 0?arguments[0]:{},n=e.stiff,r=n===void 0?100:n,i=e.damping,s=i===void 0?8:i,o=e.dt,c=o===void 0?17:o,l=function(d,f,h){var p=-(d-f)*r,g=h*s,m=h+(p-g)*c/1e3,y=h*c/1e3+d;return Math.abs(y-f)t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function lke(t,e){if(t==null)return{};var n={},r=Object.keys(t),i,s;for(s=0;s=0)&&(n[i]=t[i]);return n}function CC(t){return hke(t)||fke(t)||dke(t)||uke()}function uke(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function dke(t,e){if(t){if(typeof t=="string")return OA(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return OA(t,e)}}function fke(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function hke(t){if(Array.isArray(t))return OA(t)}function OA(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Cb(t){return Cb=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Cb(t)}var ho=function(t){yke(n,t);var e=xke(n);function n(r,i){var s;pke(this,n),s=e.call(this,r,i);var o=s.props,c=o.isActive,l=o.attributeName,u=o.from,d=o.to,f=o.steps,h=o.children,p=o.duration;if(s.handleStyleChange=s.handleStyleChange.bind(MA(s)),s.changeStyle=s.changeStyle.bind(MA(s)),!c||p<=0)return s.state={style:{}},typeof h=="function"&&(s.state={style:d}),RA(s);if(f&&f.length)s.state={style:f[0].style};else if(u){if(typeof h=="function")return s.state={style:u},RA(s);s.state={style:l?Yh({},l,u):u}}else s.state={style:{}};return s}return gke(n,[{key:"componentDidMount",value:function(){var i=this.props,s=i.isActive,o=i.canBegin;this.mounted=!0,!(!s||!o)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(i){var s=this.props,o=s.isActive,c=s.canBegin,l=s.attributeName,u=s.shouldReAnimate,d=s.to,f=s.from,h=this.state.style;if(c){if(!o){var p={style:l?Yh({},l,d):d};this.state&&h&&(l&&h[l]!==d||!l&&h!==d)&&this.setState(p);return}if(!(jPe(i.to,d)&&i.canBegin&&i.isActive)){var g=!i.canBegin||!i.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=g||u?f:i.to;if(this.state&&h){var y={style:l?Yh({},l,m):m};(l&&h[l]!==m||!l&&h!==m)&&this.setState(y)}this.runAnimation(Rs(Rs({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var i=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),i&&i()}},{key:"handleStyleChange",value:function(i){this.changeStyle(i)}},{key:"changeStyle",value:function(i){this.mounted&&this.setState({style:i})}},{key:"runJSAnimation",value:function(i){var s=this,o=i.from,c=i.to,l=i.duration,u=i.easing,d=i.begin,f=i.onAnimationEnd,h=i.onAnimationStart,p=oke(o,c,YPe(u),l,this.changeStyle),g=function(){s.stopJSAnimation=p()};this.manager.start([h,d,g,l,f])}},{key:"runStepAnimation",value:function(i){var s=this,o=i.steps,c=i.begin,l=i.onAnimationStart,u=o[0],d=u.style,f=u.duration,h=f===void 0?0:f,p=function(m,y,b){if(b===0)return m;var x=y.duration,w=y.easing,S=w===void 0?"ease":w,C=y.style,_=y.properties,A=y.onAnimationEnd,j=b>0?o[b-1]:y,P=_||Object.keys(C);if(typeof S=="function"||S==="spring")return[].concat(CC(m),[s.runJSAnimation.bind(s,{from:j.style,to:C,duration:x,easing:S}),x]);var k=vD(P,x,S),O=Rs(Rs(Rs({},j.style),C),{},{transition:k});return[].concat(CC(m),[O,x,A]).filter($Pe)};return this.manager.start([l].concat(CC(o.reduce(p,[d,Math.max(h,c)])),[i.onAnimationEnd]))}},{key:"runAnimation",value:function(i){this.manager||(this.manager=IPe());var s=i.begin,o=i.duration,c=i.attributeName,l=i.to,u=i.easing,d=i.onAnimationStart,f=i.onAnimationEnd,h=i.steps,p=i.children,g=this.manager;if(this.unSubscribe=g.subscribe(this.handleStyleChange),typeof u=="function"||typeof p=="function"||u==="spring"){this.runJSAnimation(i);return}if(h.length>1){this.runStepAnimation(i);return}var m=c?Yh({},c,l):l,y=vD(Object.keys(m),o,u);g.start([d,s,Rs(Rs({},m),{},{transition:y}),o,f])}},{key:"render",value:function(){var i=this.props,s=i.children;i.begin;var o=i.duration;i.attributeName,i.easing;var c=i.isActive;i.steps,i.from,i.to,i.canBegin,i.onAnimationEnd,i.shouldReAnimate,i.onAnimationReStart;var l=cke(i,ake),u=v.Children.count(s),d=this.state.style;if(typeof s=="function")return s(d);if(!c||u===0||o<=0)return s;var f=function(p){var g=p.props,m=g.style,y=m===void 0?{}:m,b=g.className,x=v.cloneElement(p,Rs(Rs({},l),{},{style:Rs(Rs({},y),d),className:b}));return x};return u===1?f(v.Children.only(s)):T.createElement("div",null,v.Children.map(s,function(h){return f(h)}))}}]),n}(v.PureComponent);ho.displayName="Animate";ho.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};ho.propTypes={from:Vt.oneOfType([Vt.object,Vt.string]),to:Vt.oneOfType([Vt.object,Vt.string]),attributeName:Vt.string,duration:Vt.number,begin:Vt.number,easing:Vt.oneOfType([Vt.string,Vt.func]),steps:Vt.arrayOf(Vt.shape({duration:Vt.number.isRequired,style:Vt.object.isRequired,easing:Vt.oneOfType([Vt.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),Vt.func]),properties:Vt.arrayOf("string"),onAnimationEnd:Vt.func})),children:Vt.oneOfType([Vt.node,Vt.func]),isActive:Vt.bool,canBegin:Vt.bool,onAnimationEnd:Vt.func,shouldReAnimate:Vt.bool,onAnimationStart:Vt.func,onAnimationReStart:Vt.func};Vt.object,Vt.object,Vt.object,Vt.element;Vt.object,Vt.object,Vt.object,Vt.oneOfType([Vt.array,Vt.element]),Vt.any;function Gm(t){"@babel/helpers - typeof";return Gm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Gm(t)}function _b(){return _b=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0?1:-1,l=r>=0?1:-1,u=i>=0&&r>=0||i<0&&r<0?1:0,d;if(o>0&&s instanceof Array){for(var f=[0,0,0,0],h=0,p=4;ho?o:s[h];d="M".concat(e,",").concat(n+c*f[0]),f[0]>0&&(d+="A ".concat(f[0],",").concat(f[0],",0,0,").concat(u,",").concat(e+l*f[0],",").concat(n)),d+="L ".concat(e+r-l*f[1],",").concat(n),f[1]>0&&(d+="A ".concat(f[1],",").concat(f[1],",0,0,").concat(u,`, - `).concat(e+r,",").concat(n+c*f[1])),d+="L ".concat(e+r,",").concat(n+i-c*f[2]),f[2]>0&&(d+="A ".concat(f[2],",").concat(f[2],",0,0,").concat(u,`, - `).concat(e+r-l*f[2],",").concat(n+i)),d+="L ".concat(e+l*f[3],",").concat(n+i),f[3]>0&&(d+="A ".concat(f[3],",").concat(f[3],",0,0,").concat(u,`, - `).concat(e,",").concat(n+i-c*f[3])),d+="Z"}else if(o>0&&s===+s&&s>0){var g=Math.min(o,s);d="M ".concat(e,",").concat(n+c*g,` - A `).concat(g,",").concat(g,",0,0,").concat(u,",").concat(e+l*g,",").concat(n,` - L `).concat(e+r-l*g,",").concat(n,` - A `).concat(g,",").concat(g,",0,0,").concat(u,",").concat(e+r,",").concat(n+c*g,` - L `).concat(e+r,",").concat(n+i-c*g,` - A `).concat(g,",").concat(g,",0,0,").concat(u,",").concat(e+r-l*g,",").concat(n+i,` - L `).concat(e+l*g,",").concat(n+i,` - A `).concat(g,",").concat(g,",0,0,").concat(u,",").concat(e,",").concat(n+i-c*g," Z")}else d="M ".concat(e,",").concat(n," h ").concat(r," v ").concat(i," h ").concat(-r," Z");return d},Tke=function(e,n){if(!e||!n)return!1;var r=e.x,i=e.y,s=n.x,o=n.y,c=n.width,l=n.height;if(Math.abs(c)>0&&Math.abs(l)>0){var u=Math.min(s,s+c),d=Math.max(s,s+c),f=Math.min(o,o+l),h=Math.max(o,o+l);return r>=u&&r<=d&&i>=f&&i<=h}return!1},Pke={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},GP=function(e){var n=AD(AD({},Pke),e),r=v.useRef(),i=v.useState(-1),s=wke(i,2),o=s[0],c=s[1];v.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var S=r.current.getTotalLength();S&&c(S)}catch{}},[]);var l=n.x,u=n.y,d=n.width,f=n.height,h=n.radius,p=n.className,g=n.animationEasing,m=n.animationDuration,y=n.animationBegin,b=n.isAnimationActive,x=n.isUpdateAnimationActive;if(l!==+l||u!==+u||d!==+d||f!==+f||d===0||f===0)return null;var w=Mt("recharts-rectangle",p);return x?T.createElement(ho,{canBegin:o>0,from:{width:d,height:f,x:l,y:u},to:{width:d,height:f,x:l,y:u},duration:m,animationEasing:g,isActive:x},function(S){var C=S.width,_=S.height,A=S.x,j=S.y;return T.createElement(ho,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:m,isActive:b,easing:g},T.createElement("path",_b({},rt(n,!0),{className:w,d:jD(A,j,C,_,h),ref:r})))}):T.createElement("path",_b({},rt(n,!0),{className:w,d:jD(l,u,d,f,h)}))},kke=["points","className","baseLinePoints","connectNulls"];function ud(){return ud=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Ike(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function ED(t){return $ke(t)||Dke(t)||Mke(t)||Rke()}function Rke(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Mke(t,e){if(t){if(typeof t=="string")return DA(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return DA(t,e)}}function Dke(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function $ke(t){if(Array.isArray(t))return DA(t)}function DA(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:[],n=[[]];return e.forEach(function(r){ND(r)?n[n.length-1].push(r):n[n.length-1].length>0&&n.push([])}),ND(e[0])&&n[n.length-1].push(e[0]),n[n.length-1].length<=0&&(n=n.slice(0,-1)),n},xp=function(e,n){var r=Lke(e);n&&(r=[r.reduce(function(s,o){return[].concat(ED(s),ED(o))},[])]);var i=r.map(function(s){return s.reduce(function(o,c,l){return"".concat(o).concat(l===0?"M":"L").concat(c.x,",").concat(c.y)},"")}).join("");return r.length===1?"".concat(i,"Z"):i},Fke=function(e,n,r){var i=xp(e,r);return"".concat(i.slice(-1)==="Z"?i.slice(0,-1):i,"L").concat(xp(n.reverse(),r).slice(1))},hK=function(e){var n=e.points,r=e.className,i=e.baseLinePoints,s=e.connectNulls,o=Oke(e,kke);if(!n||!n.length)return null;var c=Mt("recharts-polygon",r);if(i&&i.length){var l=o.stroke&&o.stroke!=="none",u=Fke(n,i,s);return T.createElement("g",{className:c},T.createElement("path",ud({},rt(o,!0),{fill:u.slice(-1)==="Z"?o.fill:"none",stroke:"none",d:u})),l?T.createElement("path",ud({},rt(o,!0),{fill:"none",d:xp(n,s)})):null,l?T.createElement("path",ud({},rt(o,!0),{fill:"none",d:xp(i,s)})):null)}var d=xp(n,s);return T.createElement("path",ud({},rt(o,!0),{fill:d.slice(-1)==="Z"?o.fill:"none",className:c,d}))};function $A(){return $A=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Kke(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var Wke=function(e,n,r,i,s,o){return"M".concat(e,",").concat(s,"v").concat(i,"M").concat(o,",").concat(n,"h").concat(r)},qke=function(e){var n=e.x,r=n===void 0?0:n,i=e.y,s=i===void 0?0:i,o=e.top,c=o===void 0?0:o,l=e.left,u=l===void 0?0:l,d=e.width,f=d===void 0?0:d,h=e.height,p=h===void 0?0:h,g=e.className,m=Gke(e,Uke),y=Bke({x:r,y:s,top:c,left:u,width:f,height:p},m);return!Ee(r)||!Ee(s)||!Ee(f)||!Ee(p)||!Ee(c)||!Ee(u)?null:T.createElement("path",LA({},rt(y,!0),{className:Mt("recharts-cross",g),d:Wke(r,s,f,p,c,u)}))},Yke=["cx","cy","innerRadius","outerRadius","gridType","radialLines"];function Wm(t){"@babel/helpers - typeof";return Wm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wm(t)}function Qke(t,e){if(t==null)return{};var n=Xke(t,e),r,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Xke(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Ba(){return Ba=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function bOe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function wOe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ID(t,e){for(var n=0;nDD?o=i==="outer"?"start":"end":s<-DD?o=i==="outer"?"end":"start":o="middle",o}},{key:"renderAxisLine",value:function(){var r=this.props,i=r.cx,s=r.cy,o=r.radius,c=r.axisLine,l=r.axisLineType,u=Sl(Sl({},rt(this.props,!1)),{},{fill:"none"},rt(c,!1));if(l==="circle")return T.createElement(Lg,Tl({className:"recharts-polar-angle-axis-line"},u,{cx:i,cy:s,r:o}));var d=this.props.ticks,f=d.map(function(h){return ln(i,s,o,h.coordinate)});return T.createElement(hK,Tl({className:"recharts-polar-angle-axis-line"},u,{points:f}))}},{key:"renderTicks",value:function(){var r=this,i=this.props,s=i.ticks,o=i.tick,c=i.tickLine,l=i.tickFormatter,u=i.stroke,d=rt(this.props,!1),f=rt(o,!1),h=Sl(Sl({},d),{},{fill:"none"},rt(c,!1)),p=s.map(function(g,m){var y=r.getTickLineCoord(g),b=r.getTickTextAnchor(g),x=Sl(Sl(Sl({textAnchor:b},d),{},{stroke:"none",fill:u},f),{},{index:m,payload:g,x:y.x2,y:y.y2});return T.createElement(Xt,Tl({className:Mt("recharts-polar-angle-axis-tick",X8(o)),key:"tick-".concat(g.coordinate)},wu(r.props,g,m)),c&&T.createElement("line",Tl({className:"recharts-polar-angle-axis-tick-line"},h,y)),o&&e.renderTickItem(o,x,l?l(g.value,m):g.value))});return T.createElement(Xt,{className:"recharts-polar-angle-axis-ticks"},p)}},{key:"render",value:function(){var r=this.props,i=r.ticks,s=r.radius,o=r.axisLine;return s<=0||!i||!i.length?null:T.createElement(Xt,{className:Mt("recharts-polar-angle-axis",this.props.className)},o&&this.renderAxisLine(),this.renderTicks())}}],[{key:"renderTickItem",value:function(r,i,s){var o;return T.isValidElement(r)?o=T.cloneElement(r,i):Et(r)?o=r(i):o=T.createElement(Su,Tl({},i,{className:"recharts-polar-angle-axis-tick-value"}),s),o}}])}(v.PureComponent);zw(lh,"displayName","PolarAngleAxis");zw(lh,"axisType","angleAxis");zw(lh,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var DOe=vG,$Oe=DOe(Object.getPrototypeOf,Object),LOe=$Oe,FOe=Ka,UOe=LOe,BOe=Wa,HOe="[object Object]",zOe=Function.prototype,VOe=Object.prototype,xK=zOe.toString,GOe=VOe.hasOwnProperty,KOe=xK.call(Object);function WOe(t){if(!BOe(t)||FOe(t)!=HOe)return!1;var e=UOe(t);if(e===null)return!0;var n=GOe.call(e,"constructor")&&e.constructor;return typeof n=="function"&&n instanceof n&&xK.call(n)==KOe}var qOe=WOe;const YOe=un(qOe);var QOe=Ka,XOe=Wa,JOe="[object Boolean]";function ZOe(t){return t===!0||t===!1||XOe(t)&&QOe(t)==JOe}var eIe=ZOe;const tIe=un(eIe);function Ym(t){"@babel/helpers - typeof";return Ym=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ym(t)}function Eb(){return Eb=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n0,from:{upperWidth:0,lowerWidth:0,height:h,x:l,y:u},to:{upperWidth:d,lowerWidth:f,height:h,x:l,y:u},duration:m,animationEasing:g,isActive:b},function(w){var S=w.upperWidth,C=w.lowerWidth,_=w.height,A=w.x,j=w.y;return T.createElement(ho,{canBegin:o>0,from:"0px ".concat(o===-1?1:o,"px"),to:"".concat(o,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:m,easing:g},T.createElement("path",Eb({},rt(n,!0),{className:x,d:UD(A,j,S,C,_),ref:r})))}):T.createElement("g",null,T.createElement("path",Eb({},rt(n,!0),{className:x,d:UD(l,u,d,f,h)})))},fIe=["option","shapeType","propTransformer","activeClassName","isActive"];function Qm(t){"@babel/helpers - typeof";return Qm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qm(t)}function hIe(t,e){if(t==null)return{};var n=pIe(t,e),r,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function pIe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function BD(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Nb(t){for(var e=1;e0?ns(w,"paddingAngle",0):0;if(C){var A=Or(C.endAngle-C.startAngle,w.endAngle-w.startAngle),j=Nn(Nn({},w),{},{startAngle:x+_,endAngle:x+A(m)+_});y.push(j),x=j.endAngle}else{var P=w.endAngle,k=w.startAngle,O=Or(0,P-k),E=O(m),R=Nn(Nn({},w),{},{startAngle:x+_,endAngle:x+E+_});y.push(R),x=R.endAngle}}),T.createElement(Xt,null,r.renderSectorsStatically(y))})}},{key:"attachKeyboardHandlers",value:function(r){var i=this;r.onkeydown=function(s){if(!s.altKey)switch(s.key){case"ArrowLeft":{var o=++i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[o].focus(),i.setState({sectorToFocus:o});break}case"ArrowRight":{var c=--i.state.sectorToFocus<0?i.sectorRefs.length-1:i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[c].focus(),i.setState({sectorToFocus:c});break}case"Escape":{i.sectorRefs[i.state.sectorToFocus].blur(),i.setState({sectorToFocus:0});break}}}}},{key:"renderSectors",value:function(){var r=this.props,i=r.sectors,s=r.isAnimationActive,o=this.state.prevSectors;return s&&i&&i.length&&(!o||!Cu(o,i))?this.renderSectorsWithAnimation():this.renderSectorsStatically(i)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var r=this,i=this.props,s=i.hide,o=i.sectors,c=i.className,l=i.label,u=i.cx,d=i.cy,f=i.innerRadius,h=i.outerRadius,p=i.isAnimationActive,g=this.state.isAnimationFinished;if(s||!o||!o.length||!Ee(u)||!Ee(d)||!Ee(f)||!Ee(h))return null;var m=Mt("recharts-pie",c);return T.createElement(Xt,{tabIndex:this.props.rootTabIndex,className:m,ref:function(b){r.pieRef=b}},this.renderSectors(),l&&this.renderLabels(o),Ir.renderCallByParent(this.props,null,!1),(!p||g)&&Uo.renderCallByParent(this.props,o,!1))}}],[{key:"getDerivedStateFromProps",value:function(r,i){return i.prevIsAnimationActive!==r.isAnimationActive?{prevIsAnimationActive:r.isAnimationActive,prevAnimationId:r.animationId,curSectors:r.sectors,prevSectors:[],isAnimationFinished:!0}:r.isAnimationActive&&r.animationId!==i.prevAnimationId?{prevAnimationId:r.animationId,curSectors:r.sectors,prevSectors:i.curSectors,isAnimationFinished:!0}:r.sectors!==i.curSectors?{curSectors:r.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(r,i){return r>i?"start":r=360?x:x-1)*l,S=y-x*p-w,C=i.reduce(function(j,P){var k=ir(P,b,0);return j+(Ee(k)?k:0)},0),_;if(C>0){var A;_=i.map(function(j,P){var k=ir(j,b,0),O=ir(j,d,P),E=(Ee(k)?k:0)/C,R;P?R=A.endAngle+mi(m)*l*(k!==0?1:0):R=o;var M=R+mi(m)*((k!==0?p:0)+E*S),G=(R+M)/2,L=(g.innerRadius+g.outerRadius)/2,V=[{name:O,value:k,payload:j,dataKey:b,type:h}],I=ln(g.cx,g.cy,L,G);return A=Nn(Nn(Nn({percent:E,cornerRadius:s,name:O,tooltipPayload:V,midAngle:G,middleRadius:L,tooltipPosition:I},j),g),{},{value:ir(j,b),startAngle:R,endAngle:M,payload:j,paddingAngle:mi(m)*l}),A})}return Nn(Nn({},g),{},{sectors:_,data:i})});function MIe(t){return t&&t.length?t[0]:void 0}var DIe=MIe,$Ie=DIe;const LIe=un($Ie);var FIe=["key"];function gf(t){"@babel/helpers - typeof";return gf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gf(t)}function UIe(t,e){if(t==null)return{};var n=BIe(t,e),r,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function BIe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Pb(){return Pb=Object.assign?Object.assign.bind():function(t){for(var e=1;e=2&&(l=!0),u.push(li(li({},ln(o,c,x,y)),{},{name:g,value:m,cx:o,cy:c,radius:x,angle:y,payload:h}))});var f=[];return l&&u.forEach(function(h){if(Array.isArray(h.value)){var p=LIe(h.value),g=$t(p)?void 0:e.scale(p);f.push(li(li({},h),{},{radius:g},ln(o,c,g,h.angle)))}else f.push(h)}),{points:u,isRange:l,baseLinePoints:f}});var YIe=Math.ceil,QIe=Math.max;function XIe(t,e,n,r){for(var i=-1,s=QIe(YIe((e-t)/(n||1)),0),o=Array(s);s--;)o[r?s:++i]=t,t+=n;return o}var JIe=XIe,ZIe=DG,WD=1/0,eRe=17976931348623157e292;function tRe(t){if(!t)return t===0?t:0;if(t=ZIe(t),t===WD||t===-WD){var e=t<0?-1:1;return e*eRe}return t===t?t:0}var AK=tRe,nRe=JIe,rRe=Pw,_C=AK;function iRe(t){return function(e,n,r){return r&&typeof r!="number"&&rRe(e,n,r)&&(n=r=void 0),e=_C(e),n===void 0?(n=e,e=0):n=_C(n),r=r===void 0?e0&&r.handleDrag(i.changedTouches[0])}),zi(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var i=r.props,s=i.endIndex,o=i.onDragEnd,c=i.startIndex;o==null||o({endIndex:s,startIndex:c})}),r.detachDragEndListener()}),zi(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),zi(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),zi(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),zi(r,"handleSlideDragStart",function(i){var s=JD(i)?i.changedTouches[0]:i;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:s.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return yRe(e,t),pRe(e,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var i=r.startX,s=r.endX,o=this.state.scaleValues,c=this.props,l=c.gap,u=c.data,d=u.length-1,f=Math.min(i,s),h=Math.max(i,s),p=e.getIndexInRange(o,f),g=e.getIndexInRange(o,h);return{startIndex:p-p%l,endIndex:g===d?d:g-g%l}}},{key:"getTextOfTick",value:function(r){var i=this.props,s=i.data,o=i.tickFormatter,c=i.dataKey,l=ir(s[r],c,r);return Et(o)?o(l,r):l}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var i=this.state,s=i.slideMoveStartX,o=i.startX,c=i.endX,l=this.props,u=l.x,d=l.width,f=l.travellerWidth,h=l.startIndex,p=l.endIndex,g=l.onChange,m=r.pageX-s;m>0?m=Math.min(m,u+d-f-c,u+d-f-o):m<0&&(m=Math.max(m,u-o,u-c));var y=this.getIndex({startX:o+m,endX:c+m});(y.startIndex!==h||y.endIndex!==p)&&g&&g(y),this.setState({startX:o+m,endX:c+m,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,i){var s=JD(i)?i.changedTouches[0]:i;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:s.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var i=this.state,s=i.brushMoveStartX,o=i.movingTravellerId,c=i.endX,l=i.startX,u=this.state[o],d=this.props,f=d.x,h=d.width,p=d.travellerWidth,g=d.onChange,m=d.gap,y=d.data,b={startX:this.state.startX,endX:this.state.endX},x=r.pageX-s;x>0?x=Math.min(x,f+h-p-u):x<0&&(x=Math.max(x,f-u)),b[o]=u+x;var w=this.getIndex(b),S=w.startIndex,C=w.endIndex,_=function(){var j=y.length-1;return o==="startX"&&(c>l?S%m===0:C%m===0)||cl?C%m===0:S%m===0)||c>l&&C===j};this.setState(zi(zi({},o,u+x),"brushMoveStartX",r.pageX),function(){g&&_()&&g(w)})}},{key:"handleTravellerMoveKeyboard",value:function(r,i){var s=this,o=this.state,c=o.scaleValues,l=o.startX,u=o.endX,d=this.state[i],f=c.indexOf(d);if(f!==-1){var h=f+r;if(!(h===-1||h>=c.length)){var p=c[h];i==="startX"&&p>=u||i==="endX"&&p<=l||this.setState(zi({},i,p),function(){s.props.onChange(s.getIndex({startX:s.state.startX,endX:s.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,i=r.x,s=r.y,o=r.width,c=r.height,l=r.fill,u=r.stroke;return T.createElement("rect",{stroke:u,fill:l,x:i,y:s,width:o,height:c})}},{key:"renderPanorama",value:function(){var r=this.props,i=r.x,s=r.y,o=r.width,c=r.height,l=r.data,u=r.children,d=r.padding,f=v.Children.only(u);return f?T.cloneElement(f,{x:i,y:s,width:o,height:c,margin:d,compact:!0,data:l}):null}},{key:"renderTravellerLayer",value:function(r,i){var s,o,c=this,l=this.props,u=l.y,d=l.travellerWidth,f=l.height,h=l.traveller,p=l.ariaLabel,g=l.data,m=l.startIndex,y=l.endIndex,b=Math.max(r,this.props.x),x=AC(AC({},rt(this.props,!1)),{},{x:b,y:u,width:d,height:f}),w=p||"Min value: ".concat((s=g[m])===null||s===void 0?void 0:s.name,", Max value: ").concat((o=g[y])===null||o===void 0?void 0:o.name);return T.createElement(Xt,{tabIndex:0,role:"slider","aria-label":w,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[i],onTouchStart:this.travellerDragStartHandlers[i],onKeyDown:function(C){["ArrowLeft","ArrowRight"].includes(C.key)&&(C.preventDefault(),C.stopPropagation(),c.handleTravellerMoveKeyboard(C.key==="ArrowRight"?1:-1,i))},onFocus:function(){c.setState({isTravellerFocused:!0})},onBlur:function(){c.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},e.renderTraveller(h,x))}},{key:"renderSlide",value:function(r,i){var s=this.props,o=s.y,c=s.height,l=s.stroke,u=s.travellerWidth,d=Math.min(r,i)+u,f=Math.max(Math.abs(i-r)-u,0);return T.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:l,fillOpacity:.2,x:d,y:o,width:f,height:c})}},{key:"renderText",value:function(){var r=this.props,i=r.startIndex,s=r.endIndex,o=r.y,c=r.height,l=r.travellerWidth,u=r.stroke,d=this.state,f=d.startX,h=d.endX,p=5,g={pointerEvents:"none",fill:u};return T.createElement(Xt,{className:"recharts-brush-texts"},T.createElement(Su,Ib({textAnchor:"end",verticalAnchor:"middle",x:Math.min(f,h)-p,y:o+c/2},g),this.getTextOfTick(i)),T.createElement(Su,Ib({textAnchor:"start",verticalAnchor:"middle",x:Math.max(f,h)+l+p,y:o+c/2},g),this.getTextOfTick(s)))}},{key:"render",value:function(){var r=this.props,i=r.data,s=r.className,o=r.children,c=r.x,l=r.y,u=r.width,d=r.height,f=r.alwaysShowText,h=this.state,p=h.startX,g=h.endX,m=h.isTextActive,y=h.isSlideMoving,b=h.isTravellerMoving,x=h.isTravellerFocused;if(!i||!i.length||!Ee(c)||!Ee(l)||!Ee(u)||!Ee(d)||u<=0||d<=0)return null;var w=Mt("recharts-brush",s),S=T.Children.count(o)===1,C=fRe("userSelect","none");return T.createElement(Xt,{className:w,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:C},this.renderBackground(),S&&this.renderPanorama(),this.renderSlide(p,g),this.renderTravellerLayer(p,"startX"),this.renderTravellerLayer(g,"endX"),(m||y||b||x||f)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var i=r.x,s=r.y,o=r.width,c=r.height,l=r.stroke,u=Math.floor(s+c/2)-1;return T.createElement(T.Fragment,null,T.createElement("rect",{x:i,y:s,width:o,height:c,fill:l,stroke:"none"}),T.createElement("line",{x1:i+1,y1:u,x2:i+o-1,y2:u,fill:"none",stroke:"#fff"}),T.createElement("line",{x1:i+1,y1:u+2,x2:i+o-1,y2:u+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,i){var s;return T.isValidElement(r)?s=T.cloneElement(r,i):Et(r)?s=r(i):s=e.renderDefaultTraveller(i),s}},{key:"getDerivedStateFromProps",value:function(r,i){var s=r.data,o=r.width,c=r.x,l=r.travellerWidth,u=r.updateId,d=r.startIndex,f=r.endIndex;if(s!==i.prevData||u!==i.prevUpdateId)return AC({prevData:s,prevTravellerWidth:l,prevUpdateId:u,prevX:c,prevWidth:o},s&&s.length?bRe({data:s,width:o,x:c,travellerWidth:l,startIndex:d,endIndex:f}):{scale:null,scaleValues:null});if(i.scale&&(o!==i.prevWidth||c!==i.prevX||l!==i.prevTravellerWidth)){i.scale.range([c,c+o-l]);var h=i.scale.domain().map(function(p){return i.scale(p)});return{prevData:s,prevTravellerWidth:l,prevUpdateId:u,prevX:c,prevWidth:o,startX:i.scale(r.startIndex),endX:i.scale(r.endIndex),scaleValues:h}}return null}},{key:"getIndexInRange",value:function(r,i){for(var s=r.length,o=0,c=s-1;c-o>1;){var l=Math.floor((o+c)/2);r[l]>i?c=l:o=l}return i>=r[c]?c:o}}])}(v.PureComponent);zi(yf,"displayName","Brush");zi(yf,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var wRe=vP;function SRe(t,e){var n;return wRe(t,function(r,i,s){return n=e(r,i,s),!n}),!!n}var CRe=SRe,_Re=lG,ARe=Zo,jRe=CRe,ERe=Bi,NRe=Pw;function TRe(t,e,n){var r=ERe(t)?_Re:jRe;return n&&NRe(t,e,n)&&(e=void 0),r(t,ARe(e))}var PRe=TRe;const kRe=un(PRe);var Bo=function(e,n){var r=e.alwaysShow,i=e.ifOverflow;return r&&(i="extendDomain"),i===n},ZD=kG;function ORe(t,e,n){e=="__proto__"&&ZD?ZD(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var IRe=ORe,RRe=IRe,MRe=TG,DRe=Zo;function $Re(t,e){var n={};return e=DRe(e),MRe(t,function(r,i,s){RRe(n,i,e(r,i,s))}),n}var LRe=$Re;const FRe=un(LRe);function URe(t,e){for(var n=-1,r=t==null?0:t.length;++n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function r2e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function i2e(t,e){var n=t.x,r=t.y,i=n2e(t,JRe),s="".concat(n),o=parseInt(s,10),c="".concat(r),l=parseInt(c,10),u="".concat(e.height||i.height),d=parseInt(u,10),f="".concat(e.width||i.width),h=parseInt(f,10);return Mh(Mh(Mh(Mh(Mh({},e),i),o?{x:o}:{}),l?{y:l}:{}),{},{height:d,width:h,name:e.name,radius:e.radius})}function t$(t){return T.createElement(bK,VA({shapeType:"rectangle",propTransformer:i2e,activeClassName:"recharts-active-bar"},t))}var s2e=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,i){if(typeof e=="number")return e;var s=typeof r=="number";return s?e(r,i):(s||Au(),n)}},o2e=["value","background"],PK;function xf(t){"@babel/helpers - typeof";return xf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xf(t)}function a2e(t,e){if(t==null)return{};var n=c2e(t,e),r,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function c2e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Mb(){return Mb=Object.assign?Object.assign.bind():function(t){for(var e=1;e0&&Math.abs(G)0&&Math.abs(M)0&&(R=Math.min((U||0)-(M[ne-1]||0),R))}),Number.isFinite(R)){var G=R/E,L=m.layout==="vertical"?r.height:r.width;if(m.padding==="gap"&&(A=G*L/2),m.padding==="no-gap"){var V=gi(e.barCategoryGap,G*L),I=G*L/2;A=I-V-(I-V)/L*V}}}i==="xAxis"?j=[r.left+(w.left||0)+(A||0),r.left+r.width-(w.right||0)-(A||0)]:i==="yAxis"?j=l==="horizontal"?[r.top+r.height-(w.bottom||0),r.top+(w.top||0)]:[r.top+(w.top||0)+(A||0),r.top+r.height-(w.bottom||0)-(A||0)]:j=m.range,C&&(j=[j[1],j[0]]);var D=z8(m,s,h),X=D.scale,Q=D.realScaleType;X.domain(b).range(j),V8(X);var J=G8(X,Hs(Hs({},m),{},{realScaleType:Q}));i==="xAxis"?(O=y==="top"&&!S||y==="bottom"&&S,P=r.left,k=f[_]-O*m.height):i==="yAxis"&&(O=y==="left"&&!S||y==="right"&&S,P=f[_]-O*m.width,k=r.top);var ye=Hs(Hs(Hs({},m),J),{},{realScaleType:Q,x:P,y:k,scale:X,width:i==="xAxis"?r.width:m.width,height:i==="yAxis"?r.height:m.height});return ye.bandSize=yb(ye,J),!m.hide&&i==="xAxis"?f[_]+=(O?-1:1)*ye.height:m.hide||(f[_]+=(O?-1:1)*ye.width),Hs(Hs({},p),{},Kw({},g,ye))},{})},MK=function(e,n){var r=e.x,i=e.y,s=n.x,o=n.y;return{x:Math.min(r,s),y:Math.min(i,o),width:Math.abs(s-r),height:Math.abs(o-i)}},x2e=function(e){var n=e.x1,r=e.y1,i=e.x2,s=e.y2;return MK({x:n,y:r},{x:i,y:s})},DK=function(){function t(e){g2e(this,t),this.scale=e}return v2e(t,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.bandAware,s=r.position;if(n!==void 0){if(s)switch(s){case"start":return this.scale(n);case"middle":{var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+o}case"end":{var c=this.bandwidth?this.bandwidth():0;return this.scale(n)+c}default:return this.scale(n)}if(i){var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+l}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),i=r[0],s=r[r.length-1];return i<=s?n>=i&&n<=s:n>=s&&n<=i}}],[{key:"create",value:function(n){return new t(n)}}])}();Kw(DK,"EPS",1e-4);var KP=function(e){var n=Object.keys(e).reduce(function(r,i){return Hs(Hs({},r),{},Kw({},i,DK.create(e[i])))},{});return Hs(Hs({},n),{},{apply:function(i){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=s.bandAware,c=s.position;return FRe(i,function(l,u){return n[u].apply(l,{bandAware:o,position:c})})},isInRange:function(i){return TK(i,function(s,o){return n[o].isInRange(s)})}})};function b2e(t){return(t%180+180)%180}var w2e=function(e){var n=e.width,r=e.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,s=b2e(i),o=s*Math.PI/180,c=Math.atan(r/n),l=o>c&&o-1?i[s?e[o]:o]:void 0}}var j2e=A2e,E2e=AK;function N2e(t){var e=E2e(t),n=e%1;return e===e?n?e-n:e:0}var T2e=N2e,P2e=CG,k2e=Zo,O2e=T2e,I2e=Math.max;function R2e(t,e,n){var r=t==null?0:t.length;if(!r)return-1;var i=n==null?0:O2e(n);return i<0&&(i=I2e(r+i,0)),P2e(t,k2e(e),i)}var M2e=R2e,D2e=j2e,$2e=M2e,L2e=D2e($2e),F2e=L2e;const U2e=un(F2e);var B2e=Ape(function(t){return{x:t.left,y:t.top,width:t.width,height:t.height}},function(t){return["l",t.left,"t",t.top,"w",t.width,"h",t.height].join("")}),WP=v.createContext(void 0),qP=v.createContext(void 0),$K=v.createContext(void 0),LK=v.createContext({}),FK=v.createContext(void 0),UK=v.createContext(0),BK=v.createContext(0),o$=function(e){var n=e.state,r=n.xAxisMap,i=n.yAxisMap,s=n.offset,o=e.clipPathId,c=e.children,l=e.width,u=e.height,d=B2e(s);return T.createElement(WP.Provider,{value:r},T.createElement(qP.Provider,{value:i},T.createElement(LK.Provider,{value:s},T.createElement($K.Provider,{value:d},T.createElement(FK.Provider,{value:o},T.createElement(UK.Provider,{value:u},T.createElement(BK.Provider,{value:l},c)))))))},H2e=function(){return v.useContext(FK)},HK=function(e){var n=v.useContext(WP);n==null&&Au();var r=n[e];return r==null&&Au(),r},z2e=function(){var e=v.useContext(WP);return dc(e)},V2e=function(){var e=v.useContext(qP),n=U2e(e,function(r){return TK(r.domain,Number.isFinite)});return n||dc(e)},zK=function(e){var n=v.useContext(qP);n==null&&Au();var r=n[e];return r==null&&Au(),r},G2e=function(){var e=v.useContext($K);return e},K2e=function(){return v.useContext(LK)},YP=function(){return v.useContext(BK)},QP=function(){return v.useContext(UK)};function bf(t){"@babel/helpers - typeof";return bf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bf(t)}function W2e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function q2e(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);nt*i)return!1;var s=n();return t*(e-t*s/2-r)>=0&&t*(e+t*s/2-i)<=0}function TMe(t,e){return QK(t,e+1)}function PMe(t,e,n,r,i){for(var s=(r||[]).slice(),o=e.start,c=e.end,l=0,u=1,d=o,f=function(){var g=r==null?void 0:r[l];if(g===void 0)return{v:QK(r,u)};var m=l,y,b=function(){return y===void 0&&(y=n(g,m)),y},x=g.coordinate,w=l===0||Ub(t,x,b,d,c);w||(l=0,d=o,u+=1),w&&(d=x+t*(b()/2+i),l+=u)},h;u<=s.length;)if(h=f(),h)return h.v;return[]}function tg(t){"@babel/helpers - typeof";return tg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},tg(t)}function p$(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function Xr(t){for(var e=1;e0?p.coordinate-y*t:p.coordinate})}else s[h]=p=Xr(Xr({},p),{},{tickCoord:p.coordinate});var b=Ub(t,p.tickCoord,m,c,l);b&&(l=p.tickCoord-t*(m()/2+i),s[h]=Xr(Xr({},p),{},{isShow:!0}))},d=o-1;d>=0;d--)u(d);return s}function MMe(t,e,n,r,i,s){var o=(r||[]).slice(),c=o.length,l=e.start,u=e.end;if(s){var d=r[c-1],f=n(d,c-1),h=t*(d.coordinate+t*f/2-u);o[c-1]=d=Xr(Xr({},d),{},{tickCoord:h>0?d.coordinate-h*t:d.coordinate});var p=Ub(t,d.tickCoord,function(){return f},l,u);p&&(u=d.tickCoord-t*(f/2+i),o[c-1]=Xr(Xr({},d),{},{isShow:!0}))}for(var g=s?c-1:c,m=function(x){var w=o[x],S,C=function(){return S===void 0&&(S=n(w,x)),S};if(x===0){var _=t*(w.coordinate-t*C()/2-l);o[x]=w=Xr(Xr({},w),{},{tickCoord:_<0?w.coordinate-_*t:w.coordinate})}else o[x]=w=Xr(Xr({},w),{},{tickCoord:w.coordinate});var A=Ub(t,w.tickCoord,C,l,u);A&&(l=w.tickCoord+t*(C()/2+i),o[x]=Xr(Xr({},w),{},{isShow:!0}))},y=0;y=2?mi(i[1].coordinate-i[0].coordinate):1,b=NMe(s,y,p);return l==="equidistantPreserveStart"?PMe(y,b,m,i,o):(l==="preserveStart"||l==="preserveStartEnd"?h=MMe(y,b,m,i,o,l==="preserveStartEnd"):h=RMe(y,b,m,i,o),h.filter(function(x){return x.isShow}))}var DMe=["viewBox"],$Me=["viewBox"],LMe=["ticks"];function Cf(t){"@babel/helpers - typeof";return Cf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cf(t)}function fd(){return fd=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function FMe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function UMe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function g$(t,e){for(var n=0;n0?l(this.props):l(p)),o<=0||c<=0||!g||!g.length?null:T.createElement(Xt,{className:Mt("recharts-cartesian-axis",u),ref:function(y){r.layerReference=y}},s&&this.renderAxisLine(),this.renderTicks(g,this.state.fontSize,this.state.letterSpacing),Ir.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,i,s){var o;return T.isValidElement(r)?o=T.cloneElement(r,i):Et(r)?o=r(i):o=T.createElement(Su,fd({},i,{className:"recharts-cartesian-axis-tick-value"}),s),o}}])}(v.Component);ek(uh,"displayName","CartesianAxis");ek(uh,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var WMe=["x1","y1","x2","y2","key"],qMe=["offset"];function ju(t){"@babel/helpers - typeof";return ju=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ju(t)}function v$(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function ti(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function JMe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var ZMe=function(e){var n=e.fill;if(!n||n==="none")return null;var r=e.fillOpacity,i=e.x,s=e.y,o=e.width,c=e.height,l=e.ry;return T.createElement("rect",{x:i,y:s,ry:l,width:o,height:c,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function ZK(t,e){var n;if(T.isValidElement(t))n=T.cloneElement(t,e);else if(Et(t))n=t(e);else{var r=e.x1,i=e.y1,s=e.x2,o=e.y2,c=e.key,l=y$(e,WMe),u=rt(l,!1);u.offset;var d=y$(u,qMe);n=T.createElement("line",Bl({},d,{x1:r,y1:i,x2:s,y2:o,fill:"none",key:c}))}return n}function eDe(t){var e=t.x,n=t.width,r=t.horizontal,i=r===void 0?!0:r,s=t.horizontalPoints;if(!i||!s||!s.length)return null;var o=s.map(function(c,l){var u=ti(ti({},t),{},{x1:e,y1:c,x2:e+n,y2:c,key:"line-".concat(l),index:l});return ZK(i,u)});return T.createElement("g",{className:"recharts-cartesian-grid-horizontal"},o)}function tDe(t){var e=t.y,n=t.height,r=t.vertical,i=r===void 0?!0:r,s=t.verticalPoints;if(!i||!s||!s.length)return null;var o=s.map(function(c,l){var u=ti(ti({},t),{},{x1:c,y1:e,x2:c,y2:e+n,key:"line-".concat(l),index:l});return ZK(i,u)});return T.createElement("g",{className:"recharts-cartesian-grid-vertical"},o)}function nDe(t){var e=t.horizontalFill,n=t.fillOpacity,r=t.x,i=t.y,s=t.width,o=t.height,c=t.horizontalPoints,l=t.horizontal,u=l===void 0?!0:l;if(!u||!e||!e.length)return null;var d=c.map(function(h){return Math.round(h+i-i)}).sort(function(h,p){return h-p});i!==d[0]&&d.unshift(0);var f=d.map(function(h,p){var g=!d[p+1],m=g?i+o-h:d[p+1]-h;if(m<=0)return null;var y=p%e.length;return T.createElement("rect",{key:"react-".concat(p),y:h,x:r,height:m,width:s,stroke:"none",fill:e[y],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return T.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},f)}function rDe(t){var e=t.vertical,n=e===void 0?!0:e,r=t.verticalFill,i=t.fillOpacity,s=t.x,o=t.y,c=t.width,l=t.height,u=t.verticalPoints;if(!n||!r||!r.length)return null;var d=u.map(function(h){return Math.round(h+s-s)}).sort(function(h,p){return h-p});s!==d[0]&&d.unshift(0);var f=d.map(function(h,p){var g=!d[p+1],m=g?s+c-h:d[p+1]-h;if(m<=0)return null;var y=p%r.length;return T.createElement("rect",{key:"react-".concat(p),x:h,y:o,width:m,height:l,stroke:"none",fill:r[y],fillOpacity:i,className:"recharts-cartesian-grid-bg"})});return T.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},f)}var iDe=function(e,n){var r=e.xAxis,i=e.width,s=e.height,o=e.offset;return H8(ZP(ti(ti(ti({},uh.defaultProps),r),{},{ticks:Sa(r,!0),viewBox:{x:0,y:0,width:i,height:s}})),o.left,o.left+o.width,n)},sDe=function(e,n){var r=e.yAxis,i=e.width,s=e.height,o=e.offset;return H8(ZP(ti(ti(ti({},uh.defaultProps),r),{},{ticks:Sa(r,!0),viewBox:{x:0,y:0,width:i,height:s}})),o.top,o.top+o.height,n)},Gu={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function ng(t){var e,n,r,i,s,o,c=YP(),l=QP(),u=K2e(),d=ti(ti({},t),{},{stroke:(e=t.stroke)!==null&&e!==void 0?e:Gu.stroke,fill:(n=t.fill)!==null&&n!==void 0?n:Gu.fill,horizontal:(r=t.horizontal)!==null&&r!==void 0?r:Gu.horizontal,horizontalFill:(i=t.horizontalFill)!==null&&i!==void 0?i:Gu.horizontalFill,vertical:(s=t.vertical)!==null&&s!==void 0?s:Gu.vertical,verticalFill:(o=t.verticalFill)!==null&&o!==void 0?o:Gu.verticalFill,x:Ee(t.x)?t.x:u.left,y:Ee(t.y)?t.y:u.top,width:Ee(t.width)?t.width:u.width,height:Ee(t.height)?t.height:u.height}),f=d.x,h=d.y,p=d.width,g=d.height,m=d.syncWithTicks,y=d.horizontalValues,b=d.verticalValues,x=z2e(),w=V2e();if(!Ee(p)||p<=0||!Ee(g)||g<=0||!Ee(f)||f!==+f||!Ee(h)||h!==+h)return null;var S=d.verticalCoordinatesGenerator||iDe,C=d.horizontalCoordinatesGenerator||sDe,_=d.horizontalPoints,A=d.verticalPoints;if((!_||!_.length)&&Et(C)){var j=y&&y.length,P=C({yAxis:w?ti(ti({},w),{},{ticks:j?y:w.ticks}):void 0,width:c,height:l,offset:u},j?!0:m);to(Array.isArray(P),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(ju(P),"]")),Array.isArray(P)&&(_=P)}if((!A||!A.length)&&Et(S)){var k=b&&b.length,O=S({xAxis:x?ti(ti({},x),{},{ticks:k?b:x.ticks}):void 0,width:c,height:l,offset:u},k?!0:m);to(Array.isArray(O),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(ju(O),"]")),Array.isArray(O)&&(A=O)}return T.createElement("g",{className:"recharts-cartesian-grid"},T.createElement(ZMe,{fill:d.fill,fillOpacity:d.fillOpacity,x:d.x,y:d.y,width:d.width,height:d.height,ry:d.ry}),T.createElement(eDe,Bl({},d,{offset:u,horizontalPoints:_,xAxis:x,yAxis:w})),T.createElement(tDe,Bl({},d,{offset:u,verticalPoints:A,xAxis:x,yAxis:w})),T.createElement(nDe,Bl({},d,{horizontalPoints:_})),T.createElement(rDe,Bl({},d,{verticalPoints:A})))}ng.displayName="CartesianGrid";var oDe=["layout","type","stroke","connectNulls","isRange","ref"],aDe=["key"],eW;function _f(t){"@babel/helpers - typeof";return _f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_f(t)}function tW(t,e){if(t==null)return{};var n=cDe(t,e),r,i;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function cDe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Hl(){return Hl=Object.assign?Object.assign.bind():function(t){for(var e=1;e0||!Cu(d,o)||!Cu(f,c))?this.renderAreaWithAnimation(r,i):this.renderAreaStatically(o,c,r,i)}},{key:"render",value:function(){var r,i=this.props,s=i.hide,o=i.dot,c=i.points,l=i.className,u=i.top,d=i.left,f=i.xAxis,h=i.yAxis,p=i.width,g=i.height,m=i.isAnimationActive,y=i.id;if(s||!c||!c.length)return null;var b=this.state.isAnimationFinished,x=c.length===1,w=Mt("recharts-area",l),S=f&&f.allowDataOverflow,C=h&&h.allowDataOverflow,_=S||C,A=$t(y)?this.id:y,j=(r=rt(o,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},P=j.r,k=P===void 0?3:P,O=j.strokeWidth,E=O===void 0?2:O,R=Pme(o)?o:{},M=R.clipDot,G=M===void 0?!0:M,L=k*2+E;return T.createElement(Xt,{className:w},S||C?T.createElement("defs",null,T.createElement("clipPath",{id:"clipPath-".concat(A)},T.createElement("rect",{x:S?d:d-p/2,y:C?u:u-g/2,width:S?p:p*2,height:C?g:g*2})),!G&&T.createElement("clipPath",{id:"clipPath-dots-".concat(A)},T.createElement("rect",{x:d-L/2,y:u-L/2,width:p+L,height:g+L}))):null,x?null:this.renderArea(_,A),(o||x)&&this.renderDots(_,G,A),(!m||b)&&Uo.renderCallByParent(this.props,c))}}],[{key:"getDerivedStateFromProps",value:function(r,i){return r.animationId!==i.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:i.curPoints,prevBaseLine:i.curBaseLine}:r.points!==i.curPoints||r.baseLine!==i.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(v.PureComponent);eW=ro;Ro(ro,"displayName","Area");Ro(ro,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!no.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});Ro(ro,"getBaseValue",function(t,e,n,r){var i=t.layout,s=t.baseValue,o=e.props.baseValue,c=o??s;if(Ee(c)&&typeof c=="number")return c;var l=i==="horizontal"?r:n,u=l.scale.domain();if(l.type==="number"){var d=Math.max(u[0],u[1]),f=Math.min(u[0],u[1]);return c==="dataMin"?f:c==="dataMax"||d<0?d:Math.max(Math.min(u[0],u[1]),0)}return c==="dataMin"?u[0]:c==="dataMax"?u[1]:u[0]});Ro(ro,"getComposedData",function(t){var e=t.props,n=t.item,r=t.xAxis,i=t.yAxis,s=t.xAxisTicks,o=t.yAxisTicks,c=t.bandSize,l=t.dataKey,u=t.stackedData,d=t.dataStartIndex,f=t.displayedData,h=t.offset,p=e.layout,g=u&&u.length,m=eW.getBaseValue(e,n,r,i),y=p==="horizontal",b=!1,x=f.map(function(S,C){var _;g?_=u[d+C]:(_=ir(S,l),Array.isArray(_)?b=!0:_=[m,_]);var A=_[1]==null||g&&ir(S,l)==null;return y?{x:HM({axis:r,ticks:s,bandSize:c,entry:S,index:C}),y:A?null:i.scale(_[1]),value:_,payload:S}:{x:A?null:r.scale(_[1]),y:HM({axis:i,ticks:o,bandSize:c,entry:S,index:C}),value:_,payload:S}}),w;return g||b?w=x.map(function(S){var C=Array.isArray(S.value)?S.value[0]:null;return y?{x:S.x,y:C!=null&&S.y!=null?i.scale(C):null}:{x:C!=null?r.scale(C):null,y:S.y}}):w=y?i.scale(m):r.scale(m),tc({points:x,baseLine:w,layout:p,isRange:b},h)});Ro(ro,"renderDotItem",function(t,e){var n;if(T.isValidElement(t))n=T.cloneElement(t,e);else if(Et(t))n=t(e);else{var r=Mt("recharts-area-dot",typeof t!="boolean"?t.className:""),i=e.key,s=tW(e,aDe);n=T.createElement(Lg,Hl({},s,{key:i,className:r}))}return n});function Af(t){"@babel/helpers - typeof";return Af=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Af(t)}function gDe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function vDe(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function r$e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function i$e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s$e(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0?o:e&&e.length&&Ee(i)&&Ee(s)?e.slice(i,s+1):[]};function vW(t){return t==="number"?[0,"auto"]:void 0}var cj=function(e,n,r,i){var s=e.graphicalItems,o=e.tooltipAxis,c=Xw(n,e);return r<0||!s||!s.length||r>=c.length?null:s.reduce(function(l,u){var d,f=(d=u.props.data)!==null&&d!==void 0?d:n;f&&e.dataStartIndex+e.dataEndIndex!==0&&e.dataEndIndex-e.dataStartIndex>=r&&(f=f.slice(e.dataStartIndex,e.dataEndIndex+1));var h;if(o.dataKey&&!o.allowDuplicatedCategory){var p=f===void 0?c:f;h=Vx(p,o.dataKey,i)}else h=f&&f[r]||c[r];return h?[].concat(Nf(l),[W8(u,h)]):l},[])},j$=function(e,n,r,i){var s=i||{x:e.chartX,y:e.chartY},o=v$e(s,r),c=e.orderedTooltipTicks,l=e.tooltipAxis,u=e.tooltipTicks,d=kNe(o,c,u,l);if(d>=0&&u){var f=u[d]&&u[d].value,h=cj(e,n,d,f),p=y$e(r,c,d,s);return{activeTooltipIndex:d,activeLabel:f,activePayload:h,activeCoordinate:p}}return null},x$e=function(e,n){var r=n.axes,i=n.graphicalItems,s=n.axisType,o=n.axisIdKey,c=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,d=e.layout,f=e.children,h=e.stackOffset,p=B8(d,s);return r.reduce(function(g,m){var y,b=m.type.defaultProps!==void 0?de(de({},m.type.defaultProps),m.props):m.props,x=b.type,w=b.dataKey,S=b.allowDataOverflow,C=b.allowDuplicatedCategory,_=b.scale,A=b.ticks,j=b.includeHidden,P=b[o];if(g[P])return g;var k=Xw(e.data,{graphicalItems:i.filter(function(J){var ye,U=o in J.props?J.props[o]:(ye=J.type.defaultProps)===null||ye===void 0?void 0:ye[o];return U===P}),dataStartIndex:l,dataEndIndex:u}),O=k.length,E,R,M;GDe(b.domain,S,x)&&(E=SA(b.domain,null,S),p&&(x==="number"||_!=="auto")&&(M=vp(k,w,"category")));var G=vW(x);if(!E||E.length===0){var L,V=(L=b.domain)!==null&&L!==void 0?L:G;if(w){if(E=vp(k,w,x),x==="category"&&p){var I=wme(E);C&&I?(R=E,E=Ob(0,O)):C||(E=KM(V,E,m).reduce(function(J,ye){return J.indexOf(ye)>=0?J:[].concat(Nf(J),[ye])},[]))}else if(x==="category")C?E=E.filter(function(J){return J!==""&&!$t(J)}):E=KM(V,E,m).reduce(function(J,ye){return J.indexOf(ye)>=0||ye===""||$t(ye)?J:[].concat(Nf(J),[ye])},[]);else if(x==="number"){var D=DNe(k,i.filter(function(J){var ye,U,ne=o in J.props?J.props[o]:(ye=J.type.defaultProps)===null||ye===void 0?void 0:ye[o],ue="hide"in J.props?J.props.hide:(U=J.type.defaultProps)===null||U===void 0?void 0:U.hide;return ne===P&&(j||!ue)}),w,s,d);D&&(E=D)}p&&(x==="number"||_!=="auto")&&(M=vp(k,w,"category"))}else p?E=Ob(0,O):c&&c[P]&&c[P].hasStack&&x==="number"?E=h==="expand"?[0,1]:K8(c[P].stackGroups,l,u):E=U8(k,i.filter(function(J){var ye=o in J.props?J.props[o]:J.type.defaultProps[o],U="hide"in J.props?J.props.hide:J.type.defaultProps.hide;return ye===P&&(j||!U)}),x,d,!0);if(x==="number")E=sj(f,E,P,s,A),V&&(E=SA(V,E,S));else if(x==="category"&&V){var X=V,Q=E.every(function(J){return X.indexOf(J)>=0});Q&&(E=X)}}return de(de({},g),{},Pt({},P,de(de({},b),{},{axisType:s,domain:E,categoricalDomain:M,duplicateDomain:R,originalDomain:(y=b.domain)!==null&&y!==void 0?y:G,isCategorical:p,layout:d})))},{})},b$e=function(e,n){var r=n.graphicalItems,i=n.Axis,s=n.axisType,o=n.axisIdKey,c=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,d=e.layout,f=e.children,h=Xw(e.data,{graphicalItems:r,dataStartIndex:l,dataEndIndex:u}),p=h.length,g=B8(d,s),m=-1;return r.reduce(function(y,b){var x=b.type.defaultProps!==void 0?de(de({},b.type.defaultProps),b.props):b.props,w=x[o],S=vW("number");if(!y[w]){m++;var C;return g?C=Ob(0,p):c&&c[w]&&c[w].hasStack?(C=K8(c[w].stackGroups,l,u),C=sj(f,C,w,s)):(C=SA(S,U8(h,r.filter(function(_){var A,j,P=o in _.props?_.props[o]:(A=_.type.defaultProps)===null||A===void 0?void 0:A[o],k="hide"in _.props?_.props.hide:(j=_.type.defaultProps)===null||j===void 0?void 0:j.hide;return P===w&&!k}),"number",d),i.defaultProps.allowDataOverflow),C=sj(f,C,w,s)),de(de({},y),{},Pt({},w,de(de({axisType:s},i.defaultProps),{},{hide:!0,orientation:ns(m$e,"".concat(s,".").concat(m%2),null),domain:C,originalDomain:S,isCategorical:g,layout:d})))}return y},{})},w$e=function(e,n){var r=n.axisType,i=r===void 0?"xAxis":r,s=n.AxisComp,o=n.graphicalItems,c=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,d=e.children,f="".concat(i,"Id"),h=_s(d,s),p={};return h&&h.length?p=x$e(e,{axes:h,graphicalItems:o,axisType:i,axisIdKey:f,stackGroups:c,dataStartIndex:l,dataEndIndex:u}):o&&o.length&&(p=b$e(e,{Axis:s,graphicalItems:o,axisType:i,axisIdKey:f,stackGroups:c,dataStartIndex:l,dataEndIndex:u})),p},S$e=function(e){var n=dc(e),r=Sa(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:yP(r,function(i){return i.coordinate}),tooltipAxis:n,tooltipAxisBandSize:yb(n,r)}},E$=function(e){var n=e.children,r=e.defaultShowTooltip,i=Wi(n,yf),s=0,o=0;return e.data&&e.data.length!==0&&(o=e.data.length-1),i&&i.props&&(i.props.startIndex>=0&&(s=i.props.startIndex),i.props.endIndex>=0&&(o=i.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:s,dataEndIndex:o,activeTooltipIndex:-1,isTooltipActive:!!r}},C$e=function(e){return!e||!e.length?!1:e.some(function(n){var r=Aa(n&&n.type);return r&&r.indexOf("Bar")>=0})},N$=function(e){return e==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:e==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:e==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},_$e=function(e,n){var r=e.props,i=e.graphicalItems,s=e.xAxisMap,o=s===void 0?{}:s,c=e.yAxisMap,l=c===void 0?{}:c,u=r.width,d=r.height,f=r.children,h=r.margin||{},p=Wi(f,yf),g=Wi(f,ja),m=Object.keys(l).reduce(function(C,_){var A=l[_],j=A.orientation;return!A.mirror&&!A.hide?de(de({},C),{},Pt({},j,C[j]+A.width)):C},{left:h.left||0,right:h.right||0}),y=Object.keys(o).reduce(function(C,_){var A=o[_],j=A.orientation;return!A.mirror&&!A.hide?de(de({},C),{},Pt({},j,ns(C,"".concat(j))+A.height)):C},{top:h.top||0,bottom:h.bottom||0}),b=de(de({},y),m),x=b.bottom;p&&(b.bottom+=p.props.height||yf.defaultProps.height),g&&n&&(b=RNe(b,i,r,n));var w=u-b.left-b.right,S=d-b.top-b.bottom;return de(de({brushBottom:x},b),{},{width:Math.max(w,0),height:Math.max(S,0)})},A$e=function(e,n){if(n==="xAxis")return e[n].width;if(n==="yAxis")return e[n].height},Jw=function(e){var n=e.chartName,r=e.GraphicalChild,i=e.defaultTooltipEventType,s=i===void 0?"axis":i,o=e.validateTooltipEventTypes,c=o===void 0?["axis"]:o,l=e.axisComponents,u=e.legendContent,d=e.formatAxisMap,f=e.defaultProps,h=function(y,b){var x=b.graphicalItems,w=b.stackGroups,S=b.offset,C=b.updateId,_=b.dataStartIndex,A=b.dataEndIndex,j=y.barSize,P=y.layout,k=y.barGap,O=y.barCategoryGap,E=y.maxBarSize,R=N$(P),M=R.numericAxisName,G=R.cateAxisName,L=C$e(x),V=[];return x.forEach(function(I,D){var X=Xw(y.data,{graphicalItems:[I],dataStartIndex:_,dataEndIndex:A}),Q=I.type.defaultProps!==void 0?de(de({},I.type.defaultProps),I.props):I.props,J=Q.dataKey,ye=Q.maxBarSize,U=Q["".concat(M,"Id")],ne=Q["".concat(G,"Id")],ue={},F=l.reduce(function(B,K){var Z=b["".concat(K.axisType,"Map")],H=Q["".concat(K.axisType,"Id")];Z&&Z[H]||K.axisType==="zAxis"||Au();var re=Z[H];return de(de({},B),{},Pt(Pt({},K.axisType,re),"".concat(K.axisType,"Ticks"),Sa(re)))},ue),ce=F[G],te=F["".concat(G,"Ticks")],pe=w&&w[U]&&w[U].hasStack&&GNe(I,w[U].stackGroups),we=Aa(I.type).indexOf("Bar")>=0,Y=yb(ce,te),nt=[],Ue=L&&ONe({barSize:j,stackGroups:w,totalSize:A$e(F,G)});if(we){var at,Be,Bt=$t(ye)?E:ye,N=(at=(Be=yb(ce,te,!0))!==null&&Be!==void 0?Be:Bt)!==null&&at!==void 0?at:0;nt=INe({barGap:k,barCategoryGap:O,bandSize:N!==Y?N:Y,sizeList:Ue[ne],maxBarSize:Bt}),N!==Y&&(nt=nt.map(function(B){return de(de({},B),{},{position:de(de({},B.position),{},{offset:B.position.offset-N/2})})}))}var $=I&&I.type&&I.type.getComposedData;$&&V.push({props:de(de({},$(de(de({},F),{},{displayedData:X,props:y,dataKey:J,item:I,bandSize:Y,barPosition:nt,offset:S,stackedData:pe,layout:P,dataStartIndex:_,dataEndIndex:A}))),{},Pt(Pt(Pt({key:I.key||"item-".concat(D)},M,F[M]),G,F[G]),"animationId",C)),childIndex:Ime(I,y.children),item:I})}),V},p=function(y,b){var x=y.props,w=y.dataStartIndex,S=y.dataEndIndex,C=y.updateId;if(!FR({props:x}))return null;var _=x.children,A=x.layout,j=x.stackOffset,P=x.data,k=x.reverseStackOrder,O=N$(A),E=O.numericAxisName,R=O.cateAxisName,M=_s(_,r),G=zNe(P,M,"".concat(E,"Id"),"".concat(R,"Id"),j,k),L=l.reduce(function(Q,J){var ye="".concat(J.axisType,"Map");return de(de({},Q),{},Pt({},ye,w$e(x,de(de({},J),{},{graphicalItems:M,stackGroups:J.axisType===E&&G,dataStartIndex:w,dataEndIndex:S}))))},{}),V=_$e(de(de({},L),{},{props:x,graphicalItems:M}),b==null?void 0:b.legendBBox);Object.keys(L).forEach(function(Q){L[Q]=d(x,L[Q],V,Q.replace("Map",""),n)});var I=L["".concat(R,"Map")],D=S$e(I),X=h(x,de(de({},L),{},{dataStartIndex:w,dataEndIndex:S,updateId:C,graphicalItems:M,stackGroups:G,offset:V}));return de(de({formattedGraphicalItems:X,graphicalItems:M,offset:V,stackGroups:G},D),L)},g=function(m){function y(b){var x,w,S;return i$e(this,y),S=a$e(this,y,[b]),Pt(S,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),Pt(S,"accessibilityManager",new VDe),Pt(S,"handleLegendBBoxUpdate",function(C){if(C){var _=S.state,A=_.dataStartIndex,j=_.dataEndIndex,P=_.updateId;S.setState(de({legendBBox:C},p({props:S.props,dataStartIndex:A,dataEndIndex:j,updateId:P},de(de({},S.state),{},{legendBBox:C}))))}}),Pt(S,"handleReceiveSyncEvent",function(C,_,A){if(S.props.syncId===C){if(A===S.eventEmitterSymbol&&typeof S.props.syncMethod!="function")return;S.applySyncEvent(_)}}),Pt(S,"handleBrushChange",function(C){var _=C.startIndex,A=C.endIndex;if(_!==S.state.dataStartIndex||A!==S.state.dataEndIndex){var j=S.state.updateId;S.setState(function(){return de({dataStartIndex:_,dataEndIndex:A},p({props:S.props,dataStartIndex:_,dataEndIndex:A,updateId:j},S.state))}),S.triggerSyncEvent({dataStartIndex:_,dataEndIndex:A})}}),Pt(S,"handleMouseEnter",function(C){var _=S.getMouseInfo(C);if(_){var A=de(de({},_),{},{isTooltipActive:!0});S.setState(A),S.triggerSyncEvent(A);var j=S.props.onMouseEnter;Et(j)&&j(A,C)}}),Pt(S,"triggeredAfterMouseMove",function(C){var _=S.getMouseInfo(C),A=_?de(de({},_),{},{isTooltipActive:!0}):{isTooltipActive:!1};S.setState(A),S.triggerSyncEvent(A);var j=S.props.onMouseMove;Et(j)&&j(A,C)}),Pt(S,"handleItemMouseEnter",function(C){S.setState(function(){return{isTooltipActive:!0,activeItem:C,activePayload:C.tooltipPayload,activeCoordinate:C.tooltipPosition||{x:C.cx,y:C.cy}}})}),Pt(S,"handleItemMouseLeave",function(){S.setState(function(){return{isTooltipActive:!1}})}),Pt(S,"handleMouseMove",function(C){C.persist(),S.throttleTriggeredAfterMouseMove(C)}),Pt(S,"handleMouseLeave",function(C){S.throttleTriggeredAfterMouseMove.cancel();var _={isTooltipActive:!1};S.setState(_),S.triggerSyncEvent(_);var A=S.props.onMouseLeave;Et(A)&&A(_,C)}),Pt(S,"handleOuterEvent",function(C){var _=Ome(C),A=ns(S.props,"".concat(_));if(_&&Et(A)){var j,P;/.*touch.*/i.test(_)?P=S.getMouseInfo(C.changedTouches[0]):P=S.getMouseInfo(C),A((j=P)!==null&&j!==void 0?j:{},C)}}),Pt(S,"handleClick",function(C){var _=S.getMouseInfo(C);if(_){var A=de(de({},_),{},{isTooltipActive:!0});S.setState(A),S.triggerSyncEvent(A);var j=S.props.onClick;Et(j)&&j(A,C)}}),Pt(S,"handleMouseDown",function(C){var _=S.props.onMouseDown;if(Et(_)){var A=S.getMouseInfo(C);_(A,C)}}),Pt(S,"handleMouseUp",function(C){var _=S.props.onMouseUp;if(Et(_)){var A=S.getMouseInfo(C);_(A,C)}}),Pt(S,"handleTouchMove",function(C){C.changedTouches!=null&&C.changedTouches.length>0&&S.throttleTriggeredAfterMouseMove(C.changedTouches[0])}),Pt(S,"handleTouchStart",function(C){C.changedTouches!=null&&C.changedTouches.length>0&&S.handleMouseDown(C.changedTouches[0])}),Pt(S,"handleTouchEnd",function(C){C.changedTouches!=null&&C.changedTouches.length>0&&S.handleMouseUp(C.changedTouches[0])}),Pt(S,"triggerSyncEvent",function(C){S.props.syncId!==void 0&&EC.emit(NC,S.props.syncId,C,S.eventEmitterSymbol)}),Pt(S,"applySyncEvent",function(C){var _=S.props,A=_.layout,j=_.syncMethod,P=S.state.updateId,k=C.dataStartIndex,O=C.dataEndIndex;if(C.dataStartIndex!==void 0||C.dataEndIndex!==void 0)S.setState(de({dataStartIndex:k,dataEndIndex:O},p({props:S.props,dataStartIndex:k,dataEndIndex:O,updateId:P},S.state)));else if(C.activeTooltipIndex!==void 0){var E=C.chartX,R=C.chartY,M=C.activeTooltipIndex,G=S.state,L=G.offset,V=G.tooltipTicks;if(!L)return;if(typeof j=="function")M=j(V,C);else if(j==="value"){M=-1;for(var I=0;I=0){var pe,we;if(E.dataKey&&!E.allowDuplicatedCategory){var Y=typeof E.dataKey=="function"?te:"payload.".concat(E.dataKey.toString());pe=Vx(I,Y,M),we=D&&X&&Vx(X,Y,M)}else pe=I==null?void 0:I[R],we=D&&X&&X[R];if(ne||U){var nt=C.props.activeIndex!==void 0?C.props.activeIndex:R;return[v.cloneElement(C,de(de(de({},j.props),F),{},{activeIndex:nt})),null,null]}if(!$t(pe))return[ce].concat(Nf(S.renderActivePoints({item:j,activePoint:pe,basePoint:we,childIndex:R,isRange:D})))}else{var Ue,at=(Ue=S.getItemByXY(S.state.activeCoordinate))!==null&&Ue!==void 0?Ue:{graphicalItem:ce},Be=at.graphicalItem,Bt=Be.item,N=Bt===void 0?C:Bt,$=Be.childIndex,B=de(de(de({},j.props),F),{},{activeIndex:$});return[v.cloneElement(N,B),null,null]}return D?[ce,null,null]:[ce,null]}),Pt(S,"renderCustomized",function(C,_,A){return v.cloneElement(C,de(de({key:"recharts-customized-".concat(A)},S.props),S.state))}),Pt(S,"renderMap",{CartesianGrid:{handler:Mv,once:!0},ReferenceArea:{handler:S.renderReferenceElement},ReferenceLine:{handler:Mv},ReferenceDot:{handler:S.renderReferenceElement},XAxis:{handler:Mv},YAxis:{handler:Mv},Brush:{handler:S.renderBrush,once:!0},Bar:{handler:S.renderGraphicChild},Line:{handler:S.renderGraphicChild},Area:{handler:S.renderGraphicChild},Radar:{handler:S.renderGraphicChild},RadialBar:{handler:S.renderGraphicChild},Scatter:{handler:S.renderGraphicChild},Pie:{handler:S.renderGraphicChild},Funnel:{handler:S.renderGraphicChild},Tooltip:{handler:S.renderCursor,once:!0},PolarGrid:{handler:S.renderPolarGrid,once:!0},PolarAngleAxis:{handler:S.renderPolarAxis},PolarRadiusAxis:{handler:S.renderPolarAxis},Customized:{handler:S.renderCustomized}}),S.clipPathId="".concat((x=b.id)!==null&&x!==void 0?x:eh("recharts"),"-clip"),S.throttleTriggeredAfterMouseMove=$G(S.triggeredAfterMouseMove,(w=b.throttleDelay)!==null&&w!==void 0?w:1e3/60),S.state={},S}return u$e(y,m),o$e(y,[{key:"componentDidMount",value:function(){var x,w;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(w=this.props.margin.top)!==null&&w!==void 0?w:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,w=x.children,S=x.data,C=x.height,_=x.layout,A=Wi(w,Zr);if(A){var j=A.props.defaultIndex;if(!(typeof j!="number"||j<0||j>this.state.tooltipTicks.length-1)){var P=this.state.tooltipTicks[j]&&this.state.tooltipTicks[j].value,k=cj(this.state,S,j,P),O=this.state.tooltipTicks[j].coordinate,E=(this.state.offset.top+C)/2,R=_==="horizontal",M=R?{x:O,y:E}:{y:O,x:E},G=this.state.formattedGraphicalItems.find(function(V){var I=V.item;return I.type.name==="Scatter"});G&&(M=de(de({},M),G.props.points[j].tooltipPosition),k=G.props.points[j].tooltipPayload);var L={activeTooltipIndex:j,isTooltipActive:!0,activeLabel:P,activePayload:k,activeCoordinate:M};this.setState(L),this.renderCursor(A),this.accessibilityManager.setIndex(j)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,w){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==w.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var S,C;this.accessibilityManager.setDetails({offset:{left:(S=this.props.margin.left)!==null&&S!==void 0?S:0,top:(C=this.props.margin.top)!==null&&C!==void 0?C:0}})}return null}},{key:"componentDidUpdate",value:function(x){$1([Wi(x.children,Zr)],[Wi(this.props.children,Zr)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=Wi(this.props.children,Zr);if(x&&typeof x.props.shared=="boolean"){var w=x.props.shared?"axis":"item";return c.indexOf(w)>=0?w:s}return s}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var w=this.container,S=w.getBoundingClientRect(),C=s1e(S),_={chartX:Math.round(x.pageX-C.left),chartY:Math.round(x.pageY-C.top)},A=S.width/w.offsetWidth||1,j=this.inRange(_.chartX,_.chartY,A);if(!j)return null;var P=this.state,k=P.xAxisMap,O=P.yAxisMap,E=this.getTooltipEventType();if(E!=="axis"&&k&&O){var R=dc(k).scale,M=dc(O).scale,G=R&&R.invert?R.invert(_.chartX):null,L=M&&M.invert?M.invert(_.chartY):null;return de(de({},_),{},{xValue:G,yValue:L})}var V=j$(this.state,this.props.data,this.props.layout,j);return V?de(de({},_),V):null}},{key:"inRange",value:function(x,w){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=this.props.layout,_=x/S,A=w/S;if(C==="horizontal"||C==="vertical"){var j=this.state.offset,P=_>=j.left&&_<=j.left+j.width&&A>=j.top&&A<=j.top+j.height;return P?{x:_,y:A}:null}var k=this.state,O=k.angleAxisMap,E=k.radiusAxisMap;if(O&&E){var R=dc(O);return YM({x:_,y:A},R)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,w=this.getTooltipEventType(),S=Wi(x,Zr),C={};S&&w==="axis"&&(S.props.trigger==="click"?C={onClick:this.handleClick}:C={onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd});var _=Gx(this.props,this.handleOuterEvent);return de(de({},_),C)}},{key:"addListener",value:function(){EC.on(NC,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){EC.removeListener(NC,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,w,S){for(var C=this.state.formattedGraphicalItems,_=0,A=C.length;_{var g;const[r,i]=v.useState([{name:"Very Positive",value:0,color:"#4ade80"},{name:"Positive",value:0,color:"#a3e635"},{name:"Neutral",value:0,color:"#93c5fd"},{name:"Negative",value:0,color:"#fb923c"},{name:"Very Negative",value:0,color:"#f87171"}]),[s,o]=v.useState([]),[c,l]=v.useState({}),[u,d]=v.useState({isBalanced:!1,score:0,reason:""}),f=m=>{const y=n.find(b=>b.id===m);return y?y.name:`Participant ${m}`};v.useEffect(()=>{if(t.length===0)return;const m={"Very Positive":0,Positive:0,Neutral:0,Negative:0,"Very Negative":0},y={},b={};t.forEach(S=>{if(S.senderId!=="moderator"&&S.senderId!=="facilitator"){const C=S.text.toLowerCase();let _="Neutral";C.includes("love")||C.includes("excellent")||C.includes("amazing")?_="Very Positive":C.includes("good")||C.includes("like")||C.includes("great")?_="Positive":C.includes("bad")||C.includes("issue")||C.includes("problem")?_="Negative":(C.includes("terrible")||C.includes("hate")||C.includes("awful"))&&(_="Very Negative"),m[_]++,b[S.senderId]||(b[S.senderId]={"Very Positive":0,Positive:0,Neutral:0,Negative:0,"Very Negative":0}),b[S.senderId][_]++,y[S.senderId]=(y[S.senderId]||0)+1}}),i(S=>S.map(C=>({...C,value:m[C.name]||0})));const x=Object.entries(y).map(([S,C])=>({name:f(S),messages:C}));o(x);const w={};Object.entries(b).forEach(([S,C])=>{w[S]={name:f(S),sentiments:C}}),l(w),h(y,b)},[t,n,f]);const h=(m,y)=>{if(Object.keys(m).length===0){d({isBalanced:!1,score:0,reason:"No participant data available"});return}const x=Object.values(m).reduce((V,I)=>V+I,0)/Object.keys(m).length,w=Object.values(m).map(V=>Math.abs(V-x)/x),S=w.reduce((V,I)=>V+I,0)/w.length,C=Object.values(y).map(V=>Object.values(V).filter(I=>I>0).length),_=C.reduce((V,I)=>V+I,0)/C.length,A=["Very Positive","Positive","Neutral","Negative","Very Negative"],j=Object.values(y).map(V=>{const I=Math.max(...Object.values(V));return A.find(D=>V[D]===I)||"Neutral"}),P=new Set(j).size,k=P/A.length,O=Math.max(0,100-S*100),E=_/5*100,R=k*100,M=Math.round(O*.6+E*.2+R*.2);let G="";const L=M>=70;S>.3&&(G+="Participation is uneven among participants. "),_<2&&(G+="Limited range of sentiments expressed. "),P<=1?G+="Participants show similar sentiment patterns, suggesting potential group-think. ":P>=4&&(G+="Wide divergence in participant sentiments, showing healthy diversity of opinions. "),G===""&&(G=L?"Good mix of participation and diverse opinions.":"Multiple factors affecting balance."),d({isBalanced:L,score:M,reason:G})},p=m=>{const y=c[m];if(!y)return"N/A";const b=y.sentiments;let x=0,w="Neutral";return Object.entries(b).forEach(([S,C])=>{C>x&&(x=C,w=S)}),w};return a.jsx("div",{className:"glass-panel rounded-xl p-4",children:a.jsxs(fl,{defaultValue:"sentiment",children:[a.jsxs(Va,{className:"grid grid-cols-2 mb-4",children:[a.jsxs(pn,{value:"sentiment",className:"flex items-center",children:[a.jsx(zJ,{className:"h-4 w-4 mr-2"}),"Sentiment"]}),a.jsxs(pn,{value:"participation",className:"flex items-center",children:[a.jsx(U_,{className:"h-4 w-4 mr-2"}),"Participation"]})]}),a.jsx(mn,{value:"sentiment",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"pt-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsx("h3",{className:"text-lg font-semibold",children:"Sentiment Analysis"}),a.jsxs("div",{className:`px-3 py-1 rounded-full text-sm ${u.isBalanced?"bg-green-100 text-green-800":"bg-amber-100 text-amber-800"}`,children:["Balance score: ",u.score,"/100"]})]}),a.jsx("div",{className:"h-60",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(tk,{children:[a.jsx(Zr,{}),a.jsx(vo,{data:r,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:80,label:({name:m,percent:y})=>y>0?`${m} ${(y*100).toFixed(0)}%`:"",children:r.map((m,y)=>a.jsx(Ig,{fill:m.color},`cell-${y}`))}),a.jsx(ja,{})]})})}),a.jsxs("div",{className:"mt-4",children:[a.jsx("h4",{className:"text-sm font-medium mb-2",children:"Sentiment by Participant"}),a.jsx("div",{className:"space-y-2 max-h-60 overflow-y-auto pr-2",children:Object.entries(c).map(([m,y])=>{var w;const b=p(m),x=((w=r.find(S=>S.name===b))==null?void 0:w.color)||"#93c5fd";return a.jsxs("div",{className:"flex items-center justify-between p-2 bg-slate-50 rounded",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(qp,{className:"h-4 w-4 text-slate-400 mr-2"}),a.jsx("span",{className:"text-sm",children:y.name})]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx("span",{className:"text-xs mr-2",children:"Predominant:"}),a.jsx("span",{className:"text-xs font-medium px-2 py-0.5 rounded",style:{backgroundColor:`${x}30`,color:x},children:b})]})]},m)})})]}),a.jsxs("div",{className:"mt-4 pt-4 border-t",children:[a.jsx("h4",{className:"text-sm font-medium mb-2",children:"Focus Group Balance Assessment"}),a.jsxs("div",{className:`p-3 rounded text-sm ${u.isBalanced?"bg-green-50 text-green-700":"bg-amber-50 text-amber-700"}`,children:[a.jsx("span",{className:"font-medium",children:u.isBalanced?"Balanced Focus Group":"Potential Balance Issues"}),a.jsx("p",{className:"mt-1 text-xs",children:u.reason})]})]})]})})}),a.jsx(mn,{value:"participation",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"pt-6",children:[a.jsx("h3",{className:"text-lg font-semibold mb-4",children:"Participation Distribution"}),a.jsx("div",{className:"h-60",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(yW,{data:s,layout:"vertical",margin:{top:5,right:30,left:20,bottom:5},children:[a.jsx(ng,{strokeDasharray:"3 3"}),a.jsx(il,{type:"number"}),a.jsx(sl,{dataKey:"name",type:"category",width:100}),a.jsx(Zr,{}),a.jsx(vl,{dataKey:"messages",fill:"#8884d8",name:"Messages"})]})})}),a.jsx("p",{className:"text-sm text-muted-foreground mt-4",children:s.length>0?`Most active: ${(g=s.sort((m,y)=>y.messages-m.messages)[0])==null?void 0:g.name}`:"No participation data available"})]})})})]})})};function N$e(t){if(console.log("🔍 [GPT-5 CONVERTER] Input wsMessage:",JSON.stringify(t,null,2)),!t)return console.error("🔍 [GPT-5 CONVERTER] ERROR: wsMessage is null/undefined"),null;const e={id:t.id,senderId:t.senderId,text:t.text,timestamp:new Date(t.timestamp),type:t.type,highlighted:t.highlighted,attached_assets:t.attached_assets||[],activates_visual_context:t.activates_visual_context||!1,visualAsset:t.visualAsset};return console.log("🔍 [GPT-5 CONVERTER] Output converted:",JSON.stringify(e,null,2)),e}function T$e(t){return{id:t.id,title:t.title,description:t.description,quotes:t.quotes,source:t.source,created_at:t.created_at}}function bW(){return!0}const P$e=({focusGroupId:t,personas:e,isVisible:n,onToggle:r})=>{const[i,s]=v.useState(null),[o,c]=v.useState(null),[l,u]=v.useState(null),[d,f]=v.useState(null),[h,p]=v.useState(!1),[g,m]=v.useState(null),[y,b]=v.useState(null);Qo();const x=bW();v.useEffect(()=>{if(!(!n||!t))return S(),console.log("📊 Setting up STABLE WebSocket event listeners for dashboard"),console.log("📊 Dashboard WebSocket listeners temporarily disabled for GPT-5 fix"),()=>{console.log("📊 Cleaning up STABLE dashboard WebSocket listeners")}},[n,t,x,!0]);const S=async()=>{p(!0),m(null);try{const[P,k,O,E]=await Promise.allSettled([er.getConversationAnalytics(t),er.getConversationState(t),er.getAutonomousConversationStatus(t),er.getConversationInsights(t)]);P.status==="fulfilled"&&s(P.value.data.analytics),k.status==="fulfilled"&&c(k.value.data.state),O.status==="fulfilled"&&u(O.value.data.status),E.status==="fulfilled"&&f(E.value.data.insights),b(new Date)}catch(P){console.error("Error fetching dashboard data:",P),m("Failed to load dashboard data")}finally{p(!1)}},C=()=>{S()},_=P=>{switch(P){case"running":return"bg-green-500";case"paused":return"bg-amber-500";case"completed":return"bg-blue-500";case"error":return"bg-red-500";default:return"bg-gray-500"}},A=P=>{switch(P){case"positive":return"text-green-600";case"negative":return"text-red-600";default:return"text-gray-600"}},j=P=>{switch(P){case"excellent":return"text-green-600";case"good":return"text-blue-600";case"fair":return"text-amber-600";case"poor":return"text-red-600";default:return"text-gray-600"}};return n?a.jsxs("div",{className:"fixed right-4 top-4 bottom-4 w-80 bg-white rounded-lg shadow-lg border border-gray-200 flex flex-col overflow-hidden z-50",children:[a.jsxs("div",{className:"p-4 border-b border-gray-200 bg-gray-50",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(va,{className:"h-5 w-5 text-blue-600"}),a.jsx("h3",{className:"font-semibold text-gray-900",children:"AI Dashboard"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(ee,{variant:"ghost",size:"sm",onClick:C,disabled:h,className:"p-1",children:a.jsx(Yl,{className:`h-4 w-4 ${h?"animate-spin":""}`})}),a.jsx(ee,{variant:"ghost",size:"sm",onClick:r,className:"p-1",children:a.jsx(YJ,{className:"h-4 w-4"})})]})]}),y&&a.jsxs("p",{className:"text-xs text-gray-500 mt-1",children:["Last updated: ",y.toLocaleTimeString()]})]}),a.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[g&&a.jsx("div",{className:"bg-red-50 border border-red-200 rounded-lg p-3",children:a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(VJ,{className:"h-4 w-4 text-red-600"}),a.jsx("span",{className:"text-sm text-red-800",children:g})]})}),l&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx("div",{className:`w-3 h-3 rounded-full ${_(l.conversation_state)}`}),"Autonomous Status"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"State:"}),a.jsx(Hn,{variant:l.conversation_state==="running"?"default":"secondary",children:l.conversation_state})]}),a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Actions:"}),a.jsx("span",{className:"font-medium",children:l.action_count||0})]})]})})]}),o&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(ha,{className:"h-4 w-4"}),"Conversation Health"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-sm",children:"Overall Health:"}),a.jsx(Hn,{className:j(o.conversation_health.status),children:o.conversation_health.status})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Score:"}),a.jsxs("span",{className:"font-medium",children:[o.conversation_health.score,"/100"]})]}),a.jsx(wc,{value:o.conversation_health.score,className:"h-2"})]}),a.jsxs("div",{className:"space-y-1",children:[a.jsx("span",{className:"text-xs text-gray-600",children:"Indicators:"}),a.jsx("div",{className:"flex flex-wrap gap-1",children:o.conversation_health.indicators.map((P,k)=>a.jsx(Hn,{variant:"outline",className:"text-xs",children:P.replace("_"," ")},k))})]})]})})]}),i&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(Dr,{className:"h-4 w-4"}),"Participation"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[a.jsxs("div",{className:"text-center",children:[a.jsx("div",{className:"text-lg font-semibold text-blue-600",children:i.overview.active_participants}),a.jsx("div",{className:"text-xs text-gray-600",children:"Active"})]}),a.jsxs("div",{className:"text-center",children:[a.jsx("div",{className:"text-lg font-semibold text-green-600",children:i.overview.participant_messages}),a.jsx("div",{className:"text-xs text-gray-600",children:"Messages"})]})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Balance:"}),a.jsx(Hn,{variant:i.participation.participation_balance==="balanced"?"default":"secondary",children:i.participation.participation_balance.replace("_"," ")})]}),i.participation.dominant_participants.length>0&&a.jsxs("div",{className:"text-xs text-amber-600",children:["Dominant: ",i.participation.dominant_participants.length," participant(s)"]}),i.participation.quiet_participants.length>0&&a.jsxs("div",{className:"text-xs text-blue-600",children:["Quiet: ",i.participation.quiet_participants.length," participant(s)"]})]})]})})]}),i&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(pZ,{className:"h-4 w-4"}),"Sentiment"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-sm",children:"Overall:"}),a.jsx(Hn,{className:A(i.sentiment_analysis.overall_sentiment),children:i.sentiment_analysis.overall_sentiment})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-xs",children:[a.jsxs("span",{children:["Positive: ",i.sentiment_analysis.sentiment_distribution.positive]}),a.jsxs("span",{children:["Neutral: ",i.sentiment_analysis.sentiment_distribution.neutral]}),a.jsxs("span",{children:["Negative: ",i.sentiment_analysis.sentiment_distribution.negative]})]}),a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Trend:"}),a.jsx("span",{className:"font-medium",children:i.sentiment_analysis.sentiment_trend})]})]})]})})]}),i&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(HJ,{className:"h-4 w-4"}),"Quality Metrics"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Engagement:"}),a.jsxs("span",{className:"font-medium",children:[Math.round(i.quality_metrics.engagement_score),"/100"]})]}),a.jsx(wc,{value:i.quality_metrics.engagement_score,className:"h-2"})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Depth:"}),a.jsxs("span",{className:"font-medium",children:[Math.round(i.quality_metrics.depth_score),"/100"]})]}),a.jsx(wc,{value:i.quality_metrics.depth_score,className:"h-2"})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Overall:"}),a.jsxs("span",{className:"font-medium",children:[Math.round(i.quality_metrics.quality_score),"/100"]})]}),a.jsx(wc,{value:i.quality_metrics.quality_score,className:"h-2"})]})]})})]}),d&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(du,{className:"h-4 w-4"}),"AI Insights"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Energy:"}),a.jsx(Hn,{variant:d.conversation_energy==="high"?"default":"secondary",children:d.conversation_energy})]}),a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Engagement:"}),a.jsx(Hn,{variant:d.topic_engagement==="high"?"default":"secondary",children:d.topic_engagement})]}),d.next_suggested_action&&a.jsx("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-2 mt-2",children:a.jsxs("div",{className:"text-xs text-blue-800",children:[a.jsx("strong",{children:"Suggestion:"})," ",d.next_suggested_action]})})]})})]}),i&&i.recommendations.length>0&&a.jsxs(ut,{children:[a.jsx(ji,{className:"pb-3",children:a.jsxs(qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(IE,{className:"h-4 w-4"}),"Recommendations"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsx("div",{className:"space-y-2",children:i.recommendations.map((P,k)=>a.jsx("div",{className:"bg-amber-50 border border-amber-200 rounded-lg p-2",children:a.jsx("div",{className:"text-xs text-amber-800",children:P})},k))})})]})]})]}):null},k$e=({discussionGuide:t,moderatorStatus:e,onSectionSelect:n,onSetPosition:r,onSave:i,focusGroupId:s,isOpen:o,onToggle:c,className:l,onEditingChange:u})=>{const d=v.useRef(!1),f=v.useCallback(y=>{d.current=y,u==null||u(y)},[u]),[h,p]=v.useState(!1),g=async()=>{if(!t){se.error("No discussion guide available",{description:"The discussion guide is not available for download"});return}p(!0);try{await pt.downloadDiscussionGuide(s),se.success("Discussion guide downloaded",{description:"The guide has been saved to your downloads folder"})}catch(y){console.error("Error downloading discussion guide:",y),se.error("Download failed",{description:"Unable to download the discussion guide. Please try again."})}finally{p(!1)}},m=t&&typeof t=="object"&&t.sections;return a.jsx("div",{className:Pe("w-full border-b bg-white shadow-sm",l),children:a.jsxs(Ag,{open:o,onOpenChange:c,children:[a.jsx(jg,{asChild:!0,children:a.jsxs("div",{className:"w-full px-4 py-3 flex items-center justify-between hover:bg-slate-50 transition-colors cursor-pointer",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(WJ,{className:"h-5 w-5 text-slate-600"}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-semibold text-slate-900",children:"Discussion Guide"}),m&&a.jsxs("p",{className:"text-xs text-slate-500",children:[t.title," • ",t.total_duration," minutes"]})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(ee,{variant:"ghost",size:"sm",onClick:y=>{y.stopPropagation(),g()},disabled:!t||h,className:"h-8",children:h?a.jsx(Js,{className:"h-4 w-4 animate-spin"}):a.jsx(Xc,{className:"h-4 w-4"})}),o?a.jsx(uu,{className:"h-4 w-4 text-slate-500"}):a.jsx(Ra,{className:"h-4 w-4 text-slate-500"})]})]})}),a.jsx(Eg,{children:a.jsx("div",{className:"border-t bg-slate-50",children:a.jsx(ut,{className:"mx-4 mb-4 mt-2",children:a.jsx(Rt,{className:"p-4",children:a.jsx("div",{className:"max-h-[70vh] overflow-y-auto",children:a.jsx(VT,{discussionGuide:t,moderatorStatus:e,onSectionSelect:n,onSetPosition:r,onSave:i,showProgress:!0,collapsible:!0,defaultExpanded:!0,focusGroupId:s,onEditingChange:f})})})})})})]})})},O$e=({focusGroupId:t,focusGroupName:e="Focus Group",onNoteClick:n})=>{const[r,i]=v.useState([]),[s,o]=v.useState(!0),[c,l]=v.useState(null);v.useEffect(()=>{u()},[t]);const u=async()=>{try{o(!0);const x=await pt.getNotes(t);if(x.data&&Array.isArray(x.data)){const w=x.data.map(S=>({...S,timestamp:new Date(S.timestamp),createdAt:new Date(S.createdAt)}));i(y(w))}}catch(x){console.error("Error fetching notes:",x),se.error("Failed to load notes",{description:"Please refresh the page to try again."})}finally{o(!1)}},d=async x=>{l(x);try{await pt.deleteNote(t,x),i(r.filter(w=>w.id!==x)),se.success("Note deleted successfully")}catch(w){console.error("Error deleting note:",w),se.error("Failed to delete note",{description:"Please try again."})}finally{l(null)}},f=x=>{x.associatedMessageId&&n?n(x.associatedMessageId):se.info("No associated message",{description:"This note is not linked to a specific discussion point."})},h=()=>{if(r.length===0){se.warning("No notes to export",{description:"Create some notes first before exporting."});return}const x=p(),w=document.createElement("a"),S=new Blob([x],{type:"text/markdown"});w.href=URL.createObjectURL(S),w.download=`${e.replace(/[^a-z0-9]/gi,"_").toLowerCase()}_notes.md`,document.body.appendChild(w),w.click(),document.body.removeChild(w),se.success("Notes exported successfully",{description:`Downloaded ${r.length} notes as Markdown file.`})},p=()=>{const x=[`# Notes: ${e}`,"",`Exported on: ${new Date().toLocaleString()}`,`Total notes: ${r.length}`,"","---",""];return r.forEach((w,S)=>{var C;x.push(`## Note ${S+1}`),x.push(""),x.push(`**Created:** ${w.createdAt.toLocaleString()}`),(C=w.sectionInfo)!=null&&C.sectionTitle&&x.push(`**Section:** ${w.sectionInfo.sectionTitle}`),x.push(`**Elapsed Time:** ${g(w.elapsedTime)}`),x.push(""),x.push("**Content:**"),x.push(w.content),x.push(""),x.push("---"),x.push("")}),x.join(` -`)},g=x=>{const w=Math.floor(x/1e3),S=Math.floor(w/60),C=w%60;return`${S}:${C.toString().padStart(2,"0")}`},m=x=>x.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),y=x=>[...x].sort((w,S)=>S.createdAt.getTime()-w.createdAt.getTime()),b=x=>{i(w=>y([...w,x]))};return v.useEffect(()=>(window.notesPanelAddNote=b,()=>{delete window.notesPanelAddNote}),[]),s?a.jsx("div",{className:"flex items-center justify-center h-64",children:a.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}):a.jsxs("div",{className:"flex flex-col h-full",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(Wy,{className:"h-5 w-5 text-primary mr-2"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"Notes"}),r.length>0&&a.jsxs("span",{className:"ml-2 text-sm text-slate-500",children:["(",r.length,")"]})]}),a.jsxs(ee,{variant:"outline",size:"sm",onClick:h,disabled:r.length===0,children:[a.jsx(Xc,{className:"mr-2 h-4 w-4"}),"Export Notes"]})]}),a.jsx(cw,{className:"flex-1",children:r.length===0?a.jsxs("div",{className:"flex flex-col items-center justify-center p-8 text-center bg-slate-50 rounded-lg",children:[a.jsx(Wy,{className:"h-8 w-8 text-slate-400 mb-3"}),a.jsx("p",{className:"text-slate-600",children:"No notes yet."}),a.jsx("p",{className:"text-sm text-slate-500 mt-2",children:'Click the "Note" button during the session to add contextual notes.'})]}):a.jsx("div",{className:"space-y-4",children:r.map(x=>{var w;return a.jsxs(ut,{className:"hover:shadow-md transition-shadow cursor-pointer group",onClick:()=>f(x),children:[a.jsx(ji,{className:"pb-2",children:a.jsxs("div",{className:"flex items-start justify-between",children:[a.jsxs("div",{className:"flex-1",children:[a.jsx(qi,{className:"text-sm font-medium text-slate-600",children:m(x.createdAt)}),((w=x.sectionInfo)==null?void 0:w.sectionTitle)&&a.jsx("div",{className:"text-xs text-slate-500 mt-1",children:a.jsx("span",{children:x.sectionInfo.sectionTitle})})]}),a.jsxs("div",{className:"flex items-center space-x-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[x.associatedMessageId&&a.jsx(ee,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0",onClick:S=>{S.stopPropagation(),f(x)},title:"Go to discussion point",children:a.jsx(aZ,{className:"h-3 w-3"})}),a.jsx(ee,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0 text-red-600 hover:text-red-700",onClick:S=>{S.stopPropagation(),d(x.id)},disabled:c===x.id,title:"Delete note",children:a.jsx(qn,{className:"h-3 w-3"})})]})]})}),a.jsx(Rt,{className:"pt-0",children:a.jsx("p",{className:"text-sm text-slate-700 whitespace-pre-wrap",children:x.content})})]},x.id)})})})]})},I$e=({isOpen:t,onClose:e,focusGroupId:n,associatedMessageId:r,sectionInfo:i,messageTimestamp:s,onNoteSaved:o})=>{const[c,l]=v.useState(""),[u,d]=v.useState(!1),f=async()=>{if(!c.trim()){se.error("Note content cannot be empty");return}d(!0);try{const p={content:c.trim(),associatedMessageId:r,sectionInfo:i,elapsedTime:0,timestamp:s.toISOString(),createdAt:new Date().toISOString()},g=await pt.createNote(n,p);if(g.data){const m={...g.data,timestamp:new Date(g.data.timestamp),createdAt:new Date(g.data.createdAt)},y=i!=null&&i.sectionTitle?`'${i.sectionTitle}'`:"current section",b=s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});se.success("Quick note saved",{description:`Note linked to ${y} at ${b}`}),o&&o(m),l(""),e()}}catch(p){console.error("Error saving note:",p),se.error("Failed to save note",{description:"Please try again or check your connection."})}finally{d(!1)}},h=()=>{l(""),e()};return a.jsx(Jl,{open:t,onOpenChange:h,children:a.jsxs($c,{className:"sm:max-w-md",children:[a.jsx(Lc,{children:a.jsx(Uc,{children:"Quick Note"})}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"text-sm text-slate-600",children:[a.jsxs("div",{children:[a.jsx("strong",{children:"Section:"})," ",(i==null?void 0:i.sectionTitle)||"Unknown section"]}),a.jsxs("div",{children:[a.jsx("strong",{children:"Time:"})," ",s.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]}),a.jsx(ht,{placeholder:"Enter your note here...",value:c,onChange:p=>l(p.target.value),className:"min-h-[100px] resize-none",autoFocus:!0})]}),a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",onClick:h,disabled:u,children:"Cancel"}),a.jsx(ee,{onClick:f,disabled:u,children:u?"Saving...":"Save Note"})]})]})})},qo=Object.create(null);qo.open="0";qo.close="1";qo.ping="2";qo.pong="3";qo.message="4";qo.upgrade="5";qo.noop="6";const ly=Object.create(null);Object.keys(qo).forEach(t=>{ly[qo[t]]=t});const lj={type:"error",data:"parser error"},wW=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",SW=typeof ArrayBuffer=="function",CW=t=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(t):t&&t.buffer instanceof ArrayBuffer,nk=({type:t,data:e},n,r)=>wW&&e instanceof Blob?n?r(e):T$(e,r):SW&&(e instanceof ArrayBuffer||CW(e))?n?r(e):T$(new Blob([e]),r):r(qo[t]+(e||"")),T$=(t,e)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];e("b"+(r||""))},n.readAsDataURL(t)};function P$(t){return t instanceof Uint8Array?t:t instanceof ArrayBuffer?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}let PC;function R$e(t,e){if(wW&&t.data instanceof Blob)return t.data.arrayBuffer().then(P$).then(e);if(SW&&(t.data instanceof ArrayBuffer||CW(t.data)))return e(P$(t.data));nk(t,!1,n=>{PC||(PC=new TextEncoder),e(PC.encode(n))})}const k$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Qh=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let t=0;t{let e=t.length*.75,n=t.length,r,i=0,s,o,c,l;t[t.length-1]==="="&&(e--,t[t.length-2]==="="&&e--);const u=new ArrayBuffer(e),d=new Uint8Array(u);for(r=0;r>4,d[i++]=(o&15)<<4|c>>2,d[i++]=(c&3)<<6|l&63;return u},D$e=typeof ArrayBuffer=="function",rk=(t,e)=>{if(typeof t!="string")return{type:"message",data:_W(t,e)};const n=t.charAt(0);return n==="b"?{type:"message",data:$$e(t.substring(1),e)}:ly[n]?t.length>1?{type:ly[n],data:t.substring(1)}:{type:ly[n]}:lj},$$e=(t,e)=>{if(D$e){const n=M$e(t);return _W(n,e)}else return{base64:!0,data:t}},_W=(t,e)=>{switch(e){case"blob":return t instanceof Blob?t:new Blob([t]);case"arraybuffer":default:return t instanceof ArrayBuffer?t:t.buffer}},AW="",L$e=(t,e)=>{const n=t.length,r=new Array(n);let i=0;t.forEach((s,o)=>{nk(s,!1,c=>{r[o]=c,++i===n&&e(r.join(AW))})})},F$e=(t,e)=>{const n=t.split(AW),r=[];for(let i=0;i{const r=n.length;let i;if(r<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,r);else if(r<65536){i=new Uint8Array(3);const s=new DataView(i.buffer);s.setUint8(0,126),s.setUint16(1,r)}else{i=new Uint8Array(9);const s=new DataView(i.buffer);s.setUint8(0,127),s.setBigUint64(1,BigInt(r))}t.data&&typeof t.data!="string"&&(i[0]|=128),e.enqueue(i),e.enqueue(n)})}})}let kC;function Dv(t){return t.reduce((e,n)=>e+n.length,0)}function $v(t,e){if(t[0].length===e)return t.shift();const n=new Uint8Array(e);let r=0;for(let i=0;iMath.pow(2,21)-1){c.enqueue(lj);break}i=d*Math.pow(2,32)+u.getUint32(4),r=3}else{if(Dv(n)t){c.enqueue(lj);break}}}})}const jW=4;function mr(t){if(t)return H$e(t)}function H$e(t){for(var e in mr.prototype)t[e]=mr.prototype[e];return t}mr.prototype.on=mr.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this};mr.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this};mr.prototype.off=mr.prototype.removeListener=mr.prototype.removeAllListeners=mr.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+t];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+t],this;for(var r,i=0;iPromise.resolve().then(e):(e,n)=>n(e,0),vs=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),z$e="arraybuffer";function EW(t,...e){return e.reduce((n,r)=>(t.hasOwnProperty(r)&&(n[r]=t[r]),n),{})}const V$e=vs.setTimeout,G$e=vs.clearTimeout;function eS(t,e){e.useNativeTimers?(t.setTimeoutFn=V$e.bind(vs),t.clearTimeoutFn=G$e.bind(vs)):(t.setTimeoutFn=vs.setTimeout.bind(vs),t.clearTimeoutFn=vs.clearTimeout.bind(vs))}const K$e=1.33;function W$e(t){return typeof t=="string"?q$e(t):Math.ceil((t.byteLength||t.size)*K$e)}function q$e(t){let e=0,n=0;for(let r=0,i=t.length;r=57344?n+=3:(r++,n+=4);return n}function NW(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function Y$e(t){let e="";for(let n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e}function Q$e(t){let e={},n=t.split("&");for(let r=0,i=n.length;r{this.readyState="paused",e()};if(this._polling||!this.writable){let r=0;this._polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};F$e(e,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const e=()=>{this.write([{type:"close"}])};this.readyState==="open"?e():this.once("open",e)}write(e){this.writable=!1,L$e(e,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const e=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=NW()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(e,n)}}let TW=!1;try{TW=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const Z$e=TW;function eLe(){}class tLe extends J$e{constructor(e){if(super(e),typeof location<"u"){const n=location.protocol==="https:";let r=location.port;r||(r=n?"443":"80"),this.xd=typeof location<"u"&&e.hostname!==location.hostname||r!==e.port}}doWrite(e,n){const r=this.request({method:"POST",data:e});r.on("success",n),r.on("error",(i,s)=>{this.onError("xhr post error",i,s)})}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=e}}let kd=class uy extends mr{constructor(e,n,r){super(),this.createRequest=e,eS(this,r),this._opts=r,this._method=r.method||"GET",this._uri=n,this._data=r.data!==void 0?r.data:null,this._create()}_create(){var e;const n=EW(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this._opts.xd;const r=this._xhr=this.createRequest(n);try{r.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this._opts.extraHeaders[i])}}catch{}if(this._method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(e=this._opts.cookieJar)===null||e===void 0||e.addCookies(r),"withCredentials"in r&&(r.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(r.timeout=this._opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this._opts.cookieJar)===null||i===void 0||i.parseCookies(r.getResponseHeader("set-cookie"))),r.readyState===4&&(r.status===200||r.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof r.status=="number"?r.status:0)},0))},r.send(this._data)}catch(i){this.setTimeoutFn(()=>{this._onError(i)},0);return}typeof document<"u"&&(this._index=uy.requestsCount++,uy.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(e){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=eLe,e)try{this._xhr.abort()}catch{}typeof document<"u"&&delete uy.requests[this._index],this._xhr=null}}_onLoad(){const e=this._xhr.responseText;e!==null&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};kd.requestsCount=0;kd.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",O$);else if(typeof addEventListener=="function"){const t="onpagehide"in vs?"pagehide":"unload";addEventListener(t,O$,!1)}}function O$(){for(let t in kd.requests)kd.requests.hasOwnProperty(t)&&kd.requests[t].abort()}const nLe=function(){const t=PW({xdomain:!1});return t&&t.responseType!==null}();class rLe extends tLe{constructor(e){super(e);const n=e&&e.forceBase64;this.supportsBinary=nLe&&!n}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new kd(PW,this.uri(),e)}}function PW(t){const e=t.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!e||Z$e))return new XMLHttpRequest}catch{}if(!e)try{return new vs[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const kW=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class iLe extends ik{get name(){return"websocket"}doOpen(){const e=this.uri(),n=this.opts.protocols,r=kW?{}:EW(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let n=0;n{try{this.doWrite(r,s)}catch{}i&&Zw(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=NW()),this.supportsBinary||(n.b64=1),this.createUri(e,n)}}const OC=vs.WebSocket||vs.MozWebSocket;class sLe extends iLe{createSocket(e,n,r){return kW?new OC(e,n,r):n?new OC(e,n):new OC(e)}doWrite(e,n){this.ws.send(n)}}class oLe extends ik{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved("error",e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{const n=B$e(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=e.readable.pipeThrough(n).getReader(),i=U$e();i.readable.pipeTo(e.writable),this._writer=i.writable.getWriter();const s=()=>{r.read().then(({done:c,value:l})=>{c||(this.onPacket(l),s())}).catch(c=>{})};s();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let n=0;n{i&&Zw(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)===null||e===void 0||e.close()}}const aLe={websocket:sLe,webtransport:oLe,polling:rLe},cLe=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,lLe=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function uj(t){if(t.length>8e3)throw"URI too long";const e=t,n=t.indexOf("["),r=t.indexOf("]");n!=-1&&r!=-1&&(t=t.substring(0,n)+t.substring(n,r).replace(/:/g,";")+t.substring(r,t.length));let i=cLe.exec(t||""),s={},o=14;for(;o--;)s[lLe[o]]=i[o]||"";return n!=-1&&r!=-1&&(s.source=e,s.host=s.host.substring(1,s.host.length-1).replace(/;/g,":"),s.authority=s.authority.replace("[","").replace("]","").replace(/;/g,":"),s.ipv6uri=!0),s.pathNames=uLe(s,s.path),s.queryKey=dLe(s,s.query),s}function uLe(t,e){const n=/\/{2,9}/g,r=e.replace(n,"/").split("/");return(e.slice(0,1)=="/"||e.length===0)&&r.splice(0,1),e.slice(-1)=="/"&&r.splice(r.length-1,1),r}function dLe(t,e){const n={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,s){i&&(n[i]=s)}),n}const dj=typeof addEventListener=="function"&&typeof removeEventListener=="function",dy=[];dj&&addEventListener("offline",()=>{dy.forEach(t=>t())},!1);class Vc extends mr{constructor(e,n){if(super(),this.binaryType=z$e,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e=="object"&&(n=e,e=null),e){const r=uj(e);n.hostname=r.host,n.secure=r.protocol==="https"||r.protocol==="wss",n.port=r.port,r.query&&(n.query=r.query)}else n.host&&(n.hostname=uj(n.host).host);eS(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},n.transports.forEach(r=>{const i=r.prototype.name;this.transports.push(i),this._transportsByName[i]=r}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=Q$e(this.opts.query)),dj&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},dy.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){const n=Object.assign({},this.opts.query);n.EIO=jW,n.transport=e,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](r)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const e=this.opts.rememberUpgrade&&Vc.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const n=this.createTransport(e);n.open(),this.setTransport(n)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",n=>this._onClose("transport close",n))}onOpen(){this.readyState="open",Vc.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const n=new Error("server error");n.code=e.data,this._onError(n);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data);break}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this._maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,Zw(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,n,r){return this._sendPacket("message",e,n,r),this}send(e,n,r){return this._sendPacket("message",e,n,r),this}_sendPacket(e,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const s={type:e,data:n,options:r};this.emitReserved("packetCreate",s),this.writeBuffer.push(s),i&&this.once("flush",i),this.flush()}close(){const e=()=>{this._onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),e()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():e()}):this.upgrading?r():e()),this}_onError(e){if(Vc.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,n){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),dj&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const r=dy.indexOf(this._offlineEventListener);r!==-1&&dy.splice(r,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,n),this.writeBuffer=[],this._prevBufferLen=0}}}Vc.protocol=jW;class fLe extends Vc{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let e=0;e{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",f=>{if(!r)if(f.type==="pong"&&f.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Vc.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(d(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const h=new Error("probe error");h.transport=n.name,this.emitReserved("upgradeError",h)}}))};function s(){r||(r=!0,d(),n.close(),n=null)}const o=f=>{const h=new Error("probe error: "+f);h.transport=n.name,s(),this.emitReserved("upgradeError",h)};function c(){o("transport closed")}function l(){o("socket closed")}function u(f){n&&f.name!==n.name&&s()}const d=()=>{n.removeListener("open",i),n.removeListener("error",o),n.removeListener("close",c),this.off("close",l),this.off("upgrading",u)};n.once("open",i),n.once("error",o),n.once("close",c),this.once("close",l),this.once("upgrading",u),this._upgrades.indexOf("webtransport")!==-1&&e!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){const n=[];for(let r=0;raLe[i]).filter(i=>!!i)),super(e,r)}};function pLe(t,e="",n){let r=t;n=n||typeof location<"u"&&location,t==null&&(t=n.protocol+"//"+n.host),typeof t=="string"&&(t.charAt(0)==="/"&&(t.charAt(1)==="/"?t=n.protocol+t:t=n.host+t),/^(https?|wss?):\/\//.test(t)||(typeof n<"u"?t=n.protocol+"//"+t:t="https://"+t),r=uj(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";const s=r.host.indexOf(":")!==-1?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+s+":"+r.port+e,r.href=r.protocol+"://"+s+(n&&n.port===r.port?"":":"+r.port),r}const mLe=typeof ArrayBuffer=="function",gLe=t=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer,OW=Object.prototype.toString,vLe=typeof Blob=="function"||typeof Blob<"u"&&OW.call(Blob)==="[object BlobConstructor]",yLe=typeof File=="function"||typeof File<"u"&&OW.call(File)==="[object FileConstructor]";function sk(t){return mLe&&(t instanceof ArrayBuffer||gLe(t))||vLe&&t instanceof Blob||yLe&&t instanceof File}function fy(t,e){if(!t||typeof t!="object")return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n=0&&t.num{delete this.acks[e];for(let c=0;c{this.io.clearTimeoutFn(s),n.apply(this,c)};o.withError=!0,this.acks[e]=o}emitWithAck(e,...n){return new Promise((r,i)=>{const s=(o,c)=>o?i(o):r(c);s.withError=!0,n.push(s),this.emit(e,...n)})}_addToQueue(e){let n;typeof e[e.length-1]=="function"&&(n=e.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((i,...s)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...s)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!e||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth=="function"?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:Zt.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,n),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(r=>String(r.id)===e)){const r=this.acks[e];delete this.acks[e],r.withError&&r.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case Zt.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case Zt.EVENT:case Zt.BINARY_EVENT:this.onevent(e);break;case Zt.ACK:case Zt.BINARY_ACK:this.onack(e);break;case Zt.DISCONNECT:this.ondisconnect();break;case Zt.CONNECT_ERROR:this.destroy();const r=new Error(e.data.message);r.data=e.data.data,this.emitReserved("connect_error",r);break}}onevent(e){const n=e.data||[];e.id!=null&&n.push(this.ack(e.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]=="string"&&(this._lastOffset=e[e.length-1])}ack(e){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:Zt.ACK,id:e,data:i}))}}onack(e){const n=this.acks[e.id];typeof n=="function"&&(delete this.acks[e.id],n.withError&&e.data.unshift(null),n.apply(this,e.data))}onconnect(e,n){this.id=e,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:Zt.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const n=this._anyListeners;for(let r=0;r0&&t.jitter<=1?t.jitter:0,this.attempts=0}dh.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=Math.floor(e*10)&1?t+n:t-n}return Math.min(t,this.max)|0};dh.prototype.reset=function(){this.attempts=0};dh.prototype.setMin=function(t){this.ms=t};dh.prototype.setMax=function(t){this.max=t};dh.prototype.setJitter=function(t){this.jitter=t};class pj extends mr{constructor(e,n){var r;super(),this.nsps={},this.subs=[],e&&typeof e=="object"&&(n=e,e=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,eS(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new dh({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=e;const i=n.parser||ALe;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var n;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(n=this.backoff)===null||n===void 0||n.setMin(e),this)}randomizationFactor(e){var n;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(n=this.backoff)===null||n===void 0||n.setJitter(e),this)}reconnectionDelayMax(e){var n;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(n=this.backoff)===null||n===void 0||n.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new hLe(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=zs(n,"open",function(){r.onopen(),e&&e()}),s=c=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",c),e?e(c):this.maybeReconnectOnOpen()},o=zs(n,"error",s);if(this._timeout!==!1){const c=this._timeout,l=this.setTimeoutFn(()=>{i(),s(new Error("timeout")),n.close()},c);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(zs(e,"ping",this.onping.bind(this)),zs(e,"data",this.ondata.bind(this)),zs(e,"error",this.onerror.bind(this)),zs(e,"close",this.onclose.bind(this)),zs(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(n){this.onclose("parse error",n)}}ondecoded(e){Zw(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,n){let r=this.nsps[e];return r?this._autoConnect&&!r.active&&r.connect():(r=new IW(this,e,n),this.nsps[e]=r),r}_destroy(e){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(e){const n=this.encoder.encode(e);for(let r=0;re()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,n){var r;this.cleanup(),(r=this.engine)===null||r===void 0||r.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),!e.skipReconnect&&e.open(i=>{i?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",i)):e.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const Dh={};function hy(t,e){typeof t=="object"&&(e=t,t=void 0),e=e||{};const n=pLe(t,e.path||"/socket.io"),r=n.source,i=n.id,s=n.path,o=Dh[i]&&s in Dh[i].nsps,c=e.forceNew||e["force new connection"]||e.multiplex===!1||o;let l;return c?l=new pj(r,e):(Dh[i]||(Dh[i]=new pj(r,e)),l=Dh[i]),n.query&&!e.query&&(e.query=n.queryKey),l.socket(n.path,e)}Object.assign(hy,{Manager:pj,Socket:IW,io:hy,connect:hy});const R$=window.location.origin,M$=new URLSearchParams(window.location.search).get("direct")==="1"?"/socket.io/":"/semblance_back/socket.io/";let It=null,nu=null,D$=!1;function RW(t){if(It)return It.io.opts.auth={token:t()},It;console.log("🔧 [GPT-5] Creating singleton socket:",R$,M$),It=hy(R$,{path:M$,transports:["websocket"],reconnection:!0,autoConnect:!1,timeout:6e4,pingInterval:45e3,pingTimeout:12e4,auth:n=>n({token:t()})}),It.io.on("reconnect_attempt",()=>{console.log("🔧 [GPT-5] Reconnect attempt - refreshing token"),It.io.opts.auth={token:t()}});const e=()=>{console.log("🔧 [GPT-5] Socket connected, rebinding listeners and rejoining room"),PLe(),nu&&TLe()};return It.on("connect",e),It.onAny((n,...r)=>{console.log(`🔧 [GPT-5 onAny] ${n}:`,r);const i=r[0];switch(n){case"joined_focus_group":console.log("🔧 [GPT-5] *** ROUTING joined_focus_group from onAny ***"),window.dispatchEvent(new CustomEvent("ws:joined_focus_group",{detail:i}));break;case"left_focus_group":console.log("🔧 [GPT-5] *** ROUTING left_focus_group from onAny ***"),window.dispatchEvent(new CustomEvent("ws:left_focus_group",{detail:i}));break;case"message_update":console.log("🔧 [GPT-5] *** ROUTING message_update from onAny ***");try{window.dispatchEvent(new CustomEvent("ws:message_update",{detail:i})),console.log("🔧 [GPT-5] DISPATCHED window event ws:message_update SUCCESS (via onAny)")}catch(s){console.error("🔧 [GPT-5] ERROR dispatching window event (via onAny):",s)}break;case"ai_status_update":console.log("🔧 [GPT-5] *** ROUTING ai_status_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:ai_status_update",{detail:i}));break;case"moderator_status_update":console.log("🔧 [GPT-5] *** ROUTING moderator_status_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:moderator_status_update",{detail:i}));break;case"theme_update":console.log("🔧 [GPT-5] *** ROUTING theme_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:theme_update",{detail:i}));break;case"focus_group_update":console.log("🔧 [GPT-5] *** ROUTING focus_group_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:focus_group_update",{detail:i}));break;case"connected":console.log("🔧 [GPT-5] *** ROUTING connected from onAny ***");break;case"error":console.error("🔧 [GPT-5] *** ROUTING error from onAny ***",i);break}}),It.on("connect_error",n=>{console.error("🔧 [GPT-5] Connect error:",n)}),It.on("disconnect",n=>{console.log("🔧 [GPT-5] Disconnected:",n)}),It}function MW(){It&&!It.connected&&(console.log("🔧 [GPT-5] Connecting socket"),It.connect())}function ELe(t,e){if(console.log("🔧 [GPT-5] Joining focus group:",t),nu=t,!(It!=null&&It.connected)){console.log("🔧 [GPT-5] Socket not connected, will auto-rejoin on connect"),MW(),setTimeout(()=>{It!=null&&It.connected?(console.log("🔧 [GPT-5] Retrying join after connection established"),It.emit("join_focus_group",{focus_group_id:t},n=>{console.log("🔧 [GPT-5] join_focus_group RETRY ACK:",n)})):console.log("🔧 [GPT-5] Still not connected, will rejoin on next connect event")},1e3);return}It.emit("join_focus_group",{focus_group_id:t},n=>{console.log("🔧 [GPT-5] join_focus_group ACK:",n)})}function NLe(t){console.log("🔧 [GPT-5] Leaving focus group:",t),nu===t&&(nu=null),It!=null&&It.connected&&It.emit("leave_focus_group",{focus_group_id:t})}function TLe(){!(It!=null&&It.connected)||!nu||(console.log("🔧 [GPT-5] Auto-rejoining room after reconnect:",nu),It.emit("join_focus_group",{focus_group_id:nu}))}function PLe(){if(!It){console.log("🔧 [GPT-5] bindCoreListeners called but socket is null!");return}D$&&console.log("🔧 [GPT-5] Listeners already bound, but rebinding anyway for safety"),console.log("🔧 [GPT-5] bindCoreListeners called - socket exists, binding listeners");const t=c=>{console.log("🔧 [GPT-5] joined_focus_group:",c),window.dispatchEvent(new CustomEvent("ws:joined_focus_group",{detail:c}))},e=c=>{console.log("🔧 [GPT-5] left_focus_group:",c),window.dispatchEvent(new CustomEvent("ws:left_focus_group",{detail:c}))},n=c=>{console.log("🔧 [GPT-5] *** MESSAGE_UPDATE LISTENER FIRED! ***"),console.log("🔧 [GPT-5] message_update payload:",c),console.log("🔧 [GPT-5] DISPATCHING window event ws:message_update");try{window.dispatchEvent(new CustomEvent("ws:message_update",{detail:c})),console.log("🔧 [GPT-5] DISPATCHED window event ws:message_update SUCCESS")}catch(l){console.error("🔧 [GPT-5] ERROR dispatching window event:",l)}},r=c=>{console.log("🔧 [GPT-5] ai_status_update:",c),console.log("🔧 [GPT-5] DISPATCHING window event ws:ai_status_update"),window.dispatchEvent(new CustomEvent("ws:ai_status_update",{detail:c})),console.log("🔧 [GPT-5] DISPATCHED window event ws:ai_status_update")},i=c=>{console.log("🔧 [GPT-5] moderator_status_update:",c),window.dispatchEvent(new CustomEvent("ws:moderator_status_update",{detail:c}))},s=c=>{console.log("🔧 [GPT-5] theme_update:",c),window.dispatchEvent(new CustomEvent("ws:theme_update",{detail:c}))},o=c=>{console.log("🔧 [GPT-5] focus_group_update:",c),window.dispatchEvent(new CustomEvent("ws:focus_group_update",{detail:c}))};console.log("🔧 [GPT-5] BINDING specific listeners to socket"),It.on("joined_focus_group",t),It.on("left_focus_group",e),It.on("message_update",n),It.on("ai_status_update",r),It.on("moderator_status_update",i),It.on("theme_update",s),It.on("focus_group_update",o),console.log("🔧 [GPT-5] BOUND specific listeners to socket"),console.log("🔧 [GPT-5] Socket listeners after binding:",It.listeners("message_update").length),console.log("🔧 [GPT-5] Socket hasListeners message_update:",It.hasListeners("message_update")),setTimeout(()=>{It!=null&&It.connected&&(console.log("🔧 [GPT-5] SELF-TEST: Emitting test event"),It.emit("message_update",{test:"self-emit-test"}))},1e3),It.on("connected",c=>{console.log("🔧 [GPT-5] connected:",c)}),It.on("error",c=>{console.error("🔧 [GPT-5] socket error:",c)}),D$=!0}const kLe=()=>{const{id:t}=OE(),e=ar(),{token:n}=Qo(),[r,i]=v.useState([]),[s,o]=v.useState([]),[c,l]=v.useState([]),[u,d]=v.useState(null),[f,h]=v.useState([]),[p,g]=v.useState("chat"),[m,y]=v.useState(null),[b,x]=v.useState(!1),[w,S]=v.useState(!1),[C,_]=v.useState(!0),[A,j]=v.useState(!1),[P,k]=v.useState(!1),O=v.useRef(!1),[E,R]=v.useState(!1),M=v.useRef(u);M.current=u;const[G,L]=v.useState([]),[V,I]=v.useState(!1),[D,X]=v.useState(""),[Q,J]=v.useState("medium"),[ye,U]=v.useState("medium"),[ne,ue]=v.useState(!1),[F,ce]=v.useState(!1),[te,pe]=v.useState(null),[we,Y]=v.useState([]),[nt,Ue]=v.useState(!1),[at,Be]=v.useState(!1),[Bt,N]=v.useState(!1),[$,B]=v.useState(!0),[K,Z]=v.useState({isOpen:!1}),H=v.useRef(!1),[re,me]=v.useState(""),be=v.useRef(""),ke=v.useRef(!1),Se=v.useRef({wasConnected:!1,wasConnecting:!1,initialConnection:!0,hasShownFallbackNotification:!1}),qe=bW(),[st,Dt]=v.useState(!1),[We,Je]=v.useState(!1),[At,Yt]=v.useState(null),Xn=v.useCallback(()=>n||"",[n]);v.useEffect(()=>{console.log("🔧 [GPT-5 Session] Initializing WebSocket"),RW(Xn)},[qe,Xn]),v.useEffect(()=>{if(!t)return;(()=>{console.log("🔧 [GPT-5 Session] Joining focus group:",t),ELe(t)})()},[t,qe]),v.useEffect(()=>{Je(!0),Dt(!1),Yt(null);const ie=setTimeout(()=>{Dt(!0),Je(!1)},1e3);return()=>{clearTimeout(ie)}},[qe]),v.useEffect(()=>{console.log("🔧 [GPT-5 Session] Setting up window event listeners");const ie=et=>{const St=et.detail;console.log("🔧 [GPT-5 Session] message_update:",St),St.focus_group_id&&(console.log("🔧 [GPT-5] Message focus_group_id:",St.focus_group_id),console.log("🔧 [GPT-5] Current focus group from URL:",t));const Ce=N$e(St.message);if(!Ce){console.error("🔧 [GPT-5] convertWebSocketMessage returned null");return}i(Qt=>Qt.find(rn=>rn.id===Ce.id)?(console.log("🔧 [GPT-5] Message already exists, skipping"),Qt):(console.log("🔧 [GPT-5] Adding new message, count:",Qt.length+1),[...Qt,Ce]))},le=et=>{const St=et.detail;console.log("🔧 [GPT-5 Session] ai_status_update:",St),S(Ce=>St.status.status==="ai_mode"),me(Ce=>St.status.status)},Te=et=>{const St=et.detail;console.log("🔧 [GPT-5 Session] moderator_status_update:",St),y(St.moderator_status)},$e=et=>{const St=et.detail;console.log("🔧 [GPT-5 Session] theme_update:",St);const Ce=T$e(St.theme);l(Qt=>{const Ct=[...Qt],rn=Ct.findIndex(Lt=>Lt.id===Ce.id);return rn>=0?Ct[rn]=Ce:Ct.push(Ce),Ct})},He=et=>{const St=et.detail;console.log("🔧 [GPT-5 Session] focus_group_update:",St),d(Ce=>Ce?{...Ce,...St}:null)},ft=et=>{const St=et.detail;console.log("🔧 [GPT-5 Session] joined_focus_group:",St)};return console.log("🔧 [GPT-5 Session] ADDING window event listeners"),window.addEventListener("ws:message_update",ie),window.addEventListener("ws:ai_status_update",le),window.addEventListener("ws:moderator_status_update",Te),window.addEventListener("ws:theme_update",$e),window.addEventListener("ws:focus_group_update",He),window.addEventListener("ws:joined_focus_group",ft),console.log("🔧 [GPT-5 Session] ADDED all window event listeners"),()=>{console.log("🔧 [GPT-5 Session] Cleaning up window event listeners"),window.removeEventListener("ws:message_update",ie),window.removeEventListener("ws:ai_status_update",le),window.removeEventListener("ws:moderator_status_update",Te),window.removeEventListener("ws:theme_update",$e),window.removeEventListener("ws:focus_group_update",He),window.removeEventListener("ws:joined_focus_group",ft),t&&NLe(t)}},[qe,t]),v.useEffect(()=>{if(!t)return;const ie=Se.current;st&&!ie.wasConnected&&(ie.initialConnection?Fe.success("Live updates enabled",{description:"Connected to real-time updates. Changes will appear instantly.",duration:3e3}):Fe.success("Real-time updates restored",{description:"WebSocket connection re-established. You'll now receive instant updates.",duration:4e3}),ie.wasConnected=!0,ie.initialConnection=!1),!st&&!We&&ie.wasConnected&&!ie.initialConnection&&(Fe.warning("Connection lost",{description:"Real-time updates unavailable. Attempting to reconnect...",duration:5e3}),ie.wasConnected=!1,B(!0)),At&&!We&&!st&&!ie.initialConnection&&(Fe.error("Connection failed",{description:"Unable to establish real-time connection. Using periodic updates instead.",duration:6e3}),B(!0)),ie.wasConnecting=We},[st,We,At,qe,t]),v.useEffect(()=>{},[qe,t,u]);const cr=async()=>{var ie;if(t)try{const le=await er.getModeratorStatus(t);if((ie=le==null?void 0:le.data)!=null&&ie.status){const Te=le.data.status;if(m){const $e=m.current_section_id!==Te.current_section_id||m.current_item_id!==Te.current_item_id||m.progress!==Te.progress}O.current||y(Te)}}catch(le){console.error("Error fetching moderator status:",le)}},ct=async()=>{if(!t)return{aiActive:!1,sessionStatus:""};try{if(typeof(pt==null?void 0:pt.getById)!="function")return console.error("focusGroupsApi.getById is not a function:",typeof(pt==null?void 0:pt.getById)),{aiActive:w,sessionStatus:re};const ie=await pt.getById(t);if(!ie||typeof ie!="object")return console.error("Invalid response object received:",ie),{aiActive:w,sessionStatus:re};if(!ie.data||typeof ie.data!="object")return console.warn("Focus group response missing data property:",ie),{aiActive:w,sessionStatus:re};const le=ie.data.status;if(typeof le>"u")return console.warn("Focus group response missing status field:",ie.data),{aiActive:w,sessionStatus:re};const Te=le==="ai_mode";return le==="autonomous_active"?console.warn('Detected legacy "autonomous_active" status - backend may need updating to "ai_mode"'):["ai_mode","active","completed","paused","draft","in-progress"].includes(le)||console.warn("Unexpected focus group status value:",le),{aiActive:Te,sessionStatus:le}}catch(ie){console.error("Error checking AI mode status:",ie);const le={focusGroupId:t,currentAiModeStatus:w,errorType:"unknown",timestamp:new Date().toISOString()};return ie.response?(le.errorType="api_error",le.status=ie.response.status,le.data=ie.response.data,console.error("API error response:",ie.response.status,ie.response.data),ie.response.status===404?console.warn("Focus group not found - may have been deleted"):ie.response.status===500&&console.error("Server error during status check - backend issue")):ie.request?(le.errorType="network_error",console.error("Network error - no response received, check connectivity")):(le.errorType="request_setup",le.message=ie.message,console.error("Request setup error:",ie.message)),console.debug("Status check error details:",le),{aiActive:w,sessionStatus:re,isGenerating:!1}}},jt=async(ie,le)=>{if(!t||ke.current)return;const Te=["completed","paused"],He=["ai_mode","autonomous_active","active","in-progress"].includes(le),ft=Te.includes(ie);if(He&&ft){ke.current=!0;try{let et="session_ended";ie==="completed"?et="auto_complete":ie==="paused"&&(et="manual_stop");const St=await er.endSession(t,et);St!=null&&St.data&&(Fe.success("Session concluded",{description:"The focus group session has ended with a concluding statement from the moderator."}),setTimeout(()=>{ot()},1e3))}catch(et){console.error("❌ Error ending session with concluding statement:",et),Fe.error("Error ending session",{description:"Failed to add concluding statement, but the session has ended."})}}},ot=async()=>{var ie;if(t)try{const le=await pt.getMessages(t);console.log("🔍 [FetchMessages] Raw API response:",le==null?void 0:le.data);let Te=[],$e=[];le&&le.data&&(Array.isArray(le.data)?(Te=le.data,$e=[]):le.data.messages||le.data.mode_events?(Te=le.data.messages||[],$e=le.data.mode_events||[]):(Te=Array.isArray(le.data)?le.data:[],$e=[]));const He=Te.map(Ce=>({id:Ce._id||Ce.id||`msg-${Date.now()}`,senderId:Ce.senderId,text:Ce.text,timestamp:new Date(Ce.timestamp||Ce.created_at),type:Ce.type||"response",highlighted:Ce.highlighted||!1,visualAsset:Ce.visualAsset}));console.log("🔍 [FetchMessages] Formatted messages with visual assets:",He.filter(Ce=>Ce.visualAsset).map(Ce=>({id:Ce.id,senderId:Ce.senderId,hasVisualAsset:!!Ce.visualAsset,visualAsset:Ce.visualAsset})));const ft=$e.map(Ce=>({id:Ce._id||Ce.id||`event-${Date.now()}`,focus_group_id:Ce.focus_group_id,event_type:Ce.event_type,timestamp:new Date(Ce.timestamp||Ce.created_at),user_id:Ce.user_id,created_at:new Date(Ce.created_at)}));o(ft),He.length>0?i(Ce=>{if(Ce.length===0)return He;{const Qt=new Map;Ce.forEach(vn=>Qt.set(vn.id,vn));const Ct=He.map(vn=>{if(Qt.has(vn.id)){const An=Qt.get(vn.id);return{...vn,highlighted:An.highlighted}}return vn}),rn=new Set(Ct.map(vn=>vn.id)),Lt=Ce.filter(vn=>!rn.has(vn.id));return[...Ct,...Lt].sort((vn,An)=>vn.timestamp.getTime()-An.timestamp.getTime())}}):He.length===0&&i(Ce=>Ce.length===0?[]:Ce);const et=He.filter(Ce=>Ce.highlighted),St=et.length>0?et.map(Ce=>({id:`theme-${Ce.id}`,text:Ce.text.substring(0,40)+(Ce.text.length>40?"...":""),count:1,messages:[Ce.id],source:"highlight"})):[];try{const Ce=await er.getKeyThemes(t);if((ie=Ce==null?void 0:Ce.data)!=null&&ie.themes&&Array.isArray(Ce.data.themes)){const Qt=Ce.data.themes;l([...St,...Qt])}else l(St)}catch(Ce){console.error("Error fetching AI-generated themes:",Ce),l(St)}}catch(le){console.error("Error fetching messages:",le),r.length===0&&Fe.error("Failed to fetch messages",{description:"Please try again later or restart the session."})}},Ze=async()=>{if(!t)return!1;try{const le=(await Rr.getAll()).data||[],Te=await pt.getById(t);if(Te&&Te.data){const $e=Te.data;console.log("Focus group data from API:",$e);const He={id:$e._id||$e.id,name:$e.name,status:$e.status||"in-progress",participants:$e.participants||[],date:$e.date||new Date().toISOString(),duration:$e.duration||60,topic:$e.topic||"general",discussionGuide:$e.discussionGuide||"",llm_model:$e.llm_model||"gemini-2.5-pro"};if(d(He),X(He.llm_model||"gemini-2.5-pro"),J(He.reasoning_effort||"medium"),U(He.verbosity||"medium"),$e.participants_data&&Array.isArray($e.participants_data))h($e.participants_data.map(et=>({...et,id:et._id||et.id})));else if(He.participants&&Array.isArray(He.participants)){console.log("Matching participants from DB:",{focusGroupParticipants:He.participants,allPersonas:le.map(St=>({id:St._id||St.id,name:St.name}))});const et=le.filter(St=>{const Ce=St._id||St.id;return He.participants.includes(Ce)});console.log("Matched participants:",et.map(St=>St.name)),h(et)}await ot(),await cr();const ft=await ct();return S(ft.aiActive),me(ft.sessionStatus),H.current=ft.aiActive,be.current=ft.sessionStatus,!0}return!1}catch(ie){return console.error("Error fetching focus group:",ie),!1}},gn=async(ie,le,Te)=>{if(console.log("🔧 updateFocusGroupModel called with:",{id:t,focusGroup:!!u,newModel:ie,reasoningEffort:le,verbosity:Te}),!t||!u){console.log("❌ updateFocusGroupModel: Missing id or focusGroup",{id:t,focusGroup:!!u});return}ue(!0);try{const $e={llm_model:ie};ie==="gpt-5"&&($e.reasoning_effort=le||Q,$e.verbosity=Te||ye),console.log("🔧 Making API call to update focus group model:",{id:t,updateData:$e});const He=await pt.update(t,$e);console.log("🔧 API response:",He),He&&He.data?(d(ft=>ft?{...ft,llm_model:ie,reasoning_effort:ie==="gpt-5"?le||Q:ft==null?void 0:ft.reasoning_effort,verbosity:ie==="gpt-5"?Te||ye:ft==null?void 0:ft.verbosity}:null),Fe.success("AI Model Updated",{description:`Focus group will now use ${ie==="gemini-2.5-pro"?"Gemini 2.5 Pro":ie==="gpt-4.1"?"GPT-4.1":ie==="gpt-5"?"GPT-5":ie} for AI responses`}),I(!1),console.log("✅ Model update successful")):console.log("❌ API response missing data:",He)}catch($e){console.error("❌ Error updating focus group model:",$e),Fe.error("Failed to update AI model",{description:"There was an error updating the AI model. Please try again."})}finally{ue(!1)}};v.useEffect(()=>{console.log("Looking for focus group with ID:",t);const ie=async()=>{try{return(await Rr.getAll()).data||[]}catch(He){return console.error("Error fetching personas:",He),[]}},le=async He=>{try{const ft=await pt.getById(t);if(ft&&ft.data){const et=ft.data;console.log("Focus group data from API:",et);const St={id:et._id||et.id,name:et.name,status:et.status||"in-progress",participants:et.participants||[],date:et.date||new Date().toISOString(),duration:et.duration||60,topic:et.topic||"general",discussionGuide:et.discussionGuide||"",llm_model:et.llm_model||"gemini-2.5-pro"};if(d(St),X(St.llm_model||"gemini-2.5-pro"),J(St.reasoning_effort||"medium"),U(St.verbosity||"medium"),et.participants_data&&Array.isArray(et.participants_data))h(et.participants_data.map(Ce=>({...Ce,id:Ce._id||Ce.id})));else if(St.participants&&Array.isArray(St.participants)){console.log("Matching participants from DB:",{focusGroupParticipants:St.participants,allPersonas:He.map(Qt=>({id:Qt._id||Qt.id,name:Qt.name}))});const Ce=He.filter(Qt=>{const Ct=Qt._id||Qt.id;return St.participants.includes(Ct)});console.log("Matched participants:",Ce.map(Qt=>Qt.name)),h(Ce)}return ot(),cr(),_(!1),!0}return!1}catch(ft){return console.error("Error fetching focus group:",ft),!1}};let Te,$e;return ie().then(He=>{le(He).then(ft=>{ft?At&&(At.includes("unavailable")||At.includes("websocket error"))?(console.log("📡 WebSocket connection failed, falling back to polling"),(()=>{ot(),cr(),Te&&window.clearInterval(Te);const Ct=w?3e3:1e4;console.log("📡 Setting up message polling:",{aiModeActive:w,pollInterval:Ct,timestamp:new Date().toISOString()}),Te=window.setInterval(()=>{O.current?console.log("📡 Skipping poll - editing discussion guide"):(console.log("📡 Polling for messages...",new Date().toISOString()),ot(),cr())},Ct)})(),$e=window.setInterval(async()=>{const Ct=H.current,rn=be.current,Lt=await ct();if(H.current=Lt.aiActive,be.current=Lt.sessionStatus,S(Lt.aiActive),me(Lt.sessionStatus),rn&&rn!==Lt.sessionStatus&&await jt(Lt.sessionStatus,rn),Ct!==Lt.aiActive&&Te){window.clearInterval(Te);const si=Lt.aiActive?3e3:1e4;Te=window.setInterval(()=>{O.current||(ot(),cr())},si)}},15e3)):console.log("📡 WebSocket enabled, skipping polling setup"):(console.error("Focus group not found with ID:",t),_(!1),Fe.error("Focus group not found",{description:`Could not find focus group with ID: ${t}`}))})}),()=>{Te&&window.clearInterval(Te),$e&&window.clearInterval($e)}},[t,e,qe,At]);const Os=ie=>{if(!ie||!ie.sections||!Array.isArray(ie.sections))return{content:"Welcome to our focus group session! Let's begin our discussion.",sectionId:"welcome",itemId:"welcome-message"};const le=ie.sections[0];if(!le)return{content:"Welcome to our focus group session! Let's begin our discussion.",sectionId:"welcome",itemId:"welcome-message"};const Te=He=>He.questions&&Array.isArray(He.questions)&&He.questions.length>0?{content:He.questions[0].content,itemId:He.questions[0].id,type:"question"}:He.activities&&Array.isArray(He.activities)&&He.activities.length>0?{content:He.activities[0].content,itemId:He.activities[0].id,type:"activity"}:null;let $e=Te(le);if(!$e&&le.subsections&&Array.isArray(le.subsections)){for(const He of le.subsections)if($e=Te(He),$e)break}return $e?{content:$e.content,sectionId:le.id,itemId:$e.itemId}:{content:`Welcome to our focus group session on "${le.title||"our topic"}". Let's begin our discussion.`,sectionId:le.id,itemId:"section-intro"}},ea=async()=>{var ie,le,Te,$e,He;if(t)try{Fe.info("Starting focus group session...",{description:"The session is now ready for AI moderation."});try{const ft=await er.getModeratorStatus(t),et=(le=(ie=ft==null?void 0:ft.data)==null?void 0:ie.status)==null?void 0:le.moderator_position;et?console.log("📍 Preserving existing moderator position:",et):(await er.setModeratorPosition(t,((He=($e=(Te=u==null?void 0:u.discussionGuide)==null?void 0:Te.sections)==null?void 0:$e[0])==null?void 0:He.id)||"welcome"),console.log("🚀 Moderator position initialized to start of discussion guide (first time)"))}catch(ft){console.warn("Failed to check/initialize moderator position:",ft)}await pt.update(t,{status:"active"});try{const ft=Os(u==null?void 0:u.discussionGuide),et=await pt.sendMessage(t,{senderId:"moderator",text:ft.content,type:"question"});console.log("🚀 Initial moderator message created:",{content:ft.content,sectionId:ft.sectionId,itemId:ft.itemId})}catch(ft){console.warn("Failed to create initial moderator message:",ft)}Fe.success("Focus group session started",{description:"The discussion has begun. Use the control panel below to moderate."})}catch(ft){console.error("Error starting session:",ft),Fe.error("Error starting session",{description:"There was a problem connecting to the server."})}},ta=ie=>{i(le=>le.find($e=>$e.id===ie.id)?(console.log("🔧 [handleNewMessage] Message already exists, skipping:",ie.id),le):(console.log("🔧 [handleNewMessage] Adding new message:",ie.id),[...le,ie]))},yl=async ie=>{const le=[...r],Te=le.findIndex($e=>$e.id===ie);if(Te!==-1){const $e=le[Te],He=!$e.highlighted;if(le[Te]={...$e,highlighted:He},i(le),t)try{!ie.startsWith("local-")&&!ie.startsWith("msg-")?await pt.updateMessageHighlight(t,ie,He):console.log("Skipping database update for local message:",ie)}catch(ft){console.error("Error updating message highlight state:",ft),Fe.error("Failed to save highlight state",{description:"The highlight may not persist if the page is refreshed."})}}},q=ie=>f.find(le=>le.id===ie||le._id===ie),Oe=()=>{const ie=r.map($e=>{var et;let He;return $e.senderId==="moderator"?He="AI Moderator":$e.senderId==="facilitator"?He="Human Facilitator":He=((et=q($e.senderId))==null?void 0:et.name)||"Unknown",`[${$e.timestamp.toLocaleTimeString()}] ${He}: ${$e.text}`}).join(` - -`),le=document.createElement("a"),Te=new Blob([ie],{type:"text/plain"});le.href=URL.createObjectURL(Te),le.download=`focus-group-${t}-transcript.txt`,document.body.appendChild(le),le.click(),document.body.removeChild(le),Fe.success("Transcript downloaded",{description:"The focus group transcript has been saved to your device."})},Ge=(ie,le)=>{const Te=Ct=>{const rn=Ct.match(/^\[([^\]]+)\]:\s*(.*)$/);return rn?rn[2].trim():Ct.trim()},$e=Ct=>Ct.toLowerCase().replace(/[^\w\s]/g," ").replace(/\s+/g," ").trim(),He=(Ct,rn)=>{const Lt=$e(Ct),si=$e(rn);if(Lt===si)return 1;if(Lt.includes(si)||si.includes(Lt))return Math.min(Lt.length,si.length)/Math.max(Lt.length,si.length);const vn=Lt.split(" "),An=si.split(" "),Ug=vn.filter(ak=>An.includes(ak)&&ak.length>2);return vn.length===0||An.length===0?0:Ug.length/Math.max(vn.length,An.length)},ft=typeof ie=="object"&&ie!==null,et=ft?ie.text:Te(ie),St=ft?ie.original:ie;let Ce=null,Qt="";if(le&&(Ce=r.find(Ct=>Ct.id===le),Ce?Qt="direct_message_id_match":console.warn(`Message ID ${le} not found in current messages array`)),Ce||(Ce=r.find(Ct=>Ct.text.includes(St)),Ce&&(Qt="exact_full_match")),Ce||(Ce=r.find(Ct=>Ct.text.includes(et)),Ce&&(Qt="exact_text_match")),Ce||(Ce=r.find(Ct=>et.includes(Ct.text.trim())),Ce&&(Qt="reverse_exact_match")),!Ce){const Ct=et.toLowerCase();Ce=r.find(rn=>rn.text.toLowerCase().includes(Ct)||Ct.includes(rn.text.toLowerCase())),Ce&&(Qt="case_insensitive_match")}if(!Ce){const Ct=r.map(rn=>({message:rn,similarity:He(et,rn.text)})).filter(rn=>rn.similarity>.7).sort((rn,Lt)=>Lt.similarity-rn.similarity);Ct.length>0&&(Ce=Ct[0].message,Qt=`fuzzy_match_${Math.round(Ct[0].similarity*100)}%`)}if(!Ce){const rn=$e(et).split(" ").filter(Lt=>Lt.length>3);rn.length>0&&(Ce=r.find(Lt=>{const si=$e(Lt.text);return rn.every(vn=>si.includes(vn))}),Ce&&(Qt="partial_word_match"))}Ce?(console.log(`Quote match found using strategy: ${Qt}`,{quoteType:ft?"QuoteData":"string",providedMessageId:le,extractedText:et,matchedMessage:Ce.text.substring(0,100),matchedMessageId:Ce.id,originalQuote:St.substring(0,100)}),g("chat"),setTimeout(()=>{const Ct=document.getElementById(`message-${Ce.id}`);Ct&&(P||Ct.scrollIntoView({behavior:"smooth",block:"center"}),Ct.style.backgroundColor="#fbbf24",Ct.style.transition="background-color 0.3s ease",setTimeout(()=>{Ct.style.backgroundColor=""},2e3))},100)):(console.warn("Quote match failed",{quoteType:ft?"QuoteData":"string",providedMessageId:le,originalQuote:St.substring(0,100),extractedText:et.substring(0,100),totalMessages:r.length,messageSample:r.slice(0,3).map(Ct=>({id:Ct.id,text:Ct.text.substring(0,50)}))}),Fe.warning("Message not found",{description:"Could not locate the original message for this quote. The quote may have been paraphrased by the AI."}))},mt=ie=>{l(le=>{const Te=new Set(le.map(He=>He.id)),$e=ie.filter(He=>!Te.has(He.id));return[...le,...$e]})},tt=async ie=>{if(!t)return;const le=c.find(Te=>Te.id===ie);if(le)try{"source"in le&&le.source==="generated"&&await er.deleteKeyTheme(t,ie),l(c.filter(Te=>Te.id!==ie))}catch(Te){console.error("Error deleting theme:",Te),Fe.error("Failed to delete theme",{description:"There was an error removing the theme. Please try again."})}},wt=v.useCallback(async(ie,le)=>{if(t)try{await er.setModeratorPosition(t,ie,le),Fe.success("Moderator position updated",{description:"The moderator has been moved to the selected section."})}catch(Te){console.error("Error setting moderator position:",Te),Fe.error("Failed to update moderator position",{description:"There was an error updating the moderator position."})}},[t]),dn=v.useCallback(async ie=>{if(console.log("💾 handleDiscussionGuideSave called:",{hasId:!!t,isEditingGuideContent:E,timestamp:new Date().toISOString()}),!!t)try{await pt.update(t,{discussionGuide:ie}),E?(M.current&&(M.current={...M.current,discussionGuide:ie}),console.log("⚠️ Skipping focus group state update during editing to preserve focus")):(console.log("🔄 Updating focus group state (not editing)"),d(le=>le?{...le,discussionGuide:ie}:null))}catch(le){throw console.error("Error saving discussion guide:",le),le}},[t,E]),dt=v.useCallback(ie=>{console.log("🔄 handleGuideEditingStateChange called:",{editing:ie,timestamp:new Date().toISOString(),currentIsEditingGuideContent:E}),k(ie),R(ie),!ie&&M.current&&(console.log("📝 Updating focus group state after editing ended"),d(M.current))},[E]),_n=v.useCallback(()=>{j(ie=>!ie)},[]),on=v.useCallback((ie,le,Te,$e,He,ft,et)=>{Z({isOpen:!0,sectionId:ie,itemId:le,content:Te,sectionTitle:$e,itemTitle:He,itemType:ft,metadata:et})},[]),nn=()=>{if(m)return{sectionId:m.current_section_id,sectionTitle:m.current_section,itemId:m.current_item_id,itemTitle:m.current_item}},lr=()=>{if(r.length!==0)return r[r.length-1].id},z=()=>{const ie=lr();if(ie&&r.length>0){const le=r.find(Te=>Te.id===ie);if(le)return le.timestamp}return u!=null&&u.date?new Date(u.date):te||new Date},he=async()=>{if(t){Ue(!0),Be(!1),N(!1),Fe.info("Analyzing discussion for key themes...",{description:"This may take a moment as we process the entire conversation."});try{const ie=await er.generateKeyThemes(t);ie.data&&ie.data.themes?(Be(!0),Fe.success(`Generated ${ie.data.themes.length} key themes`,{description:"New themes have been added to the analysis."}),l(le=>[...le,...ie.data.themes])):(Be(!0),Fe.warning("No new themes were generated",{description:"Try again when the discussion has more content."}))}catch(ie){console.error("Error generating key themes:",ie),N(!0),Fe.error("Failed to generate key themes",{description:"There was an error analyzing the discussion. Please try again."})}}},fe=()=>{Ue(!1),Be(!1),N(!1)},De=()=>{te||pe(new Date),ce(!0)},Nt=ie=>{L(le=>[...le,ie].sort((Te,$e)=>$e.createdAt.getTime()-Te.createdAt.getTime())),window.notesPanelAddNote&&window.notesPanelAddNote(ie)},an=ie=>{const le=r.find(Te=>Te.id===ie);le?(g("chat"),setTimeout(()=>{const Te=document.getElementById(`message-${le.id}`);Te&&(P||Te.scrollIntoView({behavior:"smooth",block:"center"}),Te.style.backgroundColor="#fbbf24",Te.style.transition="background-color 0.3s ease",setTimeout(()=>{Te.style.backgroundColor=""},2e3))},100)):Fe.info("Message not found",{description:"Could not locate the original message for this note."})};v.useEffect(()=>{r.length>0&&!te&&pe(new Date)},[r.length,te]),v.useEffect(()=>{O.current=P,P||cr()},[P]);const Ci=ie=>{Y(le=>le.includes(ie)?le.filter(Te=>Te!==ie):[...le,ie])};return C?a.jsxs("div",{className:"min-h-screen bg-slate-50 pt-20 pb-16 px-4",children:[a.jsx(_a,{}),a.jsxs("div",{className:"max-w-7xl mx-auto text-center py-12",children:[a.jsx("div",{className:"flex justify-center items-center",children:a.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}),a.jsx("p",{className:"mt-4 text-slate-600",children:"Loading focus group..."})]})]}):u?a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(_a,{}),$&&a.jsx("div",{className:`w-full transition-all duration-300 ${st?"bg-green-500":We?"bg-yellow-500":"bg-red-500"}`,children:a.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:a.jsxs("div",{className:"flex items-center justify-between py-2 text-white text-sm font-medium",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx("div",{className:`w-2 h-2 rounded-full ${st?"bg-white animate-pulse":We?"bg-white animate-spin":"bg-white"}`}),a.jsx("span",{children:st?"Real-time updates active - Changes appear instantly":We?"Connecting to real-time updates...":"Real-time updates unavailable - Using periodic refresh"}),At&&a.jsx("span",{className:"text-xs opacity-75 ml-2",title:At,children:"(Connection error)"})]}),a.jsx("button",{onClick:()=>B(!1),className:"ml-4 text-white hover:text-gray-200 transition-colors",title:"Hide status bar","aria-label":"Hide connection status",children:a.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})}),!$&&a.jsx("div",{className:"fixed top-20 right-4 z-40",children:a.jsx("button",{onClick:()=>B(!0),className:`px-3 py-1 rounded-full text-white text-xs font-medium shadow-lg transition-all duration-200 hover:shadow-xl ${st?"bg-green-500 hover:bg-green-600":We?"bg-yellow-500 hover:bg-yellow-600":"bg-red-500 hover:bg-red-600"}`,title:st?"WebSocket connected - Show status bar":We?"WebSocket connecting - Show status bar":"WebSocket disconnected - Show status bar",children:a.jsxs("div",{className:"flex items-center space-x-1",children:[a.jsx("div",{className:`w-2 h-2 rounded-full bg-white ${st?"animate-pulse":""}`}),a.jsx("span",{children:st?"Live":We?"Connecting":"Offline"})]})})}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-4",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(ee,{variant:"ghost",onClick:()=>e("/focus-groups"),className:"mr-2",children:a.jsx(Gp,{className:"h-4 w-4"})}),a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-2xl font-bold text-slate-900",children:u.name}),a.jsx("p",{className:"text-slate-600",children:new Date(u.date).toLocaleString()}),a.jsxs("div",{className:"flex items-center mt-1",children:[a.jsx(va,{className:"h-3 w-3 text-slate-500 mr-1"}),a.jsx(Hn,{variant:"secondary",className:"text-xs",children:u.llm_model==="gpt-4.1"?"GPT-4.1":u.llm_model==="gpt-5"?"GPT-5":"Gemini 2.5 Pro"})]})]})]}),a.jsxs("div",{className:"flex items-center space-x-4 mt-4 sm:mt-0",children:[a.jsxs(ee,{variant:"outline",onClick:()=>x(!b),className:b?"bg-blue-50 text-blue-600":"",children:[a.jsx(U_,{className:"mr-2 h-4 w-4"}),"AI Dashboard"]}),a.jsxs(ee,{variant:"outline",onClick:()=>I(!0),children:[a.jsx(LE,{className:"mr-2 h-4 w-4"}),"AI Model"]}),a.jsxs(ee,{variant:"outline",onClick:Oe,children:[a.jsx(Xc,{className:"mr-2 h-4 w-4"}),"Download Transcript"]})]})]}),nt&&a.jsx("div",{className:"mb-6",children:a.jsx(zT,{isActive:nt,isComplete:at,hasError:Bt,label:"Analyzing discussion for key themes",onComplete:fe,className:"max-w-4xl mx-auto"})}),a.jsx(k$e,{discussionGuide:u.discussionGuide,moderatorStatus:m,onSectionSelect:wt,onSetPosition:on,onSave:dn,focusGroupId:t||"",isOpen:A,onToggle:_n,onEditingChange:dt}),a.jsxs("div",{className:"flex flex-col lg:flex-row gap-6 h-[calc(100vh-12rem)]",children:[a.jsx(dde,{participants:f,selectedParticipantIds:we,onToggleParticipantFilter:Ci}),a.jsx("div",{className:"flex-1 flex flex-col",children:a.jsxs(fl,{defaultValue:"chat",value:p,onValueChange:g,className:"w-full h-full flex flex-col",children:[a.jsxs(Va,{className:"grid grid-cols-4 mb-4",children:[a.jsxs(pn,{value:"chat",className:"flex items-center",children:[a.jsx(jo,{className:"h-4 w-4 mr-2"}),"Discussion"]}),a.jsxs(pn,{value:"themes",className:"flex items-center",children:[a.jsx(du,{className:"h-4 w-4 mr-2"}),"Key Themes"]}),a.jsxs(pn,{value:"notes",className:"flex items-center",children:[a.jsx(Wy,{className:"h-4 w-4 mr-2"}),"Notes"]}),a.jsxs(pn,{value:"analytics",className:"flex items-center",children:[a.jsx(U_,{className:"h-4 w-4 mr-2"}),"Analytics"]})]}),a.jsx(mn,{value:"chat",className:"m-0 flex-1 flex flex-col h-0",children:r.length===0?a.jsxs("div",{className:"flex flex-col items-center justify-center py-12 space-y-4",children:[a.jsx("p",{className:"text-lg text-slate-600",children:"No messages yet. Start the session to begin the discussion."}),a.jsxs(ee,{onClick:ea,size:"lg",className:"flex items-center gap-2",children:[a.jsx(l5,{className:"h-5 w-5"}),"Start Session"]})]}):a.jsx(Ude,{messages:r,modeEvents:s,personas:f,isSpeaking:!1,focusGroupId:t||"",isAiModeActive:w,selectedParticipantIds:we,onToggleHighlight:yl,onAdvanceDiscussion:()=>null,onNewMessage:ta,onStatusChange:Ze,isEditingDiscussionGuide:P})}),a.jsx(mn,{value:"themes",className:"m-0",children:a.jsx(Hde,{themes:c,messages:r,personas:f,focusGroupId:t||"",onThemesGenerated:mt,onThemeDelete:tt,onQuoteClick:Ge,onGenerateKeyThemes:he})}),a.jsx(mn,{value:"notes",className:"m-0",style:{height:"calc(100% - 3.5rem)"},children:a.jsx("div",{className:"h-full",children:a.jsx(O$e,{focusGroupId:t||"",focusGroupName:u==null?void 0:u.name,onNoteClick:an})})}),a.jsx(mn,{value:"analytics",className:"m-0",children:a.jsx(E$e,{messages:r,themes:c,personas:f})})]})})]})]}),r.length>0&&a.jsx("div",{className:"fixed bottom-6 right-6 z-40",children:a.jsx(ee,{onClick:De,className:"rounded-full h-12 w-12 p-0 shadow-lg",title:"Take a quick note",children:a.jsx(Wy,{className:"h-5 w-5"})})}),a.jsx(I$e,{isOpen:F,onClose:()=>ce(!1),focusGroupId:t||"",associatedMessageId:lr(),sectionInfo:nn(),messageTimestamp:z(),onNoteSaved:Nt}),a.jsx(Jl,{open:K.isOpen,onOpenChange:ie=>Z(le=>({...le,isOpen:ie})),children:a.jsxs($c,{children:[a.jsxs(Lc,{children:[a.jsx(Uc,{children:"Set Moderator Position"}),a.jsxs(Zl,{children:['Are you sure you want to set the moderator position to "',K.itemTitle,'" in section "',K.sectionTitle,'"? This will make the moderator ask this question in the chat.']})]}),a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",disabled:K.isLoading,onClick:()=>Z({isOpen:!1}),children:"Cancel"}),a.jsxs(ee,{disabled:K.isLoading,onClick:async()=>{var ie,le,Te,$e,He,ft,et,St,Ce;if(!(!t||!K.sectionId||!K.itemId||!K.content)){Z(Qt=>({...Qt,isLoading:!0}));try{await er.setModeratorPosition(t,K.sectionId,K.itemId);let Qt=[],Ct=!1,rn=K.content;const Lt=(ie=K.metadata)==null?void 0:ie.visual_asset,si=!!(Lt!=null&&Lt.filename),vn=Lt==null?void 0:Lt.filename;if(console.log("🔍 MANUAL POSITION DEBUG:",{itemType:K.itemType,hasImageAttached:si,visualAsset:Lt,assetFilename:vn,content:K.content,sectionTitle:K.sectionTitle,itemTitle:K.itemTitle,contentLength:(le=K.content)==null?void 0:le.length}),si&&K.content&&vn)if(console.log("🔍 VISUAL ASSET DEBUG:",{originalContent:K.content,visualAsset:Lt,displayReference:Lt==null?void 0:Lt.display_reference,filename:vn,contentLength:K.content.length}),vn){Qt=[vn],Ct=!0,console.log("🎨 MANUAL POSITION: Creative review detected, will activate visual context for:",vn);try{console.log("🎨 MANUAL MODE: Requesting AI description for",vn);const An=await pt.describeAsset(t,vn);if(An.data.description){const Ug=(Lt==null?void 0:Lt.display_reference)||"the asset";rn=K.content.replace(Ug,`${Ug} - ${An.data.description}`),console.log("✅ MANUAL MODE: Enhanced question with AI description"),console.log("🔍 Original:",K.content),console.log("🔍 Enhanced:",rn)}}catch(An){console.error("⚠️ MANUAL MODE: Failed to generate AI description:",An),console.error("⚠️ Error response data:",(Te=An.response)==null?void 0:Te.data),console.error("⚠️ Error status:",($e=An.response)==null?void 0:$e.status),console.error("⚠️ Error headers:",(He=An.response)==null?void 0:He.headers),console.error("⚠️ Full axios error:",{message:An.message,code:An.code,status:(ft=An.response)==null?void 0:ft.status,statusText:(et=An.response)==null?void 0:et.statusText,url:(St=An.config)==null?void 0:St.url,method:(Ce=An.config)==null?void 0:Ce.method}),Fe.warning("AI description failed",{description:"Using original question text. Image will still be available to participants."})}}else console.warn("⚠️ MANUAL POSITION: Creative review detected but no asset filename extracted from content");console.log("📤 Sending moderator message to API:",{text:rn,attachedAssets:Qt,activatesVisualContext:Ct});try{const An=await pt.sendMessage(t,{senderId:"moderator",text:rn,type:"question",attached_assets:Qt,activates_visual_context:Ct,visualAsset:si&&Lt?{filename:vn,displayReference:Lt.display_reference}:void 0});console.log("✅ Message API call successful:",An==null?void 0:An.data)}catch(An){console.error("❌ Failed to save message to API:",An),Fe.warning("Message not saved",{description:"Failed to save the moderator message to the server."})}Z({isOpen:!1}),console.log("✅ Set position complete, moderator message added to UI"),Fe.success("Moderator position set",{description:`Position set to "${K.itemTitle}" in "${K.sectionTitle}"`})}catch(Qt){console.error("Error setting moderator position:",Qt),Z(Ct=>({...Ct,isLoading:!1})),Fe.error("Failed to set moderator position",{description:"There was an error setting the moderator position."})}}},className:"flex items-center gap-2",children:[K.isLoading&&a.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-white"}),K.isLoading?"Generating detailed image description...":"Confirm"]})]})]})}),a.jsx(Jl,{open:V,onOpenChange:I,children:a.jsxs($c,{children:[a.jsxs(Lc,{children:[a.jsx(Uc,{children:"AI Model Settings"}),a.jsx(Zl,{children:"Choose which AI model to use for generating responses and discussion guides in this focus group."})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(va,{className:"h-4 w-4 text-slate-500"}),a.jsx("span",{className:"text-sm font-medium",children:"Current Model:"}),a.jsx(Hn,{variant:"secondary",children:(u==null?void 0:u.llm_model)==="gpt-4.1"?"GPT-4.1":(u==null?void 0:u.llm_model)==="gpt-5"?"GPT-5":"Gemini 2.5 Pro"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium",children:"Select AI Model:"}),a.jsxs(Un,{value:D,onValueChange:ie=>{console.log("🔧 Model selection changed:",{from:D,to:ie}),X(ie)},children:[a.jsx(Dn,{className:"mt-1",children:a.jsx(Bn,{placeholder:"Select AI model"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"gemini-2.5-pro",children:"Gemini 2.5 Pro"}),a.jsx(ae,{value:"gpt-4.1",children:"GPT-4.1"}),a.jsx(ae,{value:"gpt-5",children:"GPT-5"})]})]})]}),D==="gpt-5"&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium",children:"Reasoning Effort:"}),a.jsxs(Un,{value:Q,onValueChange:J,children:[a.jsx(Dn,{className:"mt-1",children:a.jsx(Bn,{placeholder:"Select reasoning effort"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"minimal",children:"Minimal - Fast responses"}),a.jsx(ae,{value:"low",children:"Low - Quick thinking"}),a.jsx(ae,{value:"medium",children:"Medium - Balanced (default)"}),a.jsx(ae,{value:"high",children:"High - Deep reasoning"})]})]}),a.jsx("p",{className:"text-xs text-slate-600 mt-1",children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx("p",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how thoroughly GPT-5 thinks and how detailed responses are"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium",children:"Response Verbosity:"}),a.jsxs(Un,{value:ye,onValueChange:U,children:[a.jsx(Dn,{className:"mt-1",children:a.jsx(Bn,{placeholder:"Select verbosity level"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"low",children:"Low - Concise responses"}),a.jsx(ae,{value:"medium",children:"Medium - Balanced length (default)"}),a.jsx(ae,{value:"high",children:"High - Detailed responses"})]})]}),a.jsx("p",{className:"text-xs text-slate-600 mt-1",children:"Controls how detailed and lengthy GPT-5's responses will be"}),a.jsx("p",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how thoroughly GPT-5 thinks and how detailed responses are"})]})]}),a.jsxs("div",{className:"text-xs text-slate-600",children:[a.jsxs("p",{children:[a.jsx("strong",{children:"Gemini 2.5 Pro:"})," Google's advanced model, great for creative and analytical tasks."]}),a.jsxs("p",{children:[a.jsx("strong",{children:"GPT-4.1:"})," OpenAI's latest model, excellent for conversational and reasoning tasks."]}),a.jsxs("p",{children:[a.jsx("strong",{children:"GPT-5:"})," OpenAI's newest model with advanced reasoning and customizable response styles."]})]})]}),a.jsxs(Fc,{children:[a.jsx(ee,{variant:"outline",onClick:()=>I(!1),disabled:ne,children:"Cancel"}),a.jsxs(ee,{onClick:()=>{console.log("🔧 Update button clicked:",{selectedModel:D,selectedReasoningEffort:Q,selectedVerbosity:ye,currentModel:u==null?void 0:u.llm_model,isDisabled:ne||D===(u==null?void 0:u.llm_model)&&(D!=="gpt-5"||Q===(u==null?void 0:u.reasoning_effort)&&ye===(u==null?void 0:u.verbosity))}),gn(D,Q,ye)},disabled:ne||D===(u==null?void 0:u.llm_model)&&(D!=="gpt-5"||Q===((u==null?void 0:u.reasoning_effort)||"medium")&&ye===((u==null?void 0:u.verbosity)||"medium")),children:[ne&&a.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2"}),ne?"Updating...":"Update Model"]})]})]})}),a.jsx(P$e,{focusGroupId:t,personas:f,isVisible:b,onToggle:()=>x(!b)})]}):a.jsxs("div",{className:"min-h-screen bg-slate-50 pt-20 pb-16 px-4",children:[a.jsx(_a,{}),a.jsxs("div",{className:"max-w-7xl mx-auto text-center py-12",children:[a.jsx("h1",{className:"text-2xl font-bold",children:"Focus group not found"}),a.jsx("p",{className:"mt-2 text-slate-600",children:"We couldn't find the focus group you're looking for."}),a.jsxs(ee,{onClick:()=>e("/focus-groups"),className:"mt-4",children:[a.jsx(Gp,{className:"mr-2 h-4 w-4"})," Back to Focus Groups"]})]})]})},OLe=({title:t,description:e})=>a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900",children:t}),a.jsx("p",{className:"text-slate-600 mt-1",children:e})]}),a.jsxs("div",{className:"mt-4 sm:mt-0 flex gap-2",children:[a.jsx(ee,{variant:"outline",children:"Export Data"}),a.jsx(ee,{children:"Generate Report"})]})]}),IC=({title:t,value:e,changePercentage:n,icon:r})=>a.jsx(ut,{className:"p-6 hover:shadow-md transition-shadow",children:a.jsxs("div",{className:"flex justify-between items-start",children:[a.jsxs("div",{children:[a.jsx("p",{className:"text-muted-foreground text-sm",children:t}),a.jsx("h3",{className:"text-2xl font-bold mt-1",children:e}),a.jsxs("p",{className:`${n>=0?"text-green-500":"text-red-500"} text-xs mt-1`,children:[n>=0?"↑":"↓"," ",Math.abs(n),"% from last month"]})]}),a.jsx("div",{className:"bg-primary/10 p-2 rounded-full",children:a.jsx(r,{className:"h-6 w-6 text-primary"})})]})}),ILe=[{name:"Jan",users:20,groups:3,interactions:120},{name:"Feb",users:25,groups:4,interactions:160},{name:"Mar",users:30,groups:5,interactions:220},{name:"Apr",users:40,groups:6,interactions:280},{name:"May",users:45,groups:7,interactions:350},{name:"Jun",users:48,groups:7,interactions:420}],RLe=[{id:"1",title:"User Interface Feedback",description:"Users consistently mentioned difficulty with the navigation menu on mobile devices.",source:"Mobile App Focus Group",date:"2023-06-12",sentiment:"negative"},{id:"2",title:"Feature Adoption",description:'The new search functionality is well-received, with 85% of users rating it as "very useful".',source:"Product Testing Group",date:"2023-06-10",sentiment:"positive"},{id:"3",title:"Pricing Strategy",description:"Price-conscious users expressed willingness to pay up to 20% more for premium features.",source:"Pricing Model Analysis",date:"2023-06-08",sentiment:"positive"},{id:"4",title:"Competitive Analysis",description:"Users who switched from competitor products cited our streamlined onboarding as a key factor.",source:"Customer Journey Mapping",date:"2023-06-05",sentiment:"positive"}],MLe=()=>a.jsxs("div",{className:"space-y-6",children:[a.jsxs(ut,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-4",children:"Research Activity"}),a.jsx("div",{className:"h-64",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(xW,{data:ILe,margin:{top:10,right:30,left:0,bottom:0},children:[a.jsx(ng,{strokeDasharray:"3 3"}),a.jsx(il,{dataKey:"name"}),a.jsx(sl,{}),a.jsx(Zr,{}),a.jsx(ro,{type:"monotone",dataKey:"users",stackId:"1",stroke:"#8884d8",fill:"#8884d8",name:"Synthetic Users"}),a.jsx(ro,{type:"monotone",dataKey:"groups",stackId:"2",stroke:"#82ca9d",fill:"#82ca9d",name:"Focus Groups"}),a.jsx(ro,{type:"monotone",dataKey:"interactions",stackId:"3",stroke:"#ffc658",fill:"#ffc658",name:"Interactions"})]})})})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs(ut,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-4",children:"Recent AI Insights"}),a.jsxs("div",{className:"space-y-4",children:[RLe.slice(0,3).map(t=>a.jsx("div",{className:"border-b pb-4 last:border-b-0 last:pb-0",children:a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:`p-2 rounded-full mr-3 ${t.sentiment==="positive"?"bg-green-100":t.sentiment==="negative"?"bg-red-100":"bg-slate-100"}`,children:a.jsx(lu,{className:`h-4 w-4 ${t.sentiment==="positive"?"text-green-600":t.sentiment==="negative"?"text-red-600":"text-slate-600"}`})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:t.title}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:t.description}),a.jsxs("div",{className:"flex items-center text-xs text-muted-foreground mt-2",children:[a.jsx("span",{children:t.source}),a.jsx("span",{className:"mx-2",children:"•"}),a.jsx("span",{children:t.date})]})]})]})},t.id)),a.jsx(ee,{variant:"ghost",className:"w-full text-sm",size:"sm",children:"View All Insights"})]})]}),a.jsxs(ut,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-4",children:"Upcoming Research Tasks"}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-blue-100 p-2 rounded-full mr-3",children:a.jsx(uv,{className:"h-4 w-4 text-blue-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Website Redesign Feedback"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Focus group scheduled for Jun 20"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-purple-100 p-2 rounded-full mr-3",children:a.jsx(uv,{className:"h-4 w-4 text-purple-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Mobile App User Testing"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"8 participants needed by Jun 25"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-amber-100 p-2 rounded-full mr-3",children:a.jsx(uv,{className:"h-4 w-4 text-amber-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Pricing Strategy Evaluation"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Create discussion guide by Jun 22"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-green-100 p-2 rounded-full mr-3",children:a.jsx(uv,{className:"h-4 w-4 text-green-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Product Onboarding Flow"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Results analysis due Jun 30"})]})]}),a.jsx(ee,{variant:"ghost",className:"w-full text-sm",size:"sm",children:"Manage Research Calendar"})]})]})]})]}),DLe=[{name:"18-24",value:15},{name:"25-34",value:35},{name:"35-44",value:25},{name:"45-54",value:15},{name:"55+",value:10}],$Le=()=>a.jsxs(ut,{className:"p-6",children:[a.jsxs("div",{className:"flex justify-between items-center mb-4",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold",children:"Synthetic Persona Analytics"}),a.jsx(ee,{variant:"outline",size:"sm",children:"View Demographics"})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Persona Demographics"}),a.jsx("div",{className:"h-60",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(tk,{children:[a.jsx(Zr,{}),a.jsx(vo,{data:DLe,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:80,fill:"#FFDEE2",label:!0})]})})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Persona Distribution"}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Age: 25-34"}),a.jsx("span",{children:"35%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-400 rounded-full",style:{width:"35%"}})})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Tech Savvy"}),a.jsx("span",{children:"72%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-300 rounded-full",style:{width:"72%"}})})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Brand Loyal"}),a.jsx("span",{children:"58%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-500 rounded-full",style:{width:"58%"}})})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Price Sensitive"}),a.jsx("span",{children:"67%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-200 rounded-full",style:{width:"67%"}})})]})]})]})]}),a.jsx("div",{className:"flex justify-center mt-6",children:a.jsx(ee,{onClick:()=>window.location.href="/synthetic-users",children:"Manage Synthetic Personas"})})]}),LLe=[{name:"Jan",users:20,groups:3,interactions:120},{name:"Feb",users:25,groups:4,interactions:160},{name:"Mar",users:30,groups:5,interactions:220},{name:"Apr",users:40,groups:6,interactions:280},{name:"May",users:45,groups:7,interactions:350},{name:"Jun",users:48,groups:7,interactions:420}],$$=[{name:"Very Positive",value:25,color:"#4ade80"},{name:"Positive",value:40,color:"#a3e635"},{name:"Neutral",value:20,color:"#93c5fd"},{name:"Negative",value:10,color:"#fb923c"},{name:"Very Negative",value:5,color:"#f87171"}],FLe=[{name:"Navigation",count:42},{name:"Performance",count:28},{name:"UX Design",count:36},{name:"Features",count:22},{name:"Onboarding",count:18}],ULe=()=>{const t=ar();return a.jsxs(ut,{className:"p-6",children:[a.jsxs("div",{className:"flex justify-between items-center mb-4",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold",children:"Focus Group Insights"}),a.jsx(ee,{variant:"outline",size:"sm",onClick:()=>t("/focus-groups"),children:"View All Sessions"})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Session Analytics"}),a.jsx("div",{className:"h-60",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(xW,{data:LLe,margin:{top:10,right:30,left:0,bottom:0},children:[a.jsx(ng,{strokeDasharray:"3 3"}),a.jsx(il,{dataKey:"name"}),a.jsx(sl,{}),a.jsx(Zr,{}),a.jsx(ro,{type:"monotone",dataKey:"interactions",stroke:"#8884d8",fill:"#8884d8",name:"User Interactions"})]})})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Feedback Sentiment"}),a.jsx("div",{className:"h-60",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(tk,{children:[a.jsx(Zr,{}),a.jsx(vo,{data:$$,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:80,label:({name:e,percent:n})=>`${e} ${(n*100).toFixed(0)}%`,children:$$.map((e,n)=>a.jsx(Ig,{fill:e.color},`cell-${n}`))}),a.jsx(ja,{})]})})})]})]}),a.jsxs("div",{className:"mb-6",children:[a.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"Topic Frequency Analysis"}),a.jsx("div",{className:"h-60",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(yW,{data:FLe,margin:{top:5,right:30,left:20,bottom:5},children:[a.jsx(ng,{strokeDasharray:"3 3"}),a.jsx(il,{dataKey:"name"}),a.jsx(sl,{}),a.jsx(Zr,{}),a.jsx(ja,{}),a.jsx(vl,{dataKey:"count",name:"Mentions",fill:"#8884d8"})]})})})]}),a.jsx("div",{className:"flex justify-center",children:a.jsx(ee,{onClick:()=>t("/focus-groups"),children:"Manage Focus Groups"})})]})},BLe=()=>{const[t,e]=v.useState("overview");return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(_a,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsx(OLe,{title:"Dashboard",description:"Monitor and analyze your research insights"}),a.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-8",children:[a.jsx(IC,{title:"Total Synthetic Users",value:48,changePercentage:12,icon:Dr}),a.jsx(IC,{title:"Active Focus Groups",value:7,changePercentage:5,icon:Vo}),a.jsx(IC,{title:"Research Insights",value:124,changePercentage:18,icon:du})]}),a.jsxs(fl,{value:t,onValueChange:e,className:"glass-panel rounded-xl p-6",children:[a.jsxs(Va,{className:"grid w-full grid-cols-3 mb-6",children:[a.jsx(pn,{value:"overview",children:"Overview"}),a.jsx(pn,{value:"users",children:"Synthetic Users"}),a.jsx(pn,{value:"focus-groups",children:"Focus Groups"})]}),a.jsx(mn,{value:"overview",children:a.jsx(MLe,{})}),a.jsx(mn,{value:"users",children:a.jsx($Le,{})}),a.jsx(mn,{value:"focus-groups",children:a.jsx(ULe,{})})]})]})]})},DW=v.forwardRef(({...t},e)=>a.jsx("nav",{ref:e,"aria-label":"breadcrumb",...t}));DW.displayName="Breadcrumb";const $W=v.forwardRef(({className:t,...e},n)=>a.jsx("ol",{ref:n,className:Pe("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",t),...e}));$W.displayName="BreadcrumbList";const py=v.forwardRef(({className:t,...e},n)=>a.jsx("li",{ref:n,className:Pe("inline-flex items-center gap-1.5",t),...e}));py.displayName="BreadcrumbItem";const mj=v.forwardRef(({asChild:t,className:e,...n},r)=>{const i=t?Ho:"a";return a.jsx(i,{ref:r,className:Pe("transition-colors hover:text-foreground",e),...n})});mj.displayName="BreadcrumbLink";const LW=v.forwardRef(({className:t,...e},n)=>a.jsx("span",{ref:n,role:"link","aria-disabled":"true","aria-current":"page",className:Pe("font-normal text-foreground",t),...e}));LW.displayName="BreadcrumbPage";const gj=({children:t,className:e,...n})=>a.jsx("li",{role:"presentation","aria-hidden":"true",className:Pe("[&>svg]:size-3.5",e),...n,children:t??a.jsx(us,{})});gj.displayName="BreadcrumbSeparator";function HLe({persona:t}){const e=t.id==="0",n=t.id==="1";return a.jsxs(ut,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center space-x-4",children:[a.jsx("div",{className:"h-16 w-16 rounded-full bg-muted flex items-center justify-center",children:a.jsx("img",{src:_g(t),alt:t.name,className:"h-16 w-16 rounded-full object-cover"})}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-sf text-xl font-semibold",children:t.name}),a.jsx("p",{className:"text-muted-foreground",children:t.occupation})]})]}),a.jsxs("div",{className:"mt-6 space-y-4",children:[a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Dr,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Demographics"}),a.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[t.age," ",t.gender?a.jsxs(a.Fragment,{children:["• ",t.gender]}):null,t.ethnicity?a.jsxs(a.Fragment,{children:[" • ",t.ethnicity]}):null]}),t.education&&a.jsx("p",{className:"sidebar-sub-item",children:t.education}),t.socialGrade&&a.jsxs("p",{className:"sidebar-sub-item",children:["Social Grade: ",t.socialGrade]}),t.householdIncome&&a.jsxs("p",{className:"sidebar-sub-item",children:["Household Income: ",t.householdIncome]}),t.householdComposition&&a.jsxs("p",{className:"sidebar-sub-item",children:["Household: ",t.householdComposition]})]})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(nZ,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Location"}),a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t.location}),t.livingSituation&&a.jsx("p",{className:"sidebar-sub-item",children:t.livingSituation})]})]}),t.interests&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(H_,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Interests"}),a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t.interests})]})]}),t.mediaConsumption&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(IS,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Media"}),a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t.mediaConsumption})]})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-sm mb-3",children:"Digital Behavior"}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Tech Savviness"}),a.jsxs("span",{children:[t.techSavviness,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-blue-500 rounded-full",style:{width:`${t.techSavviness}%`}})})]}),t.brandLoyalty!==void 0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Brand Loyalty"}),a.jsxs("span",{children:[t.brandLoyalty,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-purple-500 rounded-full",style:{width:`${t.brandLoyalty}%`}})})]}),t.priceConsciousness!==void 0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Price Sensitivity"}),a.jsxs("span",{children:[t.priceConsciousness,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-amber-500 rounded-full",style:{width:`${t.priceConsciousness}%`}})})]}),t.environmentalConcern!==void 0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Environmental Concern"}),a.jsxs("span",{children:[t.environmentalConcern,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-green-500 rounded-full",style:{width:`${t.environmentalConcern}%`}})})]}),t.deviceUsage&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-xs font-medium mt-3",children:"Device Usage"}),a.jsx("p",{className:"sidebar-sub-item text-xs",children:t.deviceUsage})]}),t.shoppingHabits&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-xs font-medium mt-3",children:"Shopping Habits"}),a.jsx("p",{className:"sidebar-sub-item text-xs",children:t.shoppingHabits})]})]})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-sm mb-3",children:"Additional Information"}),a.jsxs("div",{className:"space-y-2",children:[t.brandPreferences&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(H_,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:t.brandPreferences})]}),t.communicationPreferences&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(qp,{className:"sidebar-icon"}),a.jsxs("span",{className:"text-muted-foreground text-sm",children:["Prefers: ",t.communicationPreferences]})]}),t.deviceUsage&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(iZ,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:t.deviceUsage})]}),t.shoppingHabits&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(cZ,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:t.shoppingHabits})]}),t.additionalInformation&&typeof t.additionalInformation=="string"&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(JJ,{className:"sidebar-icon"}),a.jsx("div",{className:"sidebar-sub-item",children:t.additionalInformation.split(` -`).map((r,i)=>a.jsx("div",{className:"mb-1",children:r.trim().startsWith("•")||r.trim().startsWith("-")?r.trim().substring(1).trim():r.trim()},i))})]}),e&&a.jsxs("div",{className:"pt-2 space-y-2",children:[a.jsxs("div",{className:"sidebar-section",children:[a.jsx(YO,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Maintains an extensive network of financial and luxury industry contacts"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Ky,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Owns vacation properties in the Cotswolds and South of France"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(IS,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Collector of rare first-edition books and limited-edition art prints"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(QO,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Significant investment portfolio with focus on sustainable luxury ventures"})]})]}),n&&a.jsxs("div",{className:"pt-2 space-y-2",children:[a.jsxs("div",{className:"sidebar-section",children:[a.jsx(IS,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Active in industry panels, luxury brand collaborations, follows influencers in luxury & design"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Ky,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Modern flat in exclusive Chelsea, accessible to boutique services"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(QO,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Uses premium digital payment & secure banking for HNWIs"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(YO,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Respected network in London's luxury sector; attends exclusive events"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(qp,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Seeks autonomy, bespoke service, and acknowledgment for taste"})]})]})]})]})]})]})}function zLe({persona:t}){var e,n,r,i,s,o,c,l,u;return a.jsxs("div",{className:"space-y-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(Xv,{className:"h-5 w-5 text-primary mr-2"}),a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Goals"})]}),a.jsx("ul",{className:"space-y-2",children:(e=t.goals)==null?void 0:e.map((d,f)=>a.jsxs("li",{className:"flex items-start",children:[a.jsx("div",{className:"h-5 w-5 rounded-full bg-primary/10 flex items-center justify-center mt-0.5 mr-3",children:a.jsx("span",{className:"text-xs text-primary font-medium",children:f+1})}),a.jsx("p",{className:"text-sm",children:d})]},f))})]})}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(d5,{className:"h-5 w-5 text-amber-500 mr-2"}),a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Frustrations"})]}),a.jsx("ul",{className:"space-y-2",children:(n=t.frustrations)==null?void 0:n.map((d,f)=>a.jsxs("li",{className:"text-sm flex items-start",children:[a.jsx("span",{className:"text-amber-500 mr-2",children:"•"}),a.jsx("span",{children:d})]},f))})]})}),a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(ha,{className:"h-5 w-5 text-green-500 mr-2"}),a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Motivations"})]}),a.jsx("ul",{className:"space-y-2",children:(r=t.motivations)==null?void 0:r.map((d,f)=>a.jsxs("li",{className:"text-sm flex items-start",children:[a.jsx("span",{className:"text-green-500 mr-2",children:"•"}),a.jsx("span",{children:d})]},f))})]})})]}),a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:"Think, Feel, Do"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(lu,{className:"h-5 w-5 text-blue-500 mr-2"}),a.jsx("h4",{className:"font-medium text-sm",children:"Thinks"})]}),a.jsx("ul",{className:"space-y-2",children:(s=(i=t.thinkFeelDo)==null?void 0:i.thinks)==null?void 0:s.map((d,f)=>a.jsxs("li",{className:"text-sm bg-blue-50 p-2 rounded-md",children:['"',d,'"']},f))})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(H_,{className:"h-5 w-5 text-red-500 mr-2"}),a.jsx("h4",{className:"font-medium text-sm",children:"Feels"})]}),a.jsx("ul",{className:"space-y-2",children:(c=(o=t.thinkFeelDo)==null?void 0:o.feels)==null?void 0:c.map((d,f)=>a.jsxs("li",{className:"text-sm bg-red-50 p-2 rounded-md",children:['"',d,'"']},f))})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(ha,{className:"h-5 w-5 text-green-500 mr-2"}),a.jsx("h4",{className:"font-medium text-sm",children:"Does"})]}),a.jsx("ul",{className:"space-y-2",children:(u=(l=t.thinkFeelDo)==null?void 0:l.does)==null?void 0:u.map((d,f)=>a.jsxs("li",{className:"text-sm bg-green-50 p-2 rounded-md",children:['"',d,'"']},f))})]})]})]})})]})}function VLe({persona:t}){var n,r,i,s,o;const e=[{trait:"Openness",value:((n=t.oceanTraits)==null?void 0:n.openness)||50},{trait:"Conscientiousness",value:((r=t.oceanTraits)==null?void 0:r.conscientiousness)||50},{trait:"Extraversion",value:((i=t.oceanTraits)==null?void 0:i.extraversion)||50},{trait:"Agreeableness",value:((s=t.oceanTraits)==null?void 0:s.agreeableness)||50},{trait:"Neuroticism",value:((o=t.oceanTraits)==null?void 0:o.neuroticism)||50}];return a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:"OCEAN Personality Traits"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx("div",{className:"h-80",children:a.jsx(Hc,{width:"100%",height:"100%",children:a.jsxs(j$e,{outerRadius:90,data:e,children:[a.jsx(pK,{}),a.jsx(lh,{dataKey:"trait"}),a.jsx(ch,{domain:[0,100]}),a.jsx(Fg,{name:"Personality",dataKey:"value",stroke:"#8884d8",fill:"#8884d8",fillOpacity:.5})]})})}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Openness to Experience"}),a.jsxs("span",{className:"font-medium",children:[e[0].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-purple-500 rounded-full",style:{width:`${e[0].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[0].value>75?"Highly creative and curious":e[0].value>50?"Somewhat imaginative and open to new ideas":"Practical and prefers routine"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Conscientiousness"}),a.jsxs("span",{className:"font-medium",children:[e[1].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-blue-500 rounded-full",style:{width:`${e[1].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[1].value>75?"Highly organized and responsible":e[1].value>50?"Generally reliable and hardworking":"Spontaneous and flexible"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Extraversion"}),a.jsxs("span",{className:"font-medium",children:[e[2].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-green-500 rounded-full",style:{width:`${e[2].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[2].value>75?"Highly sociable and outgoing":e[2].value>50?"Moderately social and talkative":"Reserved and reflective"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Agreeableness"}),a.jsxs("span",{className:"font-medium",children:[e[3].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-amber-500 rounded-full",style:{width:`${e[3].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[3].value>75?"Highly cooperative and compassionate":e[3].value>50?"Generally kind and helpful":"Competitive and challenging"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Neuroticism"}),a.jsxs("span",{className:"font-medium",children:[e[4].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-red-500 rounded-full",style:{width:`${e[4].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[4].value>75?"Highly sensitive and prone to stress":e[4].value>50?"Moderately reactive to challenges":"Emotionally stable and resilient"})]})]})]})]})})}function GLe({persona:t}){var r;const e=(i,s)=>{const o=[a.jsx(eZ,{className:"sidebar-icon"},"grid"),a.jsx(lZ,{className:"sidebar-icon"},"smartphone"),a.jsx(ZJ,{className:"sidebar-icon"},"laptop"),a.jsx(XJ,{className:"sidebar-icon"},"grid2x2")];return o[s%o.length]},n=()=>t.scenarioType?t.scenarioType:"Life Scenarios";return a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:n()}),a.jsx("div",{className:"space-y-4",children:(r=t.scenarios)==null?void 0:r.map((i,s)=>a.jsx("div",{className:"bg-slate-50 p-4 rounded-lg border",children:a.jsxs("div",{className:"sidebar-section",children:[e(i,s),a.jsxs("div",{children:[a.jsxs("h4",{className:"font-medium text-sm mb-2",children:["Scenario ",s+1]}),a.jsx("p",{className:"text-sm",children:i})]})]})},s))})]})})}function KLe(){const t=ar();return a.jsx("div",{className:"min-h-screen bg-slate-50 flex items-center justify-center",children:a.jsxs(ut,{className:"w-96 text-center p-6",children:[a.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Persona Not Found"}),a.jsx("p",{className:"text-muted-foreground mb-6",children:"The persona you're looking for couldn't be found."}),a.jsx(ee,{onClick:()=>t("/synthetic-users"),children:"Return to Personas"})]})})}function zt({className:t,...e}){return a.jsx("div",{className:Pe("animate-pulse rounded-md bg-muted",t),...e})}function WLe(){return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(_a,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex items-center mb-6 relative",children:[a.jsx(zt,{className:"absolute left-0 top-0 h-10 w-20"}),a.jsx(zt,{className:"h-8 w-48 mx-auto"}),a.jsx(zt,{className:"absolute right-0 top-0 h-10 w-32"})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 mt-10",children:[a.jsx("div",{className:"lg:col-span-1",children:a.jsxs(ut,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center space-x-4",children:[a.jsx(zt,{className:"h-16 w-16 rounded-full"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(zt,{className:"h-6 w-32 mb-2"}),a.jsx(zt,{className:"h-4 w-24"})]})]}),a.jsxs("div",{className:"mt-6 space-y-4",children:[a.jsxs("div",{className:"flex items-start",children:[a.jsx(zt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(zt,{className:"h-4 w-20 mb-2"}),a.jsx(zt,{className:"h-3 w-40 mb-1"}),a.jsx(zt,{className:"h-3 w-36"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx(zt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(zt,{className:"h-4 w-16 mb-2"}),a.jsx(zt,{className:"h-3 w-32"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx(zt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(zt,{className:"h-4 w-16 mb-2"}),a.jsx(zt,{className:"h-3 w-full"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx(zt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(zt,{className:"h-4 w-12 mb-2"}),a.jsx(zt,{className:"h-3 w-full"})]})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx(zt,{className:"h-4 w-32 mb-3"}),a.jsx("div",{className:"space-y-3",children:[...Array(4)].map((t,e)=>a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx(zt,{className:"h-3 w-24"}),a.jsx(zt,{className:"h-3 w-8"})]}),a.jsx(zt,{className:"h-1.5 w-full rounded-full"})]},e))})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx(zt,{className:"h-4 w-36 mb-3"}),a.jsx("div",{className:"space-y-2",children:[...Array(3)].map((t,e)=>a.jsxs("div",{className:"flex items-center",children:[a.jsx(zt,{className:"h-4 w-4 mr-2"}),a.jsx(zt,{className:"h-3 w-40"})]},e))})]})]})]})}),a.jsxs("div",{className:"lg:col-span-2",children:[a.jsxs("div",{className:"grid w-full grid-cols-3 gap-2 mb-6",children:[a.jsx(zt,{className:"h-10 w-full"}),a.jsx(zt,{className:"h-10 w-full"}),a.jsx(zt,{className:"h-10 w-full"})]}),a.jsx(ut,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsx(zt,{className:"h-6 w-48"}),a.jsx(zt,{className:"h-4 w-full"}),a.jsx(zt,{className:"h-4 w-full"}),a.jsx(zt,{className:"h-4 w-3/4"}),a.jsxs("div",{className:"mt-8 space-y-4",children:[a.jsx(zt,{className:"h-6 w-32"}),a.jsx(zt,{className:"h-4 w-full"}),a.jsx(zt,{className:"h-4 w-full"}),a.jsx(zt,{className:"h-4 w-2/3"})]}),a.jsxs("div",{className:"mt-8 space-y-4",children:[a.jsx(zt,{className:"h-6 w-40"}),a.jsx(zt,{className:"h-4 w-full"}),a.jsx(zt,{className:"h-4 w-full"}),a.jsx(zt,{className:"h-4 w-5/6"})]})]})})]})]})]})]})}function qLe({message:t,onLoginSuccess:e,onCancel:n}){const{login:r}=Qo(),i=ar(),[s,o]=v.useState("user"),[c,l]=v.useState("pass"),[u,d]=v.useState(!1),f=async()=>{if(!s||!c){se.error("Please enter username and password");return}d(!0);try{await r(s,c),se.success("Login successful"),e&&e()}catch(p){console.error("Login error:",p),se.error("Login failed",{description:"Please check your credentials and try again"})}finally{d(!1)}},h=()=>{n?n():i("/synthetic-users")};return a.jsxs(ut,{className:"max-w-md mx-auto shadow-lg",children:[a.jsxs(ji,{children:[a.jsx(qi,{children:"Login Required"}),a.jsx(aT,{children:t||"You need to log in to save personas to the database"})]}),a.jsxs(Rt,{className:"space-y-4",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsx(hs,{htmlFor:"username",children:"Username"}),a.jsx(Wt,{id:"username",placeholder:"Username",value:s,onChange:p=>o(p.target.value),disabled:u})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx(hs,{htmlFor:"password",children:"Password"}),a.jsx(Wt,{id:"password",type:"password",placeholder:"Password",value:c,onChange:p=>l(p.target.value),disabled:u})]}),a.jsx("div",{className:"text-sm text-muted-foreground",children:"Default credentials: user / pass"})]}),a.jsxs(cT,{className:"flex justify-between",children:[a.jsx(ee,{variant:"outline",onClick:h,disabled:u,children:"Cancel"}),a.jsx(ee,{onClick:f,disabled:u,children:u?a.jsxs(a.Fragment,{children:[a.jsx(Js,{className:"h-4 w-4 mr-2 animate-spin"}),"Logging in..."]}):"Login"})]})]})}function YLe({persona:t,onSave:e,onCancel:n}){var j,P,k,O,E,R,M,G,L,V,I,D,X,Q,J,ye;const r={...t,education:t.education||"",interests:t.interests||"",brandLoyalty:t.brandLoyalty||0,priceConsciousness:t.priceConsciousness||0,environmentalConcern:t.environmentalConcern||0,hasPurchasingPower:t.hasPurchasingPower||!1,hasChildren:t.hasChildren||!1,goals:t.goals||[],frustrations:t.frustrations||[],motivations:t.motivations||[],scenarios:t.scenarios||[],oceanTraits:t.oceanTraits||{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},thinkFeelDo:t.thinkFeelDo||{thinks:[],feels:[],does:[]}},[i,s]=v.useState(r),[o,c]=v.useState(!1),[l,u]=v.useState(!1),[d,f]=v.useState(null);v.useState(!1);const{isAuthenticated:h,token:p}=Qo();v.useEffect(()=>{(async()=>{l&&h&&p&&(u(!1),d&&await A())})()},[h,p,l]);const g=(U,ne)=>{s(ue=>({...ue,[U]:ne}))},m=(U,ne)=>{s(ue=>({...ue,oceanTraits:{...ue.oceanTraits,[U]:ne}}))},y=U=>{s(ne=>({...ne,[U]:[...ne[U]||[],""]}))},b=(U,ne,ue)=>{s(F=>{const ce=[...F[U]||[]];return ce[ne]=ue,{...F,[U]:ce}})},x=(U,ne)=>{s(ue=>{const F=[...ue[U]||[]];return F.splice(ne,1),{...ue,[U]:F}})},w=(U,ne,ue)=>{s(F=>{const ce={...F.thinkFeelDo},te=[...ce[U]||[]];return te[ne]=ue,ce[U]=te,{...F,thinkFeelDo:ce}})},S=U=>{s(ne=>{var F;const ue={...ne.thinkFeelDo,[U]:[...((F=ne.thinkFeelDo)==null?void 0:F[U])||[],""]};return{...ne,thinkFeelDo:ue}})},C=(U,ne)=>{s(ue=>{const F={...ue.thinkFeelDo},ce=[...F[U]||[]];return ce.splice(ne,1),F[U]=ce,{...ue,thinkFeelDo:F}})},_=()=>{d&&(se.error("Login canceled - Persona changes not saved"),u(!1),f(null),n())},A=async()=>{if(d){c(!0);try{const U={...d};delete U._id,delete U.isDbPersona;const ne=await Rr.create(U),ue={...d,id:ne.data._id||ne.data.id,_id:ne.data._id||ne.data.id,isDbPersona:!0};se.success("Persona saved to database successfully"),u(!1),f(null),e(ue)}catch(U){console.error("Error saving after login:",U),se.error("Failed to save to database after login"),u(!1),f(null)}finally{c(!1)}}};return l?a.jsxs("div",{className:"max-w-5xl mx-auto bg-background p-6",children:[a.jsx("div",{className:"flex justify-between items-center mb-6",children:a.jsx("h2",{className:"font-sf text-2xl font-bold",children:"Authentication Required"})}),a.jsx("p",{className:"mb-6 text-muted-foreground",children:"Login is required to save personas to the database. You can either:"}),a.jsxs("ul",{className:"list-disc ml-6 mt-2 mb-6",children:[a.jsx("li",{children:"Log in to save this persona to the database"}),a.jsx("li",{children:"Cancel to discard your changes"})]}),a.jsx(qLe,{message:"Login is required to save your persona to the database",onLoginSuccess:A,onCancel:_})]}):a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(ee,{variant:"ghost",onClick:n,className:"mr-2",children:a.jsx(Gp,{className:"h-5 w-5"})}),a.jsx("h2",{className:"font-sf text-2xl font-bold",children:"Edit Persona"})]}),a.jsxs(ee,{onClick:async()=>{c(!0);try{const U=i._id||i.id,ne={...i};ne._id&&delete ne._id,delete ne.isDbPersona;let ue;if(U&&typeof U=="string"&&U.startsWith("local-")){console.log("Creating new persona instead of updating local ID"),ue=await Rr.create(ne),se.success("Persona saved to database");const F={...i,id:ue.data._id||ue.data.id,_id:ue.data._id||ue.data.id,isDbPersona:!0};e(F)}else if(U){ue=await Rr.update(U,ne),se.success("Persona updated successfully");const F={...i,isDbPersona:!0};e(F)}else{ue=await Rr.create(ne);const F={...i,id:ue.data._id||ue.data.id,_id:ue.data._id||ue.data.id,isDbPersona:!0};se.success("Persona created successfully"),e(F)}}catch(U){console.error("Error saving persona:",U),U.response&&U.response.status===401?h&&p?(console.log("Auth error despite having token - token likely invalid"),se.error("Authentication error - saving locally instead"),e(i)):(f(i),u(!0)):(se.error("Failed to save persona"),e(i))}finally{c(!1)}},disabled:o,children:[o?a.jsx(Js,{className:"h-4 w-4 mr-2 animate-spin"}):a.jsx(DE,{className:"h-4 w-4 mr-2"}),o?"Saving...":"Save Changes"]})]}),a.jsxs(fl,{defaultValue:"basic",children:[a.jsxs(Va,{className:"grid w-full grid-cols-6",children:[a.jsx(pn,{value:"basic",children:"Basic"}),a.jsx(pn,{value:"cooper",children:"Cooper"}),a.jsx(pn,{value:"personality",children:"Personality"}),a.jsx(pn,{value:"demographics",children:"Demographics"}),a.jsx(pn,{value:"lifestyle",children:"Lifestyle"}),a.jsx(pn,{value:"extended",children:"Extended"})]}),a.jsx(mn,{value:"basic",className:"mt-6",children:a.jsx(ut,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Name"}),a.jsx(Wt,{value:i.name||"",onChange:U=>g("name",U.target.value)})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Age Range"}),a.jsxs(Un,{value:i.age||"",onValueChange:U=>g("age",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select age range"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"18-24",children:"18-24"}),a.jsx(ae,{value:"25-34",children:"25-34"}),a.jsx(ae,{value:"35-44",children:"35-44"}),a.jsx(ae,{value:"45-54",children:"45-54"}),a.jsx(ae,{value:"55-64",children:"55-64"}),a.jsx(ae,{value:"65+",children:"65+"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Gender"}),a.jsxs(Un,{value:i.gender||"",onValueChange:U=>g("gender",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select gender"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Male",children:"Male"}),a.jsx(ae,{value:"Female",children:"Female"}),a.jsx(ae,{value:"Non-binary",children:"Non-binary"}),a.jsx(ae,{value:"Other",children:"Other"})]})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Occupation"}),a.jsx(Wt,{value:i.occupation||"",onChange:U=>g("occupation",U.target.value)})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Education"}),a.jsxs(Un,{value:i.education||"",onValueChange:U=>g("education",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select education level"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"High School",children:"High School"}),a.jsx(ae,{value:"Some College",children:"Some College"}),a.jsx(ae,{value:"Associate's Degree",children:"Associate's Degree"}),a.jsx(ae,{value:"Bachelor's Degree",children:"Bachelor's Degree"}),a.jsx(ae,{value:"Master's Degree",children:"Master's Degree"}),a.jsx(ae,{value:"PhD",children:"PhD"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Location"}),a.jsx(Wt,{value:i.location||"",onChange:U=>g("location",U.target.value)})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Ethnicity (Optional)"}),a.jsxs(Un,{value:i.ethnicity||"",onValueChange:U=>g("ethnicity",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select ethnicity"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"white",children:"White"}),a.jsx(ae,{value:"black",children:"Black"}),a.jsx(ae,{value:"asian",children:"Asian"}),a.jsx(ae,{value:"hispanic",children:"Hispanic/Latino"}),a.jsx(ae,{value:"native-american",children:"Native American"}),a.jsx(ae,{value:"middle-eastern",children:"Middle Eastern"}),a.jsx(ae,{value:"mixed",children:"Mixed"}),a.jsx(ae,{value:"other",children:"Other"}),a.jsx(ae,{value:"prefer-not-to-say",children:"Prefer not to say"})]})]})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Personality"}),a.jsx(ht,{value:i.personality||"",onChange:U=>g("personality",U.target.value),rows:3})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Interests"}),a.jsx(ht,{value:i.interests||"",onChange:U=>g("interests",U.target.value),rows:3,placeholder:"Tech, travel, cooking, etc."})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Tech Savviness"}),a.jsxs("span",{className:"text-sm",children:[i.techSavviness,"%"]})]}),a.jsx(wr,{value:[i.techSavviness],onValueChange:U=>g("techSavviness",U[0]),max:100,step:1})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Brand Loyalty"}),a.jsxs("span",{className:"text-sm",children:[i.brandLoyalty||0,"%"]})]}),a.jsx(wr,{value:[i.brandLoyalty||0],onValueChange:U=>g("brandLoyalty",U[0]),max:100,step:1})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Price Consciousness"}),a.jsxs("span",{className:"text-sm",children:[i.priceConsciousness||0,"%"]})]}),a.jsx(wr,{value:[i.priceConsciousness||0],onValueChange:U=>g("priceConsciousness",U[0]),max:100,step:1})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Environmental Concern"}),a.jsxs("span",{className:"text-sm",children:[i.environmentalConcern||0,"%"]})]}),a.jsx(wr,{value:[i.environmentalConcern||0],onValueChange:U=>g("environmentalConcern",U[0]),max:100,step:1})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-4 pt-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("label",{className:"text-sm font-medium",children:"Purchasing Power"}),a.jsx(ym,{checked:i.hasPurchasingPower||!1,onCheckedChange:U=>g("hasPurchasingPower",U)})]}),a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("label",{className:"text-sm font-medium",children:"Has Children"}),a.jsx(ym,{checked:i.hasChildren||!1,onCheckedChange:U=>g("hasChildren",U)})]})]})]})]})})})}),a.jsxs(mn,{value:"cooper",className:"mt-6 space-y-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"mb-4",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Goals"}),(i.goals||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U||"",onChange:ue=>b("goals",ne,ue.target.value)}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>x("goals",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>y("goals"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Goal"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Frustrations"}),(i.frustrations||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U||"",onChange:ue=>b("frustrations",ne,ue.target.value)}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>x("frustrations",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>y("frustrations"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Frustration"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Motivations"}),(i.motivations||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U||"",onChange:ue=>b("motivations",ne,ue.target.value)}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>x("motivations",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>y("motivations"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Motivation"]})]})]})}),a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Think, Feel, Do"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Thinks"}),(((j=i.thinkFeelDo)==null?void 0:j.thinks)||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U||"",onChange:ue=>w("thinks",ne,ue.target.value)}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>C("thinks",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>S("thinks"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Thought"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Feels"}),(((P=i.thinkFeelDo)==null?void 0:P.feels)||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U||"",onChange:ue=>w("feels",ne,ue.target.value)}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>C("feels",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>S("feels"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Feeling"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Does"}),(((k=i.thinkFeelDo)==null?void 0:k.does)||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U||"",onChange:ue=>w("does",ne,ue.target.value)}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>C("does",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>S("does"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Action"]})]})]})]})}),a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("div",{className:"space-y-4 mb-6",children:a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Scenario Section Title"}),a.jsx(Wt,{value:i.scenarioType||"",onChange:U=>g("scenarioType",U.target.value),placeholder:"Life Scenarios"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:'Custom title for the scenarios section (e.g., "Customer Journey", "Use Cases")'})]})}),a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Usage Scenarios"}),(i.scenarios||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-start gap-2 mb-2",children:[a.jsx(ht,{value:U||"",onChange:ue=>b("scenarios",ne,ue.target.value),rows:2}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>x("scenarios",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>y("scenarios"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Scenario"]})]})})]}),a.jsx(mn,{value:"personality",className:"mt-6",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"OCEAN Personality Traits"}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Openness to Experience"}),a.jsxs("span",{className:"text-sm",children:[((O=i.oceanTraits)==null?void 0:O.openness)||50,"%"]})]}),a.jsx(wr,{value:[((E=i.oceanTraits)==null?void 0:E.openness)||50],onValueChange:U=>m("openness",U[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Creativity, curiosity, and openness to new ideas"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Conscientiousness"}),a.jsxs("span",{className:"text-sm",children:[((R=i.oceanTraits)==null?void 0:R.conscientiousness)||50,"%"]})]}),a.jsx(wr,{value:[((M=i.oceanTraits)==null?void 0:M.conscientiousness)||50],onValueChange:U=>m("conscientiousness",U[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Organization, responsibility, and self-discipline"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Extraversion"}),a.jsxs("span",{className:"text-sm",children:[((G=i.oceanTraits)==null?void 0:G.extraversion)||50,"%"]})]}),a.jsx(wr,{value:[((L=i.oceanTraits)==null?void 0:L.extraversion)||50],onValueChange:U=>m("extraversion",U[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Sociability, assertiveness, and talkativeness"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Agreeableness"}),a.jsxs("span",{className:"text-sm",children:[((V=i.oceanTraits)==null?void 0:V.agreeableness)||50,"%"]})]}),a.jsx(wr,{value:[((I=i.oceanTraits)==null?void 0:I.agreeableness)||50],onValueChange:U=>m("agreeableness",U[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Compassion, cooperation, and concern for others"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Neuroticism"}),a.jsxs("span",{className:"text-sm",children:[((D=i.oceanTraits)==null?void 0:D.neuroticism)||50,"%"]})]}),a.jsx(wr,{value:[((X=i.oceanTraits)==null?void 0:X.neuroticism)||50],onValueChange:U=>m("neuroticism",U[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Emotional reactivity, anxiety, and sensitivity to stress"})]})]})]})})}),a.jsx(mn,{value:"demographics",className:"mt-6",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Demographic Information"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Social Grade"}),a.jsxs(Un,{value:i.socialGrade||"",onValueChange:U=>g("socialGrade",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select social grade"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"A",children:"A - Higher managerial"}),a.jsx(ae,{value:"B",children:"B - Intermediate managerial"}),a.jsx(ae,{value:"C1",children:"C1 - Supervisory or clerical"}),a.jsx(ae,{value:"C2",children:"C2 - Skilled manual workers"}),a.jsx(ae,{value:"D",children:"D - Semi and unskilled manual workers"}),a.jsx(ae,{value:"E",children:"E - State pensioners, unemployed"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Household Income"}),a.jsxs(Un,{value:i.householdIncome||"",onValueChange:U=>g("householdIncome",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select income range"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Under $25k",children:"Under $25,000"}),a.jsx(ae,{value:"$25k-$50k",children:"$25,000 - $50,000"}),a.jsx(ae,{value:"$50k-$75k",children:"$50,000 - $75,000"}),a.jsx(ae,{value:"$75k-$100k",children:"$75,000 - $100,000"}),a.jsx(ae,{value:"$100k-$150k",children:"$100,000 - $150,000"}),a.jsx(ae,{value:"$150k-$250k",children:"$150,000 - $250,000"}),a.jsx(ae,{value:"Over $250k",children:"Over $250,000"}),a.jsx(ae,{value:"Prefer not to say",children:"Prefer not to say"})]})]})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Household Composition"}),a.jsxs(Un,{value:i.householdComposition||"",onValueChange:U=>g("householdComposition",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select household type"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Single person",children:"Single person"}),a.jsx(ae,{value:"Couple without children",children:"Couple without children"}),a.jsx(ae,{value:"Couple with children",children:"Couple with children"}),a.jsx(ae,{value:"Single parent",children:"Single parent"}),a.jsx(ae,{value:"Multi-generational",children:"Multi-generational"}),a.jsx(ae,{value:"Shared housing",children:"Shared housing"}),a.jsx(ae,{value:"Other",children:"Other"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Living Situation"}),a.jsxs(Un,{value:i.livingSituation||"",onValueChange:U=>g("livingSituation",U),children:[a.jsx(Dn,{children:a.jsx(Bn,{placeholder:"Select living situation"})}),a.jsxs($n,{children:[a.jsx(ae,{value:"Own home",children:"Own home"}),a.jsx(ae,{value:"Rent apartment",children:"Rent apartment"}),a.jsx(ae,{value:"Rent house",children:"Rent house"}),a.jsx(ae,{value:"Live with family",children:"Live with family"}),a.jsx(ae,{value:"Student housing",children:"Student housing"}),a.jsx(ae,{value:"Assisted living",children:"Assisted living"}),a.jsx(ae,{value:"Other",children:"Other"})]})]})]})]})]})]})})}),a.jsx(mn,{value:"lifestyle",className:"mt-6",children:a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Lifestyle & Behavior"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Media Consumption"}),a.jsx(ht,{value:i.mediaConsumption||"",onChange:U=>g("mediaConsumption",U.target.value),rows:3,placeholder:"TV shows, podcasts, news sources, social media platforms"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Describe media consumption habits and preferences"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Device Usage"}),a.jsx(ht,{value:i.deviceUsage||"",onChange:U=>g("deviceUsage",U.target.value),rows:3,placeholder:"Smartphone, laptop, tablet, smart TV, gaming console"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Primary devices and usage patterns"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Shopping Habits"}),a.jsx(ht,{value:i.shoppingHabits||"",onChange:U=>g("shoppingHabits",U.target.value),rows:3,placeholder:"Online vs in-store, frequency, preferred retailers"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Shopping behavior and preferences"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Brand Preferences"}),a.jsx(ht,{value:i.brandPreferences||"",onChange:U=>g("brandPreferences",U.target.value),rows:3,placeholder:"Favorite brands, brand values alignment"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Preferred brands and reasoning"})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Communication Preferences"}),a.jsx(ht,{value:i.communicationPreferences||"",onChange:U=>g("communicationPreferences",U.target.value),rows:3,placeholder:"Email, phone, text, video calls, in-person"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Preferred communication methods and channels"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Payment Methods"}),a.jsx(ht,{value:i.paymentMethods||"",onChange:U=>g("paymentMethods",U.target.value),rows:3,placeholder:"Credit cards, digital wallets, cash, BNPL"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Preferred payment methods and financial tools"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Purchase Behavior"}),a.jsx(ht,{value:i.purchaseBehaviour||"",onChange:U=>g("purchaseBehaviour",U.target.value),rows:3,placeholder:"Research habits, decision factors, impulse vs planned buying"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"How they approach making purchase decisions"})]})]})]})]})})}),a.jsxs(mn,{value:"extended",className:"mt-6 space-y-6",children:[a.jsx(ut,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Extended Profile"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Core Values"}),a.jsx(ht,{value:i.coreValues||"",onChange:U=>g("coreValues",U.target.value),rows:3,placeholder:"Key principles and values that guide decisions"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Lifestyle Choices"}),a.jsx(ht,{value:i.lifestyleChoices||"",onChange:U=>g("lifestyleChoices",U.target.value),rows:3,placeholder:"Health, fitness, diet, work-life balance preferences"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Social Activities"}),a.jsx(ht,{value:i.socialActivities||"",onChange:U=>g("socialActivities",U.target.value),rows:3,placeholder:"Social hobbies, community involvement, networking"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Category Knowledge"}),a.jsx(ht,{value:i.categoryKnowledge||"",onChange:U=>g("categoryKnowledge",U.target.value),rows:3,placeholder:"Expertise in specific product/service categories"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Decision Influences"}),a.jsx(ht,{value:i.decisionInfluences||"",onChange:U=>g("decisionInfluences",U.target.value),rows:3,placeholder:"What factors most influence their decisions"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Pain Points"}),a.jsx(ht,{value:i.painPoints||"",onChange:U=>g("painPoints",U.target.value),rows:3,placeholder:"Common challenges and friction points"})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Journey Context"}),a.jsx(ht,{value:i.journeyContext||"",onChange:U=>g("journeyContext",U.target.value),rows:3,placeholder:"Current life stage and contextual factors"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Key Touchpoints"}),a.jsx(ht,{value:i.keyTouchpoints||"",onChange:U=>g("keyTouchpoints",U.target.value),rows:3,placeholder:"Important interaction points and channels"})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("h4",{className:"font-medium text-sm",children:"Self-Determination Needs"}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Autonomy"}),a.jsx(ht,{value:((Q=i.selfDeterminationNeeds)==null?void 0:Q.autonomy)||"",onChange:U=>g("selfDeterminationNeeds",{...i.selfDeterminationNeeds,autonomy:U.target.value}),rows:2,placeholder:"Need for independence and self-direction"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Competence"}),a.jsx(ht,{value:((J=i.selfDeterminationNeeds)==null?void 0:J.competence)||"",onChange:U=>g("selfDeterminationNeeds",{...i.selfDeterminationNeeds,competence:U.target.value}),rows:2,placeholder:"Need to feel capable and effective"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Relatedness"}),a.jsx(ht,{value:((ye=i.selfDeterminationNeeds)==null?void 0:ye.relatedness)||"",onChange:U=>g("selfDeterminationNeeds",{...i.selfDeterminationNeeds,relatedness:U.target.value}),rows:2,placeholder:"Need for connection and belonging"})]})]})]})]})]})}),a.jsx(ut,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Fears & Concerns"}),(i.fears||[]).map((U,ne)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Wt,{value:U,onChange:ue=>b("fears",ne,ue.target.value),placeholder:"Enter a fear or concern"}),a.jsx(ee,{variant:"ghost",size:"icon",onClick:()=>x("fears",ne),children:a.jsx(qn,{className:"h-4 w-4 text-muted-foreground"})})]},ne)),a.jsxs(ee,{variant:"outline",size:"sm",onClick:()=>y("fears"),className:"mt-2",children:[a.jsx(Br,{className:"h-4 w-4 mr-2"}),"Add Fear/Concern"]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Personal Narrative"}),a.jsx(ht,{value:i.narrative||"",onChange:U=>g("narrative",U.target.value),rows:4,placeholder:"Personal story, background, key life experiences"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"A brief narrative that captures their personal story"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Additional Information"}),a.jsx(ht,{value:i.additionalInformation||"",onChange:U=>g("additionalInformation",U.target.value),rows:4,placeholder:"Any other relevant details or context"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Additional context or details not covered elsewhere"})]})]})})})]})]})]})}function QLe(){const{id:t}=OE(),e=Ui(),n=ar(),{navigationState:r,clearNavigationState:i}=xg(),[s,o]=v.useState(void 0),[c,l]=v.useState(!1),[u,d]=v.useState(!1),[f,h]=v.useState(!0);return v.useEffect(()=>{if(!t){h(!1);return}let m=!0;const b=new URLSearchParams(e.search).get("fromReview")==="true";return l(b),h(!0),(async()=>{try{const w=t.startsWith("local-")?t.substring(6):t,S=await Rr.getById(w);if(S&&S.data){const C=S.data;if(m){console.log("Found persona in database:",C),o({...C,id:C.id||C._id,isDbPersona:!0}),h(!1);return}}console.error("Could not find persona with id:",t),m&&(o(void 0),h(!1),se.error("Persona not found"))}catch(w){console.error("Error fetching persona:",w),m&&(o(void 0),h(!1),se.error("Failed to load persona details"))}})(),()=>{m=!1}},[t,e.search]),{currentPersona:s,isEditing:u,isFromReview:c,isLoading:f,setIsEditing:d,handleGoBack:()=>{r.previousRoute&&r.previousRoute.startsWith("/focus-groups/")&&r.focusGroupId?(n(`/focus-groups/${r.focusGroupId}`),i()):r.previousRoute==="/focus-groups"&&r.focusGroupTab?(r.isNewFocusGroup?n(`/focus-groups?mode=create&tab=${r.focusGroupTab}`):r.focusGroupId?n(`/focus-groups?mode=edit&id=${r.focusGroupId}&tab=${r.focusGroupTab}`):n("/focus-groups?mode=create&tab=participants"),i()):n(c?"/synthetic-users?mode=create&tab=ai&step=review":"/synthetic-users")},handleSaveEdit:async m=>{try{d(!1);const y=m.isDbPersona||t&&t.length===24&&/^[0-9a-f]{24}$/i.test(t),b={...m};if(b._id&&delete b._id,delete b.isDbPersona,y&&t&&t.length===24&&/^[0-9a-f]{24}$/i.test(t)){const x=await Rr.update(t,b);console.log("Updated persona in database:",x);const w={...m,isDbPersona:!0};o(w),se.success("Persona updated in database successfully")}else{const x=await Rr.create(b);console.log("Created new persona in database:",x.data);const w={...m,id:x.data._id||x.data.id,_id:x.data._id||x.data.id,isDbPersona:!0};o(w),se.success("Persona saved to database successfully")}}catch(y){return console.error("Error saving persona:",y),y.response&&y.response.status===401?se.error("Authentication error - Please log in to save personas"):y.response&&y.response.status===404?se.error("API endpoint not found - Database service may be unavailable"):se.error("Failed to save persona to database: "+(y.message||"Unknown error")),!1}return!0}}}function L$(){var g;const{currentPersona:t,isEditing:e,isFromReview:n,isLoading:r,setIsEditing:i,handleGoBack:s,handleSaveEdit:o}=QLe(),{navigationState:c}=xg(),[l,u]=v.useState(""),[d,f]=v.useState(!1);v.useEffect(()=>{var m;c.focusGroupId&&((m=c.previousRoute)!=null&&m.startsWith("/focus-groups/"))&&(async()=>{var b;try{const x=await pt.getById(c.focusGroupId);(b=x==null?void 0:x.data)!=null&&b.name&&u(x.data.name)}catch(x){console.error("Error fetching focus group name:",x)}})()},[c.focusGroupId,c.previousRoute]);const h=((g=c.previousRoute)==null?void 0:g.startsWith("/focus-groups/"))&&c.focusGroupId&&Object.keys(c).length>0,p=async()=>{var m;if(t){f(!0);try{Fe.info("Generating persona profile...",{description:"Using GPT-4.1 to create a beautifully formatted markdown profile"});const y=t._id||t.id;console.log(`🔽 Frontend: Exporting profile for persona ${t.name} (ID: ${y})`);const b=await Rr.exportProfile(y,{llm_model:"gpt-4.1",temperature:.3}),{markdown_content:x,persona_name:w,model_used:S,warning:C}=b.data;if(x){const _=new Date().toISOString().split("T")[0],j=`${w.replace(/[^a-zA-Z0-9\-\s]/g,"").replace(/\s+/g,"-").toLowerCase()}-profile-${_}.md`,P=document.createElement("a"),k=new Blob([x],{type:"text/markdown"});if(P.href=URL.createObjectURL(k),P.download=j,document.body.appendChild(P),P.click(),document.body.removeChild(P),C)Fe.success("Profile downloaded with fallback formatting",{description:`${w} profile saved as ${j}`});else{const O=S==="gpt-4.1"?"GPT-4.1":S;Fe.success("Profile downloaded successfully",{description:`${w} profile processed with ${O} and saved as ${j}`})}}else throw new Error("No markdown content received")}catch(y){console.error("Error exporting persona profile:",y),y.response?Fe.error("Failed to export profile",{description:((m=y.response.data)==null?void 0:m.error)||"Server error occurred"}):y.request?Fe.error("Network error",{description:"Unable to connect to the server"}):Fe.error("Export failed",{description:y.message||"An unexpected error occurred"})}finally{f(!1)}}};return r?a.jsx(WLe,{}):t?a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(_a,{}),a.jsx("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:e?a.jsx(YLe,{persona:t,onSave:o,onCancel:()=>i(!1)}):a.jsxs(a.Fragment,{children:[h&&a.jsx("div",{className:"mb-4",children:a.jsx(DW,{children:a.jsxs($W,{children:[a.jsx(py,{children:a.jsxs(mj,{href:"/focus-groups",className:"flex items-center",children:[a.jsx(Ky,{className:"h-4 w-4 mr-1"}),"Focus Groups"]})}),a.jsx(gj,{}),a.jsx(py,{children:a.jsxs(mj,{href:`/focus-groups/${c.focusGroupId}`,className:"flex items-center",children:[a.jsx(Dr,{className:"h-4 w-4 mr-1"}),l||"Focus Group Session"]})}),a.jsx(gj,{}),a.jsx(py,{children:a.jsxs(LW,{className:"flex items-center",children:[a.jsx(qp,{className:"h-4 w-4 mr-1"}),(t==null?void 0:t.name)||"Participant"]})})]})})}),a.jsxs("div",{className:"flex items-center mb-6 relative",children:[a.jsx(ee,{variant:"ghost",onClick:s,className:"absolute left-0 top-0 flex items-center",children:a.jsx(Gp,{className:"h-5 w-5"})}),a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900 mx-auto",children:"Persona Profile"}),a.jsxs("div",{className:"absolute right-0 top-0 flex items-center gap-3",children:[a.jsxs(ee,{variant:"outline",onClick:p,disabled:d,className:"hover-transition",children:[a.jsx(Xc,{className:"h-4 w-4 mr-2"}),d?"Generating...":"Download Profile"]}),a.jsxs(ee,{onClick:()=>i(!0),children:[a.jsx(dZ,{className:"h-4 w-4 mr-2"}),"Edit Persona"]})]})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 mt-10",children:[a.jsx("div",{className:"lg:col-span-1",children:a.jsx(HLe,{persona:t})}),a.jsx("div",{className:"lg:col-span-2",children:a.jsxs(fl,{defaultValue:"cooper-profile",children:[a.jsxs(Va,{className:"grid w-full grid-cols-3",children:[a.jsx(pn,{value:"cooper-profile",children:"Cooper Profile"}),a.jsx(pn,{value:"personality",children:"Personality"}),a.jsx(pn,{value:"scenarios",children:"Scenarios"})]}),a.jsx(mn,{value:"cooper-profile",className:"mt-6",children:a.jsx(zLe,{persona:t})}),a.jsx(mn,{value:"personality",className:"mt-6",children:a.jsx(VLe,{persona:t})}),a.jsx(mn,{value:"scenarios",className:"mt-6",children:a.jsx(GLe,{persona:t})})]})})]})]})})]}):a.jsx(KLe,{})}const XLe=Ie.object({username:Ie.string().min(3,"Username must be at least 3 characters"),password:Ie.string().min(4,"Password must be at least 4 characters")});function JLe(){var h;const t=ar(),e=Ui(),{login:n,loginWithMicrosoft:r,isAuthenticated:i,isMsalLoading:s}=Qo(),[o,c]=v.useState(!1),l=((h=e.state)==null?void 0:h.from)||"/";console.log("Login page - destination path:",l),v.useEffect(()=>{i&&(console.log("User already authenticated, redirecting from login page"),t("/",{replace:!0}))},[i,t]);const u=V0({resolver:G0(XLe),defaultValues:{username:"",password:""}});async function d(p){c(!0);try{await n(p.username,p.password)?(console.log("Login successful, received token, navigating to:",l),t(l,{replace:!0})):(console.error("Login succeeded but no token received"),c(!1))}catch(g){console.error("Login error in form handler:",g),c(!1)}}async function f(){try{await r(),console.log("Microsoft login successful, navigating to:",l),t(l,{replace:!0})}catch(p){console.error("Microsoft login error in form handler:",p)}}return a.jsx("div",{className:"flex min-h-screen items-center justify-center bg-gradient-to-br from-gray-100 to-gray-200 dark:from-gray-900 dark:to-gray-800 px-4",children:a.jsxs(ut,{className:"w-full max-w-md",children:[a.jsxs(ji,{className:"space-y-1",children:[a.jsx(qi,{className:"text-2xl font-bold text-center",children:"Sign In"}),a.jsx(aT,{className:"text-center",children:"Enter your credentials to access your account"})]}),a.jsxs(Rt,{children:[a.jsx("div",{className:"mb-6",children:a.jsx(ee,{type:"button",variant:"outline",className:"w-full bg-[#0078d4] hover:bg-[#106ebe] text-white border-[#0078d4] hover:border-[#106ebe]",onClick:f,disabled:o||s,children:s?a.jsxs(a.Fragment,{children:[a.jsx(Js,{className:"mr-2 h-4 w-4 animate-spin"}),"Signing in with Microsoft..."]}):a.jsxs(a.Fragment,{children:[a.jsxs("svg",{className:"mr-2 h-4 w-4",viewBox:"0 0 21 21",fill:"currentColor",children:[a.jsx("path",{d:"M10 0H0v10h10V0z"}),a.jsx("path",{d:"M21 0H11v10h10V0z"}),a.jsx("path",{d:"M10 11H0v10h10V11z"}),a.jsx("path",{d:"M21 11H11v10h10V11z"})]}),"Sign in with Microsoft"]})})}),a.jsxs("div",{className:"relative mb-6",children:[a.jsx("div",{className:"absolute inset-0 flex items-center",children:a.jsx("div",{className:"w-full border-t border-gray-200"})}),a.jsx("div",{className:"relative flex justify-center text-sm",children:a.jsx("span",{className:"bg-white px-2 text-gray-500 dark:bg-gray-800 dark:text-gray-400",children:"Or continue with username"})})]}),a.jsx(W0,{...u,children:a.jsxs("form",{onSubmit:u.handleSubmit(d),className:"space-y-4",children:[a.jsx(_t,{control:u.control,name:"username",render:({field:p})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Username"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"Enter your username",...p,disabled:o,autoComplete:"username"})}),a.jsx(xt,{})]})}),a.jsx(_t,{control:u.control,name:"password",render:({field:p})=>a.jsxs(gt,{children:[a.jsx(vt,{children:"Password"}),a.jsx(yt,{children:a.jsx(Wt,{placeholder:"Enter your password",type:"password",...p,disabled:o,autoComplete:"current-password"})}),a.jsx(xt,{})]})}),a.jsx(ee,{type:"submit",className:"w-full",disabled:o||s,children:o?"Signing in...":"Sign In"})]})})]}),a.jsxs(cT,{className:"flex flex-col space-y-2",children:[a.jsx("div",{className:"text-sm text-center text-gray-500 mb-2",children:"Default account: user / pass"}),!o&&!s&&a.jsxs("div",{className:"flex flex-col items-center justify-center gap-2",children:[a.jsx(ee,{variant:"outline",onClick:()=>t("/",{replace:!0}),className:"mt-2",children:"Return to Home"}),a.jsx(ee,{variant:"link",onClick:()=>{localStorage.setItem("offline_mode","true");const p={username:"guest",email:"guest@example.com",role:"user"};localStorage.setItem("auth_token","offline-mode-token"),localStorage.setItem("user",JSON.stringify(p)),Fe.success("Offline mode activated",{description:"Using demo account with limited functionality"}),t("/",{replace:!0})},className:"text-sm text-gray-500",children:"Use offline mode"})]})]})]})})}function Ku({children:t}){const{isAuthenticated:e,isLoading:n}=Qo(),r=Ui();return console.log("ProtectedRoute check:",{isAuthenticated:e,isLoading:n,path:r.pathname}),n?a.jsx("div",{className:"flex items-center justify-center min-h-screen",children:a.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-primary"})}):e?(console.log("User is authenticated, showing protected content"),a.jsx(a.Fragment,{children:t})):(console.log("Not authenticated, redirecting to login"),a.jsx(a5,{to:"/login",state:{from:r.pathname},replace:!0}))}const ZLe=v.createContext({});let F$=!1;function eFe({children:t}){const{token:e}=Qo(),n=()=>{const i=e||localStorage.getItem("auth_token");return console.log("🔧 [GPT-5 Context] Getting token:",i?"Found":"Missing"),i||""};v.useEffect(()=>(F$||(console.log("🔧 [GPT-5 Context] Initializing singleton socket"),RW(n),F$=!0),console.log("🔧 [GPT-5 Context] Connecting socket"),MW(),()=>{}),[e]);const r={};return a.jsx(ZLe.Provider,{value:r,children:t})}const FW=new YN(Qie);FW.initialize().catch(t=>{console.error("MSAL initialization error:",t)});function tFe({children:t}){return a.jsx(qie,{instance:FW,children:t})}const nFe=new MX,rFe=()=>a.jsx($X,{client:nFe,children:a.jsx(IJ,{basename:"/semblance",children:a.jsx(tFe,{children:a.jsx(Jie,{children:a.jsx(eFe,{children:a.jsx(nse,{children:a.jsxs(fX,{children:[a.jsx(U9,{}),a.jsxs(AJ,{children:[a.jsx(Ms,{path:"/",element:a.jsx(ese,{})}),a.jsx(Ms,{path:"/login",element:a.jsx(JLe,{})}),a.jsx(Ms,{path:"/synthetic-users",element:a.jsx(Ku,{children:a.jsx(sde,{})})}),a.jsx(Ms,{path:"/synthetic-users/:id",element:a.jsx(Ku,{children:a.jsx(L$,{})})}),a.jsx(Ms,{path:"/personas/:id",element:a.jsx(Ku,{children:a.jsx(L$,{})})}),a.jsx(Ms,{path:"/focus-groups",element:a.jsx(Ku,{children:a.jsx(ude,{})})}),a.jsx(Ms,{path:"/focus-groups/:id",element:a.jsx(Ku,{children:a.jsx(kLe,{})})}),a.jsx(Ms,{path:"/dashboard",element:a.jsx(Ku,{children:a.jsx(BLe,{})})}),a.jsx(Ms,{path:"/old-path",element:a.jsx(a5,{to:"/",replace:!0})}),a.jsx(Ms,{path:"*",element:a.jsx(tse,{})})]})]})})})})})})});c4(document.getElementById("root")).render(a.jsx(rFe,{})); diff --git a/dist/assets/index-NobeZ-BW.js b/dist/assets/index-NobeZ-BW.js new file mode 100644 index 00000000..1aa3b48c --- /dev/null +++ b/dist/assets/index-NobeZ-BW.js @@ -0,0 +1,729 @@ +var gO=t=>{throw TypeError(t)};var HS=(t,e,n)=>e.has(t)||gO("Cannot "+n);var _e=(t,e,n)=>(HS(t,e,"read from private field"),n?n.call(t):e.get(t)),mn=(t,e,n)=>e.has(t)?gO("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),qt=(t,e,n,r)=>(HS(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),Qr=(t,e,n)=>(HS(t,e,"access private method"),n);var fv=(t,e,n,r)=>({set _(i){qt(t,e,i,n)},get _(){return _e(t,e,r)}});function P7(t,e){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var hv=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function hn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var gF={exports:{}},k0={},vF={exports:{}},nn={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Tg=Symbol.for("react.element"),O7=Symbol.for("react.portal"),I7=Symbol.for("react.fragment"),R7=Symbol.for("react.strict_mode"),M7=Symbol.for("react.profiler"),D7=Symbol.for("react.provider"),$7=Symbol.for("react.context"),L7=Symbol.for("react.forward_ref"),F7=Symbol.for("react.suspense"),B7=Symbol.for("react.memo"),U7=Symbol.for("react.lazy"),vO=Symbol.iterator;function z7(t){return t===null||typeof t!="object"?null:(t=vO&&t[vO]||t["@@iterator"],typeof t=="function"?t:null)}var yF={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},xF=Object.assign,bF={};function Ff(t,e,n){this.props=t,this.context=e,this.refs=bF,this.updater=n||yF}Ff.prototype.isReactComponent={};Ff.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};Ff.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function wF(){}wF.prototype=Ff.prototype;function gE(t,e,n){this.props=t,this.context=e,this.refs=bF,this.updater=n||yF}var vE=gE.prototype=new wF;vE.constructor=gE;xF(vE,Ff.prototype);vE.isPureReactComponent=!0;var yO=Array.isArray,SF=Object.prototype.hasOwnProperty,yE={current:null},CF={key:!0,ref:!0,__self:!0,__source:!0};function _F(t,e,n){var r,i={},o=null,s=null;if(e!=null)for(r in e.ref!==void 0&&(s=e.ref),e.key!==void 0&&(o=""+e.key),e)SF.call(e,r)&&!CF.hasOwnProperty(r)&&(i[r]=e[r]);var c=arguments.length-2;if(c===1)i.children=n;else if(1>>1,te=M[q];if(0>>1;qi(ce,Q))fei(U,ce)?(M[q]=U,M[fe]=Q,q=fe):(M[q]=ce,M[B]=Q,q=B);else if(fei(U,Q))M[q]=U,M[fe]=Q,q=fe;else break e}}return $}function i(M,$){var Q=M.sortIndex-$.sortIndex;return Q!==0?Q:M.id-$.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;t.unstable_now=function(){return o.now()}}else{var s=Date,c=s.now();t.unstable_now=function(){return s.now()-c}}var l=[],u=[],d=1,f=null,h=3,p=!1,v=!1,m=!1,y=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,x=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(M){for(var $=n(u);$!==null;){if($.callback===null)r(u);else if($.startTime<=M)r(u),$.sortIndex=$.expirationTime,e(l,$);else break;$=n(u)}}function S(M){if(m=!1,w(M),!v)if(n(l)!==null)v=!0,L(C);else{var $=n(u);$!==null&&z(S,$.startTime-M)}}function C(M,$){v=!1,m&&(m=!1,b(j),j=-1),p=!0;var Q=h;try{for(w($),f=n(l);f!==null&&(!(f.expirationTime>$)||M&&!O());){var q=f.callback;if(typeof q=="function"){f.callback=null,h=f.priorityLevel;var te=q(f.expirationTime<=$);$=t.unstable_now(),typeof te=="function"?f.callback=te:f===n(l)&&r(l),w($)}else r(l);f=n(l)}if(f!==null)var xe=!0;else{var B=n(u);B!==null&&z(S,B.startTime-$),xe=!1}return xe}finally{f=null,h=Q,p=!1}}var _=!1,A=null,j=-1,N=5,k=-1;function O(){return!(t.unstable_now()-kM||125q?(M.sortIndex=Q,e(u,M),n(l)===null&&M===n(u)&&(m?(b(j),j=-1):m=!0,z(S,Q-q))):(M.sortIndex=te,e(l,M),v||p||(v=!0,L(C))),M},t.unstable_shouldYield=O,t.unstable_wrapCallback=function(M){var $=h;return function(){var Q=h;h=$;try{return M.apply(this,arguments)}finally{h=Q}}}})(kF);TF.exports=kF;var Z7=TF.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var e9=g,oo=Z7;function Oe(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),E_=Object.prototype.hasOwnProperty,t9=/^[: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]*$/,bO={},wO={};function n9(t){return E_.call(wO,t)?!0:E_.call(bO,t)?!1:t9.test(t)?wO[t]=!0:(bO[t]=!0,!1)}function r9(t,e,n,r){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function i9(t,e,n,r){if(e===null||typeof e>"u"||r9(t,e,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function Ci(t,e,n,r,i,o,s){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=o,this.removeEmptyString=s}var Wr={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){Wr[t]=new Ci(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];Wr[e]=new Ci(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){Wr[t]=new Ci(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){Wr[t]=new Ci(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){Wr[t]=new Ci(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){Wr[t]=new Ci(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){Wr[t]=new Ci(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){Wr[t]=new Ci(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){Wr[t]=new Ci(t,5,!1,t.toLowerCase(),null,!1,!1)});var bE=/[\-:]([a-z])/g;function wE(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(bE,wE);Wr[e]=new Ci(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(bE,wE);Wr[e]=new Ci(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(bE,wE);Wr[e]=new Ci(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){Wr[t]=new Ci(t,1,!1,t.toLowerCase(),null,!1,!1)});Wr.xlinkHref=new Ci("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){Wr[t]=new Ci(t,1,!1,t.toLowerCase(),null,!0,!0)});function SE(t,e,n,r){var i=Wr.hasOwnProperty(e)?Wr[e]:null;(i!==null?i.type!==0:r||!(2c||i[s]!==o[c]){var l=` +`+i[s].replace(" at new "," at ");return t.displayName&&l.includes("")&&(l=l.replace("",t.displayName)),l}while(1<=s&&0<=c);break}}}finally{KS=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?Zh(t):""}function o9(t){switch(t.tag){case 5:return Zh(t.type);case 16:return Zh("Lazy");case 13:return Zh("Suspense");case 19:return Zh("SuspenseList");case 0:case 2:case 15:return t=WS(t.type,!1),t;case 11:return t=WS(t.type.render,!1),t;case 1:return t=WS(t.type,!0),t;default:return""}}function P_(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case od:return"Fragment";case id:return"Portal";case N_:return"Profiler";case CE:return"StrictMode";case T_:return"Suspense";case k_:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case IF:return(t.displayName||"Context")+".Consumer";case OF:return(t._context.displayName||"Context")+".Provider";case _E:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case AE:return e=t.displayName||null,e!==null?e:P_(t.type)||"Memo";case dc:e=t._payload,t=t._init;try{return P_(t(e))}catch{}}return null}function s9(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return P_(e);case 8:return e===CE?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Zc(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function MF(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function a9(t){var e=MF(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),r=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return i.call(this)},set:function(s){r=""+s,o.call(this,s)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function gv(t){t._valueTracker||(t._valueTracker=a9(t))}function DF(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),r="";return t&&(r=MF(t)?t.checked?"true":"false":t.value),t=r,t!==n?(e.setValue(t),!0):!1}function qy(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function O_(t,e){var n=e.checked;return Jn({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function CO(t,e){var n=e.defaultValue==null?"":e.defaultValue,r=e.checked!=null?e.checked:e.defaultChecked;n=Zc(e.value!=null?e.value:n),t._wrapperState={initialChecked:r,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function $F(t,e){e=e.checked,e!=null&&SE(t,"checked",e,!1)}function I_(t,e){$F(t,e);var n=Zc(e.value),r=e.type;if(n!=null)r==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(r==="submit"||r==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?R_(t,e.type,n):e.hasOwnProperty("defaultValue")&&R_(t,e.type,Zc(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function _O(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var r=e.type;if(!(r!=="submit"&&r!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function R_(t,e,n){(e!=="number"||qy(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var ep=Array.isArray;function wd(t,e,n,r){if(t=t.options,e){e={};for(var i=0;i"+e.valueOf().toString()+"",e=vv.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function zp(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var hp={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},c9=["Webkit","ms","Moz","O"];Object.keys(hp).forEach(function(t){c9.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),hp[e]=hp[t]})});function UF(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||hp.hasOwnProperty(t)&&hp[t]?(""+e).trim():e+"px"}function zF(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=UF(n,e[n],r);n==="float"&&(n="cssFloat"),r?t.setProperty(n,i):t[n]=i}}var l9=Jn({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function $_(t,e){if(e){if(l9[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(Oe(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(Oe(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(Oe(61))}if(e.style!=null&&typeof e.style!="object")throw Error(Oe(62))}}function L_(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){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 F_=null;function jE(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var B_=null,Sd=null,Cd=null;function EO(t){if(t=Og(t)){if(typeof B_!="function")throw Error(Oe(280));var e=t.stateNode;e&&(e=M0(e),B_(t.stateNode,t.type,e))}}function HF(t){Sd?Cd?Cd.push(t):Cd=[t]:Sd=t}function GF(){if(Sd){var t=Sd,e=Cd;if(Cd=Sd=null,EO(t),e)for(t=0;t>>=0,t===0?32:31-(b9(t)/w9|0)|0}var yv=64,xv=4194304;function tp(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function Jy(t,e){var n=t.pendingLanes;if(n===0)return 0;var r=0,i=t.suspendedLanes,o=t.pingedLanes,s=n&268435455;if(s!==0){var c=s&~i;c!==0?r=tp(c):(o&=s,o!==0&&(r=tp(o)))}else s=n&~i,s!==0?r=tp(s):o!==0&&(r=tp(o));if(r===0)return 0;if(e!==0&&e!==r&&!(e&i)&&(i=r&-r,o=e&-e,i>=o||i===16&&(o&4194240)!==0))return e;if(r&4&&(r|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=r;0n;n++)e.push(t);return e}function kg(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-rs(e),t[e]=n}function A9(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var r=t.eventTimes;for(t=t.expirationTimes;0=mp),DO=" ",$O=!1;function u4(t,e){switch(t){case"keyup":return Z9.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function d4(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var sd=!1;function tY(t,e){switch(t){case"compositionend":return d4(e);case"keypress":return e.which!==32?null:($O=!0,DO);case"textInput":return t=e.data,t===DO&&$O?null:t;default:return null}}function nY(t,e){if(sd)return t==="compositionend"||!RE&&u4(t,e)?(t=c4(),yy=PE=Ec=null,sd=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=UO(n)}}function m4(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?m4(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function g4(){for(var t=window,e=qy();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=qy(t.document)}return e}function ME(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function dY(t){var e=g4(),n=t.focusedElem,r=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&m4(n.ownerDocument.documentElement,n)){if(r!==null&&ME(n)){if(e=r.start,t=r.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!t.extend&&o>r&&(i=r,r=o,o=i),i=zO(n,o);var s=zO(n,r);i&&s&&(t.rangeCount!==1||t.anchorNode!==i.node||t.anchorOffset!==i.offset||t.focusNode!==s.node||t.focusOffset!==s.offset)&&(e=e.createRange(),e.setStart(i.node,i.offset),t.removeAllRanges(),o>r?(t.addRange(e),t.extend(s.node,s.offset)):(e.setEnd(s.node,s.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,ad=null,K_=null,vp=null,W_=!1;function HO(t,e,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;W_||ad==null||ad!==qy(r)||(r=ad,"selectionStart"in r&&ME(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),vp&&qp(vp,r)||(vp=r,r=tx(K_,"onSelect"),0ud||(t.current=Z_[ud],Z_[ud]=null,ud--)}function In(t,e){ud++,Z_[ud]=t.current,t.current=e}var el={},si=ml(el),Oi=ml(!1),lu=el;function Xd(t,e){var n=t.type.contextTypes;if(!n)return el;var r=t.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===e)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=e[o];return r&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=i),i}function Ii(t){return t=t.childContextTypes,t!=null}function rx(){Un(Oi),Un(si)}function QO(t,e,n){if(si.current!==el)throw Error(Oe(168));In(si,e),In(Oi,n)}function A4(t,e,n){var r=t.stateNode;if(e=e.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in e))throw Error(Oe(108,s9(t)||"Unknown",i));return Jn({},n,r)}function ix(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||el,lu=si.current,In(si,t),In(Oi,Oi.current),!0}function XO(t,e,n){var r=t.stateNode;if(!r)throw Error(Oe(169));n?(t=A4(t,e,lu),r.__reactInternalMemoizedMergedChildContext=t,Un(Oi),Un(si),In(si,t)):Un(Oi),In(Oi,n)}var ya=null,D0=!1,aC=!1;function j4(t){ya===null?ya=[t]:ya.push(t)}function CY(t){D0=!0,j4(t)}function gl(){if(!aC&&ya!==null){aC=!0;var t=0,e=bn;try{var n=ya;for(bn=1;t>=s,i-=s,wa=1<<32-rs(e)+i|n<j?(N=A,A=null):N=A.sibling;var k=h(b,A,w[j],S);if(k===null){A===null&&(A=N);break}t&&A&&k.alternate===null&&e(b,A),x=o(k,x,j),_===null?C=k:_.sibling=k,_=k,A=N}if(j===w.length)return n(b,A),Vn&&Pl(b,j),C;if(A===null){for(;jj?(N=A,A=null):N=A.sibling;var O=h(b,A,k.value,S);if(O===null){A===null&&(A=N);break}t&&A&&O.alternate===null&&e(b,A),x=o(O,x,j),_===null?C=O:_.sibling=O,_=O,A=N}if(k.done)return n(b,A),Vn&&Pl(b,j),C;if(A===null){for(;!k.done;j++,k=w.next())k=f(b,k.value,S),k!==null&&(x=o(k,x,j),_===null?C=k:_.sibling=k,_=k);return Vn&&Pl(b,j),C}for(A=r(b,A);!k.done;j++,k=w.next())k=p(A,b,j,k.value,S),k!==null&&(t&&k.alternate!==null&&A.delete(k.key===null?j:k.key),x=o(k,x,j),_===null?C=k:_.sibling=k,_=k);return t&&A.forEach(function(E){return e(b,E)}),Vn&&Pl(b,j),C}function y(b,x,w,S){if(typeof w=="object"&&w!==null&&w.type===od&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case mv:e:{for(var C=w.key,_=x;_!==null;){if(_.key===C){if(C=w.type,C===od){if(_.tag===7){n(b,_.sibling),x=i(_,w.props.children),x.return=b,b=x;break e}}else if(_.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===dc&&eI(C)===_.type){n(b,_.sibling),x=i(_,w.props),x.ref=Oh(b,_,w),x.return=b,b=x;break e}n(b,_);break}else e(b,_);_=_.sibling}w.type===od?(x=nu(w.props.children,b.mode,S,w.key),x.return=b,b=x):(S=jy(w.type,w.key,w.props,null,b.mode,S),S.ref=Oh(b,x,w),S.return=b,b=S)}return s(b);case id:e:{for(_=w.key;x!==null;){if(x.key===_)if(x.tag===4&&x.stateNode.containerInfo===w.containerInfo&&x.stateNode.implementation===w.implementation){n(b,x.sibling),x=i(x,w.children||[]),x.return=b,b=x;break e}else{n(b,x);break}else e(b,x);x=x.sibling}x=mC(w,b.mode,S),x.return=b,b=x}return s(b);case dc:return _=w._init,y(b,x,_(w._payload),S)}if(ep(w))return v(b,x,w,S);if(Eh(w))return m(b,x,w,S);jv(b,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,x!==null&&x.tag===6?(n(b,x.sibling),x=i(x,w),x.return=b,b=x):(n(b,x),x=pC(w,b.mode,S),x.return=b,b=x),s(b)):n(b,x)}return y}var Zd=k4(!0),P4=k4(!1),ax=ml(null),cx=null,hd=null,FE=null;function BE(){FE=hd=cx=null}function UE(t){var e=ax.current;Un(ax),t._currentValue=e}function nA(t,e,n){for(;t!==null;){var r=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,r!==null&&(r.childLanes|=e)):r!==null&&(r.childLanes&e)!==e&&(r.childLanes|=e),t===n)break;t=t.return}}function Ad(t,e){cx=t,FE=hd=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(ki=!0),t.firstContext=null)}function Po(t){var e=t._currentValue;if(FE!==t)if(t={context:t,memoizedValue:e,next:null},hd===null){if(cx===null)throw Error(Oe(308));hd=t,cx.dependencies={lanes:0,firstContext:t}}else hd=hd.next=t;return e}var Fl=null;function zE(t){Fl===null?Fl=[t]:Fl.push(t)}function O4(t,e,n,r){var i=e.interleaved;return i===null?(n.next=n,zE(e)):(n.next=i.next,i.next=n),e.interleaved=n,Ba(t,r)}function Ba(t,e){t.lanes|=e;var n=t.alternate;for(n!==null&&(n.lanes|=e),n=t,t=t.return;t!==null;)t.childLanes|=e,n=t.alternate,n!==null&&(n.childLanes|=e),n=t,t=t.return;return n.tag===3?n.stateNode:null}var fc=!1;function HE(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function I4(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Ta(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function Lc(t,e,n){var r=t.updateQueue;if(r===null)return null;if(r=r.shared,un&2){var i=r.pending;return i===null?e.next=e:(e.next=i.next,i.next=e),r.pending=e,Ba(t,n)}return i=r.interleaved,i===null?(e.next=e,zE(r)):(e.next=i.next,i.next=e),r.interleaved=e,Ba(t,n)}function by(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194240)!==0)){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,NE(t,n)}}function tI(t,e){var n=t.updateQueue,r=t.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?i=o=s:o=o.next=s,n=n.next}while(n!==null);o===null?i=o=e:o=o.next=e}else i=o=e;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:o,shared:r.shared,effects:r.effects},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}function lx(t,e,n,r){var i=t.updateQueue;fc=!1;var o=i.firstBaseUpdate,s=i.lastBaseUpdate,c=i.shared.pending;if(c!==null){i.shared.pending=null;var l=c,u=l.next;l.next=null,s===null?o=u:s.next=u,s=l;var d=t.alternate;d!==null&&(d=d.updateQueue,c=d.lastBaseUpdate,c!==s&&(c===null?d.firstBaseUpdate=u:c.next=u,d.lastBaseUpdate=l))}if(o!==null){var f=i.baseState;s=0,d=u=l=null,c=o;do{var h=c.lane,p=c.eventTime;if((r&h)===h){d!==null&&(d=d.next={eventTime:p,lane:0,tag:c.tag,payload:c.payload,callback:c.callback,next:null});e:{var v=t,m=c;switch(h=e,p=n,m.tag){case 1:if(v=m.payload,typeof v=="function"){f=v.call(p,f,h);break e}f=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=m.payload,h=typeof v=="function"?v.call(p,f,h):v,h==null)break e;f=Jn({},f,h);break e;case 2:fc=!0}}c.callback!==null&&c.lane!==0&&(t.flags|=64,h=i.effects,h===null?i.effects=[c]:h.push(c))}else p={eventTime:p,lane:h,tag:c.tag,payload:c.payload,callback:c.callback,next:null},d===null?(u=d=p,l=f):d=d.next=p,s|=h;if(c=c.next,c===null){if(c=i.shared.pending,c===null)break;h=c,c=h.next,h.next=null,i.lastBaseUpdate=h,i.shared.pending=null}}while(!0);if(d===null&&(l=f),i.baseState=l,i.firstBaseUpdate=u,i.lastBaseUpdate=d,e=i.shared.interleaved,e!==null){i=e;do s|=i.lane,i=i.next;while(i!==e)}else o===null&&(i.shared.lanes=0);fu|=s,t.lanes=s,t.memoizedState=f}}function nI(t,e,n){if(t=e.effects,e.effects=null,t!==null)for(e=0;en?n:4,t(!0);var r=lC.transition;lC.transition={};try{t(!1),e()}finally{bn=n,lC.transition=r}}function Q4(){return Oo().memoizedState}function EY(t,e,n){var r=Bc(t);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},X4(t))J4(e,n);else if(n=O4(t,e,n,r),n!==null){var i=bi();is(n,t,r,i),Z4(n,e,r)}}function NY(t,e,n){var r=Bc(t),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(X4(t))J4(e,i);else{var o=t.alternate;if(t.lanes===0&&(o===null||o.lanes===0)&&(o=e.lastRenderedReducer,o!==null))try{var s=e.lastRenderedState,c=o(s,n);if(i.hasEagerState=!0,i.eagerState=c,ds(c,s)){var l=e.interleaved;l===null?(i.next=i,zE(e)):(i.next=l.next,l.next=i),e.interleaved=i;return}}catch{}finally{}n=O4(t,e,i,r),n!==null&&(i=bi(),is(n,t,r,i),Z4(n,e,r))}}function X4(t){var e=t.alternate;return t===Xn||e!==null&&e===Xn}function J4(t,e){yp=dx=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Z4(t,e,n){if(n&4194240){var r=e.lanes;r&=t.pendingLanes,n|=r,e.lanes=n,NE(t,n)}}var fx={readContext:Po,useCallback:Xr,useContext:Xr,useEffect:Xr,useImperativeHandle:Xr,useInsertionEffect:Xr,useLayoutEffect:Xr,useMemo:Xr,useReducer:Xr,useRef:Xr,useState:Xr,useDebugValue:Xr,useDeferredValue:Xr,useTransition:Xr,useMutableSource:Xr,useSyncExternalStore:Xr,useId:Xr,unstable_isNewReconciler:!1},TY={readContext:Po,useCallback:function(t,e){return Ns().memoizedState=[t,e===void 0?null:e],t},useContext:Po,useEffect:iI,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,Sy(4194308,4,V4.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Sy(4194308,4,t,e)},useInsertionEffect:function(t,e){return Sy(4,2,t,e)},useMemo:function(t,e){var n=Ns();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var r=Ns();return e=n!==void 0?n(e):e,r.memoizedState=r.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},r.queue=t,t=t.dispatch=EY.bind(null,Xn,t),[r.memoizedState,t]},useRef:function(t){var e=Ns();return t={current:t},e.memoizedState=t},useState:rI,useDebugValue:XE,useDeferredValue:function(t){return Ns().memoizedState=t},useTransition:function(){var t=rI(!1),e=t[0];return t=jY.bind(null,t[1]),Ns().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var r=Xn,i=Ns();if(Vn){if(n===void 0)throw Error(Oe(407));n=n()}else{if(n=e(),Lr===null)throw Error(Oe(349));du&30||$4(r,e,n)}i.memoizedState=n;var o={value:n,getSnapshot:e};return i.queue=o,iI(F4.bind(null,r,o,t),[t]),r.flags|=2048,nm(9,L4.bind(null,r,o,n,e),void 0,null),n},useId:function(){var t=Ns(),e=Lr.identifierPrefix;if(Vn){var n=Sa,r=wa;n=(r&~(1<<32-rs(r)-1)).toString(32)+n,e=":"+e+"R"+n,n=em++,0<\/script>",t=t.removeChild(t.firstChild)):typeof r.is=="string"?t=s.createElement(n,{is:r.is}):(t=s.createElement(n),n==="select"&&(s=t,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):t=s.createElementNS(t,n),t[Ms]=e,t[Xp]=r,l5(t,e,!1,!1),e.stateNode=t;e:{switch(s=L_(n,r),n){case"dialog":Mn("cancel",t),Mn("close",t),i=r;break;case"iframe":case"object":case"embed":Mn("load",t),i=r;break;case"video":case"audio":for(i=0;inf&&(e.flags|=128,r=!0,Ih(o,!1),e.lanes=4194304)}else{if(!r)if(t=ux(s),t!==null){if(e.flags|=128,r=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),Ih(o,!0),o.tail===null&&o.tailMode==="hidden"&&!s.alternate&&!Vn)return Jr(e),null}else 2*sr()-o.renderingStartTime>nf&&n!==1073741824&&(e.flags|=128,r=!0,Ih(o,!1),e.lanes=4194304);o.isBackwards?(s.sibling=e.child,e.child=s):(n=o.last,n!==null?n.sibling=s:e.child=s,o.last=s)}return o.tail!==null?(e=o.tail,o.rendering=e,o.tail=e.sibling,o.renderingStartTime=sr(),e.sibling=null,n=Yn.current,In(Yn,r?n&1|2:n&1),e):(Jr(e),null);case 22:case 23:return rN(),r=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==r&&(e.flags|=8192),r&&e.mode&1?qi&1073741824&&(Jr(e),e.subtreeFlags&6&&(e.flags|=8192)):Jr(e),null;case 24:return null;case 25:return null}throw Error(Oe(156,e.tag))}function $Y(t,e){switch($E(e),e.tag){case 1:return Ii(e.type)&&rx(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return ef(),Un(Oi),Un(si),KE(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return VE(e),null;case 13:if(Un(Yn),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(Oe(340));Jd()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return Un(Yn),null;case 4:return ef(),null;case 10:return UE(e.type._context),null;case 22:case 23:return rN(),null;case 24:return null;default:return null}}var Nv=!1,ri=!1,LY=typeof WeakSet=="function"?WeakSet:Set,ct=null;function pd(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){nr(t,e,r)}else n.current=null}function dA(t,e,n){try{n()}catch(r){nr(t,e,r)}}var mI=!1;function FY(t,e){if(q_=Zy,t=g4(),ME(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var s=0,c=-1,l=-1,u=0,d=0,f=t,h=null;t:for(;;){for(var p;f!==n||i!==0&&f.nodeType!==3||(c=s+i),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(p=f.firstChild)!==null;)h=f,f=p;for(;;){if(f===t)break t;if(h===n&&++u===i&&(c=s),h===o&&++d===r&&(l=s),(p=f.nextSibling)!==null)break;f=h,h=f.parentNode}f=p}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Y_={focusedElem:t,selectionRange:n},Zy=!1,ct=e;ct!==null;)if(e=ct,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,ct=t;else for(;ct!==null;){e=ct;try{var v=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var m=v.memoizedProps,y=v.memoizedState,b=e.stateNode,x=b.getSnapshotBeforeUpdate(e.elementType===e.type?m:Go(e.type,m),y);b.__reactInternalSnapshotBeforeUpdate=x}break;case 3:var w=e.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Oe(163))}}catch(S){nr(e,e.return,S)}if(t=e.sibling,t!==null){t.return=e.return,ct=t;break}ct=e.return}return v=mI,mI=!1,v}function xp(t,e,n){var r=e.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&t)===t){var o=i.destroy;i.destroy=void 0,o!==void 0&&dA(e,n,o)}i=i.next}while(i!==r)}}function F0(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var r=n.create;n.destroy=r()}n=n.next}while(n!==e)}}function fA(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function f5(t){var e=t.alternate;e!==null&&(t.alternate=null,f5(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Ms],delete e[Xp],delete e[J_],delete e[wY],delete e[SY])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function h5(t){return t.tag===5||t.tag===3||t.tag===4}function gI(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||h5(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function hA(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=nx));else if(r!==4&&(t=t.child,t!==null))for(hA(t,e,n),t=t.sibling;t!==null;)hA(t,e,n),t=t.sibling}function pA(t,e,n){var r=t.tag;if(r===5||r===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(r!==4&&(t=t.child,t!==null))for(pA(t,e,n),t=t.sibling;t!==null;)pA(t,e,n),t=t.sibling}var Hr=null,Wo=!1;function ic(t,e,n){for(n=n.child;n!==null;)p5(t,e,n),n=n.sibling}function p5(t,e,n){if(zs&&typeof zs.onCommitFiberUnmount=="function")try{zs.onCommitFiberUnmount(P0,n)}catch{}switch(n.tag){case 5:ri||pd(n,e);case 6:var r=Hr,i=Wo;Hr=null,ic(t,e,n),Hr=r,Wo=i,Hr!==null&&(Wo?(t=Hr,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):Hr.removeChild(n.stateNode));break;case 18:Hr!==null&&(Wo?(t=Hr,n=n.stateNode,t.nodeType===8?sC(t.parentNode,n):t.nodeType===1&&sC(t,n),Kp(t)):sC(Hr,n.stateNode));break;case 4:r=Hr,i=Wo,Hr=n.stateNode.containerInfo,Wo=!0,ic(t,e,n),Hr=r,Wo=i;break;case 0:case 11:case 14:case 15:if(!ri&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,s=o.destroy;o=o.tag,s!==void 0&&(o&2||o&4)&&dA(n,e,s),i=i.next}while(i!==r)}ic(t,e,n);break;case 1:if(!ri&&(pd(n,e),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(c){nr(n,e,c)}ic(t,e,n);break;case 21:ic(t,e,n);break;case 22:n.mode&1?(ri=(r=ri)||n.memoizedState!==null,ic(t,e,n),ri=r):ic(t,e,n);break;default:ic(t,e,n)}}function vI(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new LY),e.forEach(function(r){var i=qY.bind(null,t,r);n.has(r)||(n.add(r),r.then(i,i))})}}function Bo(t,e){var n=e.deletions;if(n!==null)for(var r=0;ri&&(i=s),r&=~o}if(r=i,r=sr()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*UY(r/1960))-r,10t?16:t,Nc===null)var r=!1;else{if(t=Nc,Nc=null,mx=0,un&6)throw Error(Oe(331));var i=un;for(un|=4,ct=t.current;ct!==null;){var o=ct,s=o.child;if(ct.flags&16){var c=o.deletions;if(c!==null){for(var l=0;lsr()-tN?tu(t,0):eN|=n),Ri(t,e)}function S5(t,e){e===0&&(t.mode&1?(e=xv,xv<<=1,!(xv&130023424)&&(xv=4194304)):e=1);var n=bi();t=Ba(t,e),t!==null&&(kg(t,e,n),Ri(t,n))}function WY(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),S5(t,n)}function qY(t,e){var n=0;switch(t.tag){case 13:var r=t.stateNode,i=t.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=t.stateNode;break;default:throw Error(Oe(314))}r!==null&&r.delete(e),S5(t,n)}var C5;C5=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||Oi.current)ki=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return ki=!1,MY(t,e,n);ki=!!(t.flags&131072)}else ki=!1,Vn&&e.flags&1048576&&E4(e,sx,e.index);switch(e.lanes=0,e.tag){case 2:var r=e.type;Cy(t,e),t=e.pendingProps;var i=Xd(e,si.current);Ad(e,n),i=qE(null,e,r,t,i,n);var o=YE();return e.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Ii(r)?(o=!0,ix(e)):o=!1,e.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,HE(e),i.updater=L0,e.stateNode=i,i._reactInternals=e,iA(e,r,t,n),e=aA(null,e,r,!0,o,n)):(e.tag=0,Vn&&o&&DE(e),fi(null,e,i,n),e=e.child),e;case 16:r=e.elementType;e:{switch(Cy(t,e),t=e.pendingProps,i=r._init,r=i(r._payload),e.type=r,i=e.tag=QY(r),t=Go(r,t),i){case 0:e=sA(null,e,r,t,n);break e;case 1:e=fI(null,e,r,t,n);break e;case 11:e=uI(null,e,r,t,n);break e;case 14:e=dI(null,e,r,Go(r.type,t),n);break e}throw Error(Oe(306,r,""))}return e;case 0:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:Go(r,i),sA(t,e,r,i,n);case 1:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:Go(r,i),fI(t,e,r,i,n);case 3:e:{if(s5(e),t===null)throw Error(Oe(387));r=e.pendingProps,o=e.memoizedState,i=o.element,I4(t,e),lx(e,r,null,n);var s=e.memoizedState;if(r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},e.updateQueue.baseState=o,e.memoizedState=o,e.flags&256){i=tf(Error(Oe(423)),e),e=hI(t,e,r,n,i);break e}else if(r!==i){i=tf(Error(Oe(424)),e),e=hI(t,e,r,n,i);break e}else for(Zi=$c(e.stateNode.containerInfo.firstChild),eo=e,Vn=!0,Xo=null,n=P4(e,null,r,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jd(),r===i){e=Ua(t,e,n);break e}fi(t,e,r,n)}e=e.child}return e;case 5:return R4(e),t===null&&tA(e),r=e.type,i=e.pendingProps,o=t!==null?t.memoizedProps:null,s=i.children,Q_(r,i)?s=null:o!==null&&Q_(r,o)&&(e.flags|=32),o5(t,e),fi(t,e,s,n),e.child;case 6:return t===null&&tA(e),null;case 13:return a5(t,e,n);case 4:return GE(e,e.stateNode.containerInfo),r=e.pendingProps,t===null?e.child=Zd(e,null,r,n):fi(t,e,r,n),e.child;case 11:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:Go(r,i),uI(t,e,r,i,n);case 7:return fi(t,e,e.pendingProps,n),e.child;case 8:return fi(t,e,e.pendingProps.children,n),e.child;case 12:return fi(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(r=e.type._context,i=e.pendingProps,o=e.memoizedProps,s=i.value,In(ax,r._currentValue),r._currentValue=s,o!==null)if(ds(o.value,s)){if(o.children===i.children&&!Oi.current){e=Ua(t,e,n);break e}}else for(o=e.child,o!==null&&(o.return=e);o!==null;){var c=o.dependencies;if(c!==null){s=o.child;for(var l=c.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Ta(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?l.next=l:(l.next=d.next,d.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),nA(o.return,n,e),c.lanes|=n;break}l=l.next}}else if(o.tag===10)s=o.type===e.type?null:o.child;else if(o.tag===18){if(s=o.return,s===null)throw Error(Oe(341));s.lanes|=n,c=s.alternate,c!==null&&(c.lanes|=n),nA(s,n,e),s=o.sibling}else s=o.child;if(s!==null)s.return=o;else for(s=o;s!==null;){if(s===e){s=null;break}if(o=s.sibling,o!==null){o.return=s.return,s=o;break}s=s.return}o=s}fi(t,e,i.children,n),e=e.child}return e;case 9:return i=e.type,r=e.pendingProps.children,Ad(e,n),i=Po(i),r=r(i),e.flags|=1,fi(t,e,r,n),e.child;case 14:return r=e.type,i=Go(r,e.pendingProps),i=Go(r.type,i),dI(t,e,r,i,n);case 15:return r5(t,e,e.type,e.pendingProps,n);case 17:return r=e.type,i=e.pendingProps,i=e.elementType===r?i:Go(r,i),Cy(t,e),e.tag=1,Ii(r)?(t=!0,ix(e)):t=!1,Ad(e,n),e5(e,r,i),iA(e,r,i,n),aA(null,e,r,!0,t,n);case 19:return c5(t,e,n);case 22:return i5(t,e,n)}throw Error(Oe(156,e.tag))};function _5(t,e){return XF(t,e)}function YY(t,e,n,r){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ao(t,e,n,r){return new YY(t,e,n,r)}function oN(t){return t=t.prototype,!(!t||!t.isReactComponent)}function QY(t){if(typeof t=="function")return oN(t)?1:0;if(t!=null){if(t=t.$$typeof,t===_E)return 11;if(t===AE)return 14}return 2}function Uc(t,e){var n=t.alternate;return n===null?(n=Ao(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function jy(t,e,n,r,i,o){var s=2;if(r=t,typeof t=="function")oN(t)&&(s=1);else if(typeof t=="string")s=5;else e:switch(t){case od:return nu(n.children,i,o,e);case CE:s=8,i|=8;break;case N_:return t=Ao(12,n,e,i|2),t.elementType=N_,t.lanes=o,t;case T_:return t=Ao(13,n,e,i),t.elementType=T_,t.lanes=o,t;case k_:return t=Ao(19,n,e,i),t.elementType=k_,t.lanes=o,t;case RF:return U0(n,i,o,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case OF:s=10;break e;case IF:s=9;break e;case _E:s=11;break e;case AE:s=14;break e;case dc:s=16,r=null;break e}throw Error(Oe(130,t==null?t:typeof t,""))}return e=Ao(s,n,e,i),e.elementType=t,e.type=r,e.lanes=o,e}function nu(t,e,n,r){return t=Ao(7,t,r,e),t.lanes=n,t}function U0(t,e,n,r){return t=Ao(22,t,r,e),t.elementType=RF,t.lanes=n,t.stateNode={isHidden:!1},t}function pC(t,e,n){return t=Ao(6,t,null,e),t.lanes=n,t}function mC(t,e,n){return e=Ao(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function XY(t,e,n,r,i){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=YS(0),this.expirationTimes=YS(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=YS(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function sN(t,e,n,r,i,o,s,c,l){return t=new XY(t,e,n,c,l),e===1?(e=1,o===!0&&(e|=8)):e=0,o=Ao(3,null,null,e),t.current=o,o.stateNode=t,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},HE(o),t}function JY(t,e,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(N5)}catch(t){console.error(t)}}N5(),NF.exports=so;var es=NF.exports;const T5=hn(es);var k5,AI=es;k5=AI.createRoot,AI.hydrateRoot;var jI=["light","dark"],rQ="(prefers-color-scheme: dark)",iQ=g.createContext(void 0),oQ={setTheme:t=>{},themes:[]},sQ=()=>{var t;return(t=g.useContext(iQ))!=null?t:oQ};g.memo(({forcedTheme:t,storageKey:e,attribute:n,enableSystem:r,enableColorScheme:i,defaultTheme:o,value:s,attrs:c,nonce:l})=>{let u=o==="system",d=n==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${c.map(v=>`'${v}'`).join(",")})`};`:`var d=document.documentElement,n='${n}',s='setAttribute';`,f=i?jI.includes(o)&&o?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${o}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",h=(v,m=!1,y=!0)=>{let b=s?s[v]:v,x=m?v+"|| ''":`'${b}'`,w="";return i&&y&&!m&&jI.includes(v)&&(w+=`d.style.colorScheme = '${v}';`),n==="class"?m||b?w+=`c.add(${x})`:w+="null":b&&(w+=`d[s](n,${x})`),w},p=t?`!function(){${d}${h(t)}}()`:r?`!function(){try{${d}var e=localStorage.getItem('${e}');if('system'===e||(!e&&${u})){var t='${rQ}',m=window.matchMedia(t);if(m.media!==t||m.matches){${h("dark")}}else{${h("light")}}}else if(e){${s?`var x=${JSON.stringify(s)};`:""}${h(s?"x[e]":"e",!0)}}${u?"":"else{"+h(o,!1,!1)+"}"}${f}}catch(e){}}()`:`!function(){try{${d}var e=localStorage.getItem('${e}');if(e){${s?`var x=${JSON.stringify(s)};`:""}${h(s?"x[e]":"e",!0)}}else{${h(o,!1,!1)};}${f}}catch(t){}}();`;return g.createElement("script",{nonce:l,dangerouslySetInnerHTML:{__html:p}})});var aQ=t=>{switch(t){case"success":return uQ;case"info":return fQ;case"warning":return dQ;case"error":return hQ;default:return null}},cQ=Array(12).fill(0),lQ=({visible:t})=>T.createElement("div",{className:"sonner-loading-wrapper","data-visible":t},T.createElement("div",{className:"sonner-spinner"},cQ.map((e,n)=>T.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${n}`})))),uQ=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),dQ=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),fQ=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),hQ=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),pQ=()=>{let[t,e]=T.useState(document.hidden);return T.useEffect(()=>{let n=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",n),()=>window.removeEventListener("visibilitychange",n)},[]),t},xA=1,mQ=class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let e=this.subscribers.indexOf(t);this.subscribers.splice(e,1)}),this.publish=t=>{this.subscribers.forEach(e=>e(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var e;let{message:n,...r}=t,i=typeof(t==null?void 0:t.id)=="number"||((e=t.id)==null?void 0:e.length)>0?t.id:xA++,o=this.toasts.find(c=>c.id===i),s=t.dismissible===void 0?!0:t.dismissible;return o?this.toasts=this.toasts.map(c=>c.id===i?(this.publish({...c,...t,id:i,title:n}),{...c,...t,id:i,dismissible:s,title:n}):c):this.addToast({title:n,...r,dismissible:s,id:i}),i},this.dismiss=t=>(t||this.toasts.forEach(e=>{this.subscribers.forEach(n=>n({id:e.id,dismiss:!0}))}),this.subscribers.forEach(e=>e({id:t,dismiss:!0})),t),this.message=(t,e)=>this.create({...e,message:t}),this.error=(t,e)=>this.create({...e,message:t,type:"error"}),this.success=(t,e)=>this.create({...e,type:"success",message:t}),this.info=(t,e)=>this.create({...e,type:"info",message:t}),this.warning=(t,e)=>this.create({...e,type:"warning",message:t}),this.loading=(t,e)=>this.create({...e,type:"loading",message:t}),this.promise=(t,e)=>{if(!e)return;let n;e.loading!==void 0&&(n=this.create({...e,promise:t,type:"loading",message:e.loading,description:typeof e.description!="function"?e.description:void 0}));let r=t instanceof Promise?t:t(),i=n!==void 0;return r.then(async o=>{if(vQ(o)&&!o.ok){i=!1;let s=typeof e.error=="function"?await e.error(`HTTP error! status: ${o.status}`):e.error,c=typeof e.description=="function"?await e.description(`HTTP error! status: ${o.status}`):e.description;this.create({id:n,type:"error",message:s,description:c})}else if(e.success!==void 0){i=!1;let s=typeof e.success=="function"?await e.success(o):e.success,c=typeof e.description=="function"?await e.description(o):e.description;this.create({id:n,type:"success",message:s,description:c})}}).catch(async o=>{if(e.error!==void 0){i=!1;let s=typeof e.error=="function"?await e.error(o):e.error,c=typeof e.description=="function"?await e.description(o):e.description;this.create({id:n,type:"error",message:s,description:c})}}).finally(()=>{var o;i&&(this.dismiss(n),n=void 0),(o=e.finally)==null||o.call(e)}),n},this.custom=(t,e)=>{let n=(e==null?void 0:e.id)||xA++;return this.create({jsx:t(n),id:n,...e}),n},this.subscribers=[],this.toasts=[]}},Wi=new mQ,gQ=(t,e)=>{let n=(e==null?void 0:e.id)||xA++;return Wi.addToast({title:t,...e,id:n}),n},vQ=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",yQ=gQ,xQ=()=>Wi.toasts,ae=Object.assign(yQ,{success:Wi.success,info:Wi.info,warning:Wi.warning,error:Wi.error,custom:Wi.custom,message:Wi.message,promise:Wi.promise,dismiss:Wi.dismiss,loading:Wi.loading},{getHistory:xQ});function bQ(t,{insertAt:e}={}){if(typeof document>"u")return;let n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",e==="top"&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=t:r.appendChild(document.createTextNode(t))}bQ(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}:where([data-sonner-toaster][data-x-position="right"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position="left"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} +`);function Pv(t){return t.label!==void 0}var wQ=3,SQ="32px",CQ=4e3,_Q=356,AQ=14,jQ=20,EQ=200;function NQ(...t){return t.filter(Boolean).join(" ")}var TQ=t=>{var e,n,r,i,o,s,c,l,u,d;let{invert:f,toast:h,unstyled:p,interacting:v,setHeights:m,visibleToasts:y,heights:b,index:x,toasts:w,expanded:S,removeToast:C,defaultRichColors:_,closeButton:A,style:j,cancelButtonStyle:N,actionButtonStyle:k,className:O="",descriptionClassName:E="",duration:R,position:D,gap:G,loadingIcon:L,expandByDefault:z,classNames:M,icons:$,closeButtonAriaLabel:Q="Close toast",pauseWhenPageIsHidden:q,cn:te}=t,[xe,B]=T.useState(!1),[ce,fe]=T.useState(!1),[U,ue]=T.useState(!1),[oe,ne]=T.useState(!1),[je,K]=T.useState(0),[et,Me]=T.useState(0),ut=T.useRef(null),qe=T.useRef(null),Pt=x===0,F=x+1<=y,J=h.type,ie=h.dismissible!==!1,ye=h.className||"",Ee=h.descriptionClassName||"",P=T.useMemo(()=>b.findIndex(Je=>Je.toastId===h.id)||0,[b,h.id]),H=T.useMemo(()=>{var Je;return(Je=h.closeButton)!=null?Je:A},[h.closeButton,A]),ee=T.useMemo(()=>h.duration||R||CQ,[h.duration,R]),re=T.useRef(0),Z=T.useRef(0),Se=T.useRef(0),Ae=T.useRef(null),[Ie,Ve]=D.split("-"),Be=T.useMemo(()=>b.reduce((Je,rt,jt)=>jt>=P?Je:Je+rt.height,0),[b,P]),Fe=pQ(),nt=h.invert||f,Ne=J==="loading";Z.current=T.useMemo(()=>P*G+Be,[P,Be]),T.useEffect(()=>{B(!0)},[]),T.useLayoutEffect(()=>{if(!xe)return;let Je=qe.current,rt=Je.style.height;Je.style.height="auto";let jt=Je.getBoundingClientRect().height;Je.style.height=rt,Me(jt),m(Bt=>Bt.find(Dt=>Dt.toastId===h.id)?Bt.map(Dt=>Dt.toastId===h.id?{...Dt,height:jt}:Dt):[{toastId:h.id,height:jt,position:h.position},...Bt])},[xe,h.title,h.description,m,h.id]);let Nt=T.useCallback(()=>{fe(!0),K(Z.current),m(Je=>Je.filter(rt=>rt.toastId!==h.id)),setTimeout(()=>{C(h)},EQ)},[h,C,m,Z]);T.useEffect(()=>{if(h.promise&&J==="loading"||h.duration===1/0||h.type==="loading")return;let Je,rt=ee;return S||v||q&&Fe?(()=>{if(Se.current{var jt;(jt=h.onAutoClose)==null||jt.call(h,h),Nt()},rt)),()=>clearTimeout(Je)},[S,v,z,h,ee,Nt,h.promise,J,q,Fe]),T.useEffect(()=>{let Je=qe.current;if(Je){let rt=Je.getBoundingClientRect().height;return Me(rt),m(jt=>[{toastId:h.id,height:rt,position:h.position},...jt]),()=>m(jt=>jt.filter(Bt=>Bt.toastId!==h.id))}},[m,h.id]),T.useEffect(()=>{h.delete&&Nt()},[Nt,h.delete]);function pn(){return $!=null&&$.loading?T.createElement("div",{className:"sonner-loader","data-visible":J==="loading"},$.loading):L?T.createElement("div",{className:"sonner-loader","data-visible":J==="loading"},L):T.createElement(lQ,{visible:J==="loading"})}return T.createElement("li",{"aria-live":h.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:qe,className:te(O,ye,M==null?void 0:M.toast,(e=h==null?void 0:h.classNames)==null?void 0:e.toast,M==null?void 0:M.default,M==null?void 0:M[J],(n=h==null?void 0:h.classNames)==null?void 0:n[J]),"data-sonner-toast":"","data-rich-colors":(r=h.richColors)!=null?r:_,"data-styled":!(h.jsx||h.unstyled||p),"data-mounted":xe,"data-promise":!!h.promise,"data-removed":ce,"data-visible":F,"data-y-position":Ie,"data-x-position":Ve,"data-index":x,"data-front":Pt,"data-swiping":U,"data-dismissible":ie,"data-type":J,"data-invert":nt,"data-swipe-out":oe,"data-expanded":!!(S||z&&xe),style:{"--index":x,"--toasts-before":x,"--z-index":w.length-x,"--offset":`${ce?je:Z.current}px`,"--initial-height":z?"auto":`${et}px`,...j,...h.style},onPointerDown:Je=>{Ne||!ie||(ut.current=new Date,K(Z.current),Je.target.setPointerCapture(Je.pointerId),Je.target.tagName!=="BUTTON"&&(ue(!0),Ae.current={x:Je.clientX,y:Je.clientY}))},onPointerUp:()=>{var Je,rt,jt,Bt;if(oe||!ie)return;Ae.current=null;let Dt=Number(((Je=qe.current)==null?void 0:Je.style.getPropertyValue("--swipe-amount").replace("px",""))||0),Jt=new Date().getTime()-((rt=ut.current)==null?void 0:rt.getTime()),en=Math.abs(Dt)/Jt;if(Math.abs(Dt)>=jQ||en>.11){K(Z.current),(jt=h.onDismiss)==null||jt.call(h,h),Nt(),ne(!0);return}(Bt=qe.current)==null||Bt.style.setProperty("--swipe-amount","0px"),ue(!1)},onPointerMove:Je=>{var rt;if(!Ae.current||!ie)return;let jt=Je.clientY-Ae.current.y,Bt=Je.clientX-Ae.current.x,Dt=(Ie==="top"?Math.min:Math.max)(0,jt),Jt=Je.pointerType==="touch"?10:2;Math.abs(Dt)>Jt?(rt=qe.current)==null||rt.style.setProperty("--swipe-amount",`${jt}px`):Math.abs(Bt)>Jt&&(Ae.current=null)}},H&&!h.jsx?T.createElement("button",{"aria-label":Q,"data-disabled":Ne,"data-close-button":!0,onClick:Ne||!ie?()=>{}:()=>{var Je;Nt(),(Je=h.onDismiss)==null||Je.call(h,h)},className:te(M==null?void 0:M.closeButton,(i=h==null?void 0:h.classNames)==null?void 0:i.closeButton)},T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},T.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),T.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,h.jsx||T.isValidElement(h.title)?h.jsx||h.title:T.createElement(T.Fragment,null,J||h.icon||h.promise?T.createElement("div",{"data-icon":"",className:te(M==null?void 0:M.icon,(o=h==null?void 0:h.classNames)==null?void 0:o.icon)},h.promise||h.type==="loading"&&!h.icon?h.icon||pn():null,h.type!=="loading"?h.icon||($==null?void 0:$[J])||aQ(J):null):null,T.createElement("div",{"data-content":"",className:te(M==null?void 0:M.content,(s=h==null?void 0:h.classNames)==null?void 0:s.content)},T.createElement("div",{"data-title":"",className:te(M==null?void 0:M.title,(c=h==null?void 0:h.classNames)==null?void 0:c.title)},h.title),h.description?T.createElement("div",{"data-description":"",className:te(E,Ee,M==null?void 0:M.description,(l=h==null?void 0:h.classNames)==null?void 0:l.description)},h.description):null),T.isValidElement(h.cancel)?h.cancel:h.cancel&&Pv(h.cancel)?T.createElement("button",{"data-button":!0,"data-cancel":!0,style:h.cancelButtonStyle||N,onClick:Je=>{var rt,jt;Pv(h.cancel)&&ie&&((jt=(rt=h.cancel).onClick)==null||jt.call(rt,Je),Nt())},className:te(M==null?void 0:M.cancelButton,(u=h==null?void 0:h.classNames)==null?void 0:u.cancelButton)},h.cancel.label):null,T.isValidElement(h.action)?h.action:h.action&&Pv(h.action)?T.createElement("button",{"data-button":!0,"data-action":!0,style:h.actionButtonStyle||k,onClick:Je=>{var rt,jt;Pv(h.action)&&(Je.defaultPrevented||((jt=(rt=h.action).onClick)==null||jt.call(rt,Je),Nt()))},className:te(M==null?void 0:M.actionButton,(d=h==null?void 0:h.classNames)==null?void 0:d.actionButton)},h.action.label):null))};function EI(){if(typeof window>"u"||typeof document>"u")return"ltr";let t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}var kQ=t=>{let{invert:e,position:n="bottom-right",hotkey:r=["altKey","KeyT"],expand:i,closeButton:o,className:s,offset:c,theme:l="light",richColors:u,duration:d,style:f,visibleToasts:h=wQ,toastOptions:p,dir:v=EI(),gap:m=AQ,loadingIcon:y,icons:b,containerAriaLabel:x="Notifications",pauseWhenPageIsHidden:w,cn:S=NQ}=t,[C,_]=T.useState([]),A=T.useMemo(()=>Array.from(new Set([n].concat(C.filter(q=>q.position).map(q=>q.position)))),[C,n]),[j,N]=T.useState([]),[k,O]=T.useState(!1),[E,R]=T.useState(!1),[D,G]=T.useState(l!=="system"?l:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),L=T.useRef(null),z=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),M=T.useRef(null),$=T.useRef(!1),Q=T.useCallback(q=>{var te;(te=C.find(xe=>xe.id===q.id))!=null&&te.delete||Wi.dismiss(q.id),_(xe=>xe.filter(({id:B})=>B!==q.id))},[C]);return T.useEffect(()=>Wi.subscribe(q=>{if(q.dismiss){_(te=>te.map(xe=>xe.id===q.id?{...xe,delete:!0}:xe));return}setTimeout(()=>{T5.flushSync(()=>{_(te=>{let xe=te.findIndex(B=>B.id===q.id);return xe!==-1?[...te.slice(0,xe),{...te[xe],...q},...te.slice(xe+1)]:[q,...te]})})})}),[]),T.useEffect(()=>{if(l!=="system"){G(l);return}l==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?G("dark"):G("light")),typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:q})=>{G(q?"dark":"light")})},[l]),T.useEffect(()=>{C.length<=1&&O(!1)},[C]),T.useEffect(()=>{let q=te=>{var xe,B;r.every(ce=>te[ce]||te.code===ce)&&(O(!0),(xe=L.current)==null||xe.focus()),te.code==="Escape"&&(document.activeElement===L.current||(B=L.current)!=null&&B.contains(document.activeElement))&&O(!1)};return document.addEventListener("keydown",q),()=>document.removeEventListener("keydown",q)},[r]),T.useEffect(()=>{if(L.current)return()=>{M.current&&(M.current.focus({preventScroll:!0}),M.current=null,$.current=!1)}},[L.current]),C.length?T.createElement("section",{"aria-label":`${x} ${z}`,tabIndex:-1},A.map((q,te)=>{var xe;let[B,ce]=q.split("-");return T.createElement("ol",{key:q,dir:v==="auto"?EI():v,tabIndex:-1,ref:L,className:s,"data-sonner-toaster":!0,"data-theme":D,"data-y-position":B,"data-x-position":ce,style:{"--front-toast-height":`${((xe=j[0])==null?void 0:xe.height)||0}px`,"--offset":typeof c=="number"?`${c}px`:c||SQ,"--width":`${_Q}px`,"--gap":`${m}px`,...f},onBlur:fe=>{$.current&&!fe.currentTarget.contains(fe.relatedTarget)&&($.current=!1,M.current&&(M.current.focus({preventScroll:!0}),M.current=null))},onFocus:fe=>{fe.target instanceof HTMLElement&&fe.target.dataset.dismissible==="false"||$.current||($.current=!0,M.current=fe.relatedTarget)},onMouseEnter:()=>O(!0),onMouseMove:()=>O(!0),onMouseLeave:()=>{E||O(!1)},onPointerDown:fe=>{fe.target instanceof HTMLElement&&fe.target.dataset.dismissible==="false"||R(!0)},onPointerUp:()=>R(!1)},C.filter(fe=>!fe.position&&te===0||fe.position===q).map((fe,U)=>{var ue,oe;return T.createElement(TQ,{key:fe.id,icons:b,index:U,toast:fe,defaultRichColors:u,duration:(ue=p==null?void 0:p.duration)!=null?ue:d,className:p==null?void 0:p.className,descriptionClassName:p==null?void 0:p.descriptionClassName,invert:e,visibleToasts:h,closeButton:(oe=p==null?void 0:p.closeButton)!=null?oe:o,interacting:E,position:q,style:p==null?void 0:p.style,unstyled:p==null?void 0:p.unstyled,classNames:p==null?void 0:p.classNames,cancelButtonStyle:p==null?void 0:p.cancelButtonStyle,actionButtonStyle:p==null?void 0:p.actionButtonStyle,removeToast:Q,toasts:C.filter(ne=>ne.position==fe.position),heights:j.filter(ne=>ne.position==fe.position),setHeights:N,expandByDefault:i,gap:m,loadingIcon:y,expanded:k,pauseWhenPageIsHidden:w,cn:S})}))})):null};const PQ=({...t})=>{const{theme:e="system"}=sQ();return a.jsx(kQ,{theme:e,className:"toaster group",position:"bottom-right",visibleToasts:2,closeButton:!0,toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg group-[.toaster]:pr-8",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",closeButton:"group-[.toast]:absolute group-[.toast]:left-3 group-[.toast]:top-3 group-[.toast]:h-5 group-[.toast]:w-5 group-[.toast]:rounded-md group-[.toast]:p-1 group-[.toast]:text-foreground/70 group-[.toast]:opacity-100 group-[.toast]:transition-opacity hover:group-[.toast]:text-foreground hover:group-[.toast]:bg-muted/50 focus:group-[.toast]:opacity-100 focus:group-[.toast]:outline-none focus:group-[.toast]:ring-1 focus:group-[.toast]:ring-ring"}},...t})};function $e(t,e,{checkForDefaultPrevented:n=!0}={}){return function(i){if(t==null||t(i),n===!1||!i.defaultPrevented)return e==null?void 0:e(i)}}function OQ(t,e){typeof t=="function"?t(e):t!=null&&(t.current=e)}function K0(...t){return e=>t.forEach(n=>OQ(n,e))}function It(...t){return g.useCallback(K0(...t),t)}function IQ(t,e){const n=g.createContext(e),r=o=>{const{children:s,...c}=o,l=g.useMemo(()=>c,Object.values(c));return a.jsx(n.Provider,{value:l,children:s})};r.displayName=t+"Provider";function i(o){const s=g.useContext(n);if(s)return s;if(e!==void 0)return e;throw new Error(`\`${o}\` must be used within \`${t}\``)}return[r,i]}function Bi(t,e=[]){let n=[];function r(o,s){const c=g.createContext(s),l=n.length;n=[...n,s];const u=f=>{var b;const{scope:h,children:p,...v}=f,m=((b=h==null?void 0:h[t])==null?void 0:b[l])||c,y=g.useMemo(()=>v,Object.values(v));return a.jsx(m.Provider,{value:y,children:p})};u.displayName=o+"Provider";function d(f,h){var m;const p=((m=h==null?void 0:h[t])==null?void 0:m[l])||c,v=g.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${f}\` must be used within \`${o}\``)}return[u,d]}const i=()=>{const o=n.map(s=>g.createContext(s));return function(c){const l=(c==null?void 0:c[t])||o;return g.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,RQ(i,...e)]}function RQ(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(o)[`__scope${u}`];return{...c,...f}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])}};return n.scopeName=e.scopeName,n}var Ys=g.forwardRef((t,e)=>{const{children:n,...r}=t,i=g.Children.toArray(n),o=i.find(MQ);if(o){const s=o.props.children,c=i.map(l=>l===o?g.Children.count(s)>1?g.Children.only(null):g.isValidElement(s)?s.props.children:null:l);return a.jsx(bA,{...r,ref:e,children:g.isValidElement(s)?g.cloneElement(s,void 0,c):null})}return a.jsx(bA,{...r,ref:e,children:n})});Ys.displayName="Slot";var bA=g.forwardRef((t,e)=>{const{children:n,...r}=t;if(g.isValidElement(n)){const i=$Q(n);return g.cloneElement(n,{...DQ(r,n.props),ref:e?K0(e,i):i})}return g.Children.count(n)>1?g.Children.only(null):null});bA.displayName="SlotClone";var uN=({children:t})=>a.jsx(a.Fragment,{children:t});function MQ(t){return g.isValidElement(t)&&t.type===uN}function DQ(t,e){const n={...e};for(const r in e){const i=t[r],o=e[r];/^on[A-Z]/.test(r)?i&&o?n[r]=(...c)=>{o(...c),i(...c)}:i&&(n[r]=i):r==="style"?n[r]={...i,...o}:r==="className"&&(n[r]=[i,o].filter(Boolean).join(" "))}return{...t,...n}}function $Q(t){var r,i;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(i=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:i.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var LQ=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"],ht=LQ.reduce((t,e)=>{const n=g.forwardRef((r,i)=>{const{asChild:o,...s}=r,c=o?Ys:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),a.jsx(c,{...s,ref:i})});return n.displayName=`Primitive.${e}`,{...t,[e]:n}},{});function P5(t,e){t&&es.flushSync(()=>t.dispatchEvent(e))}function Ar(t){const e=g.useRef(t);return g.useEffect(()=>{e.current=t}),g.useMemo(()=>(...n)=>{var r;return(r=e.current)==null?void 0:r.call(e,...n)},[])}function FQ(t,e=globalThis==null?void 0:globalThis.document){const n=Ar(t);g.useEffect(()=>{const r=i=>{i.key==="Escape"&&n(i)};return e.addEventListener("keydown",r,{capture:!0}),()=>e.removeEventListener("keydown",r,{capture:!0})},[n,e])}var BQ="DismissableLayer",wA="dismissableLayer.update",UQ="dismissableLayer.pointerDownOutside",zQ="dismissableLayer.focusOutside",NI,O5=g.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Rg=g.forwardRef((t,e)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:o,onInteractOutside:s,onDismiss:c,...l}=t,u=g.useContext(O5),[d,f]=g.useState(null),h=(d==null?void 0:d.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=g.useState({}),v=It(e,A=>f(A)),m=Array.from(u.layers),[y]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),b=m.indexOf(y),x=d?m.indexOf(d):-1,w=u.layersWithOutsidePointerEventsDisabled.size>0,S=x>=b,C=VQ(A=>{const j=A.target,N=[...u.branches].some(k=>k.contains(j));!S||N||(i==null||i(A),s==null||s(A),A.defaultPrevented||c==null||c())},h),_=KQ(A=>{const j=A.target;[...u.branches].some(k=>k.contains(j))||(o==null||o(A),s==null||s(A),A.defaultPrevented||c==null||c())},h);return FQ(A=>{x===u.layers.size-1&&(r==null||r(A),!A.defaultPrevented&&c&&(A.preventDefault(),c()))},h),g.useEffect(()=>{if(d)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(NI=h.body.style.pointerEvents,h.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(d)),u.layers.add(d),TI(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(h.body.style.pointerEvents=NI)}},[d,h,n,u]),g.useEffect(()=>()=>{d&&(u.layers.delete(d),u.layersWithOutsidePointerEventsDisabled.delete(d),TI())},[d,u]),g.useEffect(()=>{const A=()=>p({});return document.addEventListener(wA,A),()=>document.removeEventListener(wA,A)},[]),a.jsx(ht.div,{...l,ref:v,style:{pointerEvents:w?S?"auto":"none":void 0,...t.style},onFocusCapture:$e(t.onFocusCapture,_.onFocusCapture),onBlurCapture:$e(t.onBlurCapture,_.onBlurCapture),onPointerDownCapture:$e(t.onPointerDownCapture,C.onPointerDownCapture)})});Rg.displayName=BQ;var HQ="DismissableLayerBranch",GQ=g.forwardRef((t,e)=>{const n=g.useContext(O5),r=g.useRef(null),i=It(e,r);return g.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),a.jsx(ht.div,{...t,ref:i})});GQ.displayName=HQ;function VQ(t,e=globalThis==null?void 0:globalThis.document){const n=Ar(t),r=g.useRef(!1),i=g.useRef(()=>{});return g.useEffect(()=>{const o=c=>{if(c.target&&!r.current){let l=function(){I5(UQ,n,u,{discrete:!0})};const u={originalEvent:c};c.pointerType==="touch"?(e.removeEventListener("click",i.current),i.current=l,e.addEventListener("click",i.current,{once:!0})):l()}else e.removeEventListener("click",i.current);r.current=!1},s=window.setTimeout(()=>{e.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(s),e.removeEventListener("pointerdown",o),e.removeEventListener("click",i.current)}},[e,n]),{onPointerDownCapture:()=>r.current=!0}}function KQ(t,e=globalThis==null?void 0:globalThis.document){const n=Ar(t),r=g.useRef(!1);return g.useEffect(()=>{const i=o=>{o.target&&!r.current&&I5(zQ,n,{originalEvent:o},{discrete:!1})};return e.addEventListener("focusin",i),()=>e.removeEventListener("focusin",i)},[e,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function TI(){const t=new CustomEvent(wA);document.dispatchEvent(t)}function I5(t,e,n,{discrete:r}){const i=n.originalEvent.target,o=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:n});e&&i.addEventListener(t,e,{once:!0}),r?P5(i,o):i.dispatchEvent(o)}var qr=globalThis!=null&&globalThis.document?g.useLayoutEffect:()=>{},WQ=jF.useId||(()=>{}),qQ=0;function os(t){const[e,n]=g.useState(WQ());return qr(()=>{n(r=>r??String(qQ++))},[t]),e?`radix-${e}`:""}const YQ=["top","right","bottom","left"],tl=Math.min,Xi=Math.max,yx=Math.round,Ov=Math.floor,nl=t=>({x:t,y:t}),QQ={left:"right",right:"left",bottom:"top",top:"bottom"},XQ={start:"end",end:"start"};function SA(t,e,n){return Xi(t,tl(e,n))}function za(t,e){return typeof t=="function"?t(e):t}function Ha(t){return t.split("-")[0]}function zf(t){return t.split("-")[1]}function dN(t){return t==="x"?"y":"x"}function fN(t){return t==="y"?"height":"width"}function rl(t){return["top","bottom"].includes(Ha(t))?"y":"x"}function hN(t){return dN(rl(t))}function JQ(t,e,n){n===void 0&&(n=!1);const r=zf(t),i=hN(t),o=fN(i);let s=i==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(s=xx(s)),[s,xx(s)]}function ZQ(t){const e=xx(t);return[CA(t),e,CA(e)]}function CA(t){return t.replace(/start|end/g,e=>XQ[e])}function eX(t,e,n){const r=["left","right"],i=["right","left"],o=["top","bottom"],s=["bottom","top"];switch(t){case"top":case"bottom":return n?e?i:r:e?r:i;case"left":case"right":return e?o:s;default:return[]}}function tX(t,e,n,r){const i=zf(t);let o=eX(Ha(t),n==="start",r);return i&&(o=o.map(s=>s+"-"+i),e&&(o=o.concat(o.map(CA)))),o}function xx(t){return t.replace(/left|right|bottom|top/g,e=>QQ[e])}function nX(t){return{top:0,right:0,bottom:0,left:0,...t}}function R5(t){return typeof t!="number"?nX(t):{top:t,right:t,bottom:t,left:t}}function bx(t){const{x:e,y:n,width:r,height:i}=t;return{width:r,height:i,top:n,left:e,right:e+r,bottom:n+i,x:e,y:n}}function kI(t,e,n){let{reference:r,floating:i}=t;const o=rl(e),s=hN(e),c=fN(s),l=Ha(e),u=o==="y",d=r.x+r.width/2-i.width/2,f=r.y+r.height/2-i.height/2,h=r[c]/2-i[c]/2;let p;switch(l){case"top":p={x:d,y:r.y-i.height};break;case"bottom":p={x:d,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:f};break;case"left":p={x:r.x-i.width,y:f};break;default:p={x:r.x,y:r.y}}switch(zf(e)){case"start":p[s]-=h*(n&&u?-1:1);break;case"end":p[s]+=h*(n&&u?-1:1);break}return p}const rX=async(t,e,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:o=[],platform:s}=n,c=o.filter(Boolean),l=await(s.isRTL==null?void 0:s.isRTL(e));let u=await s.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:f}=kI(u,r,l),h=r,p={},v=0;for(let m=0;m({name:"arrow",options:t,async fn(e){const{x:n,y:r,placement:i,rects:o,platform:s,elements:c,middlewareData:l}=e,{element:u,padding:d=0}=za(t,e)||{};if(u==null)return{};const f=R5(d),h={x:n,y:r},p=hN(i),v=fN(p),m=await s.getDimensions(u),y=p==="y",b=y?"top":"left",x=y?"bottom":"right",w=y?"clientHeight":"clientWidth",S=o.reference[v]+o.reference[p]-h[p]-o.floating[v],C=h[p]-o.reference[p],_=await(s.getOffsetParent==null?void 0:s.getOffsetParent(u));let A=_?_[w]:0;(!A||!await(s.isElement==null?void 0:s.isElement(_)))&&(A=c.floating[w]||o.floating[v]);const j=S/2-C/2,N=A/2-m[v]/2-1,k=tl(f[b],N),O=tl(f[x],N),E=k,R=A-m[v]-O,D=A/2-m[v]/2+j,G=SA(E,D,R),L=!l.arrow&&zf(i)!=null&&D!==G&&o.reference[v]/2-(DD<=0)){var O,E;const D=(((O=o.flip)==null?void 0:O.index)||0)+1,G=A[D];if(G)return{data:{index:D,overflows:k},reset:{placement:G}};let L=(E=k.filter(z=>z.overflows[0]<=0).sort((z,M)=>z.overflows[1]-M.overflows[1])[0])==null?void 0:E.placement;if(!L)switch(p){case"bestFit":{var R;const z=(R=k.filter(M=>{if(_){const $=rl(M.placement);return $===x||$==="y"}return!0}).map(M=>[M.placement,M.overflows.filter($=>$>0).reduce(($,Q)=>$+Q,0)]).sort((M,$)=>M[1]-$[1])[0])==null?void 0:R[0];z&&(L=z);break}case"initialPlacement":L=c;break}if(i!==L)return{reset:{placement:L}}}return{}}}};function PI(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function OI(t){return YQ.some(e=>t[e]>=0)}const sX=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:n}=e,{strategy:r="referenceHidden",...i}=za(t,e);switch(r){case"referenceHidden":{const o=await im(e,{...i,elementContext:"reference"}),s=PI(o,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:OI(s)}}}case"escaped":{const o=await im(e,{...i,altBoundary:!0}),s=PI(o,n.floating);return{data:{escapedOffsets:s,escaped:OI(s)}}}default:return{}}}}};async function aX(t,e){const{placement:n,platform:r,elements:i}=t,o=await(r.isRTL==null?void 0:r.isRTL(i.floating)),s=Ha(n),c=zf(n),l=rl(n)==="y",u=["left","top"].includes(s)?-1:1,d=o&&l?-1:1,f=za(e,t);let{mainAxis:h,crossAxis:p,alignmentAxis:v}=typeof f=="number"?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:f.mainAxis||0,crossAxis:f.crossAxis||0,alignmentAxis:f.alignmentAxis};return c&&typeof v=="number"&&(p=c==="end"?v*-1:v),l?{x:p*d,y:h*u}:{x:h*u,y:p*d}}const cX=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var n,r;const{x:i,y:o,placement:s,middlewareData:c}=e,l=await aX(e,t);return s===((n=c.offset)==null?void 0:n.placement)&&(r=c.arrow)!=null&&r.alignmentOffset?{}:{x:i+l.x,y:o+l.y,data:{...l,placement:s}}}}},lX=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:i}=e,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:y=>{let{x:b,y:x}=y;return{x:b,y:x}}},...l}=za(t,e),u={x:n,y:r},d=await im(e,l),f=rl(Ha(i)),h=dN(f);let p=u[h],v=u[f];if(o){const y=h==="y"?"top":"left",b=h==="y"?"bottom":"right",x=p+d[y],w=p-d[b];p=SA(x,p,w)}if(s){const y=f==="y"?"top":"left",b=f==="y"?"bottom":"right",x=v+d[y],w=v-d[b];v=SA(x,v,w)}const m=c.fn({...e,[h]:p,[f]:v});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[h]:o,[f]:s}}}}}},uX=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:n,y:r,placement:i,rects:o,middlewareData:s}=e,{offset:c=0,mainAxis:l=!0,crossAxis:u=!0}=za(t,e),d={x:n,y:r},f=rl(i),h=dN(f);let p=d[h],v=d[f];const m=za(c,e),y=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const w=h==="y"?"height":"width",S=o.reference[h]-o.floating[w]+y.mainAxis,C=o.reference[h]+o.reference[w]-y.mainAxis;pC&&(p=C)}if(u){var b,x;const w=h==="y"?"width":"height",S=["top","left"].includes(Ha(i)),C=o.reference[f]-o.floating[w]+(S&&((b=s.offset)==null?void 0:b[f])||0)+(S?0:y.crossAxis),_=o.reference[f]+o.reference[w]+(S?0:((x=s.offset)==null?void 0:x[f])||0)-(S?y.crossAxis:0);v_&&(v=_)}return{[h]:p,[f]:v}}}},dX=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,r;const{placement:i,rects:o,platform:s,elements:c}=e,{apply:l=()=>{},...u}=za(t,e),d=await im(e,u),f=Ha(i),h=zf(i),p=rl(i)==="y",{width:v,height:m}=o.floating;let y,b;f==="top"||f==="bottom"?(y=f,b=h===(await(s.isRTL==null?void 0:s.isRTL(c.floating))?"start":"end")?"left":"right"):(b=f,y=h==="end"?"top":"bottom");const x=m-d.top-d.bottom,w=v-d.left-d.right,S=tl(m-d[y],x),C=tl(v-d[b],w),_=!e.middlewareData.shift;let A=S,j=C;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(j=w),(r=e.middlewareData.shift)!=null&&r.enabled.y&&(A=x),_&&!h){const k=Xi(d.left,0),O=Xi(d.right,0),E=Xi(d.top,0),R=Xi(d.bottom,0);p?j=v-2*(k!==0||O!==0?k+O:Xi(d.left,d.right)):A=m-2*(E!==0||R!==0?E+R:Xi(d.top,d.bottom))}await l({...e,availableWidth:j,availableHeight:A});const N=await s.getDimensions(c.floating);return v!==N.width||m!==N.height?{reset:{rects:!0}}:{}}}};function W0(){return typeof window<"u"}function Hf(t){return M5(t)?(t.nodeName||"").toLowerCase():"#document"}function to(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function ra(t){var e;return(e=(M5(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function M5(t){return W0()?t instanceof Node||t instanceof to(t).Node:!1}function fs(t){return W0()?t instanceof Element||t instanceof to(t).Element:!1}function Qs(t){return W0()?t instanceof HTMLElement||t instanceof to(t).HTMLElement:!1}function II(t){return!W0()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof to(t).ShadowRoot}function Mg(t){const{overflow:e,overflowX:n,overflowY:r,display:i}=hs(t);return/auto|scroll|overlay|hidden|clip/.test(e+r+n)&&!["inline","contents"].includes(i)}function fX(t){return["table","td","th"].includes(Hf(t))}function q0(t){return[":popover-open",":modal"].some(e=>{try{return t.matches(e)}catch{return!1}})}function pN(t){const e=mN(),n=fs(t)?hs(t):t;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function hX(t){let e=il(t);for(;Qs(e)&&!rf(e);){if(pN(e))return e;if(q0(e))return null;e=il(e)}return null}function mN(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function rf(t){return["html","body","#document"].includes(Hf(t))}function hs(t){return to(t).getComputedStyle(t)}function Y0(t){return fs(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function il(t){if(Hf(t)==="html")return t;const e=t.assignedSlot||t.parentNode||II(t)&&t.host||ra(t);return II(e)?e.host:e}function D5(t){const e=il(t);return rf(e)?t.ownerDocument?t.ownerDocument.body:t.body:Qs(e)&&Mg(e)?e:D5(e)}function om(t,e,n){var r;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=D5(t),o=i===((r=t.ownerDocument)==null?void 0:r.body),s=to(i);if(o){const c=_A(s);return e.concat(s,s.visualViewport||[],Mg(i)?i:[],c&&n?om(c):[])}return e.concat(i,om(i,[],n))}function _A(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function $5(t){const e=hs(t);let n=parseFloat(e.width)||0,r=parseFloat(e.height)||0;const i=Qs(t),o=i?t.offsetWidth:n,s=i?t.offsetHeight:r,c=yx(n)!==o||yx(r)!==s;return c&&(n=o,r=s),{width:n,height:r,$:c}}function gN(t){return fs(t)?t:t.contextElement}function Ed(t){const e=gN(t);if(!Qs(e))return nl(1);const n=e.getBoundingClientRect(),{width:r,height:i,$:o}=$5(e);let s=(o?yx(n.width):n.width)/r,c=(o?yx(n.height):n.height)/i;return(!s||!Number.isFinite(s))&&(s=1),(!c||!Number.isFinite(c))&&(c=1),{x:s,y:c}}const pX=nl(0);function L5(t){const e=to(t);return!mN()||!e.visualViewport?pX:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function mX(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==to(t)?!1:e}function pu(t,e,n,r){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),o=gN(t);let s=nl(1);e&&(r?fs(r)&&(s=Ed(r)):s=Ed(t));const c=mX(o,n,r)?L5(o):nl(0);let l=(i.left+c.x)/s.x,u=(i.top+c.y)/s.y,d=i.width/s.x,f=i.height/s.y;if(o){const h=to(o),p=r&&fs(r)?to(r):r;let v=h,m=_A(v);for(;m&&r&&p!==v;){const y=Ed(m),b=m.getBoundingClientRect(),x=hs(m),w=b.left+(m.clientLeft+parseFloat(x.paddingLeft))*y.x,S=b.top+(m.clientTop+parseFloat(x.paddingTop))*y.y;l*=y.x,u*=y.y,d*=y.x,f*=y.y,l+=w,u+=S,v=to(m),m=_A(v)}}return bx({width:d,height:f,x:l,y:u})}function gX(t){let{elements:e,rect:n,offsetParent:r,strategy:i}=t;const o=i==="fixed",s=ra(r),c=e?q0(e.floating):!1;if(r===s||c&&o)return n;let l={scrollLeft:0,scrollTop:0},u=nl(1);const d=nl(0),f=Qs(r);if((f||!f&&!o)&&((Hf(r)!=="body"||Mg(s))&&(l=Y0(r)),Qs(r))){const h=pu(r);u=Ed(r),d.x=h.x+r.clientLeft,d.y=h.y+r.clientTop}return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+d.x,y:n.y*u.y-l.scrollTop*u.y+d.y}}function vX(t){return Array.from(t.getClientRects())}function AA(t,e){const n=Y0(t).scrollLeft;return e?e.left+n:pu(ra(t)).left+n}function yX(t){const e=ra(t),n=Y0(t),r=t.ownerDocument.body,i=Xi(e.scrollWidth,e.clientWidth,r.scrollWidth,r.clientWidth),o=Xi(e.scrollHeight,e.clientHeight,r.scrollHeight,r.clientHeight);let s=-n.scrollLeft+AA(t);const c=-n.scrollTop;return hs(r).direction==="rtl"&&(s+=Xi(e.clientWidth,r.clientWidth)-i),{width:i,height:o,x:s,y:c}}function xX(t,e){const n=to(t),r=ra(t),i=n.visualViewport;let o=r.clientWidth,s=r.clientHeight,c=0,l=0;if(i){o=i.width,s=i.height;const u=mN();(!u||u&&e==="fixed")&&(c=i.offsetLeft,l=i.offsetTop)}return{width:o,height:s,x:c,y:l}}function bX(t,e){const n=pu(t,!0,e==="fixed"),r=n.top+t.clientTop,i=n.left+t.clientLeft,o=Qs(t)?Ed(t):nl(1),s=t.clientWidth*o.x,c=t.clientHeight*o.y,l=i*o.x,u=r*o.y;return{width:s,height:c,x:l,y:u}}function RI(t,e,n){let r;if(e==="viewport")r=xX(t,n);else if(e==="document")r=yX(ra(t));else if(fs(e))r=bX(e,n);else{const i=L5(t);r={...e,x:e.x-i.x,y:e.y-i.y}}return bx(r)}function F5(t,e){const n=il(t);return n===e||!fs(n)||rf(n)?!1:hs(n).position==="fixed"||F5(n,e)}function wX(t,e){const n=e.get(t);if(n)return n;let r=om(t,[],!1).filter(c=>fs(c)&&Hf(c)!=="body"),i=null;const o=hs(t).position==="fixed";let s=o?il(t):t;for(;fs(s)&&!rf(s);){const c=hs(s),l=pN(s);!l&&c.position==="fixed"&&(i=null),(o?!l&&!i:!l&&c.position==="static"&&!!i&&["absolute","fixed"].includes(i.position)||Mg(s)&&!l&&F5(t,s))?r=r.filter(d=>d!==s):i=c,s=il(s)}return e.set(t,r),r}function SX(t){let{element:e,boundary:n,rootBoundary:r,strategy:i}=t;const s=[...n==="clippingAncestors"?q0(e)?[]:wX(e,this._c):[].concat(n),r],c=s[0],l=s.reduce((u,d)=>{const f=RI(e,d,i);return u.top=Xi(f.top,u.top),u.right=tl(f.right,u.right),u.bottom=tl(f.bottom,u.bottom),u.left=Xi(f.left,u.left),u},RI(e,c,i));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function CX(t){const{width:e,height:n}=$5(t);return{width:e,height:n}}function _X(t,e,n){const r=Qs(e),i=ra(e),o=n==="fixed",s=pu(t,!0,o,e);let c={scrollLeft:0,scrollTop:0};const l=nl(0);if(r||!r&&!o)if((Hf(e)!=="body"||Mg(i))&&(c=Y0(e)),r){const p=pu(e,!0,o,e);l.x=p.x+e.clientLeft,l.y=p.y+e.clientTop}else i&&(l.x=AA(i));let u=0,d=0;if(i&&!r&&!o){const p=i.getBoundingClientRect();d=p.top+c.scrollTop,u=p.left+c.scrollLeft-AA(i,p)}const f=s.left+c.scrollLeft-l.x-u,h=s.top+c.scrollTop-l.y-d;return{x:f,y:h,width:s.width,height:s.height}}function gC(t){return hs(t).position==="static"}function MI(t,e){if(!Qs(t)||hs(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return ra(t)===n&&(n=n.ownerDocument.body),n}function B5(t,e){const n=to(t);if(q0(t))return n;if(!Qs(t)){let i=il(t);for(;i&&!rf(i);){if(fs(i)&&!gC(i))return i;i=il(i)}return n}let r=MI(t,e);for(;r&&fX(r)&&gC(r);)r=MI(r,e);return r&&rf(r)&&gC(r)&&!pN(r)?n:r||hX(t)||n}const AX=async function(t){const e=this.getOffsetParent||B5,n=this.getDimensions,r=await n(t.floating);return{reference:_X(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function jX(t){return hs(t).direction==="rtl"}const EX={convertOffsetParentRelativeRectToViewportRelativeRect:gX,getDocumentElement:ra,getClippingRect:SX,getOffsetParent:B5,getElementRects:AX,getClientRects:vX,getDimensions:CX,getScale:Ed,isElement:fs,isRTL:jX};function NX(t,e){let n=null,r;const i=ra(t);function o(){var c;clearTimeout(r),(c=n)==null||c.disconnect(),n=null}function s(c,l){c===void 0&&(c=!1),l===void 0&&(l=1),o();const{left:u,top:d,width:f,height:h}=t.getBoundingClientRect();if(c||e(),!f||!h)return;const p=Ov(d),v=Ov(i.clientWidth-(u+f)),m=Ov(i.clientHeight-(d+h)),y=Ov(u),x={rootMargin:-p+"px "+-v+"px "+-m+"px "+-y+"px",threshold:Xi(0,tl(1,l))||1};let w=!0;function S(C){const _=C[0].intersectionRatio;if(_!==l){if(!w)return s();_?s(!1,_):r=setTimeout(()=>{s(!1,1e-7)},1e3)}w=!1}try{n=new IntersectionObserver(S,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,x)}n.observe(t)}return s(!0),o}function TX(t,e,n,r){r===void 0&&(r={});const{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=gN(t),d=i||o?[...u?om(u):[],...om(e)]:[];d.forEach(b=>{i&&b.addEventListener("scroll",n,{passive:!0}),o&&b.addEventListener("resize",n)});const f=u&&c?NX(u,n):null;let h=-1,p=null;s&&(p=new ResizeObserver(b=>{let[x]=b;x&&x.target===u&&p&&(p.unobserve(e),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var w;(w=p)==null||w.observe(e)})),n()}),u&&!l&&p.observe(u),p.observe(e));let v,m=l?pu(t):null;l&&y();function y(){const b=pu(t);m&&(b.x!==m.x||b.y!==m.y||b.width!==m.width||b.height!==m.height)&&n(),m=b,v=requestAnimationFrame(y)}return n(),()=>{var b;d.forEach(x=>{i&&x.removeEventListener("scroll",n),o&&x.removeEventListener("resize",n)}),f==null||f(),(b=p)==null||b.disconnect(),p=null,l&&cancelAnimationFrame(v)}}const kX=cX,PX=lX,OX=oX,IX=dX,RX=sX,DI=iX,MX=uX,DX=(t,e,n)=>{const r=new Map,i={platform:EX,...n},o={...i.platform,_c:r};return rX(t,e,{...i,platform:o})};var Ey=typeof document<"u"?g.useLayoutEffect:g.useEffect;function wx(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let n,r,i;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(n=t.length,n!==e.length)return!1;for(r=n;r--!==0;)if(!wx(t[r],e[r]))return!1;return!0}if(i=Object.keys(t),n=i.length,n!==Object.keys(e).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(e,i[r]))return!1;for(r=n;r--!==0;){const o=i[r];if(!(o==="_owner"&&t.$$typeof)&&!wx(t[o],e[o]))return!1}return!0}return t!==t&&e!==e}function U5(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function $I(t,e){const n=U5(t);return Math.round(e*n)/n}function vC(t){const e=g.useRef(t);return Ey(()=>{e.current=t}),e}function $X(t){t===void 0&&(t={});const{placement:e="bottom",strategy:n="absolute",middleware:r=[],platform:i,elements:{reference:o,floating:s}={},transform:c=!0,whileElementsMounted:l,open:u}=t,[d,f]=g.useState({x:0,y:0,strategy:n,placement:e,middlewareData:{},isPositioned:!1}),[h,p]=g.useState(r);wx(h,r)||p(r);const[v,m]=g.useState(null),[y,b]=g.useState(null),x=g.useCallback(M=>{M!==_.current&&(_.current=M,m(M))},[]),w=g.useCallback(M=>{M!==A.current&&(A.current=M,b(M))},[]),S=o||v,C=s||y,_=g.useRef(null),A=g.useRef(null),j=g.useRef(d),N=l!=null,k=vC(l),O=vC(i),E=vC(u),R=g.useCallback(()=>{if(!_.current||!A.current)return;const M={placement:e,strategy:n,middleware:h};O.current&&(M.platform=O.current),DX(_.current,A.current,M).then($=>{const Q={...$,isPositioned:E.current!==!1};D.current&&!wx(j.current,Q)&&(j.current=Q,es.flushSync(()=>{f(Q)}))})},[h,e,n,O,E]);Ey(()=>{u===!1&&j.current.isPositioned&&(j.current.isPositioned=!1,f(M=>({...M,isPositioned:!1})))},[u]);const D=g.useRef(!1);Ey(()=>(D.current=!0,()=>{D.current=!1}),[]),Ey(()=>{if(S&&(_.current=S),C&&(A.current=C),S&&C){if(k.current)return k.current(S,C,R);R()}},[S,C,R,k,N]);const G=g.useMemo(()=>({reference:_,floating:A,setReference:x,setFloating:w}),[x,w]),L=g.useMemo(()=>({reference:S,floating:C}),[S,C]),z=g.useMemo(()=>{const M={position:n,left:0,top:0};if(!L.floating)return M;const $=$I(L.floating,d.x),Q=$I(L.floating,d.y);return c?{...M,transform:"translate("+$+"px, "+Q+"px)",...U5(L.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:$,top:Q}},[n,c,L.floating,d.x,d.y]);return g.useMemo(()=>({...d,update:R,refs:G,elements:L,floatingStyles:z}),[d,R,G,L,z])}const LX=t=>{function e(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:t,fn(n){const{element:r,padding:i}=typeof t=="function"?t(n):t;return r&&e(r)?r.current!=null?DI({element:r.current,padding:i}).fn(n):{}:r?DI({element:r,padding:i}).fn(n):{}}}},FX=(t,e)=>({...kX(t),options:[t,e]}),BX=(t,e)=>({...PX(t),options:[t,e]}),UX=(t,e)=>({...MX(t),options:[t,e]}),zX=(t,e)=>({...OX(t),options:[t,e]}),HX=(t,e)=>({...IX(t),options:[t,e]}),GX=(t,e)=>({...RX(t),options:[t,e]}),VX=(t,e)=>({...LX(t),options:[t,e]});var KX="Arrow",z5=g.forwardRef((t,e)=>{const{children:n,width:r=10,height:i=5,...o}=t;return a.jsx(ht.svg,{...o,ref:e,width:r,height:i,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:t.asChild?n:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});z5.displayName=KX;var WX=z5;function qX(t,e=[]){let n=[];function r(o,s){const c=g.createContext(s),l=n.length;n=[...n,s];function u(f){const{scope:h,children:p,...v}=f,m=(h==null?void 0:h[t][l])||c,y=g.useMemo(()=>v,Object.values(v));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,v=g.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${f}\` must be used within \`${o}\``)}return u.displayName=o+"Provider",[u,d]}const i=()=>{const o=n.map(s=>g.createContext(s));return function(c){const l=(c==null?void 0:c[t])||o;return g.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,YX(i,...e)]}function YX(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(o)[`__scope${u}`];return{...c,...f}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])}};return n.scopeName=e.scopeName,n}function Dg(t){const[e,n]=g.useState(void 0);return qr(()=>{if(t){n({width:t.offsetWidth,height:t.offsetHeight});const r=new ResizeObserver(i=>{if(!Array.isArray(i)||!i.length)return;const o=i[0];let s,c;if("borderBoxSize"in o){const l=o.borderBoxSize,u=Array.isArray(l)?l[0]:l;s=u.inlineSize,c=u.blockSize}else s=t.offsetWidth,c=t.offsetHeight;n({width:s,height:c})});return r.observe(t,{box:"border-box"}),()=>r.unobserve(t)}else n(void 0)},[t]),e}var vN="Popper",[H5,Gf]=qX(vN),[QX,G5]=H5(vN),V5=t=>{const{__scopePopper:e,children:n}=t,[r,i]=g.useState(null);return a.jsx(QX,{scope:e,anchor:r,onAnchorChange:i,children:n})};V5.displayName=vN;var K5="PopperAnchor",W5=g.forwardRef((t,e)=>{const{__scopePopper:n,virtualRef:r,...i}=t,o=G5(K5,n),s=g.useRef(null),c=It(e,s);return g.useEffect(()=>{o.onAnchorChange((r==null?void 0:r.current)||s.current)}),r?null:a.jsx(ht.div,{...i,ref:c})});W5.displayName=K5;var yN="PopperContent",[XX,JX]=H5(yN),q5=g.forwardRef((t,e)=>{var U,ue,oe,ne,je,K;const{__scopePopper:n,side:r="bottom",sideOffset:i=0,align:o="center",alignOffset:s=0,arrowPadding:c=0,avoidCollisions:l=!0,collisionBoundary:u=[],collisionPadding:d=0,sticky:f="partial",hideWhenDetached:h=!1,updatePositionStrategy:p="optimized",onPlaced:v,...m}=t,y=G5(yN,n),[b,x]=g.useState(null),w=It(e,et=>x(et)),[S,C]=g.useState(null),_=Dg(S),A=(_==null?void 0:_.width)??0,j=(_==null?void 0:_.height)??0,N=r+(o!=="center"?"-"+o:""),k=typeof d=="number"?d:{top:0,right:0,bottom:0,left:0,...d},O=Array.isArray(u)?u:[u],E=O.length>0,R={padding:k,boundary:O.filter(eJ),altBoundary:E},{refs:D,floatingStyles:G,placement:L,isPositioned:z,middlewareData:M}=$X({strategy:"fixed",placement:N,whileElementsMounted:(...et)=>TX(...et,{animationFrame:p==="always"}),elements:{reference:y.anchor},middleware:[FX({mainAxis:i+j,alignmentAxis:s}),l&&BX({mainAxis:!0,crossAxis:!1,limiter:f==="partial"?UX():void 0,...R}),l&&zX({...R}),HX({...R,apply:({elements:et,rects:Me,availableWidth:ut,availableHeight:qe})=>{const{width:Pt,height:F}=Me.reference,J=et.floating.style;J.setProperty("--radix-popper-available-width",`${ut}px`),J.setProperty("--radix-popper-available-height",`${qe}px`),J.setProperty("--radix-popper-anchor-width",`${Pt}px`),J.setProperty("--radix-popper-anchor-height",`${F}px`)}}),S&&VX({element:S,padding:c}),tJ({arrowWidth:A,arrowHeight:j}),h&&GX({strategy:"referenceHidden",...R})]}),[$,Q]=X5(L),q=Ar(v);qr(()=>{z&&(q==null||q())},[z,q]);const te=(U=M.arrow)==null?void 0:U.x,xe=(ue=M.arrow)==null?void 0:ue.y,B=((oe=M.arrow)==null?void 0:oe.centerOffset)!==0,[ce,fe]=g.useState();return qr(()=>{b&&fe(window.getComputedStyle(b).zIndex)},[b]),a.jsx("div",{ref:D.setFloating,"data-radix-popper-content-wrapper":"",style:{...G,transform:z?G.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ce,"--radix-popper-transform-origin":[(ne=M.transformOrigin)==null?void 0:ne.x,(je=M.transformOrigin)==null?void 0:je.y].join(" "),...((K=M.hide)==null?void 0:K.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:a.jsx(XX,{scope:n,placedSide:$,onArrowChange:C,arrowX:te,arrowY:xe,shouldHideArrow:B,children:a.jsx(ht.div,{"data-side":$,"data-align":Q,...m,ref:w,style:{...m.style,animation:z?void 0:"none"}})})})});q5.displayName=yN;var Y5="PopperArrow",ZX={top:"bottom",right:"left",bottom:"top",left:"right"},Q5=g.forwardRef(function(e,n){const{__scopePopper:r,...i}=e,o=JX(Y5,r),s=ZX[o.placedSide];return a.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:a.jsx(WX,{...i,ref:n,style:{...i.style,display:"block"}})})});Q5.displayName=Y5;function eJ(t){return t!==null}var tJ=t=>({name:"transformOrigin",options:t,fn(e){var y,b,x;const{placement:n,rects:r,middlewareData:i}=e,s=((y=i.arrow)==null?void 0:y.centerOffset)!==0,c=s?0:t.arrowWidth,l=s?0:t.arrowHeight,[u,d]=X5(n),f={start:"0%",center:"50%",end:"100%"}[d],h=(((b=i.arrow)==null?void 0:b.x)??0)+c/2,p=(((x=i.arrow)==null?void 0:x.y)??0)+l/2;let v="",m="";return u==="bottom"?(v=s?f:`${h}px`,m=`${-l}px`):u==="top"?(v=s?f:`${h}px`,m=`${r.floating.height+l}px`):u==="right"?(v=`${-l}px`,m=s?f:`${p}px`):u==="left"&&(v=`${r.floating.width+l}px`,m=s?f:`${p}px`),{data:{x:v,y:m}}}});function X5(t){const[e,n="center"]=t.split("-");return[e,n]}var J5=V5,xN=W5,bN=q5,wN=Q5,nJ="Portal",Q0=g.forwardRef((t,e)=>{var c;const{container:n,...r}=t,[i,o]=g.useState(!1);qr(()=>o(!0),[]);const s=n||i&&((c=globalThis==null?void 0:globalThis.document)==null?void 0:c.body);return s?T5.createPortal(a.jsx(ht.div,{...r,ref:e}),s):null});Q0.displayName=nJ;function rJ(t,e){return g.useReducer((n,r)=>e[n][r]??n,t)}var Yr=t=>{const{present:e,children:n}=t,r=iJ(e),i=typeof n=="function"?n({present:r.isPresent}):g.Children.only(n),o=It(r.ref,oJ(i));return typeof n=="function"||r.isPresent?g.cloneElement(i,{ref:o}):null};Yr.displayName="Presence";function iJ(t){const[e,n]=g.useState(),r=g.useRef({}),i=g.useRef(t),o=g.useRef("none"),s=t?"mounted":"unmounted",[c,l]=rJ(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return g.useEffect(()=>{const u=Iv(r.current);o.current=c==="mounted"?u:"none"},[c]),qr(()=>{const u=r.current,d=i.current;if(d!==t){const h=o.current,p=Iv(u);t?l("MOUNT"):p==="none"||(u==null?void 0:u.display)==="none"?l("UNMOUNT"):l(d&&h!==p?"ANIMATION_OUT":"UNMOUNT"),i.current=t}},[t,l]),qr(()=>{if(e){let u;const d=e.ownerDocument.defaultView??window,f=p=>{const m=Iv(r.current).includes(p.animationName);if(p.target===e&&m&&(l("ANIMATION_END"),!i.current)){const y=e.style.animationFillMode;e.style.animationFillMode="forwards",u=d.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=y)})}},h=p=>{p.target===e&&(o.current=Iv(r.current))};return e.addEventListener("animationstart",h),e.addEventListener("animationcancel",f),e.addEventListener("animationend",f),()=>{d.clearTimeout(u),e.removeEventListener("animationstart",h),e.removeEventListener("animationcancel",f),e.removeEventListener("animationend",f)}}else l("ANIMATION_END")},[e,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:g.useCallback(u=>{u&&(r.current=getComputedStyle(u)),n(u)},[])}}function Iv(t){return(t==null?void 0:t.animationName)||"none"}function oJ(t){var r,i;let e=(r=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(i=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:i.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}function ps({prop:t,defaultProp:e,onChange:n=()=>{}}){const[r,i]=sJ({defaultProp:e,onChange:n}),o=t!==void 0,s=o?t:r,c=Ar(n),l=g.useCallback(u=>{if(o){const f=typeof u=="function"?u(t):u;f!==t&&c(f)}else i(u)},[o,t,i,c]);return[s,l]}function sJ({defaultProp:t,onChange:e}){const n=g.useState(t),[r]=n,i=g.useRef(r),o=Ar(e);return g.useEffect(()=>{i.current!==r&&(o(r),i.current=r)},[r,i,o]),n}var aJ="VisuallyHidden",SN=g.forwardRef((t,e)=>a.jsx(ht.span,{...t,ref:e,style:{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal",...t.style}}));SN.displayName=aJ;var cJ=SN,[X0,GBe]=Bi("Tooltip",[Gf]),CN=Gf(),Z5="TooltipProvider",lJ=700,LI="tooltip.open",[uJ,eB]=X0(Z5),tB=t=>{const{__scopeTooltip:e,delayDuration:n=lJ,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:o}=t,[s,c]=g.useState(!0),l=g.useRef(!1),u=g.useRef(0);return g.useEffect(()=>{const d=u.current;return()=>window.clearTimeout(d)},[]),a.jsx(uJ,{scope:e,isOpenDelayed:s,delayDuration:n,onOpen:g.useCallback(()=>{window.clearTimeout(u.current),c(!1)},[]),onClose:g.useCallback(()=>{window.clearTimeout(u.current),u.current=window.setTimeout(()=>c(!0),r)},[r]),isPointerInTransitRef:l,onPointerInTransitChange:g.useCallback(d=>{l.current=d},[]),disableHoverableContent:i,children:o})};tB.displayName=Z5;var nB="Tooltip",[VBe,J0]=X0(nB),jA="TooltipTrigger",dJ=g.forwardRef((t,e)=>{const{__scopeTooltip:n,...r}=t,i=J0(jA,n),o=eB(jA,n),s=CN(n),c=g.useRef(null),l=It(e,c,i.onTriggerChange),u=g.useRef(!1),d=g.useRef(!1),f=g.useCallback(()=>u.current=!1,[]);return g.useEffect(()=>()=>document.removeEventListener("pointerup",f),[f]),a.jsx(xN,{asChild:!0,...s,children:a.jsx(ht.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:l,onPointerMove:$e(t.onPointerMove,h=>{h.pointerType!=="touch"&&!d.current&&!o.isPointerInTransitRef.current&&(i.onTriggerEnter(),d.current=!0)}),onPointerLeave:$e(t.onPointerLeave,()=>{i.onTriggerLeave(),d.current=!1}),onPointerDown:$e(t.onPointerDown,()=>{u.current=!0,document.addEventListener("pointerup",f,{once:!0})}),onFocus:$e(t.onFocus,()=>{u.current||i.onOpen()}),onBlur:$e(t.onBlur,i.onClose),onClick:$e(t.onClick,i.onClose)})})});dJ.displayName=jA;var fJ="TooltipPortal",[KBe,hJ]=X0(fJ,{forceMount:void 0}),of="TooltipContent",rB=g.forwardRef((t,e)=>{const n=hJ(of,t.__scopeTooltip),{forceMount:r=n.forceMount,side:i="top",...o}=t,s=J0(of,t.__scopeTooltip);return a.jsx(Yr,{present:r||s.open,children:s.disableHoverableContent?a.jsx(iB,{side:i,...o,ref:e}):a.jsx(pJ,{side:i,...o,ref:e})})}),pJ=g.forwardRef((t,e)=>{const n=J0(of,t.__scopeTooltip),r=eB(of,t.__scopeTooltip),i=g.useRef(null),o=It(e,i),[s,c]=g.useState(null),{trigger:l,onClose:u}=n,d=i.current,{onPointerInTransitChange:f}=r,h=g.useCallback(()=>{c(null),f(!1)},[f]),p=g.useCallback((v,m)=>{const y=v.currentTarget,b={x:v.clientX,y:v.clientY},x=yJ(b,y.getBoundingClientRect()),w=xJ(b,x),S=bJ(m.getBoundingClientRect()),C=SJ([...w,...S]);c(C),f(!0)},[f]);return g.useEffect(()=>()=>h(),[h]),g.useEffect(()=>{if(l&&d){const v=y=>p(y,d),m=y=>p(y,l);return l.addEventListener("pointerleave",v),d.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",v),d.removeEventListener("pointerleave",m)}}},[l,d,p,h]),g.useEffect(()=>{if(s){const v=m=>{const y=m.target,b={x:m.clientX,y:m.clientY},x=(l==null?void 0:l.contains(y))||(d==null?void 0:d.contains(y)),w=!wJ(b,s);x?h():w&&(h(),u())};return document.addEventListener("pointermove",v),()=>document.removeEventListener("pointermove",v)}},[l,d,s,u,h]),a.jsx(iB,{...t,ref:o})}),[mJ,gJ]=X0(nB,{isInside:!1}),iB=g.forwardRef((t,e)=>{const{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:o,onPointerDownOutside:s,...c}=t,l=J0(of,n),u=CN(n),{onClose:d}=l;return g.useEffect(()=>(document.addEventListener(LI,d),()=>document.removeEventListener(LI,d)),[d]),g.useEffect(()=>{if(l.trigger){const f=h=>{const p=h.target;p!=null&&p.contains(l.trigger)&&d()};return window.addEventListener("scroll",f,{capture:!0}),()=>window.removeEventListener("scroll",f,{capture:!0})}},[l.trigger,d]),a.jsx(Rg,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:f=>f.preventDefault(),onDismiss:d,children:a.jsxs(bN,{"data-state":l.stateAttribute,...u,...c,ref:e,style:{...c.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[a.jsx(uN,{children:r}),a.jsx(mJ,{scope:n,isInside:!0,children:a.jsx(cJ,{id:l.contentId,role:"tooltip",children:i||r})})]})})});rB.displayName=of;var oB="TooltipArrow",vJ=g.forwardRef((t,e)=>{const{__scopeTooltip:n,...r}=t,i=CN(n);return gJ(oB,n).isInside?null:a.jsx(wN,{...i,...r,ref:e})});vJ.displayName=oB;function yJ(t,e){const n=Math.abs(e.top-t.y),r=Math.abs(e.bottom-t.y),i=Math.abs(e.right-t.x),o=Math.abs(e.left-t.x);switch(Math.min(n,r,i,o)){case o:return"left";case i:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function xJ(t,e,n=5){const r=[];switch(e){case"top":r.push({x:t.x-n,y:t.y+n},{x:t.x+n,y:t.y+n});break;case"bottom":r.push({x:t.x-n,y:t.y-n},{x:t.x+n,y:t.y-n});break;case"left":r.push({x:t.x+n,y:t.y-n},{x:t.x+n,y:t.y+n});break;case"right":r.push({x:t.x-n,y:t.y-n},{x:t.x-n,y:t.y+n});break}return r}function bJ(t){const{top:e,right:n,bottom:r,left:i}=t;return[{x:i,y:e},{x:n,y:e},{x:n,y:r},{x:i,y:r}]}function wJ(t,e){const{x:n,y:r}=t;let i=!1;for(let o=0,s=e.length-1;or!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function SJ(t){const e=t.slice();return e.sort((n,r)=>n.xr.x?1:n.yr.y?1:0),CJ(e)}function CJ(t){if(t.length<=1)return t.slice();const e=[];for(let r=0;r=2;){const o=e[e.length-1],s=e[e.length-2];if((o.x-s.x)*(i.y-s.y)>=(o.y-s.y)*(i.x-s.x))e.pop();else break}e.push(i)}e.pop();const n=[];for(let r=t.length-1;r>=0;r--){const i=t[r];for(;n.length>=2;){const o=n[n.length-1],s=n[n.length-2];if((o.x-s.x)*(i.y-s.y)>=(o.y-s.y)*(i.x-s.x))n.pop();else break}n.push(i)}return n.pop(),e.length===1&&n.length===1&&e[0].x===n[0].x&&e[0].y===n[0].y?e:e.concat(n)}var _J=tB,sB=rB;function aB(t){var e,n,r="";if(typeof t=="string"||typeof t=="number")r+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e{const e=EJ(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=t;return{getClassGroupId:s=>{const c=s.split(_N);return c[0]===""&&c.length!==1&&c.shift(),cB(c,e)||jJ(s)},getConflictingClassGroupIds:(s,c)=>{const l=n[s]||[];return c&&r[s]?[...l,...r[s]]:l}}},cB=(t,e)=>{var s;if(t.length===0)return e.classGroupId;const n=t[0],r=e.nextPart.get(n),i=r?cB(t.slice(1),r):void 0;if(i)return i;if(e.validators.length===0)return;const o=t.join(_N);return(s=e.validators.find(({validator:c})=>c(o)))==null?void 0:s.classGroupId},FI=/^\[(.+)\]$/,jJ=t=>{if(FI.test(t)){const e=FI.exec(t)[1],n=e==null?void 0:e.substring(0,e.indexOf(":"));if(n)return"arbitrary.."+n}},EJ=t=>{const{theme:e,prefix:n}=t,r={nextPart:new Map,validators:[]};return TJ(Object.entries(t.classGroups),n).forEach(([o,s])=>{EA(s,r,o,e)}),r},EA=(t,e,n,r)=>{t.forEach(i=>{if(typeof i=="string"){const o=i===""?e:BI(e,i);o.classGroupId=n;return}if(typeof i=="function"){if(NJ(i)){EA(i(r),e,n,r);return}e.validators.push({validator:i,classGroupId:n});return}Object.entries(i).forEach(([o,s])=>{EA(s,BI(e,o),n,r)})})},BI=(t,e)=>{let n=t;return e.split(_N).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},NJ=t=>t.isThemeGetter,TJ=(t,e)=>e?t.map(([n,r])=>{const i=r.map(o=>typeof o=="string"?e+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([s,c])=>[e+s,c])):o);return[n,i]}):t,kJ=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=new Map,r=new Map;const i=(o,s)=>{n.set(o,s),e++,e>t&&(e=0,r=n,n=new Map)};return{get(o){let s=n.get(o);if(s!==void 0)return s;if((s=r.get(o))!==void 0)return i(o,s),s},set(o,s){n.has(o)?n.set(o,s):i(o,s)}}},lB="!",PJ=t=>{const{separator:e,experimentalParseClassName:n}=t,r=e.length===1,i=e[0],o=e.length,s=c=>{const l=[];let u=0,d=0,f;for(let y=0;yd?f-d:void 0;return{modifiers:l,hasImportantModifier:p,baseClassName:v,maybePostfixModifierPosition:m}};return n?c=>n({className:c,parseClassName:s}):s},OJ=t=>{if(t.length<=1)return t;const e=[];let n=[];return t.forEach(r=>{r[0]==="["?(e.push(...n.sort(),r),n=[]):n.push(r)}),e.push(...n.sort()),e},IJ=t=>({cache:kJ(t.cacheSize),parseClassName:PJ(t),...AJ(t)}),RJ=/\s+/,MJ=(t,e)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i}=e,o=[],s=t.trim().split(RJ);let c="";for(let l=s.length-1;l>=0;l-=1){const u=s[l],{modifiers:d,hasImportantModifier:f,baseClassName:h,maybePostfixModifierPosition:p}=n(u);let v=!!p,m=r(v?h.substring(0,p):h);if(!m){if(!v){c=u+(c.length>0?" "+c:c);continue}if(m=r(h),!m){c=u+(c.length>0?" "+c:c);continue}v=!1}const y=OJ(d).join(":"),b=f?y+lB:y,x=b+m;if(o.includes(x))continue;o.push(x);const w=i(m,v);for(let S=0;S0?" "+c:c)}return c};function DJ(){let t=0,e,n,r="";for(;t{if(typeof t=="string")return t;let e,n="";for(let r=0;rf(d),t());return n=IJ(u),r=n.cache.get,i=n.cache.set,o=c,c(l)}function c(l){const u=r(l);if(u)return u;const d=MJ(l,n);return i(l,d),d}return function(){return o(DJ.apply(null,arguments))}}const Rn=t=>{const e=n=>n[t]||[];return e.isThemeGetter=!0,e},dB=/^\[(?:([a-z-]+):)?(.+)\]$/i,LJ=/^\d+\/\d+$/,FJ=new Set(["px","full","screen"]),BJ=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,UJ=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,zJ=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,HJ=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,GJ=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ca=t=>Nd(t)||FJ.has(t)||LJ.test(t),oc=t=>Vf(t,"length",JJ),Nd=t=>!!t&&!Number.isNaN(Number(t)),yC=t=>Vf(t,"number",Nd),Mh=t=>!!t&&Number.isInteger(Number(t)),VJ=t=>t.endsWith("%")&&Nd(t.slice(0,-1)),Ht=t=>dB.test(t),sc=t=>BJ.test(t),KJ=new Set(["length","size","percentage"]),WJ=t=>Vf(t,KJ,fB),qJ=t=>Vf(t,"position",fB),YJ=new Set(["image","url"]),QJ=t=>Vf(t,YJ,eZ),XJ=t=>Vf(t,"",ZJ),Dh=()=>!0,Vf=(t,e,n)=>{const r=dB.exec(t);return r?r[1]?typeof e=="string"?r[1]===e:e.has(r[1]):n(r[2]):!1},JJ=t=>UJ.test(t)&&!zJ.test(t),fB=()=>!1,ZJ=t=>HJ.test(t),eZ=t=>GJ.test(t),tZ=()=>{const t=Rn("colors"),e=Rn("spacing"),n=Rn("blur"),r=Rn("brightness"),i=Rn("borderColor"),o=Rn("borderRadius"),s=Rn("borderSpacing"),c=Rn("borderWidth"),l=Rn("contrast"),u=Rn("grayscale"),d=Rn("hueRotate"),f=Rn("invert"),h=Rn("gap"),p=Rn("gradientColorStops"),v=Rn("gradientColorStopPositions"),m=Rn("inset"),y=Rn("margin"),b=Rn("opacity"),x=Rn("padding"),w=Rn("saturate"),S=Rn("scale"),C=Rn("sepia"),_=Rn("skew"),A=Rn("space"),j=Rn("translate"),N=()=>["auto","contain","none"],k=()=>["auto","hidden","clip","visible","scroll"],O=()=>["auto",Ht,e],E=()=>[Ht,e],R=()=>["",ca,oc],D=()=>["auto",Nd,Ht],G=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],L=()=>["solid","dashed","dotted","double","none"],z=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],M=()=>["start","end","center","between","around","evenly","stretch"],$=()=>["","0",Ht],Q=()=>["auto","avoid","all","avoid-page","page","left","right","column"],q=()=>[Nd,Ht];return{cacheSize:500,separator:":",theme:{colors:[Dh],spacing:[ca,oc],blur:["none","",sc,Ht],brightness:q(),borderColor:[t],borderRadius:["none","","full",sc,Ht],borderSpacing:E(),borderWidth:R(),contrast:q(),grayscale:$(),hueRotate:q(),invert:$(),gap:E(),gradientColorStops:[t],gradientColorStopPositions:[VJ,oc],inset:O(),margin:O(),opacity:q(),padding:E(),saturate:q(),scale:q(),sepia:$(),skew:q(),space:E(),translate:E()},classGroups:{aspect:[{aspect:["auto","square","video",Ht]}],container:["container"],columns:[{columns:[sc]}],"break-after":[{"break-after":Q()}],"break-before":[{"break-before":Q()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...G(),Ht]}],overflow:[{overflow:k()}],"overflow-x":[{"overflow-x":k()}],"overflow-y":[{"overflow-y":k()}],overscroll:[{overscroll:N()}],"overscroll-x":[{"overscroll-x":N()}],"overscroll-y":[{"overscroll-y":N()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Mh,Ht]}],basis:[{basis:O()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Ht]}],grow:[{grow:$()}],shrink:[{shrink:$()}],order:[{order:["first","last","none",Mh,Ht]}],"grid-cols":[{"grid-cols":[Dh]}],"col-start-end":[{col:["auto",{span:["full",Mh,Ht]},Ht]}],"col-start":[{"col-start":D()}],"col-end":[{"col-end":D()}],"grid-rows":[{"grid-rows":[Dh]}],"row-start-end":[{row:["auto",{span:[Mh,Ht]},Ht]}],"row-start":[{"row-start":D()}],"row-end":[{"row-end":D()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Ht]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Ht]}],gap:[{gap:[h]}],"gap-x":[{"gap-x":[h]}],"gap-y":[{"gap-y":[h]}],"justify-content":[{justify:["normal",...M()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...M(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...M(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[x]}],px:[{px:[x]}],py:[{py:[x]}],ps:[{ps:[x]}],pe:[{pe:[x]}],pt:[{pt:[x]}],pr:[{pr:[x]}],pb:[{pb:[x]}],pl:[{pl:[x]}],m:[{m:[y]}],mx:[{mx:[y]}],my:[{my:[y]}],ms:[{ms:[y]}],me:[{me:[y]}],mt:[{mt:[y]}],mr:[{mr:[y]}],mb:[{mb:[y]}],ml:[{ml:[y]}],"space-x":[{"space-x":[A]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[A]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Ht,e]}],"min-w":[{"min-w":[Ht,e,"min","max","fit"]}],"max-w":[{"max-w":[Ht,e,"none","full","min","max","fit","prose",{screen:[sc]},sc]}],h:[{h:[Ht,e,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Ht,e,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Ht,e,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Ht,e,"auto","min","max","fit"]}],"font-size":[{text:["base",sc,oc]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",yC]}],"font-family":[{font:[Dh]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Ht]}],"line-clamp":[{"line-clamp":["none",Nd,yC]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",ca,Ht]}],"list-image":[{"list-image":["none",Ht]}],"list-style-type":[{list:["none","disc","decimal",Ht]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[t]}],"placeholder-opacity":[{"placeholder-opacity":[b]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[t]}],"text-opacity":[{"text-opacity":[b]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...L(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",ca,oc]}],"underline-offset":[{"underline-offset":["auto",ca,Ht]}],"text-decoration-color":[{decoration:[t]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:E()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ht]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ht]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[b]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...G(),qJ]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",WJ]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},QJ]}],"bg-color":[{bg:[t]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[b]}],"border-style":[{border:[...L(),"hidden"]}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[b]}],"divide-style":[{divide:L()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...L()]}],"outline-offset":[{"outline-offset":[ca,Ht]}],"outline-w":[{outline:[ca,oc]}],"outline-color":[{outline:[t]}],"ring-w":[{ring:R()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[t]}],"ring-opacity":[{"ring-opacity":[b]}],"ring-offset-w":[{"ring-offset":[ca,oc]}],"ring-offset-color":[{"ring-offset":[t]}],shadow:[{shadow:["","inner","none",sc,XJ]}],"shadow-color":[{shadow:[Dh]}],opacity:[{opacity:[b]}],"mix-blend":[{"mix-blend":[...z(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":z()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",sc,Ht]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[f]}],saturate:[{saturate:[w]}],sepia:[{sepia:[C]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[b]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[C]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Ht]}],duration:[{duration:q()}],ease:[{ease:["linear","in","out","in-out",Ht]}],delay:[{delay:q()}],animate:[{animate:["none","spin","ping","pulse","bounce",Ht]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[Mh,Ht]}],"translate-x":[{"translate-x":[j]}],"translate-y":[{"translate-y":[j]}],"skew-x":[{"skew-x":[_]}],"skew-y":[{"skew-y":[_]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Ht]}],accent:[{accent:["auto",t]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ht]}],"caret-color":[{caret:[t]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":E()}],"scroll-mx":[{"scroll-mx":E()}],"scroll-my":[{"scroll-my":E()}],"scroll-ms":[{"scroll-ms":E()}],"scroll-me":[{"scroll-me":E()}],"scroll-mt":[{"scroll-mt":E()}],"scroll-mr":[{"scroll-mr":E()}],"scroll-mb":[{"scroll-mb":E()}],"scroll-ml":[{"scroll-ml":E()}],"scroll-p":[{"scroll-p":E()}],"scroll-px":[{"scroll-px":E()}],"scroll-py":[{"scroll-py":E()}],"scroll-ps":[{"scroll-ps":E()}],"scroll-pe":[{"scroll-pe":E()}],"scroll-pt":[{"scroll-pt":E()}],"scroll-pr":[{"scroll-pr":E()}],"scroll-pb":[{"scroll-pb":E()}],"scroll-pl":[{"scroll-pl":E()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ht]}],fill:[{fill:[t,"none"]}],"stroke-w":[{stroke:[ca,oc,yC]}],stroke:[{stroke:[t,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},nZ=$J(tZ);function Le(...t){return nZ(Mt(t))}const rZ=_J,iZ=g.forwardRef(({className:t,sideOffset:e=4,...n},r)=>a.jsx(sB,{ref:r,sideOffset:e,className:Le("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...n}));iZ.displayName=sB.displayName;var Z0=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},ew=typeof window>"u"||"Deno"in globalThis;function Vo(){}function oZ(t,e){return typeof t=="function"?t(e):t}function sZ(t){return typeof t=="number"&&t>=0&&t!==1/0}function aZ(t,e){return Math.max(t+(e||0)-Date.now(),0)}function UI(t,e){return typeof t=="function"?t(e):t}function cZ(t,e){return typeof t=="function"?t(e):t}function zI(t,e){const{type:n="all",exact:r,fetchStatus:i,predicate:o,queryKey:s,stale:c}=t;if(s){if(r){if(e.queryHash!==AN(s,e.options))return!1}else if(!am(e.queryKey,s))return!1}if(n!=="all"){const l=e.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof c=="boolean"&&e.isStale()!==c||i&&i!==e.state.fetchStatus||o&&!o(e))}function HI(t,e){const{exact:n,status:r,predicate:i,mutationKey:o}=t;if(o){if(!e.options.mutationKey)return!1;if(n){if(sm(e.options.mutationKey)!==sm(o))return!1}else if(!am(e.options.mutationKey,o))return!1}return!(r&&e.state.status!==r||i&&!i(e))}function AN(t,e){return((e==null?void 0:e.queryKeyHashFn)||sm)(t)}function sm(t){return JSON.stringify(t,(e,n)=>NA(n)?Object.keys(n).sort().reduce((r,i)=>(r[i]=n[i],r),{}):n)}function am(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?!Object.keys(e).some(n=>!am(t[n],e[n])):!1}function hB(t,e){if(t===e)return t;const n=GI(t)&&GI(e);if(n||NA(t)&&NA(e)){const r=n?t:Object.keys(t),i=r.length,o=n?e:Object.keys(e),s=o.length,c=n?[]:{};let l=0;for(let u=0;u{setTimeout(e,t)})}function uZ(t,e,n){return typeof n.structuralSharing=="function"?n.structuralSharing(t,e):n.structuralSharing!==!1?hB(t,e):e}function dZ(t,e,n=0){const r=[...t,e];return n&&r.length>n?r.slice(1):r}function fZ(t,e,n=0){const r=[e,...t];return n&&r.length>n?r.slice(0,-1):r}var jN=Symbol();function pB(t,e){return!t.queryFn&&(e!=null&&e.initialPromise)?()=>e.initialPromise:!t.queryFn||t.queryFn===jN?()=>Promise.reject(new Error(`Missing queryFn: '${t.queryHash}'`)):t.queryFn}var Xl,Sc,Ud,cF,hZ=(cF=class extends Z0{constructor(){super();mn(this,Xl);mn(this,Sc);mn(this,Ud);qt(this,Ud,e=>{if(!ew&&window.addEventListener){const n=()=>e();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){_e(this,Sc)||this.setEventListener(_e(this,Ud))}onUnsubscribe(){var e;this.hasListeners()||((e=_e(this,Sc))==null||e.call(this),qt(this,Sc,void 0))}setEventListener(e){var n;qt(this,Ud,e),(n=_e(this,Sc))==null||n.call(this),qt(this,Sc,e(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(e){_e(this,Xl)!==e&&(qt(this,Xl,e),this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(n=>{n(e)})}isFocused(){var e;return typeof _e(this,Xl)=="boolean"?_e(this,Xl):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},Xl=new WeakMap,Sc=new WeakMap,Ud=new WeakMap,cF),mB=new hZ,zd,Cc,Hd,lF,pZ=(lF=class extends Z0{constructor(){super();mn(this,zd,!0);mn(this,Cc);mn(this,Hd);qt(this,Hd,e=>{if(!ew&&window.addEventListener){const n=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){_e(this,Cc)||this.setEventListener(_e(this,Hd))}onUnsubscribe(){var e;this.hasListeners()||((e=_e(this,Cc))==null||e.call(this),qt(this,Cc,void 0))}setEventListener(e){var n;qt(this,Hd,e),(n=_e(this,Cc))==null||n.call(this),qt(this,Cc,e(this.setOnline.bind(this)))}setOnline(e){_e(this,zd)!==e&&(qt(this,zd,e),this.listeners.forEach(r=>{r(e)}))}isOnline(){return _e(this,zd)}},zd=new WeakMap,Cc=new WeakMap,Hd=new WeakMap,lF),Sx=new pZ;function mZ(){let t,e;const n=new Promise((i,o)=>{t=i,e=o});n.status="pending",n.catch(()=>{});function r(i){Object.assign(n,i),delete n.resolve,delete n.reject}return n.resolve=i=>{r({status:"fulfilled",value:i}),t(i)},n.reject=i=>{r({status:"rejected",reason:i}),e(i)},n}function gZ(t){return Math.min(1e3*2**t,3e4)}function gB(t){return(t??"online")==="online"?Sx.isOnline():!0}var vB=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function xC(t){return t instanceof vB}function yB(t){let e=!1,n=0,r=!1,i;const o=mZ(),s=m=>{var y;r||(h(new vB(m)),(y=t.abort)==null||y.call(t))},c=()=>{e=!0},l=()=>{e=!1},u=()=>mB.isFocused()&&(t.networkMode==="always"||Sx.isOnline())&&t.canRun(),d=()=>gB(t.networkMode)&&t.canRun(),f=m=>{var y;r||(r=!0,(y=t.onSuccess)==null||y.call(t,m),i==null||i(),o.resolve(m))},h=m=>{var y;r||(r=!0,(y=t.onError)==null||y.call(t,m),i==null||i(),o.reject(m))},p=()=>new Promise(m=>{var y;i=b=>{(r||u())&&m(b)},(y=t.onPause)==null||y.call(t)}).then(()=>{var m;i=void 0,r||(m=t.onContinue)==null||m.call(t)}),v=()=>{if(r)return;let m;const y=n===0?t.initialPromise:void 0;try{m=y??t.fn()}catch(b){m=Promise.reject(b)}Promise.resolve(m).then(f).catch(b=>{var _;if(r)return;const x=t.retry??(ew?0:3),w=t.retryDelay??gZ,S=typeof w=="function"?w(n,b):w,C=x===!0||typeof x=="number"&&nu()?void 0:p()).then(()=>{e?h(b):v()})})};return{promise:o,cancel:s,continue:()=>(i==null||i(),o),cancelRetry:c,continueRetry:l,canStart:d,start:()=>(d()?v():p().then(v),o)}}function vZ(){let t=[],e=0,n=c=>{c()},r=c=>{c()},i=c=>setTimeout(c,0);const o=c=>{e?t.push(c):i(()=>{n(c)})},s=()=>{const c=t;t=[],c.length&&i(()=>{r(()=>{c.forEach(l=>{n(l)})})})};return{batch:c=>{let l;e++;try{l=c()}finally{e--,e||s()}return l},batchCalls:c=>(...l)=>{o(()=>{c(...l)})},schedule:o,setNotifyFunction:c=>{n=c},setBatchNotifyFunction:c=>{r=c},setScheduler:c=>{i=c}}}var mi=vZ(),Jl,uF,xB=(uF=class{constructor(){mn(this,Jl)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),sZ(this.gcTime)&&qt(this,Jl,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(ew?1/0:5*60*1e3))}clearGcTimeout(){_e(this,Jl)&&(clearTimeout(_e(this,Jl)),qt(this,Jl,void 0))}},Jl=new WeakMap,uF),Gd,Vd,ho,Zr,Eg,Zl,Ko,fa,dF,yZ=(dF=class extends xB{constructor(e){super();mn(this,Ko);mn(this,Gd);mn(this,Vd);mn(this,ho);mn(this,Zr);mn(this,Eg);mn(this,Zl);qt(this,Zl,!1),qt(this,Eg,e.defaultOptions),this.setOptions(e.options),this.observers=[],qt(this,ho,e.cache),this.queryKey=e.queryKey,this.queryHash=e.queryHash,qt(this,Gd,bZ(this.options)),this.state=e.state??_e(this,Gd),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var e;return(e=_e(this,Zr))==null?void 0:e.promise}setOptions(e){this.options={..._e(this,Eg),...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&_e(this,ho).remove(this)}setData(e,n){const r=uZ(this.state.data,e,this.options);return Qr(this,Ko,fa).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(e,n){Qr(this,Ko,fa).call(this,{type:"setState",state:e,setStateOptions:n})}cancel(e){var r,i;const n=(r=_e(this,Zr))==null?void 0:r.promise;return(i=_e(this,Zr))==null||i.cancel(e),n?n.then(Vo).catch(Vo):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(_e(this,Gd))}isActive(){return this.observers.some(e=>cZ(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===jN||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStale(){return this.state.isInvalidated?!0:this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0}isStaleByTime(e=0){return this.state.isInvalidated||this.state.data===void 0||!aZ(this.state.dataUpdatedAt,e)}onFocus(){var n;const e=this.observers.find(r=>r.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(n=_e(this,Zr))==null||n.continue()}onOnline(){var n;const e=this.observers.find(r=>r.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(n=_e(this,Zr))==null||n.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),_e(this,ho).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(n=>n!==e),this.observers.length||(_e(this,Zr)&&(_e(this,Zl)?_e(this,Zr).cancel({revert:!0}):_e(this,Zr).cancelRetry()),this.scheduleGc()),_e(this,ho).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||Qr(this,Ko,fa).call(this,{type:"invalidate"})}fetch(e,n){var l,u,d;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(_e(this,Zr))return _e(this,Zr).continueRetry(),_e(this,Zr).promise}if(e&&this.setOptions(e),!this.options.queryFn){const f=this.observers.find(h=>h.options.queryFn);f&&this.setOptions(f.options)}const r=new AbortController,i=f=>{Object.defineProperty(f,"signal",{enumerable:!0,get:()=>(qt(this,Zl,!0),r.signal)})},o=()=>{const f=pB(this.options,n),h={queryKey:this.queryKey,meta:this.meta};return i(h),qt(this,Zl,!1),this.options.persister?this.options.persister(f,h,this):f(h)},s={fetchOptions:n,options:this.options,queryKey:this.queryKey,state:this.state,fetchFn:o};i(s),(l=this.options.behavior)==null||l.onFetch(s,this),qt(this,Vd,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((u=s.fetchOptions)==null?void 0:u.meta))&&Qr(this,Ko,fa).call(this,{type:"fetch",meta:(d=s.fetchOptions)==null?void 0:d.meta});const c=f=>{var h,p,v,m;xC(f)&&f.silent||Qr(this,Ko,fa).call(this,{type:"error",error:f}),xC(f)||((p=(h=_e(this,ho).config).onError)==null||p.call(h,f,this),(m=(v=_e(this,ho).config).onSettled)==null||m.call(v,this.state.data,f,this)),this.scheduleGc()};return qt(this,Zr,yB({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,abort:r.abort.bind(r),onSuccess:f=>{var h,p,v,m;if(f===void 0){c(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(f)}catch(y){c(y);return}(p=(h=_e(this,ho).config).onSuccess)==null||p.call(h,f,this),(m=(v=_e(this,ho).config).onSettled)==null||m.call(v,f,this.state.error,this),this.scheduleGc()},onError:c,onFail:(f,h)=>{Qr(this,Ko,fa).call(this,{type:"failed",failureCount:f,error:h})},onPause:()=>{Qr(this,Ko,fa).call(this,{type:"pause"})},onContinue:()=>{Qr(this,Ko,fa).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0})),_e(this,Zr).start()}},Gd=new WeakMap,Vd=new WeakMap,ho=new WeakMap,Zr=new WeakMap,Eg=new WeakMap,Zl=new WeakMap,Ko=new WeakSet,fa=function(e){const n=r=>{switch(e.type){case"failed":return{...r,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...xZ(r.data,this.options),fetchMeta:e.meta??null};case"success":return{...r,data:e.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const i=e.error;return xC(i)&&i.revert&&_e(this,Vd)?{..._e(this,Vd),fetchStatus:"idle"}:{...r,error:i,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...e.state}}};this.state=n(this.state),mi.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),_e(this,ho).notify({query:this,type:"updated",action:e})})},dF);function xZ(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:gB(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function bZ(t){const e=typeof t.initialData=="function"?t.initialData():t.initialData,n=e!==void 0,r=n?typeof t.initialDataUpdatedAt=="function"?t.initialDataUpdatedAt():t.initialDataUpdatedAt:0;return{data:e,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var ks,fF,wZ=(fF=class extends Z0{constructor(e={}){super();mn(this,ks);this.config=e,qt(this,ks,new Map)}build(e,n,r){const i=n.queryKey,o=n.queryHash??AN(i,n);let s=this.get(o);return s||(s=new yZ({cache:this,queryKey:i,queryHash:o,options:e.defaultQueryOptions(n),state:r,defaultOptions:e.getQueryDefaults(i)}),this.add(s)),s}add(e){_e(this,ks).has(e.queryHash)||(_e(this,ks).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const n=_e(this,ks).get(e.queryHash);n&&(e.destroy(),n===e&&_e(this,ks).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){mi.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return _e(this,ks).get(e)}getAll(){return[..._e(this,ks).values()]}find(e){const n={exact:!0,...e};return this.getAll().find(r=>zI(n,r))}findAll(e={}){const n=this.getAll();return Object.keys(e).length>0?n.filter(r=>zI(e,r)):n}notify(e){mi.batch(()=>{this.listeners.forEach(n=>{n(e)})})}onFocus(){mi.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){mi.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},ks=new WeakMap,fF),Ps,li,eu,Os,ac,hF,SZ=(hF=class extends xB{constructor(e){super();mn(this,Os);mn(this,Ps);mn(this,li);mn(this,eu);this.mutationId=e.mutationId,qt(this,li,e.mutationCache),qt(this,Ps,[]),this.state=e.state||CZ(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){_e(this,Ps).includes(e)||(_e(this,Ps).push(e),this.clearGcTimeout(),_e(this,li).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){qt(this,Ps,_e(this,Ps).filter(n=>n!==e)),this.scheduleGc(),_e(this,li).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){_e(this,Ps).length||(this.state.status==="pending"?this.scheduleGc():_e(this,li).remove(this))}continue(){var e;return((e=_e(this,eu))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var i,o,s,c,l,u,d,f,h,p,v,m,y,b,x,w,S,C,_,A;qt(this,eu,yB({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(j,N)=>{Qr(this,Os,ac).call(this,{type:"failed",failureCount:j,error:N})},onPause:()=>{Qr(this,Os,ac).call(this,{type:"pause"})},onContinue:()=>{Qr(this,Os,ac).call(this,{type:"continue"})},retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>_e(this,li).canRun(this)}));const n=this.state.status==="pending",r=!_e(this,eu).canStart();try{if(!n){Qr(this,Os,ac).call(this,{type:"pending",variables:e,isPaused:r}),await((o=(i=_e(this,li).config).onMutate)==null?void 0:o.call(i,e,this));const N=await((c=(s=this.options).onMutate)==null?void 0:c.call(s,e));N!==this.state.context&&Qr(this,Os,ac).call(this,{type:"pending",context:N,variables:e,isPaused:r})}const j=await _e(this,eu).start();return await((u=(l=_e(this,li).config).onSuccess)==null?void 0:u.call(l,j,e,this.state.context,this)),await((f=(d=this.options).onSuccess)==null?void 0:f.call(d,j,e,this.state.context)),await((p=(h=_e(this,li).config).onSettled)==null?void 0:p.call(h,j,null,this.state.variables,this.state.context,this)),await((m=(v=this.options).onSettled)==null?void 0:m.call(v,j,null,e,this.state.context)),Qr(this,Os,ac).call(this,{type:"success",data:j}),j}catch(j){try{throw await((b=(y=_e(this,li).config).onError)==null?void 0:b.call(y,j,e,this.state.context,this)),await((w=(x=this.options).onError)==null?void 0:w.call(x,j,e,this.state.context)),await((C=(S=_e(this,li).config).onSettled)==null?void 0:C.call(S,void 0,j,this.state.variables,this.state.context,this)),await((A=(_=this.options).onSettled)==null?void 0:A.call(_,void 0,j,e,this.state.context)),j}finally{Qr(this,Os,ac).call(this,{type:"error",error:j})}}finally{_e(this,li).runNext(this)}}},Ps=new WeakMap,li=new WeakMap,eu=new WeakMap,Os=new WeakSet,ac=function(e){const n=r=>{switch(e.type){case"failed":return{...r,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...r,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:e.error,failureCount:r.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=n(this.state),mi.batch(()=>{_e(this,Ps).forEach(r=>{r.onMutationUpdate(e)}),_e(this,li).notify({mutation:this,type:"updated",action:e})})},hF);function CZ(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Ki,Ng,pF,_Z=(pF=class extends Z0{constructor(e={}){super();mn(this,Ki);mn(this,Ng);this.config=e,qt(this,Ki,new Map),qt(this,Ng,Date.now())}build(e,n,r){const i=new SZ({mutationCache:this,mutationId:++fv(this,Ng)._,options:e.defaultMutationOptions(n),state:r});return this.add(i),i}add(e){const n=Rv(e),r=_e(this,Ki).get(n)??[];r.push(e),_e(this,Ki).set(n,r),this.notify({type:"added",mutation:e})}remove(e){var r;const n=Rv(e);if(_e(this,Ki).has(n)){const i=(r=_e(this,Ki).get(n))==null?void 0:r.filter(o=>o!==e);i&&(i.length===0?_e(this,Ki).delete(n):_e(this,Ki).set(n,i))}this.notify({type:"removed",mutation:e})}canRun(e){var r;const n=(r=_e(this,Ki).get(Rv(e)))==null?void 0:r.find(i=>i.state.status==="pending");return!n||n===e}runNext(e){var r;const n=(r=_e(this,Ki).get(Rv(e)))==null?void 0:r.find(i=>i!==e&&i.state.isPaused);return(n==null?void 0:n.continue())??Promise.resolve()}clear(){mi.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}getAll(){return[..._e(this,Ki).values()].flat()}find(e){const n={exact:!0,...e};return this.getAll().find(r=>HI(n,r))}findAll(e={}){return this.getAll().filter(n=>HI(e,n))}notify(e){mi.batch(()=>{this.listeners.forEach(n=>{n(e)})})}resumePausedMutations(){const e=this.getAll().filter(n=>n.state.isPaused);return mi.batch(()=>Promise.all(e.map(n=>n.continue().catch(Vo))))}},Ki=new WeakMap,Ng=new WeakMap,pF);function Rv(t){var e;return((e=t.options.scope)==null?void 0:e.id)??String(t.mutationId)}function KI(t){return{onFetch:(e,n)=>{var d,f,h,p,v;const r=e.options,i=(h=(f=(d=e.fetchOptions)==null?void 0:d.meta)==null?void 0:f.fetchMore)==null?void 0:h.direction,o=((p=e.state.data)==null?void 0:p.pages)||[],s=((v=e.state.data)==null?void 0:v.pageParams)||[];let c={pages:[],pageParams:[]},l=0;const u=async()=>{let m=!1;const y=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>(e.signal.aborted?m=!0:e.signal.addEventListener("abort",()=>{m=!0}),e.signal)})},b=pB(e.options,e.fetchOptions),x=async(w,S,C)=>{if(m)return Promise.reject();if(S==null&&w.pages.length)return Promise.resolve(w);const _={queryKey:e.queryKey,pageParam:S,direction:C?"backward":"forward",meta:e.options.meta};y(_);const A=await b(_),{maxPages:j}=e.options,N=C?fZ:dZ;return{pages:N(w.pages,A,j),pageParams:N(w.pageParams,S,j)}};if(i&&o.length){const w=i==="backward",S=w?AZ:WI,C={pages:o,pageParams:s},_=S(r,C);c=await x(C,_,w)}else{const w=t??o.length;do{const S=l===0?s[0]??r.initialPageParam:WI(r,c);if(l>0&&S==null)break;c=await x(c,S),l++}while(l{var m,y;return(y=(m=e.options).persister)==null?void 0:y.call(m,u,{queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},n)}:e.fetchFn=u}}}function WI(t,{pages:e,pageParams:n}){const r=e.length-1;return e.length>0?t.getNextPageParam(e[r],e,n[r],n):void 0}function AZ(t,{pages:e,pageParams:n}){var r;return e.length>0?(r=t.getPreviousPageParam)==null?void 0:r.call(t,e[0],e,n[0],n):void 0}var tr,_c,Ac,Kd,Wd,jc,qd,Yd,mF,jZ=(mF=class{constructor(t={}){mn(this,tr);mn(this,_c);mn(this,Ac);mn(this,Kd);mn(this,Wd);mn(this,jc);mn(this,qd);mn(this,Yd);qt(this,tr,t.queryCache||new wZ),qt(this,_c,t.mutationCache||new _Z),qt(this,Ac,t.defaultOptions||{}),qt(this,Kd,new Map),qt(this,Wd,new Map),qt(this,jc,0)}mount(){fv(this,jc)._++,_e(this,jc)===1&&(qt(this,qd,mB.subscribe(async t=>{t&&(await this.resumePausedMutations(),_e(this,tr).onFocus())})),qt(this,Yd,Sx.subscribe(async t=>{t&&(await this.resumePausedMutations(),_e(this,tr).onOnline())})))}unmount(){var t,e;fv(this,jc)._--,_e(this,jc)===0&&((t=_e(this,qd))==null||t.call(this),qt(this,qd,void 0),(e=_e(this,Yd))==null||e.call(this),qt(this,Yd,void 0))}isFetching(t){return _e(this,tr).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return _e(this,_c).findAll({...t,status:"pending"}).length}getQueryData(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=_e(this,tr).get(e.queryHash))==null?void 0:n.state.data}ensureQueryData(t){const e=this.getQueryData(t.queryKey);if(e===void 0)return this.fetchQuery(t);{const n=this.defaultQueryOptions(t),r=_e(this,tr).build(this,n);return t.revalidateIfStale&&r.isStaleByTime(UI(n.staleTime,r))&&this.prefetchQuery(n),Promise.resolve(e)}}getQueriesData(t){return _e(this,tr).findAll(t).map(({queryKey:e,state:n})=>{const r=n.data;return[e,r]})}setQueryData(t,e,n){const r=this.defaultQueryOptions({queryKey:t}),i=_e(this,tr).get(r.queryHash),o=i==null?void 0:i.state.data,s=oZ(e,o);if(s!==void 0)return _e(this,tr).build(this,r).setData(s,{...n,manual:!0})}setQueriesData(t,e,n){return mi.batch(()=>_e(this,tr).findAll(t).map(({queryKey:r})=>[r,this.setQueryData(r,e,n)]))}getQueryState(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=_e(this,tr).get(e.queryHash))==null?void 0:n.state}removeQueries(t){const e=_e(this,tr);mi.batch(()=>{e.findAll(t).forEach(n=>{e.remove(n)})})}resetQueries(t,e){const n=_e(this,tr),r={type:"active",...t};return mi.batch(()=>(n.findAll(t).forEach(i=>{i.reset()}),this.refetchQueries(r,e)))}cancelQueries(t={},e={}){const n={revert:!0,...e},r=mi.batch(()=>_e(this,tr).findAll(t).map(i=>i.cancel(n)));return Promise.all(r).then(Vo).catch(Vo)}invalidateQueries(t={},e={}){return mi.batch(()=>{if(_e(this,tr).findAll(t).forEach(r=>{r.invalidate()}),t.refetchType==="none")return Promise.resolve();const n={...t,type:t.refetchType??t.type??"active"};return this.refetchQueries(n,e)})}refetchQueries(t={},e){const n={...e,cancelRefetch:(e==null?void 0:e.cancelRefetch)??!0},r=mi.batch(()=>_e(this,tr).findAll(t).filter(i=>!i.isDisabled()).map(i=>{let o=i.fetch(void 0,n);return n.throwOnError||(o=o.catch(Vo)),i.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(Vo)}fetchQuery(t){const e=this.defaultQueryOptions(t);e.retry===void 0&&(e.retry=!1);const n=_e(this,tr).build(this,e);return n.isStaleByTime(UI(e.staleTime,n))?n.fetch(e):Promise.resolve(n.state.data)}prefetchQuery(t){return this.fetchQuery(t).then(Vo).catch(Vo)}fetchInfiniteQuery(t){return t.behavior=KI(t.pages),this.fetchQuery(t)}prefetchInfiniteQuery(t){return this.fetchInfiniteQuery(t).then(Vo).catch(Vo)}ensureInfiniteQueryData(t){return t.behavior=KI(t.pages),this.ensureQueryData(t)}resumePausedMutations(){return Sx.isOnline()?_e(this,_c).resumePausedMutations():Promise.resolve()}getQueryCache(){return _e(this,tr)}getMutationCache(){return _e(this,_c)}getDefaultOptions(){return _e(this,Ac)}setDefaultOptions(t){qt(this,Ac,t)}setQueryDefaults(t,e){_e(this,Kd).set(sm(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[..._e(this,Kd).values()];let n={};return e.forEach(r=>{am(t,r.queryKey)&&(n={...n,...r.defaultOptions})}),n}setMutationDefaults(t,e){_e(this,Wd).set(sm(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[..._e(this,Wd).values()];let n={};return e.forEach(r=>{am(t,r.mutationKey)&&(n={...n,...r.defaultOptions})}),n}defaultQueryOptions(t){if(t._defaulted)return t;const e={..._e(this,Ac).queries,...this.getQueryDefaults(t.queryKey),...t,_defaulted:!0};return e.queryHash||(e.queryHash=AN(e.queryKey,e)),e.refetchOnReconnect===void 0&&(e.refetchOnReconnect=e.networkMode!=="always"),e.throwOnError===void 0&&(e.throwOnError=!!e.suspense),!e.networkMode&&e.persister&&(e.networkMode="offlineFirst"),e.enabled!==!0&&e.queryFn===jN&&(e.enabled=!1),e}defaultMutationOptions(t){return t!=null&&t._defaulted?t:{..._e(this,Ac).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){_e(this,tr).clear(),_e(this,_c).clear()}},tr=new WeakMap,_c=new WeakMap,Ac=new WeakMap,Kd=new WeakMap,Wd=new WeakMap,jc=new WeakMap,qd=new WeakMap,Yd=new WeakMap,mF),EZ=g.createContext(void 0),NZ=({client:t,children:e})=>(g.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),a.jsx(EZ.Provider,{value:t,children:e}));/** + * @remix-run/router v1.20.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function cm(){return cm=Object.assign?Object.assign.bind():function(t){for(var e=1;e"u")throw new Error(e)}function bB(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function kZ(){return Math.random().toString(36).substr(2,8)}function YI(t,e){return{usr:t.state,key:t.key,idx:e}}function TA(t,e,n,r){return n===void 0&&(n=null),cm({pathname:typeof t=="string"?t:t.pathname,search:"",hash:""},typeof e=="string"?Kf(e):e,{state:n,key:e&&e.key||r||kZ()})}function Cx(t){let{pathname:e="/",search:n="",hash:r=""}=t;return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(e+=r.charAt(0)==="#"?r:"#"+r),e}function Kf(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substr(n),t=t.substr(0,n));let r=t.indexOf("?");r>=0&&(e.search=t.substr(r),t=t.substr(0,r)),t&&(e.pathname=t)}return e}function PZ(t,e,n,r){r===void 0&&(r={});let{window:i=document.defaultView,v5Compat:o=!1}=r,s=i.history,c=Tc.Pop,l=null,u=d();u==null&&(u=0,s.replaceState(cm({},s.state,{idx:u}),""));function d(){return(s.state||{idx:null}).idx}function f(){c=Tc.Pop;let y=d(),b=y==null?null:y-u;u=y,l&&l({action:c,location:m.location,delta:b})}function h(y,b){c=Tc.Push;let x=TA(m.location,y,b);u=d()+1;let w=YI(x,u),S=m.createHref(x);try{s.pushState(w,"",S)}catch(C){if(C instanceof DOMException&&C.name==="DataCloneError")throw C;i.location.assign(S)}o&&l&&l({action:c,location:m.location,delta:1})}function p(y,b){c=Tc.Replace;let x=TA(m.location,y,b);u=d();let w=YI(x,u),S=m.createHref(x);s.replaceState(w,"",S),o&&l&&l({action:c,location:m.location,delta:0})}function v(y){let b=i.location.origin!=="null"?i.location.origin:i.location.href,x=typeof y=="string"?y:Cx(y);return x=x.replace(/ $/,"%20"),cr(b,"No window.location.(origin|href) available to create URL for href: "+x),new URL(x,b)}let m={get action(){return c},get location(){return t(i,s)},listen(y){if(l)throw new Error("A history only accepts one active listener");return i.addEventListener(qI,f),l=y,()=>{i.removeEventListener(qI,f),l=null}},createHref(y){return e(i,y)},createURL:v,encodeLocation(y){let b=v(y);return{pathname:b.pathname,search:b.search,hash:b.hash}},push:h,replace:p,go(y){return s.go(y)}};return m}var QI;(function(t){t.data="data",t.deferred="deferred",t.redirect="redirect",t.error="error"})(QI||(QI={}));function OZ(t,e,n){return n===void 0&&(n="/"),IZ(t,e,n,!1)}function IZ(t,e,n,r){let i=typeof e=="string"?Kf(e):e,o=EN(i.pathname||"/",n);if(o==null)return null;let s=wB(t);RZ(s);let c=null;for(let l=0;c==null&&l{let l={relativePath:c===void 0?o.path||"":c,caseSensitive:o.caseSensitive===!0,childrenIndex:s,route:o};l.relativePath.startsWith("/")&&(cr(l.relativePath.startsWith(r),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(r.length));let u=zc([r,l.relativePath]),d=n.concat(l);o.children&&o.children.length>0&&(cr(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),wB(o.children,e,d,u)),!(o.path==null&&!o.index)&&e.push({path:u,score:UZ(u,o.index),routesMeta:d})};return t.forEach((o,s)=>{var c;if(o.path===""||!((c=o.path)!=null&&c.includes("?")))i(o,s);else for(let l of SB(o.path))i(o,s,l)}),e}function SB(t){let e=t.split("/");if(e.length===0)return[];let[n,...r]=e,i=n.endsWith("?"),o=n.replace(/\?$/,"");if(r.length===0)return i?[o,""]:[o];let s=SB(r.join("/")),c=[];return c.push(...s.map(l=>l===""?o:[o,l].join("/"))),i&&c.push(...s),c.map(l=>t.startsWith("/")&&l===""?"/":l)}function RZ(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:zZ(e.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const MZ=/^:[\w-]+$/,DZ=3,$Z=2,LZ=1,FZ=10,BZ=-2,XI=t=>t==="*";function UZ(t,e){let n=t.split("/"),r=n.length;return n.some(XI)&&(r+=BZ),e&&(r+=$Z),n.filter(i=>!XI(i)).reduce((i,o)=>i+(MZ.test(o)?DZ:o===""?LZ:FZ),r)}function zZ(t,e){return t.length===e.length&&t.slice(0,-1).every((r,i)=>r===e[i])?t[t.length-1]-e[e.length-1]:0}function HZ(t,e,n){let{routesMeta:r}=t,i={},o="/",s=[];for(let c=0;c{let{paramName:h,isOptional:p}=d;if(h==="*"){let m=c[f]||"";s=o.slice(0,o.length-m.length).replace(/(.)\/+$/,"$1")}const v=c[f];return p&&!v?u[h]=void 0:u[h]=(v||"").replace(/%2F/g,"/"),u},{}),pathname:o,pathnameBase:s,pattern:t}}function GZ(t,e,n){e===void 0&&(e=!1),n===void 0&&(n=!0),bB(t==="*"||!t.endsWith("*")||t.endsWith("/*"),'Route path "'+t+'" will be treated as if it were '+('"'+t.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+t.replace(/\*$/,"/*")+'".'));let r=[],i="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,c,l)=>(r.push({paramName:c,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return t.endsWith("*")?(r.push({paramName:"*"}),i+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":t!==""&&t!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,e?void 0:"i"),r]}function VZ(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return bB(!1,'The URL path "'+t+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+e+").")),t}}function EN(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,r=t.charAt(n);return r&&r!=="/"?null:t.slice(n)||"/"}function KZ(t,e){e===void 0&&(e="/");let{pathname:n,search:r="",hash:i=""}=typeof t=="string"?Kf(t):t;return{pathname:n?n.startsWith("/")?n:WZ(n,e):e,search:QZ(r),hash:XZ(i)}}function WZ(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function bC(t,e,n,r){return"Cannot include a '"+t+"' character in a manually specified "+("`to."+e+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function qZ(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function NN(t,e){let n=qZ(t);return e?n.map((r,i)=>i===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function TN(t,e,n,r){r===void 0&&(r=!1);let i;typeof t=="string"?i=Kf(t):(i=cm({},t),cr(!i.pathname||!i.pathname.includes("?"),bC("?","pathname","search",i)),cr(!i.pathname||!i.pathname.includes("#"),bC("#","pathname","hash",i)),cr(!i.search||!i.search.includes("#"),bC("#","search","hash",i)));let o=t===""||i.pathname==="",s=o?"/":i.pathname,c;if(s==null)c=n;else{let f=e.length-1;if(!r&&s.startsWith("..")){let h=s.split("/");for(;h[0]==="..";)h.shift(),f-=1;i.pathname=h.join("/")}c=f>=0?e[f]:"/"}let l=KZ(i,c),u=s&&s!=="/"&&s.endsWith("/"),d=(o||s===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(u||d)&&(l.pathname+="/"),l}const zc=t=>t.join("/").replace(/\/\/+/g,"/"),YZ=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),QZ=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,XZ=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function JZ(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}const CB=["post","put","patch","delete"];new Set(CB);const ZZ=["get",...CB];new Set(ZZ);/** + * React Router v6.27.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function lm(){return lm=Object.assign?Object.assign.bind():function(t){for(var e=1;e{c.current=!0}),g.useCallback(function(u,d){if(d===void 0&&(d={}),!c.current)return;if(typeof u=="number"){r.go(u);return}let f=TN(u,JSON.parse(s),o,d.relative==="path");t==null&&e!=="/"&&(f.pathname=f.pathname==="/"?e:zc([e,f.pathname])),(d.replace?r.replace:r.push)(f,d.state,d)},[e,r,s,o,t])}function PN(){let{matches:t}=g.useContext(Ja),e=t[t.length-1];return e?e.params:{}}function jB(t,e){let{relative:n}=e===void 0?{}:e,{future:r}=g.useContext(vl),{matches:i}=g.useContext(Ja),{pathname:o}=Ui(),s=JSON.stringify(NN(i,r.v7_relativeSplatPath));return g.useMemo(()=>TN(t,JSON.parse(s),o,n==="path"),[t,s,o,n])}function ree(t,e){return iee(t,e)}function iee(t,e,n,r){Wf()||cr(!1);let{navigator:i}=g.useContext(vl),{matches:o}=g.useContext(Ja),s=o[o.length-1],c=s?s.params:{};s&&s.pathname;let l=s?s.pathnameBase:"/";s&&s.route;let u=Ui(),d;if(e){var f;let y=typeof e=="string"?Kf(e):e;l==="/"||(f=y.pathname)!=null&&f.startsWith(l)||cr(!1),d=y}else d=u;let h=d.pathname||"/",p=h;if(l!=="/"){let y=l.replace(/^\//,"").split("/");p="/"+h.replace(/^\//,"").split("/").slice(y.length).join("/")}let v=OZ(t,{pathname:p}),m=lee(v&&v.map(y=>Object.assign({},y,{params:Object.assign({},c,y.params),pathname:zc([l,i.encodeLocation?i.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?l:zc([l,i.encodeLocation?i.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),o,n,r);return e&&m?g.createElement(tw.Provider,{value:{location:lm({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:Tc.Pop}},m):m}function oee(){let t=hee(),e=JZ(t)?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return g.createElement(g.Fragment,null,g.createElement("h2",null,"Unexpected Application Error!"),g.createElement("h3",{style:{fontStyle:"italic"}},e),n?g.createElement("pre",{style:i},n):null,null)}const see=g.createElement(oee,null);class aee extends g.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){console.error("React Router caught the following error during render",e,n)}render(){return this.state.error!==void 0?g.createElement(Ja.Provider,{value:this.props.routeContext},g.createElement(_B.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function cee(t){let{routeContext:e,match:n,children:r}=t,i=g.useContext(kN);return i&&i.static&&i.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=n.route.id),g.createElement(Ja.Provider,{value:e},r)}function lee(t,e,n,r){var i;if(e===void 0&&(e=[]),n===void 0&&(n=null),r===void 0&&(r=null),t==null){var o;if(!n)return null;if(n.errors)t=n.matches;else if((o=r)!=null&&o.v7_partialHydration&&e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let s=t,c=(i=n)==null?void 0:i.errors;if(c!=null){let d=s.findIndex(f=>f.route.id&&(c==null?void 0:c[f.route.id])!==void 0);d>=0||cr(!1),s=s.slice(0,Math.min(s.length,d+1))}let l=!1,u=-1;if(n&&r&&r.v7_partialHydration)for(let d=0;d=0?s=s.slice(0,u+1):s=[s[0]];break}}}return s.reduceRight((d,f,h)=>{let p,v=!1,m=null,y=null;n&&(p=c&&f.route.id?c[f.route.id]:void 0,m=f.route.errorElement||see,l&&(u<0&&h===0?(v=!0,y=null):u===h&&(v=!0,y=f.route.hydrateFallbackElement||null)));let b=e.concat(s.slice(0,h+1)),x=()=>{let w;return p?w=m:v?w=y:f.route.Component?w=g.createElement(f.route.Component,null):f.route.element?w=f.route.element:w=d,g.createElement(cee,{match:f,routeContext:{outlet:d,matches:b,isDataRoute:n!=null},children:w})};return n&&(f.route.ErrorBoundary||f.route.errorElement||h===0)?g.createElement(aee,{location:n.location,revalidation:n.revalidation,component:m,error:p,children:x(),routeContext:{outlet:null,matches:b,isDataRoute:!0}}):x()},null)}var EB=function(t){return t.UseBlocker="useBlocker",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t}(EB||{}),_x=function(t){return t.UseBlocker="useBlocker",t.UseLoaderData="useLoaderData",t.UseActionData="useActionData",t.UseRouteError="useRouteError",t.UseNavigation="useNavigation",t.UseRouteLoaderData="useRouteLoaderData",t.UseMatches="useMatches",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t.UseRouteId="useRouteId",t}(_x||{});function uee(t){let e=g.useContext(kN);return e||cr(!1),e}function dee(t){let e=g.useContext(eee);return e||cr(!1),e}function fee(t){let e=g.useContext(Ja);return e||cr(!1),e}function NB(t){let e=fee(),n=e.matches[e.matches.length-1];return n.route.id||cr(!1),n.route.id}function hee(){var t;let e=g.useContext(_B),n=dee(_x.UseRouteError),r=NB(_x.UseRouteError);return e!==void 0?e:(t=n.errors)==null?void 0:t[r]}function pee(){let{router:t}=uee(EB.UseNavigateStable),e=NB(_x.UseNavigateStable),n=g.useRef(!1);return AB(()=>{n.current=!0}),g.useCallback(function(i,o){o===void 0&&(o={}),n.current&&(typeof i=="number"?t.navigate(i):t.navigate(i,lm({fromRouteId:e},o)))},[t,e])}function TB(t){let{to:e,replace:n,state:r,relative:i}=t;Wf()||cr(!1);let{future:o,static:s}=g.useContext(vl),{matches:c}=g.useContext(Ja),{pathname:l}=Ui(),u=ur(),d=TN(e,NN(c,o.v7_relativeSplatPath),l,i==="path"),f=JSON.stringify(d);return g.useEffect(()=>u(JSON.parse(f),{replace:n,state:r,relative:i}),[u,f,i,n,r]),null}function zo(t){cr(!1)}function mee(t){let{basename:e="/",children:n=null,location:r,navigationType:i=Tc.Pop,navigator:o,static:s=!1,future:c}=t;Wf()&&cr(!1);let l=e.replace(/^\/*/,"/"),u=g.useMemo(()=>({basename:l,navigator:o,static:s,future:lm({v7_relativeSplatPath:!1},c)}),[l,c,o,s]);typeof r=="string"&&(r=Kf(r));let{pathname:d="/",search:f="",hash:h="",state:p=null,key:v="default"}=r,m=g.useMemo(()=>{let y=EN(d,l);return y==null?null:{location:{pathname:y,search:f,hash:h,state:p,key:v},navigationType:i}},[l,d,f,h,p,v,i]);return m==null?null:g.createElement(vl.Provider,{value:u},g.createElement(tw.Provider,{children:n,value:m}))}function gee(t){let{children:e,location:n}=t;return ree(kA(e),n)}new Promise(()=>{});function kA(t,e){e===void 0&&(e=[]);let n=[];return g.Children.forEach(t,(r,i)=>{if(!g.isValidElement(r))return;let o=[...e,i];if(r.type===g.Fragment){n.push.apply(n,kA(r.props.children,o));return}r.type!==zo&&cr(!1),!r.props.index||!r.props.children||cr(!1);let s={id:r.props.id||o.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(s.children=kA(r.props.children,o)),n.push(s)}),n}/** + * React Router DOM v6.27.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function PA(){return PA=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&(n[i]=t[i]);return n}function yee(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function xee(t,e){return t.button===0&&(!e||e==="_self")&&!yee(t)}function OA(t){return t===void 0&&(t=""),new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,n)=>{let r=t[n];return e.concat(Array.isArray(r)?r.map(i=>[n,i]):[[n,r]])},[]))}function bee(t,e){let n=OA(t);return e&&e.forEach((r,i)=>{n.has(i)||e.getAll(i).forEach(o=>{n.append(i,o)})}),n}const wee=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],See="6";try{window.__reactRouterVersion=See}catch{}const Cee="startTransition",ZI=jF[Cee];function _ee(t){let{basename:e,children:n,future:r,window:i}=t,o=g.useRef();o.current==null&&(o.current=TZ({window:i,v5Compat:!0}));let s=o.current,[c,l]=g.useState({action:s.action,location:s.location}),{v7_startTransition:u}=r||{},d=g.useCallback(f=>{u&&ZI?ZI(()=>l(f)):l(f)},[l,u]);return g.useLayoutEffect(()=>s.listen(d),[s,d]),g.createElement(mee,{basename:e,children:n,location:c.location,navigationType:c.action,navigator:s,future:r})}const Aee=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",jee=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Co=g.forwardRef(function(e,n){let{onClick:r,relative:i,reloadDocument:o,replace:s,state:c,target:l,to:u,preventScrollReset:d,viewTransition:f}=e,h=vee(e,wee),{basename:p}=g.useContext(vl),v,m=!1;if(typeof u=="string"&&jee.test(u)&&(v=u,Aee))try{let w=new URL(window.location.href),S=u.startsWith("//")?new URL(w.protocol+u):new URL(u),C=EN(S.pathname,p);S.origin===w.origin&&C!=null?u=C+S.search+S.hash:m=!0}catch{}let y=tee(u,{relative:i}),b=Eee(u,{replace:s,state:c,target:l,preventScrollReset:d,relative:i,viewTransition:f});function x(w){r&&r(w),w.defaultPrevented||b(w)}return g.createElement("a",PA({},h,{href:v||y,onClick:m||o?r:x,ref:n,target:l}))});var eR;(function(t){t.UseScrollRestoration="useScrollRestoration",t.UseSubmit="useSubmit",t.UseSubmitFetcher="useSubmitFetcher",t.UseFetcher="useFetcher",t.useViewTransitionState="useViewTransitionState"})(eR||(eR={}));var tR;(function(t){t.UseFetcher="useFetcher",t.UseFetchers="useFetchers",t.UseScrollRestoration="useScrollRestoration"})(tR||(tR={}));function Eee(t,e){let{target:n,replace:r,state:i,preventScrollReset:o,relative:s,viewTransition:c}=e===void 0?{}:e,l=ur(),u=Ui(),d=jB(t,{relative:s});return g.useCallback(f=>{if(xee(f,n)){f.preventDefault();let h=r!==void 0?r:Cx(u)===Cx(d);l(t,{replace:h,state:i,preventScrollReset:o,relative:s,viewTransition:c})}},[u,l,d,r,i,n,t,o,s,c])}function Nee(t){let e=g.useRef(OA(t)),n=g.useRef(!1),r=Ui(),i=g.useMemo(()=>bee(r.search,n.current?null:e.current),[r.search]),o=ur(),s=g.useCallback((c,l)=>{const u=OA(typeof c=="function"?c(i):c);n.current=!0,o("?"+u,l)},[o,i]);return[i,s]}/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Tee=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),kB=(...t)=>t.filter((e,n,r)=>!!e&&e.trim()!==""&&r.indexOf(e)===n).join(" ").trim();/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */var kee={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Pee=g.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i="",children:o,iconNode:s,...c},l)=>g.createElement("svg",{ref:l,...kee,width:e,height:e,stroke:t,strokeWidth:r?Number(n)*24/Number(e):n,className:kB("lucide",i),...c},[...s.map(([u,d])=>g.createElement(u,d)),...Array.isArray(o)?o:[o]]));/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ze=(t,e)=>{const n=g.forwardRef(({className:r,...i},o)=>g.createElement(Pee,{ref:o,iconNode:e,className:kB(`lucide-${Tee(t)}`,r),...i}));return n.displayName=`${t}`,n};/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const xa=ze("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nR=ze("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const um=ze("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const wC=ze("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ca=ze("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mu=ze("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rR=ze("Briefcase",[["path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16",key:"jecpp"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Oee=ze("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Iee=ze("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IA=ze("ChartNoAxesColumnIncreasing",[["line",{x1:"12",x2:"12",y1:"20",y2:"10",key:"1vz5eb"}],["line",{x1:"18",x2:"18",y1:"20",y2:"4",key:"cun8e5"}],["line",{x1:"6",x2:"6",y1:"20",y2:"16",key:"hq0ia6"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ree=ze("ChartPie",[["path",{d:"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",key:"pzmjnu"}],["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Io=ze("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const yl=ze("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const po=ze("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qf=ze("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mee=ze("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ON=ze("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rp=ze("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const PB=ze("CirclePlay",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polygon",{points:"10 8 16 12 10 16 10 8",key:"1cimsy"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Dee=ze("CircleUser",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}],["path",{d:"M7 20.662V19a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v1.662",key:"154egf"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $ee=ze("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IN=ze("Circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Lee=ze("ClipboardList",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const dm=ze("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fee=ze("CloudUpload",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242",key:"1pljnt"}],["path",{d:"m8 17 4-4 4 4",key:"1quai1"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Bee=ze("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const iR=ze("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ol=ze("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RA=ze("Ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Uee=ze("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sf=ze("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const zee=ze("FileVideo",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"m10 11 5 3-5 3v-6Z",key:"7ntvm4"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const RN=ze("Filter",[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3",key:"1yg77f"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const OB=ze("FolderPlus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const mo=ze("Folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Hee=ze("Grid2x2",[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 12h18",key:"1i2n21"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gee=ze("GripVertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MA=ze("Heart",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ax=ze("House",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Sp=ze("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Vee=ze("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Kee=ze("Laptop",[["path",{d:"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16",key:"tarvll"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DA=ze("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Wee=ze("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const gu=ze("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mv=ze("ListChecks",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const No=ze("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const qee=ze("Loader",[["path",{d:"M12 2v4",key:"3427ic"}],["path",{d:"m16.2 7.8 2.9-2.9",key:"r700ao"}],["path",{d:"M18 12h4",key:"wj9ykh"}],["path",{d:"m16.2 16.2 2.9 2.9",key:"1bxg5t"}],["path",{d:"M12 18v4",key:"jadmvz"}],["path",{d:"m4.9 19.1 2.9-2.9",key:"bwix9q"}],["path",{d:"M2 12h4",key:"j09sii"}],["path",{d:"m4.9 4.9 2.9 2.9",key:"giyufr"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const oR=ze("LogIn",[["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}],["polyline",{points:"10 17 15 12 10 7",key:"1ail0h"}],["line",{x1:"15",x2:"3",y1:"12",y2:"12",key:"v6grx8"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const sR=ze("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Yee=ze("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qee=ze("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Is=ze("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xs=ze("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Xee=ze("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const aR=ze("Paperclip",[["path",{d:"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48",key:"1u3ebp"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const $A=ze("PenLine",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Jee=ze("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Zee=ze("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Gr=ze("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ete=ze("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ru=ze("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const MN=ze("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const jx=ze("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const DN=ze("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const tte=ze("ShoppingBag",[["path",{d:"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z",key:"hou9p0"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M16 10a4 4 0 0 1-8 0",key:"1ltviw"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const nte=ze("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const rte=ze("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ite=ze("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ote=ze("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ex=ze("StickyNote",[["path",{d:"M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z",key:"qazsjp"}],["path",{d:"M15 3v4a2 2 0 0 0 2 2h4",key:"40519r"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ste=ze("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Ny=ze("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Qn=ze("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ate=ze("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const cte=ze("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const lte=ze("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const fm=ze("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Fr=ze("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const ute=ze("WandSparkles",[["path",{d:"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72",key:"ul74o6"}],["path",{d:"m14 7 3 3",key:"1r5n42"}],["path",{d:"M5 6v4",key:"ilb8ba"}],["path",{d:"M19 14v4",key:"blhpug"}],["path",{d:"M10 2v2",key:"7u0qdc"}],["path",{d:"M7 8H3",key:"zfb6yr"}],["path",{d:"M21 16h-4",key:"1cnmox"}],["path",{d:"M11 3H9",key:"1obp7u"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const Mi=ze("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** + * @license lucide-react v0.462.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const IB=ze("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function RB(t,e){return function(){return t.apply(e,arguments)}}const{toString:dte}=Object.prototype,{getPrototypeOf:$N}=Object,{iterator:nw,toStringTag:MB}=Symbol,rw=(t=>e=>{const n=dte.call(e);return t[n]||(t[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),ws=t=>(t=t.toLowerCase(),e=>rw(e)===t),iw=t=>e=>typeof e===t,{isArray:Yf}=Array,hm=iw("undefined");function fte(t){return t!==null&&!hm(t)&&t.constructor!==null&&!hm(t.constructor)&&Di(t.constructor.isBuffer)&&t.constructor.isBuffer(t)}const DB=ws("ArrayBuffer");function hte(t){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(t):e=t&&t.buffer&&DB(t.buffer),e}const pte=iw("string"),Di=iw("function"),$B=iw("number"),ow=t=>t!==null&&typeof t=="object",mte=t=>t===!0||t===!1,Ty=t=>{if(rw(t)!=="object")return!1;const e=$N(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(MB in t)&&!(nw in t)},gte=ws("Date"),vte=ws("File"),yte=ws("Blob"),xte=ws("FileList"),bte=t=>ow(t)&&Di(t.pipe),wte=t=>{let e;return t&&(typeof FormData=="function"&&t instanceof FormData||Di(t.append)&&((e=rw(t))==="formdata"||e==="object"&&Di(t.toString)&&t.toString()==="[object FormData]"))},Ste=ws("URLSearchParams"),[Cte,_te,Ate,jte]=["ReadableStream","Request","Response","Headers"].map(ws),Ete=t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function $g(t,e,{allOwnKeys:n=!1}={}){if(t===null||typeof t>"u")return;let r,i;if(typeof t!="object"&&(t=[t]),Yf(t))for(r=0,i=t.length;r0;)if(i=n[r],e===i.toLowerCase())return i;return null}const Ul=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,FB=t=>!hm(t)&&t!==Ul;function LA(){const{caseless:t}=FB(this)&&this||{},e={},n=(r,i)=>{const o=t&&LB(e,i)||i;Ty(e[o])&&Ty(r)?e[o]=LA(e[o],r):Ty(r)?e[o]=LA({},r):Yf(r)?e[o]=r.slice():e[o]=r};for(let r=0,i=arguments.length;r($g(e,(i,o)=>{n&&Di(i)?t[o]=RB(i,n):t[o]=i},{allOwnKeys:r}),t),Tte=t=>(t.charCodeAt(0)===65279&&(t=t.slice(1)),t),kte=(t,e,n,r)=>{t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},Pte=(t,e,n,r)=>{let i,o,s;const c={};if(e=e||{},t==null)return e;do{for(i=Object.getOwnPropertyNames(t),o=i.length;o-- >0;)s=i[o],(!r||r(s,t,e))&&!c[s]&&(e[s]=t[s],c[s]=!0);t=n!==!1&&$N(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},Ote=(t,e,n)=>{t=String(t),(n===void 0||n>t.length)&&(n=t.length),n-=e.length;const r=t.indexOf(e,n);return r!==-1&&r===n},Ite=t=>{if(!t)return null;if(Yf(t))return t;let e=t.length;if(!$B(e))return null;const n=new Array(e);for(;e-- >0;)n[e]=t[e];return n},Rte=(t=>e=>t&&e instanceof t)(typeof Uint8Array<"u"&&$N(Uint8Array)),Mte=(t,e)=>{const r=(t&&t[nw]).call(t);let i;for(;(i=r.next())&&!i.done;){const o=i.value;e.call(t,o[0],o[1])}},Dte=(t,e)=>{let n;const r=[];for(;(n=t.exec(e))!==null;)r.push(n);return r},$te=ws("HTMLFormElement"),Lte=t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,i){return r.toUpperCase()+i}),cR=(({hasOwnProperty:t})=>(e,n)=>t.call(e,n))(Object.prototype),Fte=ws("RegExp"),BB=(t,e)=>{const n=Object.getOwnPropertyDescriptors(t),r={};$g(n,(i,o)=>{let s;(s=e(i,o,t))!==!1&&(r[o]=s||i)}),Object.defineProperties(t,r)},Bte=t=>{BB(t,(e,n)=>{if(Di(t)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=t[n];if(Di(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},Ute=(t,e)=>{const n={},r=i=>{i.forEach(o=>{n[o]=!0})};return Yf(t)?r(t):r(String(t).split(e)),n},zte=()=>{},Hte=(t,e)=>t!=null&&Number.isFinite(t=+t)?t:e;function Gte(t){return!!(t&&Di(t.append)&&t[MB]==="FormData"&&t[nw])}const Vte=t=>{const e=new Array(10),n=(r,i)=>{if(ow(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[i]=r;const o=Yf(r)?[]:{};return $g(r,(s,c)=>{const l=n(s,i+1);!hm(l)&&(o[c]=l)}),e[i]=void 0,o}}return r};return n(t,0)},Kte=ws("AsyncFunction"),Wte=t=>t&&(ow(t)||Di(t))&&Di(t.then)&&Di(t.catch),UB=((t,e)=>t?setImmediate:e?((n,r)=>(Ul.addEventListener("message",({source:i,data:o})=>{i===Ul&&o===n&&r.length&&r.shift()()},!1),i=>{r.push(i),Ul.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",Di(Ul.postMessage)),qte=typeof queueMicrotask<"u"?queueMicrotask.bind(Ul):typeof process<"u"&&process.nextTick||UB,Yte=t=>t!=null&&Di(t[nw]),de={isArray:Yf,isArrayBuffer:DB,isBuffer:fte,isFormData:wte,isArrayBufferView:hte,isString:pte,isNumber:$B,isBoolean:mte,isObject:ow,isPlainObject:Ty,isReadableStream:Cte,isRequest:_te,isResponse:Ate,isHeaders:jte,isUndefined:hm,isDate:gte,isFile:vte,isBlob:yte,isRegExp:Fte,isFunction:Di,isStream:bte,isURLSearchParams:Ste,isTypedArray:Rte,isFileList:xte,forEach:$g,merge:LA,extend:Nte,trim:Ete,stripBOM:Tte,inherits:kte,toFlatObject:Pte,kindOf:rw,kindOfTest:ws,endsWith:Ote,toArray:Ite,forEachEntry:Mte,matchAll:Dte,isHTMLForm:$te,hasOwnProperty:cR,hasOwnProp:cR,reduceDescriptors:BB,freezeMethods:Bte,toObjectSet:Ute,toCamelCase:Lte,noop:zte,toFiniteNumber:Hte,findKey:LB,global:Ul,isContextDefined:FB,isSpecCompliantForm:Gte,toJSONObject:Vte,isAsyncFn:Kte,isThenable:Wte,setImmediate:UB,asap:qte,isIterable:Yte};function Ut(t,e,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=t,this.name="AxiosError",e&&(this.code=e),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i,this.status=i.status?i.status:null)}de.inherits(Ut,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:de.toJSONObject(this.config),code:this.code,status:this.status}}});const zB=Ut.prototype,HB={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(t=>{HB[t]={value:t}});Object.defineProperties(Ut,HB);Object.defineProperty(zB,"isAxiosError",{value:!0});Ut.from=(t,e,n,r,i,o)=>{const s=Object.create(zB);return de.toFlatObject(t,s,function(l){return l!==Error.prototype},c=>c!=="isAxiosError"),Ut.call(s,t.message,e,n,r,i),s.cause=t,s.name=t.name,o&&Object.assign(s,o),s};const Qte=null;function FA(t){return de.isPlainObject(t)||de.isArray(t)}function GB(t){return de.endsWith(t,"[]")?t.slice(0,-2):t}function lR(t,e,n){return t?t.concat(e).map(function(i,o){return i=GB(i),!n&&o?"["+i+"]":i}).join(n?".":""):e}function Xte(t){return de.isArray(t)&&!t.some(FA)}const Jte=de.toFlatObject(de,{},null,function(e){return/^is[A-Z]/.test(e)});function sw(t,e,n){if(!de.isObject(t))throw new TypeError("target must be an object");e=e||new FormData,n=de.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(m,y){return!de.isUndefined(y[m])});const r=n.metaTokens,i=n.visitor||d,o=n.dots,s=n.indexes,l=(n.Blob||typeof Blob<"u"&&Blob)&&de.isSpecCompliantForm(e);if(!de.isFunction(i))throw new TypeError("visitor must be a function");function u(v){if(v===null)return"";if(de.isDate(v))return v.toISOString();if(!l&&de.isBlob(v))throw new Ut("Blob is not supported. Use a Buffer instead.");return de.isArrayBuffer(v)||de.isTypedArray(v)?l&&typeof Blob=="function"?new Blob([v]):Buffer.from(v):v}function d(v,m,y){let b=v;if(v&&!y&&typeof v=="object"){if(de.endsWith(m,"{}"))m=r?m:m.slice(0,-2),v=JSON.stringify(v);else if(de.isArray(v)&&Xte(v)||(de.isFileList(v)||de.endsWith(m,"[]"))&&(b=de.toArray(v)))return m=GB(m),b.forEach(function(w,S){!(de.isUndefined(w)||w===null)&&e.append(s===!0?lR([m],S,o):s===null?m:m+"[]",u(w))}),!1}return FA(v)?!0:(e.append(lR(y,m,o),u(v)),!1)}const f=[],h=Object.assign(Jte,{defaultVisitor:d,convertValue:u,isVisitable:FA});function p(v,m){if(!de.isUndefined(v)){if(f.indexOf(v)!==-1)throw Error("Circular reference detected in "+m.join("."));f.push(v),de.forEach(v,function(b,x){(!(de.isUndefined(b)||b===null)&&i.call(e,b,de.isString(x)?x.trim():x,m,h))===!0&&p(b,m?m.concat(x):[x])}),f.pop()}}if(!de.isObject(t))throw new TypeError("data must be an object");return p(t),e}function uR(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function LN(t,e){this._pairs=[],t&&sw(t,this,e)}const VB=LN.prototype;VB.append=function(e,n){this._pairs.push([e,n])};VB.toString=function(e){const n=e?function(r){return e.call(this,r,uR)}:uR;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function Zte(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function KB(t,e,n){if(!e)return t;const r=n&&n.encode||Zte;de.isFunction(n)&&(n={serialize:n});const i=n&&n.serialize;let o;if(i?o=i(e,n):o=de.isURLSearchParams(e)?e.toString():new LN(e,n).toString(r),o){const s=t.indexOf("#");s!==-1&&(t=t.slice(0,s)),t+=(t.indexOf("?")===-1?"?":"&")+o}return t}class dR{constructor(){this.handlers=[]}use(e,n,r){return this.handlers.push({fulfilled:e,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){de.forEach(this.handlers,function(r){r!==null&&e(r)})}}const WB={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ene=typeof URLSearchParams<"u"?URLSearchParams:LN,tne=typeof FormData<"u"?FormData:null,nne=typeof Blob<"u"?Blob:null,rne={isBrowser:!0,classes:{URLSearchParams:ene,FormData:tne,Blob:nne},protocols:["http","https","file","blob","url","data"]},FN=typeof window<"u"&&typeof document<"u",BA=typeof navigator=="object"&&navigator||void 0,ine=FN&&(!BA||["ReactNative","NativeScript","NS"].indexOf(BA.product)<0),one=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",sne=FN&&window.location.href||"http://localhost",ane=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:FN,hasStandardBrowserEnv:ine,hasStandardBrowserWebWorkerEnv:one,navigator:BA,origin:sne},Symbol.toStringTag,{value:"Module"})),oi={...ane,...rne};function cne(t,e){return sw(t,new oi.classes.URLSearchParams,Object.assign({visitor:function(n,r,i,o){return oi.isNode&&de.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},e))}function lne(t){return de.matchAll(/\w+|\[(\w*)]/g,t).map(e=>e[0]==="[]"?"":e[1]||e[0])}function une(t){const e={},n=Object.keys(t);let r;const i=n.length;let o;for(r=0;r=n.length;return s=!s&&de.isArray(i)?i.length:s,l?(de.hasOwnProp(i,s)?i[s]=[i[s],r]:i[s]=r,!c):((!i[s]||!de.isObject(i[s]))&&(i[s]=[]),e(n,r,i[s],o)&&de.isArray(i[s])&&(i[s]=une(i[s])),!c)}if(de.isFormData(t)&&de.isFunction(t.entries)){const n={};return de.forEachEntry(t,(r,i)=>{e(lne(r),i,n,0)}),n}return null}function dne(t,e,n){if(de.isString(t))try{return(e||JSON.parse)(t),de.trim(t)}catch(r){if(r.name!=="SyntaxError")throw r}return(0,JSON.stringify)(t)}const Lg={transitional:WB,adapter:["xhr","http","fetch"],transformRequest:[function(e,n){const r=n.getContentType()||"",i=r.indexOf("application/json")>-1,o=de.isObject(e);if(o&&de.isHTMLForm(e)&&(e=new FormData(e)),de.isFormData(e))return i?JSON.stringify(qB(e)):e;if(de.isArrayBuffer(e)||de.isBuffer(e)||de.isStream(e)||de.isFile(e)||de.isBlob(e)||de.isReadableStream(e))return e;if(de.isArrayBufferView(e))return e.buffer;if(de.isURLSearchParams(e))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let c;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return cne(e,this.formSerializer).toString();if((c=de.isFileList(e))||r.indexOf("multipart/form-data")>-1){const l=this.env&&this.env.FormData;return sw(c?{"files[]":e}:e,l&&new l,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),dne(e)):e}],transformResponse:[function(e){const n=this.transitional||Lg.transitional,r=n&&n.forcedJSONParsing,i=this.responseType==="json";if(de.isResponse(e)||de.isReadableStream(e))return e;if(e&&de.isString(e)&&(r&&!this.responseType||i)){const s=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(c){if(s)throw c.name==="SyntaxError"?Ut.from(c,Ut.ERR_BAD_RESPONSE,this,null,this.response):c}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:oi.classes.FormData,Blob:oi.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};de.forEach(["delete","get","head","post","put","patch"],t=>{Lg.headers[t]={}});const fne=de.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),hne=t=>{const e={};let n,r,i;return t&&t.split(` +`).forEach(function(s){i=s.indexOf(":"),n=s.substring(0,i).trim().toLowerCase(),r=s.substring(i+1).trim(),!(!n||e[n]&&fne[n])&&(n==="set-cookie"?e[n]?e[n].push(r):e[n]=[r]:e[n]=e[n]?e[n]+", "+r:r)}),e},fR=Symbol("internals");function $h(t){return t&&String(t).trim().toLowerCase()}function ky(t){return t===!1||t==null?t:de.isArray(t)?t.map(ky):String(t)}function pne(t){const e=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(t);)e[r[1]]=r[2];return e}const mne=t=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim());function SC(t,e,n,r,i){if(de.isFunction(r))return r.call(this,e,n);if(i&&(e=n),!!de.isString(e)){if(de.isString(r))return e.indexOf(r)!==-1;if(de.isRegExp(r))return r.test(e)}}function gne(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,n,r)=>n.toUpperCase()+r)}function vne(t,e){const n=de.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(t,r+n,{value:function(i,o,s){return this[r].call(this,e,i,o,s)},configurable:!0})})}class $i{constructor(e){e&&this.set(e)}set(e,n,r){const i=this;function o(c,l,u){const d=$h(l);if(!d)throw new Error("header name must be a non-empty string");const f=de.findKey(i,d);(!f||i[f]===void 0||u===!0||u===void 0&&i[f]!==!1)&&(i[f||l]=ky(c))}const s=(c,l)=>de.forEach(c,(u,d)=>o(u,d,l));if(de.isPlainObject(e)||e instanceof this.constructor)s(e,n);else if(de.isString(e)&&(e=e.trim())&&!mne(e))s(hne(e),n);else if(de.isObject(e)&&de.isIterable(e)){let c={},l,u;for(const d of e){if(!de.isArray(d))throw TypeError("Object iterator must return a key-value pair");c[u=d[0]]=(l=c[u])?de.isArray(l)?[...l,d[1]]:[l,d[1]]:d[1]}s(c,n)}else e!=null&&o(n,e,r);return this}get(e,n){if(e=$h(e),e){const r=de.findKey(this,e);if(r){const i=this[r];if(!n)return i;if(n===!0)return pne(i);if(de.isFunction(n))return n.call(this,i,r);if(de.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,n){if(e=$h(e),e){const r=de.findKey(this,e);return!!(r&&this[r]!==void 0&&(!n||SC(this,this[r],r,n)))}return!1}delete(e,n){const r=this;let i=!1;function o(s){if(s=$h(s),s){const c=de.findKey(r,s);c&&(!n||SC(r,r[c],c,n))&&(delete r[c],i=!0)}}return de.isArray(e)?e.forEach(o):o(e),i}clear(e){const n=Object.keys(this);let r=n.length,i=!1;for(;r--;){const o=n[r];(!e||SC(this,this[o],o,e,!0))&&(delete this[o],i=!0)}return i}normalize(e){const n=this,r={};return de.forEach(this,(i,o)=>{const s=de.findKey(r,o);if(s){n[s]=ky(i),delete n[o];return}const c=e?gne(o):String(o).trim();c!==o&&delete n[o],n[c]=ky(i),r[c]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const n=Object.create(null);return de.forEach(this,(r,i)=>{r!=null&&r!==!1&&(n[i]=e&&de.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,n])=>e+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...n){const r=new this(e);return n.forEach(i=>r.set(i)),r}static accessor(e){const r=(this[fR]=this[fR]={accessors:{}}).accessors,i=this.prototype;function o(s){const c=$h(s);r[c]||(vne(i,s),r[c]=!0)}return de.isArray(e)?e.forEach(o):o(e),this}}$i.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);de.reduceDescriptors($i.prototype,({value:t},e)=>{let n=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(r){this[n]=r}}});de.freezeMethods($i);function CC(t,e){const n=this||Lg,r=e||n,i=$i.from(r.headers);let o=r.data;return de.forEach(t,function(c){o=c.call(n,o,i.normalize(),e?e.status:void 0)}),i.normalize(),o}function YB(t){return!!(t&&t.__CANCEL__)}function Qf(t,e,n){Ut.call(this,t??"canceled",Ut.ERR_CANCELED,e,n),this.name="CanceledError"}de.inherits(Qf,Ut,{__CANCEL__:!0});function QB(t,e,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?t(n):e(new Ut("Request failed with status code "+n.status,[Ut.ERR_BAD_REQUEST,Ut.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function yne(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}function xne(t,e){t=t||10;const n=new Array(t),r=new Array(t);let i=0,o=0,s;return e=e!==void 0?e:1e3,function(l){const u=Date.now(),d=r[o];s||(s=u),n[i]=l,r[i]=u;let f=o,h=0;for(;f!==i;)h+=n[f++],f=f%t;if(i=(i+1)%t,i===o&&(o=(o+1)%t),u-s{n=d,i=null,o&&(clearTimeout(o),o=null),t.apply(null,u)};return[(...u)=>{const d=Date.now(),f=d-n;f>=r?s(u,d):(i=u,o||(o=setTimeout(()=>{o=null,s(i)},r-f)))},()=>i&&s(i)]}const Nx=(t,e,n=3)=>{let r=0;const i=xne(50,250);return bne(o=>{const s=o.loaded,c=o.lengthComputable?o.total:void 0,l=s-r,u=i(l),d=s<=c;r=s;const f={loaded:s,total:c,progress:c?s/c:void 0,bytes:l,rate:u||void 0,estimated:u&&c&&d?(c-s)/u:void 0,event:o,lengthComputable:c!=null,[e?"download":"upload"]:!0};t(f)},n)},hR=(t,e)=>{const n=t!=null;return[r=>e[0]({lengthComputable:n,total:t,loaded:r}),e[1]]},pR=t=>(...e)=>de.asap(()=>t(...e)),wne=oi.hasStandardBrowserEnv?((t,e)=>n=>(n=new URL(n,oi.origin),t.protocol===n.protocol&&t.host===n.host&&(e||t.port===n.port)))(new URL(oi.origin),oi.navigator&&/(msie|trident)/i.test(oi.navigator.userAgent)):()=>!0,Sne=oi.hasStandardBrowserEnv?{write(t,e,n,r,i,o){const s=[t+"="+encodeURIComponent(e)];de.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),de.isString(r)&&s.push("path="+r),de.isString(i)&&s.push("domain="+i),o===!0&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Cne(t){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)}function _ne(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}function XB(t,e,n){let r=!Cne(e);return t&&(r||n==!1)?_ne(t,e):e}const mR=t=>t instanceof $i?{...t}:t;function vu(t,e){e=e||{};const n={};function r(u,d,f,h){return de.isPlainObject(u)&&de.isPlainObject(d)?de.merge.call({caseless:h},u,d):de.isPlainObject(d)?de.merge({},d):de.isArray(d)?d.slice():d}function i(u,d,f,h){if(de.isUndefined(d)){if(!de.isUndefined(u))return r(void 0,u,f,h)}else return r(u,d,f,h)}function o(u,d){if(!de.isUndefined(d))return r(void 0,d)}function s(u,d){if(de.isUndefined(d)){if(!de.isUndefined(u))return r(void 0,u)}else return r(void 0,d)}function c(u,d,f){if(f in e)return r(u,d);if(f in t)return r(void 0,u)}const l={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:c,headers:(u,d,f)=>i(mR(u),mR(d),f,!0)};return de.forEach(Object.keys(Object.assign({},t,e)),function(d){const f=l[d]||i,h=f(t[d],e[d],d);de.isUndefined(h)&&f!==c||(n[d]=h)}),n}const JB=t=>{const e=vu({},t);let{data:n,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:o,headers:s,auth:c}=e;e.headers=s=$i.from(s),e.url=KB(XB(e.baseURL,e.url,e.allowAbsoluteUrls),t.params,t.paramsSerializer),c&&s.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):"")));let l;if(de.isFormData(n)){if(oi.hasStandardBrowserEnv||oi.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if((l=s.getContentType())!==!1){const[u,...d]=l?l.split(";").map(f=>f.trim()).filter(Boolean):[];s.setContentType([u||"multipart/form-data",...d].join("; "))}}if(oi.hasStandardBrowserEnv&&(r&&de.isFunction(r)&&(r=r(e)),r||r!==!1&&wne(e.url))){const u=i&&o&&Sne.read(o);u&&s.set(i,u)}return e},Ane=typeof XMLHttpRequest<"u",jne=Ane&&function(t){return new Promise(function(n,r){const i=JB(t);let o=i.data;const s=$i.from(i.headers).normalize();let{responseType:c,onUploadProgress:l,onDownloadProgress:u}=i,d,f,h,p,v;function m(){p&&p(),v&&v(),i.cancelToken&&i.cancelToken.unsubscribe(d),i.signal&&i.signal.removeEventListener("abort",d)}let y=new XMLHttpRequest;y.open(i.method.toUpperCase(),i.url,!0),y.timeout=i.timeout;function b(){if(!y)return;const w=$i.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),C={data:!c||c==="text"||c==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:w,config:t,request:y};QB(function(A){n(A),m()},function(A){r(A),m()},C),y=null}"onloadend"in y?y.onloadend=b:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(b)},y.onabort=function(){y&&(r(new Ut("Request aborted",Ut.ECONNABORTED,t,y)),y=null)},y.onerror=function(){r(new Ut("Network Error",Ut.ERR_NETWORK,t,y)),y=null},y.ontimeout=function(){let S=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const C=i.transitional||WB;i.timeoutErrorMessage&&(S=i.timeoutErrorMessage),r(new Ut(S,C.clarifyTimeoutError?Ut.ETIMEDOUT:Ut.ECONNABORTED,t,y)),y=null},o===void 0&&s.setContentType(null),"setRequestHeader"in y&&de.forEach(s.toJSON(),function(S,C){y.setRequestHeader(C,S)}),de.isUndefined(i.withCredentials)||(y.withCredentials=!!i.withCredentials),c&&c!=="json"&&(y.responseType=i.responseType),u&&([h,v]=Nx(u,!0),y.addEventListener("progress",h)),l&&y.upload&&([f,p]=Nx(l),y.upload.addEventListener("progress",f),y.upload.addEventListener("loadend",p)),(i.cancelToken||i.signal)&&(d=w=>{y&&(r(!w||w.type?new Qf(null,t,y):w),y.abort(),y=null)},i.cancelToken&&i.cancelToken.subscribe(d),i.signal&&(i.signal.aborted?d():i.signal.addEventListener("abort",d)));const x=yne(i.url);if(x&&oi.protocols.indexOf(x)===-1){r(new Ut("Unsupported protocol "+x+":",Ut.ERR_BAD_REQUEST,t));return}y.send(o||null)})},Ene=(t,e)=>{const{length:n}=t=t?t.filter(Boolean):[];if(e||n){let r=new AbortController,i;const o=function(u){if(!i){i=!0,c();const d=u instanceof Error?u:this.reason;r.abort(d instanceof Ut?d:new Qf(d instanceof Error?d.message:d))}};let s=e&&setTimeout(()=>{s=null,o(new Ut(`timeout ${e} of ms exceeded`,Ut.ETIMEDOUT))},e);const c=()=>{t&&(s&&clearTimeout(s),s=null,t.forEach(u=>{u.unsubscribe?u.unsubscribe(o):u.removeEventListener("abort",o)}),t=null)};t.forEach(u=>u.addEventListener("abort",o));const{signal:l}=r;return l.unsubscribe=()=>de.asap(c),l}},Nne=function*(t,e){let n=t.byteLength;if(n{const i=Tne(t,e);let o=0,s,c=l=>{s||(s=!0,r&&r(l))};return new ReadableStream({async pull(l){try{const{done:u,value:d}=await i.next();if(u){c(),l.close();return}let f=d.byteLength;if(n){let h=o+=f;n(h)}l.enqueue(new Uint8Array(d))}catch(u){throw c(u),u}},cancel(l){return c(l),i.return()}},{highWaterMark:2})},aw=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",ZB=aw&&typeof ReadableStream=="function",Pne=aw&&(typeof TextEncoder=="function"?(t=>e=>t.encode(e))(new TextEncoder):async t=>new Uint8Array(await new Response(t).arrayBuffer())),eU=(t,...e)=>{try{return!!t(...e)}catch{return!1}},One=ZB&&eU(()=>{let t=!1;const e=new Request(oi.origin,{body:new ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!e}),vR=64*1024,UA=ZB&&eU(()=>de.isReadableStream(new Response("").body)),Tx={stream:UA&&(t=>t.body)};aw&&(t=>{["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Tx[e]&&(Tx[e]=de.isFunction(t[e])?n=>n[e]():(n,r)=>{throw new Ut(`Response type '${e}' is not supported`,Ut.ERR_NOT_SUPPORT,r)})})})(new Response);const Ine=async t=>{if(t==null)return 0;if(de.isBlob(t))return t.size;if(de.isSpecCompliantForm(t))return(await new Request(oi.origin,{method:"POST",body:t}).arrayBuffer()).byteLength;if(de.isArrayBufferView(t)||de.isArrayBuffer(t))return t.byteLength;if(de.isURLSearchParams(t)&&(t=t+""),de.isString(t))return(await Pne(t)).byteLength},Rne=async(t,e)=>{const n=de.toFiniteNumber(t.getContentLength());return n??Ine(e)},Mne=aw&&(async t=>{let{url:e,method:n,data:r,signal:i,cancelToken:o,timeout:s,onDownloadProgress:c,onUploadProgress:l,responseType:u,headers:d,withCredentials:f="same-origin",fetchOptions:h}=JB(t);u=u?(u+"").toLowerCase():"text";let p=Ene([i,o&&o.toAbortSignal()],s),v;const m=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let y;try{if(l&&One&&n!=="get"&&n!=="head"&&(y=await Rne(d,r))!==0){let C=new Request(e,{method:"POST",body:r,duplex:"half"}),_;if(de.isFormData(r)&&(_=C.headers.get("content-type"))&&d.setContentType(_),C.body){const[A,j]=hR(y,Nx(pR(l)));r=gR(C.body,vR,A,j)}}de.isString(f)||(f=f?"include":"omit");const b="credentials"in Request.prototype;v=new Request(e,{...h,signal:p,method:n.toUpperCase(),headers:d.normalize().toJSON(),body:r,duplex:"half",credentials:b?f:void 0});let x=await fetch(v);const w=UA&&(u==="stream"||u==="response");if(UA&&(c||w&&m)){const C={};["status","statusText","headers"].forEach(N=>{C[N]=x[N]});const _=de.toFiniteNumber(x.headers.get("content-length")),[A,j]=c&&hR(_,Nx(pR(c),!0))||[];x=new Response(gR(x.body,vR,A,()=>{j&&j(),m&&m()}),C)}u=u||"text";let S=await Tx[de.findKey(Tx,u)||"text"](x,t);return!w&&m&&m(),await new Promise((C,_)=>{QB(C,_,{data:S,headers:$i.from(x.headers),status:x.status,statusText:x.statusText,config:t,request:v})})}catch(b){throw m&&m(),b&&b.name==="TypeError"&&/Load failed|fetch/i.test(b.message)?Object.assign(new Ut("Network Error",Ut.ERR_NETWORK,t,v),{cause:b.cause||b}):Ut.from(b,b&&b.code,t,v)}}),zA={http:Qte,xhr:jne,fetch:Mne};de.forEach(zA,(t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch{}Object.defineProperty(t,"adapterName",{value:e})}});const yR=t=>`- ${t}`,Dne=t=>de.isFunction(t)||t===null||t===!1,tU={getAdapter:t=>{t=de.isArray(t)?t:[t];const{length:e}=t;let n,r;const i={};for(let o=0;o`adapter ${c} `+(l===!1?"is not supported by the environment":"is not available in the build"));let s=e?o.length>1?`since : +`+o.map(yR).join(` +`):" "+yR(o[0]):"as no adapter specified";throw new Ut("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return r},adapters:zA};function _C(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Qf(null,t)}function xR(t){return _C(t),t.headers=$i.from(t.headers),t.data=CC.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),tU.getAdapter(t.adapter||Lg.adapter)(t).then(function(r){return _C(t),r.data=CC.call(t,t.transformResponse,r),r.headers=$i.from(r.headers),r},function(r){return YB(r)||(_C(t),r&&r.response&&(r.response.data=CC.call(t,t.transformResponse,r.response),r.response.headers=$i.from(r.response.headers))),Promise.reject(r)})}const nU="1.9.0",cw={};["object","boolean","number","function","string","symbol"].forEach((t,e)=>{cw[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}});const bR={};cw.transitional=function(e,n,r){function i(o,s){return"[Axios v"+nU+"] Transitional option '"+o+"'"+s+(r?". "+r:"")}return(o,s,c)=>{if(e===!1)throw new Ut(i(s," has been removed"+(n?" in "+n:"")),Ut.ERR_DEPRECATED);return n&&!bR[s]&&(bR[s]=!0,console.warn(i(s," has been deprecated since v"+n+" and will be removed in the near future"))),e?e(o,s,c):!0}};cw.spelling=function(e){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${e}`),!0)};function $ne(t,e,n){if(typeof t!="object")throw new Ut("options must be an object",Ut.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let i=r.length;for(;i-- >0;){const o=r[i],s=e[o];if(s){const c=t[o],l=c===void 0||s(c,o,t);if(l!==!0)throw new Ut("option "+o+" must be "+l,Ut.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Ut("Unknown option "+o,Ut.ERR_BAD_OPTION)}}const Py={assertOptions:$ne,validators:cw},js=Py.validators;class iu{constructor(e){this.defaults=e||{},this.interceptors={request:new dR,response:new dR}}async request(e,n){try{return await this._request(e,n)}catch(r){if(r instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const o=i.stack?i.stack.replace(/^.+\n/,""):"";try{r.stack?o&&!String(r.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+o):r.stack=o}catch{}}throw r}}_request(e,n){typeof e=="string"?(n=n||{},n.url=e):n=e||{},n=vu(this.defaults,n);const{transitional:r,paramsSerializer:i,headers:o}=n;r!==void 0&&Py.assertOptions(r,{silentJSONParsing:js.transitional(js.boolean),forcedJSONParsing:js.transitional(js.boolean),clarifyTimeoutError:js.transitional(js.boolean)},!1),i!=null&&(de.isFunction(i)?n.paramsSerializer={serialize:i}:Py.assertOptions(i,{encode:js.function,serialize:js.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Py.assertOptions(n,{baseUrl:js.spelling("baseURL"),withXsrfToken:js.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=o&&de.merge(o.common,o[n.method]);o&&de.forEach(["delete","get","head","post","put","patch","common"],v=>{delete o[v]}),n.headers=$i.concat(s,o);const c=[];let l=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(l=l&&m.synchronous,c.unshift(m.fulfilled,m.rejected))});const u=[];this.interceptors.response.forEach(function(m){u.push(m.fulfilled,m.rejected)});let d,f=0,h;if(!l){const v=[xR.bind(this),void 0];for(v.unshift.apply(v,c),v.push.apply(v,u),h=v.length,d=Promise.resolve(n);f{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](i);r._listeners=null}),this.promise.then=i=>{let o;const s=new Promise(c=>{r.subscribe(c),o=c}).then(i);return s.cancel=function(){r.unsubscribe(o)},s},e(function(o,s,c){r.reason||(r.reason=new Qf(o,s,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const n=this._listeners.indexOf(e);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const e=new AbortController,n=r=>{e.abort(r)};return this.subscribe(n),e.signal.unsubscribe=()=>this.unsubscribe(n),e.signal}static source(){let e;return{token:new BN(function(i){e=i}),cancel:e}}}function Lne(t){return function(n){return t.apply(null,n)}}function Fne(t){return de.isObject(t)&&t.isAxiosError===!0}const HA={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HA).forEach(([t,e])=>{HA[e]=t});function rU(t){const e=new iu(t),n=RB(iu.prototype.request,e);return de.extend(n,iu.prototype,e,{allOwnKeys:!0}),de.extend(n,e,null,{allOwnKeys:!0}),n.create=function(i){return rU(vu(t,i))},n}const yr=rU(Lg);yr.Axios=iu;yr.CanceledError=Qf;yr.CancelToken=BN;yr.isCancel=YB;yr.VERSION=nU;yr.toFormData=sw;yr.AxiosError=Ut;yr.Cancel=yr.CanceledError;yr.all=function(e){return Promise.all(e)};yr.spread=Lne;yr.isAxiosError=Fne;yr.mergeConfig=vu;yr.AxiosHeaders=$i;yr.formToJSON=t=>qB(de.isHTMLForm(t)?new FormData(t):t);yr.getAdapter=tU.getAdapter;yr.HttpStatusCode=HA;yr.default=yr;const iU="https://ai-sandbox.oliver.solutions/semblance_back/api",We=yr.create({baseURL:iU,headers:{"Content-Type":"application/json"},timeout:6e5});We.interceptors.request.use(t=>{var n,r;const e=localStorage.getItem("auth_token");return e&&(t.headers.Authorization=`Bearer ${e}`),t.method==="put"&&((n=t.url)!=null&&n.includes("/focus-groups/"))&&console.log("🌐 API Request:",{method:t.method,url:t.url,baseURL:t.baseURL,fullURL:`${t.baseURL}${t.url}`,data:t.data}),(r=t.url)!=null&&r.includes("/folders/")&&console.log("🌐 API Folder Request:",{method:t.method,url:t.url,baseURL:t.baseURL,fullURL:`${t.baseURL}${t.url}`,data:t.data}),t},t=>Promise.reject(t));const GA="auth_error",Bne=t=>{t!=null&&t.isPersonaCreation||(localStorage.removeItem("auth_token"),localStorage.removeItem("user"));const e=new CustomEvent(GA,{detail:t||{}});window.dispatchEvent(e)};We.interceptors.response.use(t=>t,t=>{var e,n,r,i,o,s;if(t.response&&t.response.status===401){const c=t.config&&(((e=t.config.url)==null?void 0:e.includes("/personas"))||((n=t.config.url)==null?void 0:n.includes("/personas/batch"))||t.config.method&&((r=t.config.url)==null?void 0:r.startsWith("/personas")));console.log("API Error:",{url:(i=t.config)==null?void 0:i.url,method:(o=t.config)==null?void 0:o.method,isPersonaRequest:c}),c?console.warn("Authentication error in persona request, letting component handle it"):Bne({source:(s=t.config)==null?void 0:s.url,isPersonaCreation:!1})}return Promise.reject(t)});const Oy={login:(t,e)=>We.post("/auth/login",{username:t,password:e}),loginWithMicrosoft:t=>We.post("/auth/microsoft",{id_token:t}),register:(t,e,n)=>We.post("/auth/register",{username:t,email:e,password:n}),getProfile:()=>We.get("/auth/me")},$r={getAll:()=>We.get("/personas/all"),getById:t=>We.get(`/personas/${t}`),create:t=>We.post("/personas",t),update:(t,e)=>t&&t.startsWith("local-")?(console.log("Cannot update with local ID, creating new instead:",t),We.post("/personas",e)):We.put(`/personas/${t}`,e),delete:t=>{const e=typeof t=="object"&&t!==null&&t._id||t;return console.log(`Deleting persona with ID: ${e}`),We.delete(`/personas/${e}`)},createBatch:t=>We.post("/personas/batch",t),exportProfile:(t,e)=>We.post(`/personas/${t}/export-profile`,e||{},{timeout:3e5})},ma={generate:t=>We.post("/ai-personas/generate",t||{},{timeout:6e5}),generateAndSave:t=>We.post("/ai-personas/generate-and-save",t||{},{timeout:6e5}),batchGenerate:t=>We.post("/ai-personas/batch-generate",t,{timeout:6e5}),batchGenerateAndSave:t=>We.post("/ai-personas/batch-generate-and-save",t,{timeout:6e5}),generateBasicProfiles:(t,e=5,n=.8)=>We.post("/ai-personas/generate-basic-profiles",{audience_brief:t,count:e,temperature:n},{timeout:6e5}),completePersona:(t,e=.7)=>We.post("/ai-personas/complete-persona",{basic_profile:t,temperature:e},{timeout:6e5}),completeAndSavePersona:(t,e=.7)=>We.post("/ai-personas/complete-and-save-persona",{basic_profile:t,temperature:e},{timeout:6e5}),generatePersonaSummary:(t,e=.7)=>We.post("/ai-personas/generate-persona-summary",{persona_data:t,temperature:e},{timeout:6e5}),batchGenerateWithStages:async(t,e,n=5,r=.7,i,o)=>{var s;try{console.log(`📡 API call to generate-basic-profiles with model: ${o||"gemini-2.5-pro"}`);const l=(await We.post("/ai-personas/generate-basic-profiles",{audience_brief:t,research_objective:e,count:n,temperature:.7,customer_data_session_id:i,llm_model:o||"gemini-2.5-pro"},{timeout:6e5})).data.profiles,u=[],d=[],f=[];console.log(`📡 API call to complete-and-save-persona with model: ${o||"gemini-2.5-pro"}`);const h=l.map(v=>We.post("/ai-personas/complete-and-save-persona",{basic_profile:v,temperature:r,customer_data_session_id:i,llm_model:o||"gemini-2.5-pro"},{timeout:6e5}));if((await Promise.allSettled(h)).forEach((v,m)=>{if(v.status==="fulfilled")u.push(v.value.data.persona),d.push(v.value.data.persona_id);else{const y=l[m],b={index:m,name:y.name||`Persona ${m+1}`,error:v.reason};f.push(b),console.error(`Failed to complete persona ${m+1} (${y.name||"unnamed"}):`,v.reason)}}),u.length===0&&f.length>0)throw new Error(`Failed to generate any personas. ${f.length} profile(s) failed.`);return{data:{message:`Generated and saved ${u.length} personas${f.length>0?` (${f.length} failed)`:""}`,personas:u,persona_ids:d,errors:f.length>0?f:void 0,partial_success:f.length>0&&u.length>0}}}catch(c){throw((s=c.response)==null?void 0:s.status)===504||c.code==="ECONNABORTED"?new Error("Timeout error: The server took too long to generate personas. Please try with fewer personas or try again later."):c}},enhanceAudienceBrief:(t,e,n=.7)=>We.post("/ai-personas/enhance-audience-brief",{audience_brief:t,research_objective:e,temperature:n},{timeout:6e5}),batchGenerateSummaries:(t,e=.7,n)=>(console.log(`📡 Frontend: API call to batch-generate-summaries with model: ${n||"gemini-2.5-pro"}`),We.post("/ai-personas/batch-generate-summaries",{persona_ids:t,temperature:e,llm_model:n||"gemini-2.5-pro"},{timeout:9e5})),uploadCustomerData:t=>{const e=new FormData;for(let n=0;nWe.delete(`/ai-personas/cleanup-customer-data/${t}`)},gt={getAll:()=>We.get("/focus-groups"),getById:t=>We.get(`/focus-groups/${t}`),create:t=>We.post("/focus-groups",t),update:(t,e)=>We.put(`/focus-groups/${t}`,e),delete:t=>We.delete(`/focus-groups/${t}`),addParticipant:(t,e)=>We.post(`/focus-groups/${t}/participants`,{persona_id:e}),removeParticipant:(t,e)=>We.delete(`/focus-groups/${t}/participants/${e}`),sendMessage:(t,e)=>We.post(`/focus-groups/${t}/messages`,e),getMessages:t=>We.get(`/focus-groups/${t}/messages`),updateMessageHighlight:(t,e,n)=>We.patch(`/focus-groups/${t}/messages/${e}`,{highlighted:n}),describeAsset:(t,e)=>We.post(`/focus-groups/${t}/describe-asset`,{asset_filename:e},{timeout:12e4}),generateDiscussionGuide:t=>We.post("/focus-groups/generate-discussion-guide",t,{timeout:6e5}),generateDiscussionGuideForGroup:(t,e)=>We.post(`/focus-groups/${t}/generate-discussion-guide`,e,{timeout:6e5}),downloadDiscussionGuide:async t=>{try{const e=await We.get(`/focus-groups/${t}/discussion-guide/download`,{responseType:"blob",timeout:3e4}),n=e.headers["content-disposition"];let r="discussion-guide.md";if(n){const c=n.match(/filename="([^"]+)"/);c&&(r=c[1])}const i=new Blob([e.data],{type:"text/markdown"}),o=URL.createObjectURL(i),s=document.createElement("a");return s.href=o,s.download=r,s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(o),{success:!0,filename:r}}catch(e){throw console.error("Error downloading discussion guide:",e),new Error("Failed to download discussion guide")}},createNote:(t,e)=>We.post(`/focus-groups/${t}/notes`,e),getNotes:t=>We.get(`/focus-groups/${t}/notes`),deleteNote:(t,e)=>We.delete(`/focus-groups/${t}/notes/${e}`),uploadAssets:(t,e,n)=>(n===!0&&e.append("replace","true"),We.post(`/focus-groups/${t}/assets`,e,{headers:{"Content-Type":"multipart/form-data"},timeout:12e4})),getAssets:t=>We.get(`/focus-groups/${t}/assets`),getAssetUrl:(t,e)=>`${iU}/focus-groups/${t}/assets/${e}`,updateAssetName:(t,e,n)=>We.patch(`/focus-groups/${t}/assets/${e}`,{user_assigned_name:n}),deleteAsset:(t,e)=>We.delete(`/focus-groups/${t}/assets/${e}`)},rr={generateResponse:(t,e,n,r=.7)=>We.post("/focus-group-ai/generate-response",{focus_group_id:t,persona_id:e,current_topic:n,temperature:r},{timeout:6e5}),generateKeyThemes:(t,e=.7)=>We.post("/focus-group-ai/generate-key-themes",{focus_group_id:t,temperature:e},{timeout:6e5}),getKeyThemes:t=>We.get(`/focus-group-ai/key-themes/${t}`),deleteKeyTheme:(t,e)=>We.delete(`/focus-group-ai/key-themes/${t}/${e}`),getModeratorStatus:t=>We.get(`/focus-group-ai/moderator/status/${t}`),advanceModeratorDiscussion:t=>We.post(`/focus-group-ai/moderator/advance/${t}`,{},{timeout:6e5}),setModeratorPosition:(t,e,n)=>We.put(`/focus-group-ai/moderator/position/${t}`,{section_id:e,item_id:n}),startAutonomousConversation:(t,e)=>We.post(`/focus-group-ai/autonomous/start/${t}`,{initial_prompt:e},{timeout:6e5}),stopAutonomousConversation:(t,e)=>We.post(`/focus-group-ai/autonomous/stop/${t}`,{reason:e}),getAutonomousConversationStatus:t=>We.get(`/focus-group-ai/autonomous/status/${t}`),getConversationState:t=>We.get(`/focus-group-ai/conversation/state/${t}`),getConversationAnalytics:t=>We.get(`/focus-group-ai/conversation/analytics/${t}`),makeConversationDecision:(t,e=.7,n="ai")=>We.post(`/focus-group-ai/conversation/decision/${t}`,{temperature:e,mode:n},{timeout:6e5}),getConversationInsights:t=>We.get(`/focus-group-ai/conversation/insights/${t}`,{timeout:6e5}),manualIntervention:(t,e,n,r)=>We.post(`/focus-group-ai/conversation/intervene/${t}`,{action:e,message:n,participant_id:r}),getReasoningHistory:t=>We.get(`/focus-group-ai/conversation/reasoning-history/${t}`),endSession:(t,e)=>We.post(`/focus-group-ai/moderator/end-session/${t}`,{reason:e||"session_ended"})},Rs={getAll:()=>We.get("/folders"),getById:t=>We.get(`/folders/${t}`),create:t=>We.post("/folders",t),update:(t,e)=>We.put(`/folders/${t}`,e),delete:t=>We.delete(`/folders/${t}`),addPersona:(t,e)=>We.post(`/folders/${t}/personas`,{persona_id:e}),removePersona:(t,e)=>We.delete(`/folders/${t}/personas/${e}`),addPersonasBatch:(t,e)=>We.post(`/folders/${t}/personas/batch`,{persona_ids:e}),removePersonasBatch:(t,e)=>(console.log(`🌐 API removePersonasBatch: Sending POST to /folders/${t}/personas/remove-batch with persona_ids:`,e),We.post(`/folders/${t}/personas/remove-batch`,{persona_ids:e})),addPersonaToMultipleFolders:(t,e)=>{const n=e.map(r=>We.post(`/folders/${r}/personas`,{persona_id:t}));return Promise.all(n)},removePersonaFromAllFolders:t=>{throw new Error("Use removePersona for specific folders")}};/*! @azure/msal-common v15.10.0 2025-08-05 */const we={LIBRARY_NAME:"MSAL.JS",SKU:"msal.js.common",DEFAULT_AUTHORITY:"https://login.microsoftonline.com/common/",DEFAULT_AUTHORITY_HOST:"login.microsoftonline.com",DEFAULT_COMMON_TENANT:"common",ADFS:"adfs",DSTS:"dstsv2",AAD_INSTANCE_DISCOVERY_ENDPT:"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=",CIAM_AUTH_URL:".ciamlogin.com",AAD_TENANT_DOMAIN_SUFFIX:".onmicrosoft.com",RESOURCE_DELIM:"|",NO_ACCOUNT:"NO_ACCOUNT",CLAIMS:"claims",CONSUMER_UTID:"9188040d-6c67-4c5b-b112-36a304b66dad",OPENID_SCOPE:"openid",PROFILE_SCOPE:"profile",OFFLINE_ACCESS_SCOPE:"offline_access",EMAIL_SCOPE:"email",CODE_GRANT_TYPE:"authorization_code",RT_GRANT_TYPE:"refresh_token",S256_CODE_CHALLENGE_METHOD:"S256",URL_FORM_CONTENT_TYPE:"application/x-www-form-urlencoded;charset=utf-8",AUTHORIZATION_PENDING:"authorization_pending",NOT_DEFINED:"not_defined",EMPTY_STRING:"",NOT_APPLICABLE:"N/A",NOT_AVAILABLE:"Not Available",FORWARD_SLASH:"/",IMDS_ENDPOINT:"http://169.254.169.254/metadata/instance/compute/location",IMDS_VERSION:"2020-06-01",IMDS_TIMEOUT:2e3,AZURE_REGION_AUTO_DISCOVER_FLAG:"TryAutoDetect",REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX:"login.microsoft.com",KNOWN_PUBLIC_CLOUDS:["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"],SHR_NONCE_VALIDITY:240,INVALID_INSTANCE:"invalid_instance"},kc={SUCCESS:200,SUCCESS_RANGE_START:200,SUCCESS_RANGE_END:299,REDIRECT:302,CLIENT_ERROR:400,CLIENT_ERROR_RANGE_START:400,BAD_REQUEST:400,UNAUTHORIZED:401,NOT_FOUND:404,REQUEST_TIMEOUT:408,GONE:410,TOO_MANY_REQUESTS:429,CLIENT_ERROR_RANGE_END:499,SERVER_ERROR:500,SERVER_ERROR_RANGE_START:500,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,SERVER_ERROR_RANGE_END:599,MULTI_SIDED_ERROR:600},zl={GET:"GET",POST:"POST"},Fg=[we.OPENID_SCOPE,we.PROFILE_SCOPE,we.OFFLINE_ACCESS_SCOPE],wR=[...Fg,we.EMAIL_SCOPE],hi={CONTENT_TYPE:"Content-Type",CONTENT_LENGTH:"Content-Length",RETRY_AFTER:"Retry-After",CCS_HEADER:"X-AnchorMailbox",WWWAuthenticate:"WWW-Authenticate",AuthenticationInfo:"Authentication-Info",X_MS_REQUEST_ID:"x-ms-request-id",X_MS_HTTP_VERSION:"x-ms-httpver"},SR={ACTIVE_ACCOUNT_FILTERS:"active-account-filters"},Hc={COMMON:"common",ORGANIZATIONS:"organizations",CONSUMERS:"consumers"},Dv={ACCESS_TOKEN:"access_token",XMS_CC:"xms_cc"},gi={LOGIN:"login",SELECT_ACCOUNT:"select_account",CONSENT:"consent",NONE:"none",CREATE:"create",NO_SESSION:"no_session"},UN={CODE:"code",IDTOKEN_TOKEN:"id_token token",IDTOKEN_TOKEN_REFRESHTOKEN:"id_token token refresh_token"},lw={QUERY:"query",FRAGMENT:"fragment"},Une={QUERY:"query",FRAGMENT:"fragment",FORM_POST:"form_post"},oU={IMPLICIT_GRANT:"implicit",AUTHORIZATION_CODE_GRANT:"authorization_code",CLIENT_CREDENTIALS_GRANT:"client_credentials",RESOURCE_OWNER_PASSWORD_GRANT:"password",REFRESH_TOKEN_GRANT:"refresh_token",DEVICE_CODE_GRANT:"device_code",JWT_BEARER:"urn:ietf:params:oauth:grant-type:jwt-bearer"},$v={MSSTS_ACCOUNT_TYPE:"MSSTS",ADFS_ACCOUNT_TYPE:"ADFS",MSAV1_ACCOUNT_TYPE:"MSA",GENERIC_ACCOUNT_TYPE:"Generic"},pm={CACHE_KEY_SEPARATOR:"-",CLIENT_INFO_SEPARATOR:"."},Vr={ID_TOKEN:"IdToken",ACCESS_TOKEN:"AccessToken",ACCESS_TOKEN_WITH_AUTH_SCHEME:"AccessToken_With_AuthScheme",REFRESH_TOKEN:"RefreshToken"},zN="appmetadata",zne="client_info",kx="1",Px={CACHE_KEY:"authority-metadata",REFRESH_TIME_SECONDS:3600*24},Gi={CONFIG:"config",CACHE:"cache",NETWORK:"network",HARDCODED_VALUES:"hardcoded_values"},Ur={SCHEMA_VERSION:5,MAX_LAST_HEADER_BYTES:330,MAX_CACHED_ERRORS:50,CACHE_KEY:"server-telemetry",CATEGORY_SEPARATOR:"|",VALUE_SEPARATOR:",",OVERFLOW_TRUE:"1",OVERFLOW_FALSE:"0",UNKNOWN_ERROR:"unknown_error"},xn={BEARER:"Bearer",POP:"pop",SSH:"ssh-cert"},Cp={DEFAULT_THROTTLE_TIME_SECONDS:60,DEFAULT_MAX_THROTTLE_TIME_SECONDS:3600,THROTTLING_PREFIX:"throttling",X_MS_LIB_CAPABILITY_VALUE:"retry-after, h429"},CR={INVALID_GRANT_ERROR:"invalid_grant",CLIENT_MISMATCH_ERROR:"client_mismatch"},Hu={FAILED_AUTO_DETECTION:"1",INTERNAL_CACHE:"2",ENVIRONMENT_VARIABLE:"3",IMDS:"4"},AC={CONFIGURED_NO_AUTO_DETECTION:"2",AUTO_DETECTION_REQUESTED_SUCCESSFUL:"4",AUTO_DETECTION_REQUESTED_FAILED:"5"},Il={NOT_APPLICABLE:"0",FORCE_REFRESH_OR_CLAIMS:"1",NO_CACHED_ACCESS_TOKEN:"2",CACHED_ACCESS_TOKEN_EXPIRED:"3",PROACTIVELY_REFRESHED:"4"},Hne={Jwt:"JWT",Jwk:"JWK",Pop:"pop"},sU=300;/*! @azure/msal-common v15.10.0 2025-08-05 */const Ox="unexpected_error",Gne="post_request_failed";/*! @azure/msal-common v15.10.0 2025-08-05 */const _R={[Ox]:"Unexpected error in authentication.",[Gne]:"Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details."};class _n extends Error{constructor(e,n,r){const i=n?`${e}: ${n}`:e;super(i),Object.setPrototypeOf(this,_n.prototype),this.errorCode=e||we.EMPTY_STRING,this.errorMessage=n||we.EMPTY_STRING,this.subError=r||we.EMPTY_STRING,this.name="AuthError"}setCorrelationId(e){this.correlationId=e}}function VA(t,e){return new _n(t,e?`${_R[t]} ${e}`:_R[t])}/*! @azure/msal-common v15.10.0 2025-08-05 */const HN="client_info_decoding_error",aU="client_info_empty_error",GN="token_parsing_error",cU="null_or_empty_token",ga="endpoints_resolution_error",lU="network_error",uU="openid_config_error",dU="hash_not_deserialized",af="invalid_state",fU="state_mismatch",KA="state_not_found",hU="nonce_mismatch",VN="auth_time_not_found",pU="max_age_transpired",Vne="multiple_matching_tokens",Kne="multiple_matching_accounts",mU="multiple_matching_appMetadata",gU="request_cannot_be_made",vU="cannot_remove_empty_scope",yU="cannot_append_scopeset",WA="empty_input_scopeset",Wne="device_code_polling_cancelled",qne="device_code_expired",Yne="device_code_unknown_error",KN="no_account_in_silent_request",xU="invalid_cache_record",WN="invalid_cache_environment",qA="no_account_found",YA="no_crypto_object",Qne="unexpected_credential_type",Xne="invalid_assertion",Jne="invalid_client_credential",Gc="token_refresh_required",Zne="user_timeout_reached",bU="token_claims_cnf_required_for_signedjwt",wU="authorization_code_missing_from_server_response",SU="binding_key_not_removed",CU="end_session_endpoint_not_supported",qN="key_id_missing",ere="no_network_connectivity",tre="user_canceled",nre="missing_tenant_id_error",Yt="method_not_implemented",rre="nested_app_auth_bridge_disabled";/*! @azure/msal-common v15.10.0 2025-08-05 */const AR={[HN]:"The client info could not be parsed/decoded correctly",[aU]:"The client info was empty",[GN]:"Token cannot be parsed",[cU]:"The token is null or empty",[ga]:"Endpoints cannot be resolved",[lU]:"Network request failed",[uU]:"Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.",[dU]:"The hash parameters could not be deserialized",[af]:"State was not the expected format",[fU]:"State mismatch error",[KA]:"State not found",[hU]:"Nonce mismatch error",[VN]:"Max Age was requested and the ID token is missing the auth_time variable. auth_time is an optional claim and is not enabled by default - it must be enabled. See https://aka.ms/msaljs/optional-claims for more information.",[pU]:"Max Age is set to 0, or too much time has elapsed since the last end-user authentication.",[Vne]:"The cache contains multiple tokens satisfying the requirements. Call AcquireToken again providing more requirements such as authority or account.",[Kne]:"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account",[mU]:"The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata",[gU]:"Token request cannot be made without authorization code or refresh token.",[vU]:"Cannot remove null or empty scope from ScopeSet",[yU]:"Cannot append ScopeSet",[WA]:"Empty input ScopeSet cannot be processed",[Wne]:"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.",[qne]:"Device code is expired.",[Yne]:"Device code stopped polling for unknown reasons.",[KN]:"Please pass an account object, silent flow is not supported without account information",[xU]:"Cache record object was null or undefined.",[WN]:"Invalid environment when attempting to create cache entry",[qA]:"No account found in cache for given key.",[YA]:"No crypto object detected.",[Qne]:"Unexpected credential type.",[Xne]:"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515",[Jne]:"Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential",[Gc]:"Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.",[Zne]:"User defined timeout for device code polling reached",[bU]:"Cannot generate a POP jwt if the token_claims are not populated",[wU]:"Server response does not contain an authorization code to proceed",[SU]:"Could not remove the credential's binding key from storage.",[CU]:"The provided authority does not support logout",[qN]:"A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.",[ere]:"No network connectivity. Check your internet connection.",[tre]:"User cancelled the flow.",[nre]:"A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.",[Yt]:"This method has not been implemented",[rre]:"The nested app auth bridge is disabled"};class YN extends _n{constructor(e,n){super(e,n?`${AR[e]}: ${n}`:AR[e]),this.name="ClientAuthError",Object.setPrototypeOf(this,YN.prototype)}}function Te(t,e){return new YN(t,e)}/*! @azure/msal-common v15.10.0 2025-08-05 */const Ix={createNewGuid:()=>{throw Te(Yt)},base64Decode:()=>{throw Te(Yt)},base64Encode:()=>{throw Te(Yt)},base64UrlEncode:()=>{throw Te(Yt)},encodeKid:()=>{throw Te(Yt)},async getPublicKeyThumbprint(){throw Te(Yt)},async removeTokenBindingKey(){throw Te(Yt)},async clearKeystore(){throw Te(Yt)},async signJwt(){throw Te(Yt)},async hashString(){throw Te(Yt)}};/*! @azure/msal-common v15.10.0 2025-08-05 */var $n;(function(t){t[t.Error=0]="Error",t[t.Warning=1]="Warning",t[t.Info=2]="Info",t[t.Verbose=3]="Verbose",t[t.Trace=4]="Trace"})($n||($n={}));class Ga{constructor(e,n,r){this.level=$n.Info;const i=()=>{},o=e||Ga.createDefaultLoggerOptions();this.localCallback=o.loggerCallback||i,this.piiLoggingEnabled=o.piiLoggingEnabled||!1,this.level=typeof o.logLevel=="number"?o.logLevel:$n.Info,this.correlationId=o.correlationId||we.EMPTY_STRING,this.packageName=n||we.EMPTY_STRING,this.packageVersion=r||we.EMPTY_STRING}static createDefaultLoggerOptions(){return{loggerCallback:()=>{},piiLoggingEnabled:!1,logLevel:$n.Info}}clone(e,n,r){return new Ga({loggerCallback:this.localCallback,piiLoggingEnabled:this.piiLoggingEnabled,logLevel:this.level,correlationId:r||this.correlationId},e,n)}logMessage(e,n){if(n.logLevel>this.level||!this.piiLoggingEnabled&&n.containsPii)return;const o=`${`[${new Date().toUTCString()}] : [${n.correlationId||this.correlationId||""}]`} : ${this.packageName}@${this.packageVersion} : ${$n[n.logLevel]} - ${e}`;this.executeCallback(n.logLevel,o,n.containsPii||!1)}executeCallback(e,n,r){this.localCallback&&this.localCallback(e,n,r)}error(e,n){this.logMessage(e,{logLevel:$n.Error,containsPii:!1,correlationId:n||we.EMPTY_STRING})}errorPii(e,n){this.logMessage(e,{logLevel:$n.Error,containsPii:!0,correlationId:n||we.EMPTY_STRING})}warning(e,n){this.logMessage(e,{logLevel:$n.Warning,containsPii:!1,correlationId:n||we.EMPTY_STRING})}warningPii(e,n){this.logMessage(e,{logLevel:$n.Warning,containsPii:!0,correlationId:n||we.EMPTY_STRING})}info(e,n){this.logMessage(e,{logLevel:$n.Info,containsPii:!1,correlationId:n||we.EMPTY_STRING})}infoPii(e,n){this.logMessage(e,{logLevel:$n.Info,containsPii:!0,correlationId:n||we.EMPTY_STRING})}verbose(e,n){this.logMessage(e,{logLevel:$n.Verbose,containsPii:!1,correlationId:n||we.EMPTY_STRING})}verbosePii(e,n){this.logMessage(e,{logLevel:$n.Verbose,containsPii:!0,correlationId:n||we.EMPTY_STRING})}trace(e,n){this.logMessage(e,{logLevel:$n.Trace,containsPii:!1,correlationId:n||we.EMPTY_STRING})}tracePii(e,n){this.logMessage(e,{logLevel:$n.Trace,containsPii:!0,correlationId:n||we.EMPTY_STRING})}isPiiLoggingEnabled(){return this.piiLoggingEnabled||!1}}/*! @azure/msal-common v15.10.0 2025-08-05 */const _U="@azure/msal-common",QN="15.10.0";/*! @azure/msal-common v15.10.0 2025-08-05 */const XN={None:"none",AzurePublic:"https://login.microsoftonline.com",AzurePpe:"https://login.windows-ppe.net",AzureChina:"https://login.chinacloudapi.cn",AzureGermany:"https://login.microsoftonline.de",AzureUsGovernment:"https://login.microsoftonline.us"};/*! @azure/msal-common v15.10.0 2025-08-05 */const AU="redirect_uri_empty",ire="claims_request_parsing_error",jU="authority_uri_insecure",ip="url_parse_error",EU="empty_url_error",NU="empty_input_scopes_error",JN="invalid_claims",TU="token_request_empty",kU="logout_request_empty",ore="invalid_code_challenge_method",ZN="pkce_params_missing",eT="invalid_cloud_discovery_metadata",PU="invalid_authority_metadata",OU="untrusted_authority",uw="missing_ssh_jwk",IU="missing_ssh_kid",sre="missing_nonce_authentication_header",are="invalid_authentication_header",RU="cannot_set_OIDCOptions",MU="cannot_allow_platform_broker",DU="authority_mismatch",$U="invalid_request_method_for_EAR",LU="invalid_authorize_post_body_parameters";/*! @azure/msal-common v15.10.0 2025-08-05 */const cre={[AU]:"A redirect URI is required for all calls, and none has been set.",[ire]:"Could not parse the given claims request object.",[jU]:"Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options",[ip]:"URL could not be parsed into appropriate segments.",[EU]:"URL was empty or null.",[NU]:"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.",[JN]:"Given claims parameter must be a stringified JSON object.",[TU]:"Token request was empty and not found in cache.",[kU]:"The logout request was null or undefined.",[ore]:'code_challenge_method passed is invalid. Valid values are "plain" and "S256".',[ZN]:"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request",[eT]:"Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields",[PU]:"Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.",[OU]:"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.",[uw]:"Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.",[IU]:"Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.",[sre]:"Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.",[are]:"Invalid authentication header provided",[RU]:"Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.",[MU]:"Cannot set allowPlatformBroker parameter to true when not in AAD protocol mode.",[DU]:"Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.",[LU]:"Invalid authorize post body parameters provided. If you are using authorizePostBodyParameters, the request method must be POST. Please check the request method and parameters.",[$U]:"Invalid request method for EAR protocol mode. The request method cannot be GET when using EAR protocol mode. Please change the request method to POST."};class tT extends _n{constructor(e){super(e,cre[e]),this.name="ClientConfigurationError",Object.setPrototypeOf(this,tT.prototype)}}function jn(t){return new tT(t)}/*! @azure/msal-common v15.10.0 2025-08-05 */class Gs{static isEmptyObj(e){if(e)try{const n=JSON.parse(e);return Object.keys(n).length===0}catch{}return!0}static startsWith(e,n){return e.indexOf(n)===0}static endsWith(e,n){return e.length>=n.length&&e.lastIndexOf(n)===e.length-n.length}static queryStringToObject(e){const n={},r=e.split("&"),i=o=>decodeURIComponent(o.replace(/\+/g," "));return r.forEach(o=>{if(o.trim()){const[s,c]=o.split(/=(.+)/g,2);s&&c&&(n[i(s)]=i(c))}}),n}static trimArrayEntries(e){return e.map(n=>n.trim())}static removeEmptyStringsFromArray(e){return e.filter(n=>!!n)}static jsonParseHelper(e){try{return JSON.parse(e)}catch{return null}}static matchPattern(e,n){return new RegExp(e.replace(/\\/g,"\\\\").replace(/\*/g,"[^ ]*").replace(/\?/g,"\\?")).test(n)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Er{constructor(e){const n=e?Gs.trimArrayEntries([...e]):[],r=n?Gs.removeEmptyStringsFromArray(n):[];if(!r||!r.length)throw jn(NU);this.scopes=new Set,r.forEach(i=>this.scopes.add(i))}static fromString(e){const r=(e||we.EMPTY_STRING).split(" ");return new Er(r)}static createSearchScopes(e){const n=new Er(e);return n.containsOnlyOIDCScopes()?n.removeScope(we.OFFLINE_ACCESS_SCOPE):n.removeOIDCScopes(),n}containsScope(e){const n=this.printScopesLowerCase().split(" "),r=new Er(n);return e?r.scopes.has(e.toLowerCase()):!1}containsScopeSet(e){return!e||e.scopes.size<=0?!1:this.scopes.size>=e.scopes.size&&e.asArray().every(n=>this.containsScope(n))}containsOnlyOIDCScopes(){let e=0;return wR.forEach(n=>{this.containsScope(n)&&(e+=1)}),this.scopes.size===e}appendScope(e){e&&this.scopes.add(e.trim())}appendScopes(e){try{e.forEach(n=>this.appendScope(n))}catch{throw Te(yU)}}removeScope(e){if(!e)throw Te(vU);this.scopes.delete(e.trim())}removeOIDCScopes(){wR.forEach(e=>{this.scopes.delete(e)})}unionScopeSets(e){if(!e)throw Te(WA);const n=new Set;return e.scopes.forEach(r=>n.add(r.toLowerCase())),this.scopes.forEach(r=>n.add(r.toLowerCase())),n}intersectingScopeSets(e){if(!e)throw Te(WA);e.containsOnlyOIDCScopes()||e.removeOIDCScopes();const n=this.unionScopeSets(e),r=e.getScopeCount(),i=this.getScopeCount();return n.sizee.push(n)),e}printScopes(){return this.scopes?this.asArray().join(" "):we.EMPTY_STRING}printScopesLowerCase(){return this.printScopes().toLowerCase()}}/*! @azure/msal-common v15.10.0 2025-08-05 */function jR(t,e){return!!t&&!!e&&t===e.split(".")[1]}function nT(t,e,n,r){if(r){const{oid:i,sub:o,tid:s,name:c,tfp:l,acr:u,preferred_username:d,upn:f,login_hint:h}=r,p=s||l||u||"";return{tenantId:p,localAccountId:i||o||"",name:c,username:d||f||"",loginHint:h,isHomeTenant:jR(p,t)}}else return{tenantId:n,localAccountId:e,username:"",isHomeTenant:jR(n,t)}}function rT(t,e,n,r){let i=t;if(e){const{isHomeTenant:o,...s}=e;i={...t,...s}}if(n){const{isHomeTenant:o,...s}=nT(t.homeAccountId,t.localAccountId,t.tenantId,n);return i={...i,...s,idTokenClaims:n,idToken:r},i}return i}/*! @azure/msal-common v15.10.0 2025-08-05 */function Xf(t,e){const n=lre(t);try{const r=e(n);return JSON.parse(r)}catch{throw Te(GN)}}function lre(t){if(!t)throw Te(cU);const n=/^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/.exec(t);if(!n||n.length<4)throw Te(GN);return n[2]}function FU(t,e){if(e===0||Date.now()-3e5>t+e)throw Te(pU)}/*! @azure/msal-common v15.10.0 2025-08-05 */function BU(t){return t.startsWith("#/")?t.substring(2):t.startsWith("#")||t.startsWith("?")?t.substring(1):t}function Rx(t){if(!t||t.indexOf("=")<0)return null;try{const e=BU(t),n=Object.fromEntries(new URLSearchParams(e));if(n.code||n.ear_jwe||n.error||n.error_description||n.state)return n}catch{throw Te(dU)}return null}function mm(t,e=!0,n){const r=new Array;return t.forEach((i,o)=>{!e&&n&&o in n?r.push(`${o}=${i}`):r.push(`${o}=${encodeURIComponent(i)}`)}),r.join("&")}/*! @azure/msal-common v15.10.0 2025-08-05 */class sn{get urlString(){return this._urlString}constructor(e){if(this._urlString=e,!this._urlString)throw jn(EU);e.includes("#")||(this._urlString=sn.canonicalizeUri(e))}static canonicalizeUri(e){if(e){let n=e.toLowerCase();return Gs.endsWith(n,"?")?n=n.slice(0,-1):Gs.endsWith(n,"?/")&&(n=n.slice(0,-2)),Gs.endsWith(n,"/")||(n+="/"),n}return e}validateAsUri(){let e;try{e=this.getUrlComponents()}catch{throw jn(ip)}if(!e.HostNameAndPort||!e.PathSegments)throw jn(ip);if(!e.Protocol||e.Protocol.toLowerCase()!=="https:")throw jn(jU)}static appendQueryString(e,n){return n?e.indexOf("?")<0?`${e}?${n}`:`${e}&${n}`:e}static removeHashFromUrl(e){return sn.canonicalizeUri(e.split("#")[0])}replaceTenantPath(e){const n=this.getUrlComponents(),r=n.PathSegments;return e&&r.length!==0&&(r[0]===Hc.COMMON||r[0]===Hc.ORGANIZATIONS)&&(r[0]=e),sn.constructAuthorityUriFromObject(n)}getUrlComponents(){const e=RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"),n=this.urlString.match(e);if(!n)throw jn(ip);const r={Protocol:n[1],HostNameAndPort:n[4],AbsolutePath:n[5],QueryString:n[7]};let i=r.AbsolutePath.split("/");return i=i.filter(o=>o&&o.length>0),r.PathSegments=i,r.QueryString&&r.QueryString.endsWith("/")&&(r.QueryString=r.QueryString.substring(0,r.QueryString.length-1)),r}static getDomainFromUrl(e){const n=RegExp("^([^:/?#]+://)?([^/?#]*)"),r=e.match(n);if(!r)throw jn(ip);return r[2]}static getAbsoluteUrl(e,n){if(e[0]===we.FORWARD_SLASH){const i=new sn(n).getUrlComponents();return i.Protocol+"//"+i.HostNameAndPort+e}return e}static constructAuthorityUriFromObject(e){return new sn(e.Protocol+"//"+e.HostNameAndPort+"/"+e.PathSegments.join("/"))}static hashContainsKnownProperties(e){return!!Rx(e)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const UU={endpointMetadata:{"login.microsoftonline.com":{token_endpoint:"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token",jwks_uri:"https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys",issuer:"https://login.microsoftonline.com/{tenantid}/v2.0",authorization_endpoint:"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize",end_session_endpoint:"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout"},"login.chinacloudapi.cn":{token_endpoint:"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token",jwks_uri:"https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys",issuer:"https://login.partner.microsoftonline.cn/{tenantid}/v2.0",authorization_endpoint:"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize",end_session_endpoint:"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout"},"login.microsoftonline.us":{token_endpoint:"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token",jwks_uri:"https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys",issuer:"https://login.microsoftonline.us/{tenantid}/v2.0",authorization_endpoint:"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize",end_session_endpoint:"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout"}},instanceDiscoveryMetadata:{metadata:[{preferred_network:"login.microsoftonline.com",preferred_cache:"login.windows.net",aliases:["login.microsoftonline.com","login.windows.net","login.microsoft.com","sts.windows.net"]},{preferred_network:"login.partner.microsoftonline.cn",preferred_cache:"login.partner.microsoftonline.cn",aliases:["login.partner.microsoftonline.cn","login.chinacloudapi.cn"]},{preferred_network:"login.microsoftonline.de",preferred_cache:"login.microsoftonline.de",aliases:["login.microsoftonline.de"]},{preferred_network:"login.microsoftonline.us",preferred_cache:"login.microsoftonline.us",aliases:["login.microsoftonline.us","login.usgovcloudapi.net"]},{preferred_network:"login-us.microsoftonline.com",preferred_cache:"login-us.microsoftonline.com",aliases:["login-us.microsoftonline.com"]}]}},ER=UU.endpointMetadata,iT=UU.instanceDiscoveryMetadata,zU=new Set;iT.metadata.forEach(t=>{t.aliases.forEach(e=>{zU.add(e)})});function ure(t,e){var i;let n;const r=t.canonicalAuthority;if(r){const o=new sn(r).getUrlComponents().HostNameAndPort;n=NR(o,(i=t.cloudDiscoveryMetadata)==null?void 0:i.metadata,Gi.CONFIG,e)||NR(o,iT.metadata,Gi.HARDCODED_VALUES,e)||t.knownAuthorities}return n||[]}function NR(t,e,n,r){if(r==null||r.trace(`getAliasesFromMetadata called with source: ${n}`),t&&e){const i=Mx(e,t);if(i)return r==null||r.trace(`getAliasesFromMetadata: found cloud discovery metadata in ${n}, returning aliases`),i.aliases;r==null||r.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in ${n}`)}return null}function dre(t){return Mx(iT.metadata,t)}function Mx(t,e){for(let n=0;n1?r.sort(o=>o.idTokenClaims?-1:1)[0]:r.length===1?r[0]:null}getBaseAccountInfo(e,n){const r=this.getAccountsFilteredBy(e,n);return r.length>0?r[0].getAccountInfo():null}buildTenantProfiles(e,n,r){return e.flatMap(i=>this.getTenantProfilesFromAccountEntity(i,n,r==null?void 0:r.tenantId,r))}getTenantedAccountInfoByFilter(e,n,r,i,o){let s=null,c;if(o&&!this.tenantProfileMatchesFilter(r,o))return null;const l=this.getIdToken(e,i,n,r.tenantId);return l&&(c=Xf(l.secret,this.cryptoImpl.base64Decode),!this.idTokenClaimsMatchTenantProfileFilter(c,o))?null:(s=rT(e,r,c,l==null?void 0:l.secret),s)}getTenantProfilesFromAccountEntity(e,n,r,i){const o=e.getAccountInfo();let s=o.tenantProfiles||new Map;const c=this.getTokenKeys();if(r){const u=s.get(r);if(u)s=new Map([[r,u]]);else return[]}const l=[];return s.forEach(u=>{const d=this.getTenantedAccountInfoByFilter(o,c,u,n,i);d&&l.push(d)}),l}tenantProfileMatchesFilter(e,n){return!(n.localAccountId&&!this.matchLocalAccountIdFromTenantProfile(e,n.localAccountId)||n.name&&e.name!==n.name||n.isHomeTenant!==void 0&&e.isHomeTenant!==n.isHomeTenant)}idTokenClaimsMatchTenantProfileFilter(e,n){return!(n&&(n.localAccountId&&!this.matchLocalAccountIdFromTokenClaims(e,n.localAccountId)||n.loginHint&&!this.matchLoginHintFromTokenClaims(e,n.loginHint)||n.username&&!this.matchUsername(e.preferred_username,n.username)||n.name&&!this.matchName(e,n.name)||n.sid&&!this.matchSid(e,n.sid)))}async saveCacheRecord(e,n,r){var i;if(!e)throw Te(xU);try{e.account&&await this.setAccount(e.account,n),e.idToken&&(r==null?void 0:r.idToken)!==!1&&await this.setIdTokenCredential(e.idToken,n),e.accessToken&&(r==null?void 0:r.accessToken)!==!1&&await this.saveAccessToken(e.accessToken,n),e.refreshToken&&(r==null?void 0:r.refreshToken)!==!1&&await this.setRefreshTokenCredential(e.refreshToken,n),e.appMetadata&&this.setAppMetadata(e.appMetadata,n)}catch(o){throw(i=this.commonLogger)==null||i.error("CacheManager.saveCacheRecord: failed"),o instanceof _n?o:QA(o)}}async saveAccessToken(e,n){const r={clientId:e.clientId,credentialType:e.credentialType,environment:e.environment,homeAccountId:e.homeAccountId,realm:e.realm,tokenType:e.tokenType,requestedClaimsHash:e.requestedClaimsHash},i=this.getTokenKeys(),o=Er.fromString(e.target);i.accessToken.forEach(s=>{if(!this.accessTokenKeyMatchesFilter(s,r,!1))return;const c=this.getAccessTokenCredential(s,n);c&&this.credentialMatchesFilter(c,r)&&Er.fromString(c.target).intersectingScopeSets(o)&&this.removeAccessToken(s,n)}),await this.setAccessTokenCredential(e,n)}getAccountsFilteredBy(e,n){const r=this.getAccountKeys(),i=[];return r.forEach(o=>{var u;const s=this.getAccount(o,n);if(!s||e.homeAccountId&&!this.matchHomeAccountId(s,e.homeAccountId)||e.username&&!this.matchUsername(s.username,e.username)||e.environment&&!this.matchEnvironment(s,e.environment)||e.realm&&!this.matchRealm(s,e.realm)||e.nativeAccountId&&!this.matchNativeAccountId(s,e.nativeAccountId)||e.authorityType&&!this.matchAuthorityType(s,e.authorityType))return;const c={localAccountId:e==null?void 0:e.localAccountId,name:e==null?void 0:e.name},l=(u=s.tenantProfiles)==null?void 0:u.filter(d=>this.tenantProfileMatchesFilter(d,c));l&&l.length===0||i.push(s)}),i}credentialMatchesFilter(e,n){return!(n.clientId&&!this.matchClientId(e,n.clientId)||n.userAssertionHash&&!this.matchUserAssertionHash(e,n.userAssertionHash)||typeof n.homeAccountId=="string"&&!this.matchHomeAccountId(e,n.homeAccountId)||n.environment&&!this.matchEnvironment(e,n.environment)||n.realm&&!this.matchRealm(e,n.realm)||n.credentialType&&!this.matchCredentialType(e,n.credentialType)||n.familyId&&!this.matchFamilyId(e,n.familyId)||n.target&&!this.matchTarget(e,n.target)||(n.requestedClaimsHash||e.requestedClaimsHash)&&e.requestedClaimsHash!==n.requestedClaimsHash||e.credentialType===Vr.ACCESS_TOKEN_WITH_AUTH_SCHEME&&(n.tokenType&&!this.matchTokenType(e,n.tokenType)||n.tokenType===xn.SSH&&n.keyId&&!this.matchKeyId(e,n.keyId)))}getAppMetadataFilteredBy(e){const n=this.getKeys(),r={};return n.forEach(i=>{if(!this.isAppMetadata(i))return;const o=this.getAppMetadata(i);o&&(e.environment&&!this.matchEnvironment(o,e.environment)||e.clientId&&!this.matchClientId(o,e.clientId)||(r[i]=o))}),r}getAuthorityMetadataByAlias(e){const n=this.getAuthorityMetadataKeys();let r=null;return n.forEach(i=>{if(!this.isAuthorityMetadata(i)||i.indexOf(this.clientId)===-1)return;const o=this.getAuthorityMetadata(i);o&&o.aliases.indexOf(e)!==-1&&(r=o)}),r}removeAllAccounts(e){this.getAllAccounts({},e).forEach(r=>{this.removeAccount(r,e)})}removeAccount(e,n){this.removeAccountContext(e,n);const r=this.getAccountKeys(),i=o=>o.includes(e.homeAccountId)&&o.includes(e.environment);r.filter(i).forEach(o=>{this.removeItem(o,n),this.performanceClient.incrementFields({accountsRemoved:1},n)})}removeAccountContext(e,n){const r=this.getTokenKeys(),i=o=>o.includes(e.homeAccountId)&&o.includes(e.environment);r.idToken.filter(i).forEach(o=>{this.removeIdToken(o,n)}),r.accessToken.filter(i).forEach(o=>{this.removeAccessToken(o,n)}),r.refreshToken.filter(i).forEach(o=>{this.removeRefreshToken(o,n)})}removeAccessToken(e,n){const r=this.getAccessTokenCredential(e,n);if(this.removeItem(e,n),this.performanceClient.incrementFields({accessTokensRemoved:1},n),!r||r.credentialType.toLowerCase()!==Vr.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()||r.tokenType!==xn.POP)return;const i=r.keyId;i&&this.cryptoImpl.removeTokenBindingKey(i).catch(()=>{var o;this.commonLogger.error(`Failed to remove token binding key ${i}`,n),(o=this.performanceClient)==null||o.incrementFields({removeTokenBindingKeyFailure:1},n)})}removeAppMetadata(e){return this.getKeys().forEach(r=>{this.isAppMetadata(r)&&this.removeItem(r,e)}),!0}getIdToken(e,n,r,i,o){this.commonLogger.trace("CacheManager - getIdToken called");const s={homeAccountId:e.homeAccountId,environment:e.environment,credentialType:Vr.ID_TOKEN,clientId:this.clientId,realm:i},c=this.getIdTokensByFilter(s,n,r),l=c.size;if(l<1)return this.commonLogger.info("CacheManager:getIdToken - No token found"),null;if(l>1){let u=c;if(!i){const d=new Map;c.forEach((h,p)=>{h.realm===e.tenantId&&d.set(p,h)});const f=d.size;if(f<1)return this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result"),c.values().next().value;if(f===1)return this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile"),d.values().next().value;u=d}return this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them"),u.forEach((d,f)=>{this.removeIdToken(f,n)}),o&&n&&o.addFields({multiMatchedID:c.size},n),null}return this.commonLogger.info("CacheManager:getIdToken - Returning ID token"),c.values().next().value}getIdTokensByFilter(e,n,r){const i=r&&r.idToken||this.getTokenKeys().idToken,o=new Map;return i.forEach(s=>{if(!this.idTokenKeyMatchesFilter(s,{clientId:this.clientId,...e}))return;const c=this.getIdTokenCredential(s,n);c&&this.credentialMatchesFilter(c,e)&&o.set(s,c)}),o}idTokenKeyMatchesFilter(e,n){const r=e.toLowerCase();return!(n.clientId&&r.indexOf(n.clientId.toLowerCase())===-1||n.homeAccountId&&r.indexOf(n.homeAccountId.toLowerCase())===-1)}removeIdToken(e,n){this.removeItem(e,n)}removeRefreshToken(e,n){this.removeItem(e,n)}getAccessToken(e,n,r,i){const o=n.correlationId;this.commonLogger.trace("CacheManager - getAccessToken called",o);const s=Er.createSearchScopes(n.scopes),c=n.authenticationScheme||xn.BEARER,l=c&&c.toLowerCase()!==xn.BEARER.toLowerCase()?Vr.ACCESS_TOKEN_WITH_AUTH_SCHEME:Vr.ACCESS_TOKEN,u={homeAccountId:e.homeAccountId,environment:e.environment,credentialType:l,clientId:this.clientId,realm:i||e.tenantId,target:s,tokenType:c,keyId:n.sshKid,requestedClaimsHash:n.requestedClaimsHash},d=r&&r.accessToken||this.getTokenKeys().accessToken,f=[];d.forEach(p=>{if(this.accessTokenKeyMatchesFilter(p,u,!0)){const v=this.getAccessTokenCredential(p,o);v&&this.credentialMatchesFilter(v,u)&&f.push(v)}});const h=f.length;return h<1?(this.commonLogger.info("CacheManager:getAccessToken - No token found",o),null):h>1?(this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them",o),f.forEach(p=>{this.removeAccessToken(this.generateCredentialKey(p),o)}),this.performanceClient.addFields({multiMatchedAT:f.length},o),null):(this.commonLogger.info("CacheManager:getAccessToken - Returning access token",o),f[0])}accessTokenKeyMatchesFilter(e,n,r){const i=e.toLowerCase();if(n.clientId&&i.indexOf(n.clientId.toLowerCase())===-1||n.homeAccountId&&i.indexOf(n.homeAccountId.toLowerCase())===-1||n.realm&&i.indexOf(n.realm.toLowerCase())===-1||n.requestedClaimsHash&&i.indexOf(n.requestedClaimsHash.toLowerCase())===-1)return!1;if(n.target){const o=n.target.asArray();for(let s=0;s{if(!this.accessTokenKeyMatchesFilter(o,e,!0))return;const s=this.getAccessTokenCredential(o,n);s&&this.credentialMatchesFilter(s,e)&&i.push(s)}),i}getRefreshToken(e,n,r,i,o){this.commonLogger.trace("CacheManager - getRefreshToken called");const s=n?kx:void 0,c={homeAccountId:e.homeAccountId,environment:e.environment,credentialType:Vr.REFRESH_TOKEN,clientId:this.clientId,familyId:s},l=i&&i.refreshToken||this.getTokenKeys().refreshToken,u=[];l.forEach(f=>{if(this.refreshTokenKeyMatchesFilter(f,c)){const h=this.getRefreshTokenCredential(f,r);h&&this.credentialMatchesFilter(h,c)&&u.push(h)}});const d=u.length;return d<1?(this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found."),null):(d>1&&o&&r&&o.addFields({multiMatchedRT:d},r),this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token"),u[0])}refreshTokenKeyMatchesFilter(e,n){const r=e.toLowerCase();return!(n.familyId&&r.indexOf(n.familyId.toLowerCase())===-1||!n.familyId&&n.clientId&&r.indexOf(n.clientId.toLowerCase())===-1||n.homeAccountId&&r.indexOf(n.homeAccountId.toLowerCase())===-1)}readAppMetadataFromCache(e){const n={environment:e,clientId:this.clientId},r=this.getAppMetadataFilteredBy(n),i=Object.keys(r).map(s=>r[s]),o=i.length;if(o<1)return null;if(o>1)throw Te(mU);return i[0]}isAppMetadataFOCI(e){const n=this.readAppMetadataFromCache(e);return!!(n&&n.familyId===kx)}matchHomeAccountId(e,n){return typeof e.homeAccountId=="string"&&n===e.homeAccountId}matchLocalAccountIdFromTokenClaims(e,n){const r=e.oid||e.sub;return n===r}matchLocalAccountIdFromTenantProfile(e,n){return e.localAccountId===n}matchName(e,n){var r;return n.toLowerCase()===((r=e.name)==null?void 0:r.toLowerCase())}matchUsername(e,n){return!!(e&&typeof e=="string"&&(n==null?void 0:n.toLowerCase())===e.toLowerCase())}matchUserAssertionHash(e,n){return!!(e.userAssertionHash&&n===e.userAssertionHash)}matchEnvironment(e,n){if(this.staticAuthorityOptions){const i=ure(this.staticAuthorityOptions,this.commonLogger);if(i.includes(n)&&i.includes(e.environment))return!0}const r=this.getAuthorityMetadataByAlias(n);return!!(r&&r.aliases.indexOf(e.environment)>-1)}matchCredentialType(e,n){return e.credentialType&&n.toLowerCase()===e.credentialType.toLowerCase()}matchClientId(e,n){return!!(e.clientId&&n===e.clientId)}matchFamilyId(e,n){return!!(e.familyId&&n===e.familyId)}matchRealm(e,n){var r;return((r=e.realm)==null?void 0:r.toLowerCase())===n.toLowerCase()}matchNativeAccountId(e,n){return!!(e.nativeAccountId&&n===e.nativeAccountId)}matchLoginHintFromTokenClaims(e,n){return e.login_hint===n||e.preferred_username===n||e.upn===n}matchSid(e,n){return e.sid===n}matchAuthorityType(e,n){return!!(e.authorityType&&n.toLowerCase()===e.authorityType.toLowerCase())}matchTarget(e,n){return e.credentialType!==Vr.ACCESS_TOKEN&&e.credentialType!==Vr.ACCESS_TOKEN_WITH_AUTH_SCHEME||!e.target?!1:Er.fromString(e.target).containsScopeSet(n)}matchTokenType(e,n){return!!(e.tokenType&&e.tokenType===n)}matchKeyId(e,n){return!!(e.keyId&&e.keyId===n)}isAppMetadata(e){return e.indexOf(zN)!==-1}isAuthorityMetadata(e){return e.indexOf(Px.CACHE_KEY)!==-1}generateAuthorityMetadataCacheKey(e){return`${Px.CACHE_KEY}-${this.clientId}-${e}`}static toObject(e,n){for(const r in n)e[r]=n[r];return e}}class fre extends XA{async setAccount(){throw Te(Yt)}getAccount(){throw Te(Yt)}async setIdTokenCredential(){throw Te(Yt)}getIdTokenCredential(){throw Te(Yt)}async setAccessTokenCredential(){throw Te(Yt)}getAccessTokenCredential(){throw Te(Yt)}async setRefreshTokenCredential(){throw Te(Yt)}getRefreshTokenCredential(){throw Te(Yt)}setAppMetadata(){throw Te(Yt)}getAppMetadata(){throw Te(Yt)}setServerTelemetry(){throw Te(Yt)}getServerTelemetry(){throw Te(Yt)}setAuthorityMetadata(){throw Te(Yt)}getAuthorityMetadata(){throw Te(Yt)}getAuthorityMetadataKeys(){throw Te(Yt)}setThrottlingCache(){throw Te(Yt)}getThrottlingCache(){throw Te(Yt)}removeItem(){throw Te(Yt)}getKeys(){throw Te(Yt)}getAccountKeys(){throw Te(Yt)}getTokenKeys(){throw Te(Yt)}generateCredentialKey(){throw Te(Yt)}generateAccountKey(){throw Te(Yt)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const Li={AAD:"AAD",OIDC:"OIDC",EAR:"EAR"};/*! @azure/msal-common v15.10.0 2025-08-05 */const W={AcquireTokenByCode:"acquireTokenByCode",AcquireTokenByRefreshToken:"acquireTokenByRefreshToken",AcquireTokenSilent:"acquireTokenSilent",AcquireTokenSilentAsync:"acquireTokenSilentAsync",AcquireTokenPopup:"acquireTokenPopup",AcquireTokenPreRedirect:"acquireTokenPreRedirect",AcquireTokenRedirect:"acquireTokenRedirect",CryptoOptsGetPublicKeyThumbprint:"cryptoOptsGetPublicKeyThumbprint",CryptoOptsSignJwt:"cryptoOptsSignJwt",SilentCacheClientAcquireToken:"silentCacheClientAcquireToken",SilentIframeClientAcquireToken:"silentIframeClientAcquireToken",AwaitConcurrentIframe:"awaitConcurrentIframe",SilentRefreshClientAcquireToken:"silentRefreshClientAcquireToken",SsoSilent:"ssoSilent",StandardInteractionClientGetDiscoveredAuthority:"standardInteractionClientGetDiscoveredAuthority",FetchAccountIdWithNativeBroker:"fetchAccountIdWithNativeBroker",NativeInteractionClientAcquireToken:"nativeInteractionClientAcquireToken",BaseClientCreateTokenRequestHeaders:"baseClientCreateTokenRequestHeaders",NetworkClientSendPostRequestAsync:"networkClientSendPostRequestAsync",RefreshTokenClientExecutePostToTokenEndpoint:"refreshTokenClientExecutePostToTokenEndpoint",AuthorizationCodeClientExecutePostToTokenEndpoint:"authorizationCodeClientExecutePostToTokenEndpoint",BrokerHandhshake:"brokerHandshake",AcquireTokenByRefreshTokenInBroker:"acquireTokenByRefreshTokenInBroker",AcquireTokenByBroker:"acquireTokenByBroker",RefreshTokenClientExecuteTokenRequest:"refreshTokenClientExecuteTokenRequest",RefreshTokenClientAcquireToken:"refreshTokenClientAcquireToken",RefreshTokenClientAcquireTokenWithCachedRefreshToken:"refreshTokenClientAcquireTokenWithCachedRefreshToken",RefreshTokenClientAcquireTokenByRefreshToken:"refreshTokenClientAcquireTokenByRefreshToken",RefreshTokenClientCreateTokenRequestBody:"refreshTokenClientCreateTokenRequestBody",AcquireTokenFromCache:"acquireTokenFromCache",SilentFlowClientAcquireCachedToken:"silentFlowClientAcquireCachedToken",SilentFlowClientGenerateResultFromCacheRecord:"silentFlowClientGenerateResultFromCacheRecord",AcquireTokenBySilentIframe:"acquireTokenBySilentIframe",InitializeBaseRequest:"initializeBaseRequest",InitializeSilentRequest:"initializeSilentRequest",InitializeClientApplication:"initializeClientApplication",InitializeCache:"initializeCache",SilentIframeClientTokenHelper:"silentIframeClientTokenHelper",SilentHandlerInitiateAuthRequest:"silentHandlerInitiateAuthRequest",SilentHandlerMonitorIframeForHash:"silentHandlerMonitorIframeForHash",SilentHandlerLoadFrame:"silentHandlerLoadFrame",SilentHandlerLoadFrameSync:"silentHandlerLoadFrameSync",StandardInteractionClientCreateAuthCodeClient:"standardInteractionClientCreateAuthCodeClient",StandardInteractionClientGetClientConfiguration:"standardInteractionClientGetClientConfiguration",StandardInteractionClientInitializeAuthorizationRequest:"standardInteractionClientInitializeAuthorizationRequest",GetAuthCodeUrl:"getAuthCodeUrl",GetStandardParams:"getStandardParams",HandleCodeResponseFromServer:"handleCodeResponseFromServer",HandleCodeResponse:"handleCodeResponse",HandleResponseEar:"handleResponseEar",HandleResponsePlatformBroker:"handleResponsePlatformBroker",HandleResponseCode:"handleResponseCode",UpdateTokenEndpointAuthority:"updateTokenEndpointAuthority",AuthClientAcquireToken:"authClientAcquireToken",AuthClientExecuteTokenRequest:"authClientExecuteTokenRequest",AuthClientCreateTokenRequestBody:"authClientCreateTokenRequestBody",PopTokenGenerateCnf:"popTokenGenerateCnf",PopTokenGenerateKid:"popTokenGenerateKid",HandleServerTokenResponse:"handleServerTokenResponse",DeserializeResponse:"deserializeResponse",AuthorityFactoryCreateDiscoveredInstance:"authorityFactoryCreateDiscoveredInstance",AuthorityResolveEndpointsAsync:"authorityResolveEndpointsAsync",AuthorityResolveEndpointsFromLocalSources:"authorityResolveEndpointsFromLocalSources",AuthorityGetCloudDiscoveryMetadataFromNetwork:"authorityGetCloudDiscoveryMetadataFromNetwork",AuthorityUpdateCloudDiscoveryMetadata:"authorityUpdateCloudDiscoveryMetadata",AuthorityGetEndpointMetadataFromNetwork:"authorityGetEndpointMetadataFromNetwork",AuthorityUpdateEndpointMetadata:"authorityUpdateEndpointMetadata",AuthorityUpdateMetadataWithRegionalInformation:"authorityUpdateMetadataWithRegionalInformation",RegionDiscoveryDetectRegion:"regionDiscoveryDetectRegion",RegionDiscoveryGetRegionFromIMDS:"regionDiscoveryGetRegionFromIMDS",RegionDiscoveryGetCurrentVersion:"regionDiscoveryGetCurrentVersion",AcquireTokenByCodeAsync:"acquireTokenByCodeAsync",GetEndpointMetadataFromNetwork:"getEndpointMetadataFromNetwork",GetCloudDiscoveryMetadataFromNetworkMeasurement:"getCloudDiscoveryMetadataFromNetworkMeasurement",HandleRedirectPromiseMeasurement:"handleRedirectPromise",HandleNativeRedirectPromiseMeasurement:"handleNativeRedirectPromise",UpdateCloudDiscoveryMetadataMeasurement:"updateCloudDiscoveryMetadataMeasurement",UsernamePasswordClientAcquireToken:"usernamePasswordClientAcquireToken",NativeMessageHandlerHandshake:"nativeMessageHandlerHandshake",NativeGenerateAuthResult:"nativeGenerateAuthResult",RemoveHiddenIframe:"removeHiddenIframe",ClearTokensAndKeysWithClaims:"clearTokensAndKeysWithClaims",CacheManagerGetRefreshToken:"cacheManagerGetRefreshToken",ImportExistingCache:"importExistingCache",SetUserData:"setUserData",LocalStorageUpdated:"localStorageUpdated",GeneratePkceCodes:"generatePkceCodes",GenerateCodeVerifier:"generateCodeVerifier",GenerateCodeChallengeFromVerifier:"generateCodeChallengeFromVerifier",Sha256Digest:"sha256Digest",GetRandomValues:"getRandomValues",GenerateHKDF:"generateHKDF",GenerateBaseKey:"generateBaseKey",Base64Decode:"base64Decode",UrlEncodeArr:"urlEncodeArr",Encrypt:"encrypt",Decrypt:"decrypt",GenerateEarKey:"generateEarKey",DecryptEarResponse:"decryptEarResponse"},hre={NotStarted:0,InProgress:1,Completed:2};/*! @azure/msal-common v15.10.0 2025-08-05 */class TR{startMeasurement(){}endMeasurement(){}flushMeasurement(){return null}}class HU{generateId(){return"callback-id"}startMeasurement(e,n){return{end:()=>null,discard:()=>{},add:()=>{},increment:()=>{},event:{eventId:this.generateId(),status:hre.InProgress,authority:"",libraryName:"",libraryVersion:"",clientId:"",name:e,startTimeMs:Date.now(),correlationId:n||""},measurement:new TR}}startPerformanceMeasurement(){return new TR}calculateQueuedTime(){return 0}addQueueMeasurement(){}setPreQueueTime(){}endMeasurement(){return null}discardMeasurements(){}removePerformanceCallback(){return!0}addPerformanceCallback(){return""}emitEvents(){}addFields(){}incrementFields(){}cacheEventByCorrelationId(){}}/*! @azure/msal-common v15.10.0 2025-08-05 */const GU={tokenRenewalOffsetSeconds:sU,preventCorsPreflight:!1},pre={loggerCallback:()=>{},piiLoggingEnabled:!1,logLevel:$n.Info,correlationId:we.EMPTY_STRING},mre={claimsBasedCachingEnabled:!1},gre={async sendGetRequestAsync(){throw Te(Yt)},async sendPostRequestAsync(){throw Te(Yt)}},vre={sku:we.SKU,version:QN,cpu:we.EMPTY_STRING,os:we.EMPTY_STRING},yre={clientSecret:we.EMPTY_STRING,clientAssertion:void 0},xre={azureCloudInstance:XN.None,tenant:`${we.DEFAULT_COMMON_TENANT}`},bre={application:{appName:"",appVersion:""}};function wre({authOptions:t,systemOptions:e,loggerOptions:n,cacheOptions:r,storageInterface:i,networkInterface:o,cryptoInterface:s,clientCredentials:c,libraryInfo:l,telemetry:u,serverTelemetryManager:d,persistencePlugin:f,serializableCache:h}){const p={...pre,...n};return{authOptions:Sre(t),systemOptions:{...GU,...e},loggerOptions:p,cacheOptions:{...mre,...r},storageInterface:i||new fre(t.clientId,Ix,new Ga(p),new HU),networkInterface:o||gre,cryptoInterface:s||Ix,clientCredentials:c||yre,libraryInfo:{...vre,...l},telemetry:{...bre,...u},serverTelemetryManager:d||null,persistencePlugin:f||null,serializableCache:h||null}}function Sre(t){return{clientCapabilities:[],azureCloudOptions:xre,skipAuthorityMetadataCache:!1,instanceAware:!1,encodeExtraQueryParams:!1,...t}}function VU(t){return t.authOptions.authority.options.protocolMode===Li.OIDC}/*! @azure/msal-common v15.10.0 2025-08-05 */const ts={HOME_ACCOUNT_ID:"home_account_id",UPN:"UPN"};/*! @azure/msal-common v15.10.0 2025-08-05 */function $x(t,e){if(!t)throw Te(aU);try{const n=e(t);return JSON.parse(n)}catch{throw Te(HN)}}function kd(t){if(!t)throw Te(HN);const e=t.split(pm.CLIENT_INFO_SEPARATOR,2);return{uid:e[0],utid:e.length<2?we.EMPTY_STRING:e[1]}}/*! @azure/msal-common v15.10.0 2025-08-05 */const yu="client_id",KU="redirect_uri",Cre="response_type",_re="response_mode",Are="grant_type",jre="claims",Ere="scope",Nre="refresh_token",Tre="state",kre="nonce",Pre="prompt",Ore="code",Ire="code_challenge",Rre="code_challenge_method",Mre="code_verifier",Dre="client-request-id",$re="x-client-SKU",Lre="x-client-VER",Fre="x-client-OS",Bre="x-client-CPU",Ure="x-client-current-telemetry",zre="x-client-last-telemetry",Hre="x-ms-lib-capability",Gre="x-app-name",Vre="x-app-ver",Kre="post_logout_redirect_uri",Wre="id_token_hint",qre="client_secret",Yre="client_assertion",Qre="client_assertion_type",WU="token_type",qU="req_cnf",kR="return_spa_code",Xre="nativebroker",Jre="logout_hint",Zre="sid",eie="login_hint",tie="domain_hint",nie="x-client-xtra-sku",Lx="brk_client_id",Fx="brk_redirect_uri",JA="instance_aware",rie="ear_jwk",iie="ear_jwe_crypto";/*! @azure/msal-common v15.10.0 2025-08-05 */function dw(t,e,n){if(!e)return;const r=t.get(yu);r&&t.has(Lx)&&(n==null||n.addFields({embeddedClientId:r,embeddedRedirectUri:t.get(KU)},e))}function sT(t,e){t.set(Cre,e)}function oie(t,e){t.set(_re,e||Une.QUERY)}function sie(t){t.set(Xre,"1")}function aT(t,e,n=!0,r=Fg){n&&!r.includes("openid")&&!e.includes("openid")&&r.push("openid");const i=n?[...e||[],...r]:e||[],o=new Er(i);t.set(Ere,o.printScopes())}function cT(t,e){t.set(yu,e)}function lT(t,e){t.set(KU,e)}function aie(t,e){t.set(Kre,e)}function cie(t,e){t.set(Wre,e)}function lie(t,e){t.set(tie,e)}function Lv(t,e){t.set(eie,e)}function Bx(t,e){t.set(hi.CCS_HEADER,`UPN:${e}`)}function _p(t,e){t.set(hi.CCS_HEADER,`Oid:${e.uid}@${e.utid}`)}function PR(t,e){t.set(Zre,e)}function uT(t,e,n){const r=mie(e,n);try{JSON.parse(r)}catch{throw jn(JN)}t.set(jre,r)}function dT(t,e){t.set(Dre,e)}function fT(t,e){t.set($re,e.sku),t.set(Lre,e.version),e.os&&t.set(Fre,e.os),e.cpu&&t.set(Bre,e.cpu)}function hT(t,e){e!=null&&e.appName&&t.set(Gre,e.appName),e!=null&&e.appVersion&&t.set(Vre,e.appVersion)}function uie(t,e){t.set(Pre,e)}function YU(t,e){e&&t.set(Tre,e)}function die(t,e){t.set(kre,e)}function QU(t,e,n){if(e&&n)t.set(Ire,e),t.set(Rre,n);else throw jn(ZN)}function fie(t,e){t.set(Ore,e)}function hie(t,e){t.set(Nre,e)}function pie(t,e){t.set(Mre,e)}function XU(t,e){t.set(qre,e)}function JU(t,e){e&&t.set(Yre,e)}function ZU(t,e){e&&t.set(Qre,e)}function e3(t,e){t.set(Are,e)}function pT(t){t.set(zne,"1")}function t3(t){t.has(JA)||t.set(JA,"true")}function Vc(t,e){Object.entries(e).forEach(([n,r])=>{!t.has(n)&&r&&t.set(n,r)})}function mie(t,e){let n;if(!t)n={};else try{n=JSON.parse(t)}catch{throw jn(JN)}return e&&e.length>0&&(n.hasOwnProperty(Dv.ACCESS_TOKEN)||(n[Dv.ACCESS_TOKEN]={}),n[Dv.ACCESS_TOKEN][Dv.XMS_CC]={values:e}),JSON.stringify(n)}function mT(t,e){e&&(t.set(WU,xn.POP),t.set(qU,e))}function n3(t,e){e&&(t.set(WU,xn.SSH),t.set(qU,e))}function r3(t,e){t.set(Ure,e.generateCurrentRequestHeaderValue()),t.set(zre,e.generateLastRequestHeaderValue())}function i3(t){t.set(Hre,Cp.X_MS_LIB_CAPABILITY_VALUE)}function gie(t,e){t.set(Jre,e)}function fw(t,e,n){t.has(Lx)||t.set(Lx,e),t.has(Fx)||t.set(Fx,n)}function vie(t,e){t.set(rie,encodeURIComponent(e)),t.set(iie,"eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0")}function yie(t,e){Object.entries(e).forEach(([n,r])=>{r&&t.set(n,r)})}/*! @azure/msal-common v15.10.0 2025-08-05 */const qo={Default:0,Adfs:1,Dsts:2,Ciam:3};/*! @azure/msal-common v15.10.0 2025-08-05 */function xie(t){return t.hasOwnProperty("authorization_endpoint")&&t.hasOwnProperty("token_endpoint")&&t.hasOwnProperty("issuer")&&t.hasOwnProperty("jwks_uri")}/*! @azure/msal-common v15.10.0 2025-08-05 */function bie(t){return t.hasOwnProperty("tenant_discovery_endpoint")&&t.hasOwnProperty("metadata")}/*! @azure/msal-common v15.10.0 2025-08-05 */function wie(t){return t.hasOwnProperty("error")&&t.hasOwnProperty("error_description")}/*! @azure/msal-common v15.10.0 2025-08-05 */const no=(t,e,n,r,i)=>(...o)=>{n.trace(`Executing function ${e}`);const s=r==null?void 0:r.startMeasurement(e,i);if(i){const c=e+"CallCount";r==null||r.incrementFields({[c]:1},i)}try{const c=t(...o);return s==null||s.end({success:!0}),n.trace(`Returning result from ${e}`),c}catch(c){n.trace(`Error occurred in ${e}`);try{n.trace(JSON.stringify(c))}catch{n.trace("Unable to print error message.")}throw s==null||s.end({success:!1},c),c}},be=(t,e,n,r,i)=>(...o)=>{n.trace(`Executing function ${e}`);const s=r==null?void 0:r.startMeasurement(e,i);if(i){const c=e+"CallCount";r==null||r.incrementFields({[c]:1},i)}return r==null||r.setPreQueueTime(e,i),t(...o).then(c=>(n.trace(`Returning result from ${e}`),s==null||s.end({success:!0}),c)).catch(c=>{n.trace(`Error occurred in ${e}`);try{n.trace(JSON.stringify(c))}catch{n.trace("Unable to print error message.")}throw s==null||s.end({success:!1},c),c})};/*! @azure/msal-common v15.10.0 2025-08-05 */class hw{constructor(e,n,r,i){this.networkInterface=e,this.logger=n,this.performanceClient=r,this.correlationId=i}async detectRegion(e,n){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.RegionDiscoveryDetectRegion,this.correlationId);let r=e;if(r)n.region_source=Hu.ENVIRONMENT_VARIABLE;else{const o=hw.IMDS_OPTIONS;try{const s=await be(this.getRegionFromIMDS.bind(this),W.RegionDiscoveryGetRegionFromIMDS,this.logger,this.performanceClient,this.correlationId)(we.IMDS_VERSION,o);if(s.status===kc.SUCCESS&&(r=s.body,n.region_source=Hu.IMDS),s.status===kc.BAD_REQUEST){const c=await be(this.getCurrentVersion.bind(this),W.RegionDiscoveryGetCurrentVersion,this.logger,this.performanceClient,this.correlationId)(o);if(!c)return n.region_source=Hu.FAILED_AUTO_DETECTION,null;const l=await be(this.getRegionFromIMDS.bind(this),W.RegionDiscoveryGetRegionFromIMDS,this.logger,this.performanceClient,this.correlationId)(c,o);l.status===kc.SUCCESS&&(r=l.body,n.region_source=Hu.IMDS)}}catch{return n.region_source=Hu.FAILED_AUTO_DETECTION,null}}return r||(n.region_source=Hu.FAILED_AUTO_DETECTION),r||null}async getRegionFromIMDS(e,n){var r;return(r=this.performanceClient)==null||r.addQueueMeasurement(W.RegionDiscoveryGetRegionFromIMDS,this.correlationId),this.networkInterface.sendGetRequestAsync(`${we.IMDS_ENDPOINT}?api-version=${e}&format=text`,n,we.IMDS_TIMEOUT)}async getCurrentVersion(e){var n;(n=this.performanceClient)==null||n.addQueueMeasurement(W.RegionDiscoveryGetCurrentVersion,this.correlationId);try{const r=await this.networkInterface.sendGetRequestAsync(`${we.IMDS_ENDPOINT}?format=json`,e);return r.status===kc.BAD_REQUEST&&r.body&&r.body["newest-versions"]&&r.body["newest-versions"].length>0?r.body["newest-versions"][0]:null}catch{return null}}}hw.IMDS_OPTIONS={headers:{Metadata:"true"}};/*! @azure/msal-common v15.10.0 2025-08-05 */function Fi(){return Math.round(new Date().getTime()/1e3)}function OR(t){return t.getTime()/1e3}function Pd(t){return t?new Date(Number(t)*1e3):new Date}function Ux(t,e){const n=Number(t)||0;return Fi()+e>n}function Sie(t,e){const n=Number(t)+e*24*60*60*1e3;return Date.now()>n}function Cie(t){return Number(t)>Fi()}/*! @azure/msal-common v15.10.0 2025-08-05 */function pw(t,e,n,r,i){return{credentialType:Vr.ID_TOKEN,homeAccountId:t,environment:e,clientId:r,secret:n,realm:i,lastUpdatedAt:Date.now().toString()}}function mw(t,e,n,r,i,o,s,c,l,u,d,f,h,p,v){var y,b;const m={homeAccountId:t,credentialType:Vr.ACCESS_TOKEN,secret:n,cachedAt:Fi().toString(),expiresOn:s.toString(),extendedExpiresOn:c.toString(),environment:e,clientId:r,realm:i,target:o,tokenType:d||xn.BEARER,lastUpdatedAt:Date.now().toString()};if(f&&(m.userAssertionHash=f),u&&(m.refreshOn=u.toString()),p&&(m.requestedClaims=p,m.requestedClaimsHash=v),((y=m.tokenType)==null?void 0:y.toLowerCase())!==xn.BEARER.toLowerCase())switch(m.credentialType=Vr.ACCESS_TOKEN_WITH_AUTH_SCHEME,m.tokenType){case xn.POP:const x=Xf(n,l);if(!((b=x==null?void 0:x.cnf)!=null&&b.kid))throw Te(bU);m.keyId=x.cnf.kid;break;case xn.SSH:m.keyId=h}return m}function o3(t,e,n,r,i,o,s){const c={credentialType:Vr.REFRESH_TOKEN,homeAccountId:t,environment:e,clientId:r,secret:n,lastUpdatedAt:Date.now().toString()};return o&&(c.userAssertionHash=o),i&&(c.familyId=i),s&&(c.expiresOn=s.toString()),c}function gT(t){return t.hasOwnProperty("homeAccountId")&&t.hasOwnProperty("environment")&&t.hasOwnProperty("credentialType")&&t.hasOwnProperty("clientId")&&t.hasOwnProperty("secret")}function IR(t){return t?gT(t)&&t.hasOwnProperty("realm")&&t.hasOwnProperty("target")&&(t.credentialType===Vr.ACCESS_TOKEN||t.credentialType===Vr.ACCESS_TOKEN_WITH_AUTH_SCHEME):!1}function _ie(t){return t?gT(t)&&t.hasOwnProperty("realm")&&t.credentialType===Vr.ID_TOKEN:!1}function RR(t){return t?gT(t)&&t.credentialType===Vr.REFRESH_TOKEN:!1}function Aie(t,e){const n=t.indexOf(Ur.CACHE_KEY)===0;let r=!0;return e&&(r=e.hasOwnProperty("failedRequests")&&e.hasOwnProperty("errors")&&e.hasOwnProperty("cacheHits")),n&&r}function jie(t,e){let n=!1;t&&(n=t.indexOf(Cp.THROTTLING_PREFIX)===0);let r=!0;return e&&(r=e.hasOwnProperty("throttleTime")),n&&r}function Eie({environment:t,clientId:e}){return[zN,t,e].join(pm.CACHE_KEY_SEPARATOR).toLowerCase()}function Nie(t,e){return e?t.indexOf(zN)===0&&e.hasOwnProperty("clientId")&&e.hasOwnProperty("environment"):!1}function Tie(t,e){return e?t.indexOf(Px.CACHE_KEY)===0&&e.hasOwnProperty("aliases")&&e.hasOwnProperty("preferred_cache")&&e.hasOwnProperty("preferred_network")&&e.hasOwnProperty("canonical_authority")&&e.hasOwnProperty("authorization_endpoint")&&e.hasOwnProperty("token_endpoint")&&e.hasOwnProperty("issuer")&&e.hasOwnProperty("aliasesFromNetwork")&&e.hasOwnProperty("endpointsFromNetwork")&&e.hasOwnProperty("expiresAt")&&e.hasOwnProperty("jwks_uri"):!1}function MR(){return Fi()+Px.REFRESH_TIME_SECONDS}function Fv(t,e,n){t.authorization_endpoint=e.authorization_endpoint,t.token_endpoint=e.token_endpoint,t.end_session_endpoint=e.end_session_endpoint,t.issuer=e.issuer,t.endpointsFromNetwork=n,t.jwks_uri=e.jwks_uri}function EC(t,e,n){t.aliases=e.aliases,t.preferred_cache=e.preferred_cache,t.preferred_network=e.preferred_network,t.aliasesFromNetwork=n}function DR(t){return t.expiresAt<=Fi()}/*! @azure/msal-common v15.10.0 2025-08-05 */class ti{constructor(e,n,r,i,o,s,c,l){this.canonicalAuthority=e,this._canonicalAuthority.validateAsUri(),this.networkInterface=n,this.cacheManager=r,this.authorityOptions=i,this.regionDiscoveryMetadata={region_used:void 0,region_source:void 0,region_outcome:void 0},this.logger=o,this.performanceClient=c,this.correlationId=s,this.managedIdentity=l||!1,this.regionDiscovery=new hw(n,this.logger,this.performanceClient,this.correlationId)}getAuthorityType(e){if(e.HostNameAndPort.endsWith(we.CIAM_AUTH_URL))return qo.Ciam;const n=e.PathSegments;if(n.length)switch(n[0].toLowerCase()){case we.ADFS:return qo.Adfs;case we.DSTS:return qo.Dsts}return qo.Default}get authorityType(){return this.getAuthorityType(this.canonicalAuthorityUrlComponents)}get protocolMode(){return this.authorityOptions.protocolMode}get options(){return this.authorityOptions}get canonicalAuthority(){return this._canonicalAuthority.urlString}set canonicalAuthority(e){this._canonicalAuthority=new sn(e),this._canonicalAuthority.validateAsUri(),this._canonicalAuthorityUrlComponents=null}get canonicalAuthorityUrlComponents(){return this._canonicalAuthorityUrlComponents||(this._canonicalAuthorityUrlComponents=this._canonicalAuthority.getUrlComponents()),this._canonicalAuthorityUrlComponents}get hostnameAndPort(){return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase()}get tenant(){return this.canonicalAuthorityUrlComponents.PathSegments[0]}get authorizationEndpoint(){if(this.discoveryComplete())return this.replacePath(this.metadata.authorization_endpoint);throw Te(ga)}get tokenEndpoint(){if(this.discoveryComplete())return this.replacePath(this.metadata.token_endpoint);throw Te(ga)}get deviceCodeEndpoint(){if(this.discoveryComplete())return this.replacePath(this.metadata.token_endpoint.replace("/token","/devicecode"));throw Te(ga)}get endSessionEndpoint(){if(this.discoveryComplete()){if(!this.metadata.end_session_endpoint)throw Te(CU);return this.replacePath(this.metadata.end_session_endpoint)}else throw Te(ga)}get selfSignedJwtAudience(){if(this.discoveryComplete())return this.replacePath(this.metadata.issuer);throw Te(ga)}get jwksUri(){if(this.discoveryComplete())return this.replacePath(this.metadata.jwks_uri);throw Te(ga)}canReplaceTenant(e){return e.PathSegments.length===1&&!ti.reservedTenantDomains.has(e.PathSegments[0])&&this.getAuthorityType(e)===qo.Default&&this.protocolMode!==Li.OIDC}replaceTenant(e){return e.replace(/{tenant}|{tenantid}/g,this.tenant)}replacePath(e){let n=e;const i=new sn(this.metadata.canonical_authority).getUrlComponents(),o=i.PathSegments;return this.canonicalAuthorityUrlComponents.PathSegments.forEach((c,l)=>{let u=o[l];if(l===0&&this.canReplaceTenant(i)){const d=new sn(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0];u!==d&&(this.logger.verbose(`Replacing tenant domain name ${u} with id ${d}`),u=d)}c!==u&&(n=n.replace(`/${u}/`,`/${c}/`))}),this.replaceTenant(n)}get defaultOpenIdConfigurationEndpoint(){const e=this.hostnameAndPort;return this.canonicalAuthority.endsWith("v2.0/")||this.authorityType===qo.Adfs||this.protocolMode===Li.OIDC&&!this.isAliasOfKnownMicrosoftAuthority(e)?`${this.canonicalAuthority}.well-known/openid-configuration`:`${this.canonicalAuthority}v2.0/.well-known/openid-configuration`}discoveryComplete(){return!!this.metadata}async resolveEndpointsAsync(){var i,o;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityResolveEndpointsAsync,this.correlationId);const e=this.getCurrentMetadataEntity(),n=await be(this.updateCloudDiscoveryMetadata.bind(this),W.AuthorityUpdateCloudDiscoveryMetadata,this.logger,this.performanceClient,this.correlationId)(e);this.canonicalAuthority=this.canonicalAuthority.replace(this.hostnameAndPort,e.preferred_network);const r=await be(this.updateEndpointMetadata.bind(this),W.AuthorityUpdateEndpointMetadata,this.logger,this.performanceClient,this.correlationId)(e);this.updateCachedMetadata(e,n,{source:r}),(o=this.performanceClient)==null||o.addFields({cloudDiscoverySource:n,authorityEndpointSource:r},this.correlationId)}getCurrentMetadataEntity(){let e=this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);return e||(e={aliases:[],preferred_cache:this.hostnameAndPort,preferred_network:this.hostnameAndPort,canonical_authority:this.canonicalAuthority,authorization_endpoint:"",token_endpoint:"",end_session_endpoint:"",issuer:"",aliasesFromNetwork:!1,endpointsFromNetwork:!1,expiresAt:MR(),jwks_uri:""}),e}updateCachedMetadata(e,n,r){n!==Gi.CACHE&&(r==null?void 0:r.source)!==Gi.CACHE&&(e.expiresAt=MR(),e.canonical_authority=this.canonicalAuthority);const i=this.cacheManager.generateAuthorityMetadataCacheKey(e.preferred_cache);this.cacheManager.setAuthorityMetadata(i,e),this.metadata=e}async updateEndpointMetadata(e){var i,o,s;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityUpdateEndpointMetadata,this.correlationId);const n=this.updateEndpointMetadataFromLocalSources(e);if(n){if(n.source===Gi.HARDCODED_VALUES&&(o=this.authorityOptions.azureRegionConfiguration)!=null&&o.azureRegion&&n.metadata){const c=await be(this.updateMetadataWithRegionalInformation.bind(this),W.AuthorityUpdateMetadataWithRegionalInformation,this.logger,this.performanceClient,this.correlationId)(n.metadata);Fv(e,c,!1),e.canonical_authority=this.canonicalAuthority}return n.source}let r=await be(this.getEndpointMetadataFromNetwork.bind(this),W.AuthorityGetEndpointMetadataFromNetwork,this.logger,this.performanceClient,this.correlationId)();if(r)return(s=this.authorityOptions.azureRegionConfiguration)!=null&&s.azureRegion&&(r=await be(this.updateMetadataWithRegionalInformation.bind(this),W.AuthorityUpdateMetadataWithRegionalInformation,this.logger,this.performanceClient,this.correlationId)(r)),Fv(e,r,!0),Gi.NETWORK;throw Te(uU,this.defaultOpenIdConfigurationEndpoint)}updateEndpointMetadataFromLocalSources(e){this.logger.verbose("Attempting to get endpoint metadata from authority configuration");const n=this.getEndpointMetadataFromConfig();if(n)return this.logger.verbose("Found endpoint metadata in authority configuration"),Fv(e,n,!1),{source:Gi.CONFIG};if(this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values."),this.authorityOptions.skipAuthorityMetadataCache)this.logger.verbose("Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache.");else{const i=this.getEndpointMetadataFromHardcodedValues();if(i)return Fv(e,i,!1),{source:Gi.HARDCODED_VALUES,metadata:i};this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.")}const r=DR(e);return this.isAuthoritySameType(e)&&e.endpointsFromNetwork&&!r?(this.logger.verbose("Found endpoint metadata in the cache."),{source:Gi.CACHE}):(r&&this.logger.verbose("The metadata entity is expired."),null)}isAuthoritySameType(e){return new sn(e.canonical_authority).getUrlComponents().PathSegments.length===this.canonicalAuthorityUrlComponents.PathSegments.length}getEndpointMetadataFromConfig(){if(this.authorityOptions.authorityMetadata)try{return JSON.parse(this.authorityOptions.authorityMetadata)}catch{throw jn(PU)}return null}async getEndpointMetadataFromNetwork(){var r;(r=this.performanceClient)==null||r.addQueueMeasurement(W.AuthorityGetEndpointMetadataFromNetwork,this.correlationId);const e={},n=this.defaultOpenIdConfigurationEndpoint;this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${n}`);try{const i=await this.networkInterface.sendGetRequestAsync(n,e);return xie(i.body)?i.body:(this.logger.verbose("Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration"),null)}catch(i){return this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: ${i}`),null}}getEndpointMetadataFromHardcodedValues(){return this.hostnameAndPort in ER?ER[this.hostnameAndPort]:null}async updateMetadataWithRegionalInformation(e){var r,i,o;(r=this.performanceClient)==null||r.addQueueMeasurement(W.AuthorityUpdateMetadataWithRegionalInformation,this.correlationId);const n=(i=this.authorityOptions.azureRegionConfiguration)==null?void 0:i.azureRegion;if(n){if(n!==we.AZURE_REGION_AUTO_DISCOVER_FLAG)return this.regionDiscoveryMetadata.region_outcome=AC.CONFIGURED_NO_AUTO_DETECTION,this.regionDiscoveryMetadata.region_used=n,ti.replaceWithRegionalInformation(e,n);const s=await be(this.regionDiscovery.detectRegion.bind(this.regionDiscovery),W.RegionDiscoveryDetectRegion,this.logger,this.performanceClient,this.correlationId)((o=this.authorityOptions.azureRegionConfiguration)==null?void 0:o.environmentRegion,this.regionDiscoveryMetadata);if(s)return this.regionDiscoveryMetadata.region_outcome=AC.AUTO_DETECTION_REQUESTED_SUCCESSFUL,this.regionDiscoveryMetadata.region_used=s,ti.replaceWithRegionalInformation(e,s);this.regionDiscoveryMetadata.region_outcome=AC.AUTO_DETECTION_REQUESTED_FAILED}return e}async updateCloudDiscoveryMetadata(e){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityUpdateCloudDiscoveryMetadata,this.correlationId);const n=this.updateCloudDiscoveryMetadataFromLocalSources(e);if(n)return n;const r=await be(this.getCloudDiscoveryMetadataFromNetwork.bind(this),W.AuthorityGetCloudDiscoveryMetadataFromNetwork,this.logger,this.performanceClient,this.correlationId)();if(r)return EC(e,r,!0),Gi.NETWORK;throw jn(OU)}updateCloudDiscoveryMetadataFromLocalSources(e){this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration"),this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities||we.NOT_APPLICABLE}`),this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata||we.NOT_APPLICABLE}`),this.logger.verbosePii(`Canonical Authority: ${e.canonical_authority||we.NOT_APPLICABLE}`);const n=this.getCloudDiscoveryMetadataFromConfig();if(n)return this.logger.verbose("Found cloud discovery metadata in authority configuration"),EC(e,n,!1),Gi.CONFIG;if(this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values."),this.options.skipAuthorityMetadataCache)this.logger.verbose("Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache.");else{const i=dre(this.hostnameAndPort);if(i)return this.logger.verbose("Found cloud discovery metadata from hardcoded values."),EC(e,i,!1),Gi.HARDCODED_VALUES;this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.")}const r=DR(e);return this.isAuthoritySameType(e)&&e.aliasesFromNetwork&&!r?(this.logger.verbose("Found cloud discovery metadata in the cache."),Gi.CACHE):(r&&this.logger.verbose("The metadata entity is expired."),null)}getCloudDiscoveryMetadataFromConfig(){if(this.authorityType===qo.Ciam)return this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host."),ti.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort);if(this.authorityOptions.cloudDiscoveryMetadata){this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config.");try{this.logger.verbose("Attempting to parse the cloud discovery metadata.");const e=JSON.parse(this.authorityOptions.cloudDiscoveryMetadata),n=Mx(e.metadata,this.hostnameAndPort);if(this.logger.verbose("Parsed the cloud discovery metadata."),n)return this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata."),n;this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata.")}catch{throw this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error."),jn(eT)}}return this.isInKnownAuthorities()?(this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host."),ti.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort)):null}async getCloudDiscoveryMetadataFromNetwork(){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthorityGetCloudDiscoveryMetadataFromNetwork,this.correlationId);const e=`${we.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`,n={};let r=null;try{const o=await this.networkInterface.sendGetRequestAsync(e,n);let s,c;if(bie(o.body))s=o.body,c=s.metadata,this.logger.verbosePii(`tenant_discovery_endpoint is: ${s.tenant_discovery_endpoint}`);else if(wie(o.body)){if(this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${o.status}`),s=o.body,s.error===we.INVALID_INSTANCE)return this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance."),null;this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${s.error}`),this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${s.error_description}`),this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []"),c=[]}else return this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse"),null;this.logger.verbose("Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request."),r=Mx(c,this.hostnameAndPort)}catch(o){if(o instanceof _n)this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata. +Error: ${o.errorCode} +Error Description: ${o.errorMessage}`);else{const s=o;this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata. +Error: ${s.name} +Error Description: ${s.message}`)}return null}return r||(this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request."),this.logger.verbose("Creating custom Authority for custom domain scenario."),r=ti.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort)),r}isInKnownAuthorities(){return this.authorityOptions.knownAuthorities.filter(n=>n&&sn.getDomainFromUrl(n).toLowerCase()===this.hostnameAndPort).length>0}static generateAuthority(e,n){let r;if(n&&n.azureCloudInstance!==XN.None){const i=n.tenant?n.tenant:we.DEFAULT_COMMON_TENANT;r=`${n.azureCloudInstance}/${i}/`}return r||e}static createCloudDiscoveryMetadataFromHost(e){return{preferred_network:e,preferred_cache:e,aliases:[e]}}getPreferredCache(){if(this.managedIdentity)return we.DEFAULT_AUTHORITY_HOST;if(this.discoveryComplete())return this.metadata.preferred_cache;throw Te(ga)}isAlias(e){return this.metadata.aliases.indexOf(e)>-1}isAliasOfKnownMicrosoftAuthority(e){return zU.has(e)}static isPublicCloudAuthority(e){return we.KNOWN_PUBLIC_CLOUDS.indexOf(e)>=0}static buildRegionalAuthorityString(e,n,r){const i=new sn(e);i.validateAsUri();const o=i.getUrlComponents();let s=`${n}.${o.HostNameAndPort}`;this.isPublicCloudAuthority(o.HostNameAndPort)&&(s=`${n}.${we.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`);const c=sn.constructAuthorityUriFromObject({...i.getUrlComponents(),HostNameAndPort:s}).urlString;return r?`${c}?${r}`:c}static replaceWithRegionalInformation(e,n){const r={...e};return r.authorization_endpoint=ti.buildRegionalAuthorityString(r.authorization_endpoint,n),r.token_endpoint=ti.buildRegionalAuthorityString(r.token_endpoint,n),r.end_session_endpoint&&(r.end_session_endpoint=ti.buildRegionalAuthorityString(r.end_session_endpoint,n)),r}static transformCIAMAuthority(e){let n=e;const i=new sn(e).getUrlComponents();if(i.PathSegments.length===0&&i.HostNameAndPort.endsWith(we.CIAM_AUTH_URL)){const o=i.HostNameAndPort.split(".")[0];n=`${n}${o}${we.AAD_TENANT_DOMAIN_SUFFIX}`}return n}}ti.reservedTenantDomains=new Set(["{tenant}","{tenantid}",Hc.COMMON,Hc.CONSUMERS,Hc.ORGANIZATIONS]);function kie(t){var i;const r=(i=new sn(t).getUrlComponents().PathSegments.slice(-1)[0])==null?void 0:i.toLowerCase();switch(r){case Hc.COMMON:case Hc.ORGANIZATIONS:case Hc.CONSUMERS:return;default:return r}}function s3(t){return t.endsWith(we.FORWARD_SLASH)?t:`${t}${we.FORWARD_SLASH}`}function Pie(t){const e=t.cloudDiscoveryMetadata;let n;if(e)try{n=JSON.parse(e)}catch{throw jn(eT)}return{canonicalAuthority:t.authority?s3(t.authority):void 0,knownAuthorities:t.knownAuthorities,cloudDiscoveryMetadata:n}}/*! @azure/msal-common v15.10.0 2025-08-05 */async function a3(t,e,n,r,i,o,s){s==null||s.addQueueMeasurement(W.AuthorityFactoryCreateDiscoveredInstance,o);const c=ti.transformCIAMAuthority(s3(t)),l=new ti(c,e,n,r,i,o,s);try{return await be(l.resolveEndpointsAsync.bind(l),W.AuthorityResolveEndpointsAsync,i,s,o)(),l}catch{throw Te(ga)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Ru extends _n{constructor(e,n,r,i,o){super(e,n,r),this.name="ServerError",this.errorNo=i,this.status=o,Object.setPrototypeOf(this,Ru.prototype)}}/*! @azure/msal-common v15.10.0 2025-08-05 */function gw(t,e,n){var r;return{clientId:t,authority:e.authority,scopes:e.scopes,homeAccountIdentifier:n,claims:e.claims,authenticationScheme:e.authenticationScheme,resourceRequestMethod:e.resourceRequestMethod,resourceRequestUri:e.resourceRequestUri,shrClaims:e.shrClaims,sshKid:e.sshKid,embeddedClientId:e.embeddedClientId||((r=e.tokenBodyParameters)==null?void 0:r.clientId)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Ds{static generateThrottlingStorageKey(e){return`${Cp.THROTTLING_PREFIX}.${JSON.stringify(e)}`}static preProcess(e,n,r){var s;const i=Ds.generateThrottlingStorageKey(n),o=e.getThrottlingCache(i);if(o){if(o.throttleTime=500&&e.status<600}static checkResponseForRetryAfter(e){return e.headers?e.headers.hasOwnProperty(hi.RETRY_AFTER)&&(e.status<200||e.status>=300):!1}static calculateThrottleTime(e){const n=e<=0?0:e,r=Date.now()/1e3;return Math.floor(Math.min(r+(n||Cp.DEFAULT_THROTTLE_TIME_SECONDS),r+Cp.DEFAULT_MAX_THROTTLE_TIME_SECONDS)*1e3)}static removeThrottle(e,n,r,i){const o=gw(n,r,i),s=this.generateThrottlingStorageKey(o);e.removeItem(s,r.correlationId)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class vw extends _n{constructor(e,n,r){super(e.errorCode,e.errorMessage,e.subError),Object.setPrototypeOf(this,vw.prototype),this.name="NetworkError",this.error=e,this.httpStatus=n,this.responseHeaders=r}}function op(t,e,n,r){return t.errorMessage=`${t.errorMessage}, additionalErrorInfo: error.name:${r==null?void 0:r.name}, error.message:${r==null?void 0:r.message}`,new vw(t,e,n)}/*! @azure/msal-common v15.10.0 2025-08-05 */class vT{constructor(e,n){this.config=wre(e),this.logger=new Ga(this.config.loggerOptions,_U,QN),this.cryptoUtils=this.config.cryptoInterface,this.cacheManager=this.config.storageInterface,this.networkClient=this.config.networkInterface,this.serverTelemetryManager=this.config.serverTelemetryManager,this.authority=this.config.authOptions.authority,this.performanceClient=n}createTokenRequestHeaders(e){const n={};if(n[hi.CONTENT_TYPE]=we.URL_FORM_CONTENT_TYPE,!this.config.systemOptions.preventCorsPreflight&&e)switch(e.type){case ts.HOME_ACCOUNT_ID:try{const r=kd(e.credential);n[hi.CCS_HEADER]=`Oid:${r.uid}@${r.utid}`}catch(r){this.logger.verbose("Could not parse home account ID for CCS Header: "+r)}break;case ts.UPN:n[hi.CCS_HEADER]=`UPN: ${e.credential}`;break}return n}async executePostToTokenEndpoint(e,n,r,i,o,s){var l;s&&((l=this.performanceClient)==null||l.addQueueMeasurement(s,o));const c=await this.sendPostRequest(i,e,{body:n,headers:r},o);return this.config.serverTelemetryManager&&c.status<500&&c.status!==429&&this.config.serverTelemetryManager.clearTelemetryCache(),c}async sendPostRequest(e,n,r,i){var s,c,l;Ds.preProcess(this.cacheManager,e,i);let o;try{o=await be(this.networkClient.sendPostRequestAsync.bind(this.networkClient),W.NetworkClientSendPostRequestAsync,this.logger,this.performanceClient,i)(n,r);const u=o.headers||{};(c=this.performanceClient)==null||c.addFields({refreshTokenSize:((s=o.body.refresh_token)==null?void 0:s.length)||0,httpVerToken:u[hi.X_MS_HTTP_VERSION]||"",requestId:u[hi.X_MS_REQUEST_ID]||""},i)}catch(u){if(u instanceof vw){const d=u.responseHeaders;throw d&&((l=this.performanceClient)==null||l.addFields({httpVerToken:d[hi.X_MS_HTTP_VERSION]||"",requestId:d[hi.X_MS_REQUEST_ID]||"",contentTypeHeader:d[hi.CONTENT_TYPE]||void 0,contentLengthHeader:d[hi.CONTENT_LENGTH]||void 0,httpStatus:u.httpStatus},i)),u.error}throw u instanceof _n?u:Te(lU)}return Ds.postProcess(this.cacheManager,e,o,i),o}async updateAuthority(e,n){var o;(o=this.performanceClient)==null||o.addQueueMeasurement(W.UpdateTokenEndpointAuthority,n);const r=`https://${e}/${this.authority.tenant}/`,i=await a3(r,this.networkClient,this.cacheManager,this.authority.options,this.logger,n,this.performanceClient);this.authority=i}createTokenQueryParameters(e){const n=new Map;return e.embeddedClientId&&fw(n,this.config.authOptions.clientId,this.config.authOptions.redirectUri),e.tokenQueryParameters&&Vc(n,e.tokenQueryParameters),dT(n,e.correlationId),dw(n,e.correlationId,this.performanceClient),mm(n)}}/*! @azure/msal-common v15.10.0 2025-08-05 */function c3(t){return t&&(t.tid||t.tfp||t.acr)||null}/*! @azure/msal-common v15.10.0 2025-08-05 */class ms{getAccountInfo(){return{homeAccountId:this.homeAccountId,environment:this.environment,tenantId:this.realm,username:this.username,localAccountId:this.localAccountId,loginHint:this.loginHint,name:this.name,nativeAccountId:this.nativeAccountId,authorityType:this.authorityType,tenantProfiles:new Map((this.tenantProfiles||[]).map(e=>[e.tenantId,e]))}}isSingleTenant(){return!this.tenantProfiles}static createAccount(e,n,r){var u,d,f,h,p,v,m;const i=new ms;n.authorityType===qo.Adfs?i.authorityType=$v.ADFS_ACCOUNT_TYPE:n.protocolMode===Li.OIDC?i.authorityType=$v.GENERIC_ACCOUNT_TYPE:i.authorityType=$v.MSSTS_ACCOUNT_TYPE;let o;e.clientInfo&&r&&(o=$x(e.clientInfo,r)),i.clientInfo=e.clientInfo,i.homeAccountId=e.homeAccountId,i.nativeAccountId=e.nativeAccountId;const s=e.environment||n&&n.getPreferredCache();if(!s)throw Te(WN);i.environment=s,i.realm=(o==null?void 0:o.utid)||c3(e.idTokenClaims)||"",i.localAccountId=(o==null?void 0:o.uid)||((u=e.idTokenClaims)==null?void 0:u.oid)||((d=e.idTokenClaims)==null?void 0:d.sub)||"";const c=((f=e.idTokenClaims)==null?void 0:f.preferred_username)||((h=e.idTokenClaims)==null?void 0:h.upn),l=(p=e.idTokenClaims)!=null&&p.emails?e.idTokenClaims.emails[0]:null;if(i.username=c||l||"",i.loginHint=(v=e.idTokenClaims)==null?void 0:v.login_hint,i.name=((m=e.idTokenClaims)==null?void 0:m.name)||"",i.cloudGraphHostName=e.cloudGraphHostName,i.msGraphHost=e.msGraphHost,e.tenantProfiles)i.tenantProfiles=e.tenantProfiles;else{const y=nT(e.homeAccountId,i.localAccountId,i.realm,e.idTokenClaims);i.tenantProfiles=[y]}return i}static createFromAccountInfo(e,n,r){var o;const i=new ms;return i.authorityType=e.authorityType||$v.GENERIC_ACCOUNT_TYPE,i.homeAccountId=e.homeAccountId,i.localAccountId=e.localAccountId,i.nativeAccountId=e.nativeAccountId,i.realm=e.tenantId,i.environment=e.environment,i.username=e.username,i.name=e.name,i.loginHint=e.loginHint,i.cloudGraphHostName=n,i.msGraphHost=r,i.tenantProfiles=Array.from(((o=e.tenantProfiles)==null?void 0:o.values())||[]),i}static generateHomeAccountId(e,n,r,i,o){if(!(n===qo.Adfs||n===qo.Dsts)){if(e)try{const s=$x(e,i.base64Decode);if(s.uid&&s.utid)return`${s.uid}.${s.utid}`}catch{}r.warning("No client info in response")}return(o==null?void 0:o.sub)||""}static isAccountEntity(e){return e?e.hasOwnProperty("homeAccountId")&&e.hasOwnProperty("environment")&&e.hasOwnProperty("realm")&&e.hasOwnProperty("localAccountId")&&e.hasOwnProperty("username")&&e.hasOwnProperty("authorityType"):!1}static accountInfoIsEqual(e,n,r){if(!e||!n)return!1;let i=!0;if(r){const o=e.idTokenClaims||{},s=n.idTokenClaims||{};i=o.iat===s.iat&&o.nonce===s.nonce}return e.homeAccountId===n.homeAccountId&&e.localAccountId===n.localAccountId&&e.username===n.username&&e.tenantId===n.tenantId&&e.loginHint===n.loginHint&&e.environment===n.environment&&e.nativeAccountId===n.nativeAccountId&&i}}/*! @azure/msal-common v15.10.0 2025-08-05 */const zx="no_tokens_found",l3="native_account_unavailable",yT="refresh_token_expired",xT="ux_not_allowed",Oie="interaction_required",Iie="consent_required",Rie="login_required",yw="bad_token";/*! @azure/msal-common v15.10.0 2025-08-05 */const $R=[Oie,Iie,Rie,yw,xT],Mie=["message_only","additional_action","basic_action","user_password_expired","consent_required","bad_token"],Die={[zx]:"No refresh token found in the cache. Please sign-in.",[l3]:"The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.",[yT]:"Refresh token has expired.",[yw]:"Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.",[xT]:"`canShowUI` flag in Edge was set to false. User interaction required on web page. Please invoke an interactive API to resolve."};class gs extends _n{constructor(e,n,r,i,o,s,c,l){super(e,n,r),Object.setPrototypeOf(this,gs.prototype),this.timestamp=i||we.EMPTY_STRING,this.traceId=o||we.EMPTY_STRING,this.correlationId=s||we.EMPTY_STRING,this.claims=c||we.EMPTY_STRING,this.name="InteractionRequiredAuthError",this.errorNo=l}}function u3(t,e,n){const r=!!t&&$R.indexOf(t)>-1,i=!!n&&Mie.indexOf(n)>-1,o=!!e&&$R.some(s=>e.indexOf(s)>-1);return r||o||i}function Hx(t){return new gs(t,Die[t])}/*! @azure/msal-common v15.10.0 2025-08-05 */class Jf{static setRequestState(e,n,r){const i=Jf.generateLibraryState(e,r);return n?`${i}${we.RESOURCE_DELIM}${n}`:i}static generateLibraryState(e,n){if(!e)throw Te(YA);const r={id:e.createNewGuid()};n&&(r.meta=n);const i=JSON.stringify(r);return e.base64Encode(i)}static parseRequestState(e,n){if(!e)throw Te(YA);if(!n)throw Te(af);try{const r=n.split(we.RESOURCE_DELIM),i=r[0],o=r.length>1?r.slice(1).join(we.RESOURCE_DELIM):we.EMPTY_STRING,s=e.base64Decode(i),c=JSON.parse(s);return{userRequestState:o||we.EMPTY_STRING,libraryState:c}}catch{throw Te(af)}}}/*! @azure/msal-common v15.10.0 2025-08-05 */const $ie={SW:"sw"};class cf{constructor(e,n){this.cryptoUtils=e,this.performanceClient=n}async generateCnf(e,n){var o;(o=this.performanceClient)==null||o.addQueueMeasurement(W.PopTokenGenerateCnf,e.correlationId);const r=await be(this.generateKid.bind(this),W.PopTokenGenerateCnf,n,this.performanceClient,e.correlationId)(e),i=this.cryptoUtils.base64UrlEncode(JSON.stringify(r));return{kid:r.kid,reqCnfString:i}}async generateKid(e){var r;return(r=this.performanceClient)==null||r.addQueueMeasurement(W.PopTokenGenerateKid,e.correlationId),{kid:await this.cryptoUtils.getPublicKeyThumbprint(e),xms_ksl:$ie.SW}}async signPopToken(e,n,r){return this.signPayload(e,n,r)}async signPayload(e,n,r,i){const{resourceRequestMethod:o,resourceRequestUri:s,shrClaims:c,shrNonce:l,shrOptions:u}=r,d=s?new sn(s):void 0,f=d==null?void 0:d.getUrlComponents();return this.cryptoUtils.signJwt({at:e,ts:Fi(),m:o==null?void 0:o.toUpperCase(),u:f==null?void 0:f.HostNameAndPort,nonce:l||this.cryptoUtils.createNewGuid(),p:f==null?void 0:f.AbsolutePath,q:f!=null&&f.QueryString?[[],f.QueryString]:void 0,client_claims:c||void 0,...i},n,u,r.correlationId)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Lie{constructor(e,n){this.cache=e,this.hasChanged=n}get cacheHasChanged(){return this.hasChanged}get tokenCache(){return this.cache}}/*! @azure/msal-common v15.10.0 2025-08-05 */class xu{constructor(e,n,r,i,o,s,c){this.clientId=e,this.cacheStorage=n,this.cryptoObj=r,this.logger=i,this.serializableCache=o,this.persistencePlugin=s,this.performanceClient=c}validateTokenResponse(e,n){var r;if(e.error||e.error_description||e.suberror){const i=`Error(s): ${e.error_codes||we.NOT_AVAILABLE} - Timestamp: ${e.timestamp||we.NOT_AVAILABLE} - Description: ${e.error_description||we.NOT_AVAILABLE} - Correlation ID: ${e.correlation_id||we.NOT_AVAILABLE} - Trace ID: ${e.trace_id||we.NOT_AVAILABLE}`,o=(r=e.error_codes)!=null&&r.length?e.error_codes[0]:void 0,s=new Ru(e.error,i,e.suberror,o,e.status);if(n&&e.status&&e.status>=kc.SERVER_ERROR_RANGE_START&&e.status<=kc.SERVER_ERROR_RANGE_END){this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed. +${s}`);return}else if(n&&e.status&&e.status>=kc.CLIENT_ERROR_RANGE_START&&e.status<=kc.CLIENT_ERROR_RANGE_END){this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token. +${s}`);return}throw u3(e.error,e.error_description,e.suberror)?new gs(e.error,e.error_description,e.suberror,e.timestamp||we.EMPTY_STRING,e.trace_id||we.EMPTY_STRING,e.correlation_id||we.EMPTY_STRING,e.claims||we.EMPTY_STRING,o):s}}async handleServerTokenResponse(e,n,r,i,o,s,c,l,u){var v;(v=this.performanceClient)==null||v.addQueueMeasurement(W.HandleServerTokenResponse,e.correlation_id);let d;if(e.id_token){if(d=Xf(e.id_token||we.EMPTY_STRING,this.cryptoObj.base64Decode),o&&o.nonce&&d.nonce!==o.nonce)throw Te(hU);if(i.maxAge||i.maxAge===0){const m=d.auth_time;if(!m)throw Te(VN);FU(m,i.maxAge)}}this.homeAccountIdentifier=ms.generateHomeAccountId(e.client_info||we.EMPTY_STRING,n.authorityType,this.logger,this.cryptoObj,d);let f;o&&o.state&&(f=Jf.parseRequestState(this.cryptoObj,o.state)),e.key_id=e.key_id||i.sshKid||void 0;const h=this.generateCacheRecord(e,n,r,i,d,s,o);let p;try{if(this.persistencePlugin&&this.serializableCache&&(this.logger.verbose("Persistence enabled, calling beforeCacheAccess"),p=new Lie(this.serializableCache,!0),await this.persistencePlugin.beforeCacheAccess(p)),c&&!l&&h.account){const m=this.cacheStorage.generateAccountKey(h.account.getAccountInfo());if(!this.cacheStorage.getAccount(m,i.correlationId))return this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache"),await xu.generateAuthenticationResult(this.cryptoObj,n,h,!1,i,d,f,void 0,u)}await this.cacheStorage.saveCacheRecord(h,i.correlationId,i.storeInCache)}finally{this.persistencePlugin&&this.serializableCache&&p&&(this.logger.verbose("Persistence enabled, calling afterCacheAccess"),await this.persistencePlugin.afterCacheAccess(p))}return xu.generateAuthenticationResult(this.cryptoObj,n,h,!1,i,d,f,e,u)}generateCacheRecord(e,n,r,i,o,s,c){const l=n.getPreferredCache();if(!l)throw Te(WN);const u=c3(o);let d,f;e.id_token&&o&&(d=pw(this.homeAccountIdentifier,l,e.id_token,this.clientId,u||""),f=bT(this.cacheStorage,n,this.homeAccountIdentifier,this.cryptoObj.base64Decode,i.correlationId,o,e.client_info,l,u,c,void 0,this.logger));let h=null;if(e.access_token){const m=e.scope?Er.fromString(e.scope):new Er(i.scopes||[]),y=(typeof e.expires_in=="string"?parseInt(e.expires_in,10):e.expires_in)||0,b=(typeof e.ext_expires_in=="string"?parseInt(e.ext_expires_in,10):e.ext_expires_in)||0,x=(typeof e.refresh_in=="string"?parseInt(e.refresh_in,10):e.refresh_in)||void 0,w=r+y,S=w+b,C=x&&x>0?r+x:void 0;h=mw(this.homeAccountIdentifier,l,e.access_token,this.clientId,u||n.tenant||"",m.printScopes(),w,S,this.cryptoObj.base64Decode,C,e.token_type,s,e.key_id,i.claims,i.requestedClaimsHash)}let p=null;if(e.refresh_token){let m;if(e.refresh_token_expires_in){const y=typeof e.refresh_token_expires_in=="string"?parseInt(e.refresh_token_expires_in,10):e.refresh_token_expires_in;m=r+y}p=o3(this.homeAccountIdentifier,l,e.refresh_token,this.clientId,e.foci,s,m)}let v=null;return e.foci&&(v={clientId:this.clientId,environment:l,familyId:e.foci}),{account:f,idToken:d,accessToken:h,refreshToken:p,appMetadata:v}}static async generateAuthenticationResult(e,n,r,i,o,s,c,l,u){var w,S,C,_,A;let d=we.EMPTY_STRING,f=[],h=null,p,v,m=we.EMPTY_STRING;if(r.accessToken){if(r.accessToken.tokenType===xn.POP&&!o.popKid){const j=new cf(e),{secret:N,keyId:k}=r.accessToken;if(!k)throw Te(qN);d=await j.signPopToken(N,k,o)}else d=r.accessToken.secret;f=Er.fromString(r.accessToken.target).asArray(),h=Pd(r.accessToken.expiresOn),p=Pd(r.accessToken.extendedExpiresOn),r.accessToken.refreshOn&&(v=Pd(r.accessToken.refreshOn))}r.appMetadata&&(m=r.appMetadata.familyId===kx?kx:"");const y=(s==null?void 0:s.oid)||(s==null?void 0:s.sub)||"",b=(s==null?void 0:s.tid)||"";l!=null&&l.spa_accountid&&r.account&&(r.account.nativeAccountId=l==null?void 0:l.spa_accountid);const x=r.account?rT(r.account.getAccountInfo(),void 0,s,(w=r.idToken)==null?void 0:w.secret):null;return{authority:n.canonicalAuthority,uniqueId:y,tenantId:b,scopes:f,account:x,idToken:((S=r==null?void 0:r.idToken)==null?void 0:S.secret)||"",idTokenClaims:s||{},accessToken:d,fromCache:i,expiresOn:h,extExpiresOn:p,refreshOn:v,correlationId:o.correlationId,requestId:u||we.EMPTY_STRING,familyId:m,tokenType:((C=r.accessToken)==null?void 0:C.tokenType)||we.EMPTY_STRING,state:c?c.userRequestState:we.EMPTY_STRING,cloudGraphHostName:((_=r.account)==null?void 0:_.cloudGraphHostName)||we.EMPTY_STRING,msGraphHost:((A=r.account)==null?void 0:A.msGraphHost)||we.EMPTY_STRING,code:l==null?void 0:l.spa_code,fromNativeBroker:!1}}}function bT(t,e,n,r,i,o,s,c,l,u,d,f){f==null||f.verbose("setCachedAccount called");const p=t.getAccountKeys().find(x=>x.startsWith(n));let v=null;p&&(v=t.getAccount(p,i));const m=v||ms.createAccount({homeAccountId:n,idTokenClaims:o,clientInfo:s,environment:c,cloudGraphHostName:u==null?void 0:u.cloud_graph_host_name,msGraphHost:u==null?void 0:u.msgraph_host,nativeAccountId:d},e,r),y=m.tenantProfiles||[],b=l||m.realm;if(b&&!y.find(x=>x.tenantId===b)){const x=nT(n,m.localAccountId,b,o);y.push(x)}return m.tenantProfiles=y,m}/*! @azure/msal-common v15.10.0 2025-08-05 */async function d3(t,e,n){return typeof t=="string"?t:t({clientId:e,tokenEndpoint:n})}/*! @azure/msal-common v15.10.0 2025-08-05 */class f3 extends vT{constructor(e,n){var r;super(e,n),this.includeRedirectUri=!0,this.oidcDefaultScopes=(r=this.config.authOptions.authority.options.OIDCOptions)==null?void 0:r.defaultScopes}async acquireToken(e,n){var c,l;if((c=this.performanceClient)==null||c.addQueueMeasurement(W.AuthClientAcquireToken,e.correlationId),!e.code)throw Te(gU);const r=Fi(),i=await be(this.executeTokenRequest.bind(this),W.AuthClientExecuteTokenRequest,this.logger,this.performanceClient,e.correlationId)(this.authority,e),o=(l=i.headers)==null?void 0:l[hi.X_MS_REQUEST_ID],s=new xu(this.config.authOptions.clientId,this.cacheManager,this.cryptoUtils,this.logger,this.config.serializableCache,this.config.persistencePlugin,this.performanceClient);return s.validateTokenResponse(i.body),be(s.handleServerTokenResponse.bind(s),W.HandleServerTokenResponse,this.logger,this.performanceClient,e.correlationId)(i.body,this.authority,r,e,n,void 0,void 0,void 0,o)}getLogoutUri(e){if(!e)throw jn(kU);const n=this.createLogoutUrlQueryString(e);return sn.appendQueryString(this.authority.endSessionEndpoint,n)}async executeTokenRequest(e,n){var u;(u=this.performanceClient)==null||u.addQueueMeasurement(W.AuthClientExecuteTokenRequest,n.correlationId);const r=this.createTokenQueryParameters(n),i=sn.appendQueryString(e.tokenEndpoint,r),o=await be(this.createTokenRequestBody.bind(this),W.AuthClientCreateTokenRequestBody,this.logger,this.performanceClient,n.correlationId)(n);let s;if(n.clientInfo)try{const d=$x(n.clientInfo,this.cryptoUtils.base64Decode);s={credential:`${d.uid}${pm.CLIENT_INFO_SEPARATOR}${d.utid}`,type:ts.HOME_ACCOUNT_ID}}catch(d){this.logger.verbose("Could not parse client info for CCS Header: "+d)}const c=this.createTokenRequestHeaders(s||n.ccsCredential),l=gw(this.config.authOptions.clientId,n);return be(this.executePostToTokenEndpoint.bind(this),W.AuthorizationCodeClientExecutePostToTokenEndpoint,this.logger,this.performanceClient,n.correlationId)(i,o,c,l,n.correlationId,W.AuthorizationCodeClientExecutePostToTokenEndpoint)}async createTokenRequestBody(e){var i,o;(i=this.performanceClient)==null||i.addQueueMeasurement(W.AuthClientCreateTokenRequestBody,e.correlationId);const n=new Map;if(cT(n,e.embeddedClientId||((o=e.tokenBodyParameters)==null?void 0:o[yu])||this.config.authOptions.clientId),this.includeRedirectUri)lT(n,e.redirectUri);else if(!e.redirectUri)throw jn(AU);if(aT(n,e.scopes,!0,this.oidcDefaultScopes),fie(n,e.code),fT(n,this.config.libraryInfo),hT(n,this.config.telemetry.application),i3(n),this.serverTelemetryManager&&!VU(this.config)&&r3(n,this.serverTelemetryManager),e.codeVerifier&&pie(n,e.codeVerifier),this.config.clientCredentials.clientSecret&&XU(n,this.config.clientCredentials.clientSecret),this.config.clientCredentials.clientAssertion){const s=this.config.clientCredentials.clientAssertion;JU(n,await d3(s.assertion,this.config.authOptions.clientId,e.resourceRequestUri)),ZU(n,s.assertionType)}if(e3(n,oU.AUTHORIZATION_CODE_GRANT),pT(n),e.authenticationScheme===xn.POP){const s=new cf(this.cryptoUtils,this.performanceClient);let c;e.popKid?c=this.cryptoUtils.encodeKid(e.popKid):c=(await be(s.generateCnf.bind(s),W.PopTokenGenerateCnf,this.logger,this.performanceClient,e.correlationId)(e,this.logger)).reqCnfString,mT(n,c)}else if(e.authenticationScheme===xn.SSH)if(e.sshJwk)n3(n,e.sshJwk);else throw jn(uw);(!Gs.isEmptyObj(e.claims)||this.config.authOptions.clientCapabilities&&this.config.authOptions.clientCapabilities.length>0)&&uT(n,e.claims,this.config.authOptions.clientCapabilities);let r;if(e.clientInfo)try{const s=$x(e.clientInfo,this.cryptoUtils.base64Decode);r={credential:`${s.uid}${pm.CLIENT_INFO_SEPARATOR}${s.utid}`,type:ts.HOME_ACCOUNT_ID}}catch(s){this.logger.verbose("Could not parse client info for CCS Header: "+s)}else r=e.ccsCredential;if(this.config.systemOptions.preventCorsPreflight&&r)switch(r.type){case ts.HOME_ACCOUNT_ID:try{const s=kd(r.credential);_p(n,s)}catch(s){this.logger.verbose("Could not parse home account ID for CCS Header: "+s)}break;case ts.UPN:Bx(n,r.credential);break}return e.embeddedClientId&&fw(n,this.config.authOptions.clientId,this.config.authOptions.redirectUri),e.tokenBodyParameters&&Vc(n,e.tokenBodyParameters),e.enableSpaAuthorizationCode&&(!e.tokenBodyParameters||!e.tokenBodyParameters[kR])&&Vc(n,{[kR]:"1"}),dw(n,e.correlationId,this.performanceClient),mm(n)}createLogoutUrlQueryString(e){const n=new Map;return e.postLogoutRedirectUri&&aie(n,e.postLogoutRedirectUri),e.correlationId&&dT(n,e.correlationId),e.idTokenHint&&cie(n,e.idTokenHint),e.state&&YU(n,e.state),e.logoutHint&&gie(n,e.logoutHint),e.extraQueryParameters&&Vc(n,e.extraQueryParameters),this.config.authOptions.instanceAware&&t3(n),mm(n,this.config.authOptions.encodeExtraQueryParams,e.extraQueryParameters)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const Fie=300;class Bie extends vT{constructor(e,n){super(e,n)}async acquireToken(e){var s,c;(s=this.performanceClient)==null||s.addQueueMeasurement(W.RefreshTokenClientAcquireToken,e.correlationId);const n=Fi(),r=await be(this.executeTokenRequest.bind(this),W.RefreshTokenClientExecuteTokenRequest,this.logger,this.performanceClient,e.correlationId)(e,this.authority),i=(c=r.headers)==null?void 0:c[hi.X_MS_REQUEST_ID],o=new xu(this.config.authOptions.clientId,this.cacheManager,this.cryptoUtils,this.logger,this.config.serializableCache,this.config.persistencePlugin);return o.validateTokenResponse(r.body),be(o.handleServerTokenResponse.bind(o),W.HandleServerTokenResponse,this.logger,this.performanceClient,e.correlationId)(r.body,this.authority,n,e,void 0,void 0,!0,e.forceCache,i)}async acquireTokenByRefreshToken(e){var r;if(!e)throw jn(TU);if((r=this.performanceClient)==null||r.addQueueMeasurement(W.RefreshTokenClientAcquireTokenByRefreshToken,e.correlationId),!e.account)throw Te(KN);if(this.cacheManager.isAppMetadataFOCI(e.account.environment))try{return await be(this.acquireTokenWithCachedRefreshToken.bind(this),W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,!0)}catch(i){const o=i instanceof gs&&i.errorCode===zx,s=i instanceof Ru&&i.errorCode===CR.INVALID_GRANT_ERROR&&i.subError===CR.CLIENT_MISMATCH_ERROR;if(o||s)return be(this.acquireTokenWithCachedRefreshToken.bind(this),W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,!1);throw i}return be(this.acquireTokenWithCachedRefreshToken.bind(this),W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,!1)}async acquireTokenWithCachedRefreshToken(e,n){var o,s,c;(o=this.performanceClient)==null||o.addQueueMeasurement(W.RefreshTokenClientAcquireTokenWithCachedRefreshToken,e.correlationId);const r=no(this.cacheManager.getRefreshToken.bind(this.cacheManager),W.CacheManagerGetRefreshToken,this.logger,this.performanceClient,e.correlationId)(e.account,n,e.correlationId,void 0,this.performanceClient);if(!r)throw Hx(zx);if(r.expiresOn&&Ux(r.expiresOn,e.refreshTokenExpirationOffsetSeconds||Fie))throw(s=this.performanceClient)==null||s.addFields({rtExpiresOnMs:Number(r.expiresOn)},e.correlationId),Hx(yT);const i={...e,refreshToken:r.secret,authenticationScheme:e.authenticationScheme||xn.BEARER,ccsCredential:{credential:e.account.homeAccountId,type:ts.HOME_ACCOUNT_ID}};try{return await be(this.acquireToken.bind(this),W.RefreshTokenClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(i)}catch(l){if(l instanceof gs&&((c=this.performanceClient)==null||c.addFields({rtExpiresOnMs:Number(r.expiresOn)},e.correlationId),l.subError===yw)){this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache");const u=this.cacheManager.generateCredentialKey(r);this.cacheManager.removeRefreshToken(u,e.correlationId)}throw l}}async executeTokenRequest(e,n){var l;(l=this.performanceClient)==null||l.addQueueMeasurement(W.RefreshTokenClientExecuteTokenRequest,e.correlationId);const r=this.createTokenQueryParameters(e),i=sn.appendQueryString(n.tokenEndpoint,r),o=await be(this.createTokenRequestBody.bind(this),W.RefreshTokenClientCreateTokenRequestBody,this.logger,this.performanceClient,e.correlationId)(e),s=this.createTokenRequestHeaders(e.ccsCredential),c=gw(this.config.authOptions.clientId,e);return be(this.executePostToTokenEndpoint.bind(this),W.RefreshTokenClientExecutePostToTokenEndpoint,this.logger,this.performanceClient,e.correlationId)(i,o,s,c,e.correlationId,W.RefreshTokenClientExecutePostToTokenEndpoint)}async createTokenRequestBody(e){var r,i,o;(r=this.performanceClient)==null||r.addQueueMeasurement(W.RefreshTokenClientCreateTokenRequestBody,e.correlationId);const n=new Map;if(cT(n,e.embeddedClientId||((i=e.tokenBodyParameters)==null?void 0:i[yu])||this.config.authOptions.clientId),e.redirectUri&&lT(n,e.redirectUri),aT(n,e.scopes,!0,(o=this.config.authOptions.authority.options.OIDCOptions)==null?void 0:o.defaultScopes),e3(n,oU.REFRESH_TOKEN_GRANT),pT(n),fT(n,this.config.libraryInfo),hT(n,this.config.telemetry.application),i3(n),this.serverTelemetryManager&&!VU(this.config)&&r3(n,this.serverTelemetryManager),hie(n,e.refreshToken),this.config.clientCredentials.clientSecret&&XU(n,this.config.clientCredentials.clientSecret),this.config.clientCredentials.clientAssertion){const s=this.config.clientCredentials.clientAssertion;JU(n,await d3(s.assertion,this.config.authOptions.clientId,e.resourceRequestUri)),ZU(n,s.assertionType)}if(e.authenticationScheme===xn.POP){const s=new cf(this.cryptoUtils,this.performanceClient);let c;e.popKid?c=this.cryptoUtils.encodeKid(e.popKid):c=(await be(s.generateCnf.bind(s),W.PopTokenGenerateCnf,this.logger,this.performanceClient,e.correlationId)(e,this.logger)).reqCnfString,mT(n,c)}else if(e.authenticationScheme===xn.SSH)if(e.sshJwk)n3(n,e.sshJwk);else throw jn(uw);if((!Gs.isEmptyObj(e.claims)||this.config.authOptions.clientCapabilities&&this.config.authOptions.clientCapabilities.length>0)&&uT(n,e.claims,this.config.authOptions.clientCapabilities),this.config.systemOptions.preventCorsPreflight&&e.ccsCredential)switch(e.ccsCredential.type){case ts.HOME_ACCOUNT_ID:try{const s=kd(e.ccsCredential.credential);_p(n,s)}catch(s){this.logger.verbose("Could not parse home account ID for CCS Header: "+s)}break;case ts.UPN:Bx(n,e.ccsCredential.credential);break}return e.embeddedClientId&&fw(n,this.config.authOptions.clientId,this.config.authOptions.redirectUri),e.tokenBodyParameters&&Vc(n,e.tokenBodyParameters),dw(n,e.correlationId,this.performanceClient),mm(n)}}/*! @azure/msal-common v15.10.0 2025-08-05 */class Uie extends vT{constructor(e,n){super(e,n)}async acquireCachedToken(e){var l;(l=this.performanceClient)==null||l.addQueueMeasurement(W.SilentFlowClientAcquireCachedToken,e.correlationId);let n=Il.NOT_APPLICABLE;if(e.forceRefresh||!this.config.cacheOptions.claimsBasedCachingEnabled&&!Gs.isEmptyObj(e.claims))throw this.setCacheOutcome(Il.FORCE_REFRESH_OR_CLAIMS,e.correlationId),Te(Gc);if(!e.account)throw Te(KN);const r=e.account.tenantId||kie(e.authority),i=this.cacheManager.getTokenKeys(),o=this.cacheManager.getAccessToken(e.account,e,i,r);if(o){if(Cie(o.cachedAt)||Ux(o.expiresOn,this.config.systemOptions.tokenRenewalOffsetSeconds))throw this.setCacheOutcome(Il.CACHED_ACCESS_TOKEN_EXPIRED,e.correlationId),Te(Gc);o.refreshOn&&Ux(o.refreshOn,0)&&(n=Il.PROACTIVELY_REFRESHED)}else throw this.setCacheOutcome(Il.NO_CACHED_ACCESS_TOKEN,e.correlationId),Te(Gc);const s=e.authority||this.authority.getPreferredCache(),c={account:this.cacheManager.getAccount(this.cacheManager.generateAccountKey(e.account),e.correlationId),accessToken:o,idToken:this.cacheManager.getIdToken(e.account,e.correlationId,i,r,this.performanceClient),refreshToken:null,appMetadata:this.cacheManager.readAppMetadataFromCache(s)};return this.setCacheOutcome(n,e.correlationId),this.config.serverTelemetryManager&&this.config.serverTelemetryManager.incrementCacheHits(),[await be(this.generateResultFromCacheRecord.bind(this),W.SilentFlowClientGenerateResultFromCacheRecord,this.logger,this.performanceClient,e.correlationId)(c,e),n]}setCacheOutcome(e,n){var r,i;(r=this.serverTelemetryManager)==null||r.setCacheOutcome(e),(i=this.performanceClient)==null||i.addFields({cacheOutcome:e},n),e!==Il.NOT_APPLICABLE&&this.logger.info(`Token refresh is required due to cache outcome: ${e}`)}async generateResultFromCacheRecord(e,n){var i;(i=this.performanceClient)==null||i.addQueueMeasurement(W.SilentFlowClientGenerateResultFromCacheRecord,n.correlationId);let r;if(e.idToken&&(r=Xf(e.idToken.secret,this.config.cryptoInterface.base64Decode)),n.maxAge||n.maxAge===0){const o=r==null?void 0:r.auth_time;if(!o)throw Te(VN);FU(o,n.maxAge)}return xu.generateAuthenticationResult(this.cryptoUtils,this.authority,e,!0,n,r)}}/*! @azure/msal-common v15.10.0 2025-08-05 */const zie={sendGetRequestAsync:()=>Promise.reject(Te(Yt)),sendPostRequestAsync:()=>Promise.reject(Te(Yt))};/*! @azure/msal-common v15.10.0 2025-08-05 */function Hie(t,e,n,r){var c,l;const i=e.correlationId,o=new Map;cT(o,e.embeddedClientId||((c=e.extraQueryParameters)==null?void 0:c[yu])||t.clientId);const s=[...e.scopes||[],...e.extraScopesToConsent||[]];if(aT(o,s,!0,(l=t.authority.options.OIDCOptions)==null?void 0:l.defaultScopes),lT(o,e.redirectUri),dT(o,i),oie(o,e.responseMode),pT(o),e.prompt&&(uie(o,e.prompt),r==null||r.addFields({prompt:e.prompt},i)),e.domainHint&&(lie(o,e.domainHint),r==null||r.addFields({domainHintFromRequest:!0},i)),e.prompt!==gi.SELECT_ACCOUNT)if(e.sid&&e.prompt===gi.NONE)n.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request"),PR(o,e.sid),r==null||r.addFields({sidFromRequest:!0},i);else if(e.account){const u=Kie(e.account);let d=Wie(e.account);if(d&&e.domainHint&&(n.warning('AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint'),d=null),d){n.verbose("createAuthCodeUrlQueryString: login_hint claim present on account"),Lv(o,d),r==null||r.addFields({loginHintFromClaim:!0},i);try{const f=kd(e.account.homeAccountId);_p(o,f)}catch{n.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header")}}else if(u&&e.prompt===gi.NONE){n.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account"),PR(o,u),r==null||r.addFields({sidFromClaim:!0},i);try{const f=kd(e.account.homeAccountId);_p(o,f)}catch{n.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header")}}else if(e.loginHint)n.verbose("createAuthCodeUrlQueryString: Adding login_hint from request"),Lv(o,e.loginHint),Bx(o,e.loginHint),r==null||r.addFields({loginHintFromRequest:!0},i);else if(e.account.username){n.verbose("createAuthCodeUrlQueryString: Adding login_hint from account"),Lv(o,e.account.username),r==null||r.addFields({loginHintFromUpn:!0},i);try{const f=kd(e.account.homeAccountId);_p(o,f)}catch{n.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header")}}}else e.loginHint&&(n.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request"),Lv(o,e.loginHint),Bx(o,e.loginHint),r==null||r.addFields({loginHintFromRequest:!0},i));else n.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints");return e.nonce&&die(o,e.nonce),e.state&&YU(o,e.state),(e.claims||t.clientCapabilities&&t.clientCapabilities.length>0)&&uT(o,e.claims,t.clientCapabilities),e.embeddedClientId&&fw(o,t.clientId,t.redirectUri),t.instanceAware&&(!e.extraQueryParameters||!Object.keys(e.extraQueryParameters).includes(JA))&&t3(o),o}function wT(t,e,n,r){const i=mm(e,n,r);return sn.appendQueryString(t.authorizationEndpoint,i)}function Gie(t,e){if(h3(t,e),!t.code)throw Te(wU);return t}function h3(t,e){if(!t.state||!e)throw t.state?Te(KA,"Cached State"):Te(KA,"Server State");let n,r;try{n=decodeURIComponent(t.state)}catch{throw Te(af,t.state)}try{r=decodeURIComponent(e)}catch{throw Te(af,t.state)}if(n!==r)throw Te(fU);if(t.error||t.error_description||t.suberror){const i=Vie(t);throw u3(t.error,t.error_description,t.suberror)?new gs(t.error||"",t.error_description,t.suberror,t.timestamp||"",t.trace_id||"",t.correlation_id||"",t.claims||"",i):new Ru(t.error||"",t.error_description,t.suberror,i)}}function Vie(t){var r,i;const e="code=",n=(r=t.error_uri)==null?void 0:r.lastIndexOf(e);return n&&n>=0?(i=t.error_uri)==null?void 0:i.substring(n+e.length):void 0}function Kie(t){var e;return((e=t.idTokenClaims)==null?void 0:e.sid)||null}function Wie(t){var e;return t.loginHint||((e=t.idTokenClaims)==null?void 0:e.login_hint)||null}/*! @azure/msal-common v15.10.0 2025-08-05 */const LR=",",p3="|";function qie(t){const{skus:e,libraryName:n,libraryVersion:r,extensionName:i,extensionVersion:o}=t,s=new Map([[0,[n,r]],[2,[i,o]]]);let c=[];if(e!=null&&e.length){if(c=e.split(LR),c.length<4)return e}else c=Array.from({length:4},()=>p3);return s.forEach((l,u)=>{var d,f;l.length===2&&((d=l[0])!=null&&d.length)&&((f=l[1])!=null&&f.length)&&Yie({skuArr:c,index:u,skuName:l[0],skuVersion:l[1]})}),c.join(LR)}function Yie(t){const{skuArr:e,index:n,skuName:r,skuVersion:i}=t;n>=e.length||(e[n]=[r,i].join(p3))}class gm{constructor(e,n){this.cacheOutcome=Il.NOT_APPLICABLE,this.cacheManager=n,this.apiId=e.apiId,this.correlationId=e.correlationId,this.wrapperSKU=e.wrapperSKU||we.EMPTY_STRING,this.wrapperVer=e.wrapperVer||we.EMPTY_STRING,this.telemetryCacheKey=Ur.CACHE_KEY+pm.CACHE_KEY_SEPARATOR+e.clientId}generateCurrentRequestHeaderValue(){const e=`${this.apiId}${Ur.VALUE_SEPARATOR}${this.cacheOutcome}`,n=[this.wrapperSKU,this.wrapperVer],r=this.getNativeBrokerErrorCode();r!=null&&r.length&&n.push(`broker_error=${r}`);const i=n.join(Ur.VALUE_SEPARATOR),o=this.getRegionDiscoveryFields(),s=[e,o].join(Ur.VALUE_SEPARATOR);return[Ur.SCHEMA_VERSION,s,i].join(Ur.CATEGORY_SEPARATOR)}generateLastRequestHeaderValue(){const e=this.getLastRequests(),n=gm.maxErrorsToSend(e),r=e.failedRequests.slice(0,2*n).join(Ur.VALUE_SEPARATOR),i=e.errors.slice(0,n).join(Ur.VALUE_SEPARATOR),o=e.errors.length,s=n=Ur.MAX_CACHED_ERRORS&&(n.failedRequests.shift(),n.failedRequests.shift(),n.errors.shift()),n.failedRequests.push(this.apiId,this.correlationId),e instanceof Error&&e&&e.toString()?e instanceof _n?e.subError?n.errors.push(e.subError):e.errorCode?n.errors.push(e.errorCode):n.errors.push(e.toString()):n.errors.push(e.toString()):n.errors.push(Ur.UNKNOWN_ERROR),this.cacheManager.setServerTelemetry(this.telemetryCacheKey,n,this.correlationId)}incrementCacheHits(){const e=this.getLastRequests();return e.cacheHits+=1,this.cacheManager.setServerTelemetry(this.telemetryCacheKey,e,this.correlationId),e.cacheHits}getLastRequests(){const e={failedRequests:[],errors:[],cacheHits:0};return this.cacheManager.getServerTelemetry(this.telemetryCacheKey)||e}clearTelemetryCache(){const e=this.getLastRequests(),n=gm.maxErrorsToSend(e),r=e.errors.length;if(n===r)this.cacheManager.removeItem(this.telemetryCacheKey,this.correlationId);else{const i={failedRequests:e.failedRequests.slice(n*2),errors:e.errors.slice(n),cacheHits:0};this.cacheManager.setServerTelemetry(this.telemetryCacheKey,i,this.correlationId)}}static maxErrorsToSend(e){let n,r=0,i=0;const o=e.errors.length;for(n=0;nString.fromCodePoint(n)).join("");return btoa(e)}/*! @azure/msal-browser v4.19.0 2025-08-05 */function ss(t){return new TextDecoder().decode(Kc(t))}function Kc(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw Ze(z3)}const n=atob(e);return Uint8Array.from(n,r=>r.codePointAt(0)||0)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const aoe="RSASSA-PKCS1-v1_5",Zf="AES-GCM",q3="HKDF",kT="SHA-256",coe=2048,loe=new Uint8Array([1,0,1]),zR="0123456789abcdef",HR=new Uint32Array(1),PT="raw",Y3="encrypt",OT="decrypt",uoe="deriveKey",doe="crypto_subtle_undefined",IT={name:aoe,hash:kT,modulusLength:coe,publicExponent:loe};function foe(t){if(!window)throw Ze(ww);if(!window.crypto)throw Ze(ZA);if(!t&&!window.crypto.subtle)throw Ze(ZA,doe)}async function Q3(t,e,n){e==null||e.addQueueMeasurement(W.Sha256Digest,n);const i=new TextEncoder().encode(t);return window.crypto.subtle.digest(kT,i)}function hoe(t){return window.crypto.getRandomValues(t)}function NC(){return window.crypto.getRandomValues(HR),HR[0]}function vs(){const t=Date.now(),e=NC()*1024+(NC()&1023),n=new Uint8Array(16),r=Math.trunc(e/2**30),i=e&2**30-1,o=NC();n[0]=t/2**40,n[1]=t/2**32,n[2]=t/2**24,n[3]=t/2**16,n[4]=t/2**8,n[5]=t,n[6]=112|r>>>8,n[7]=r,n[8]=128|i>>>24,n[9]=i>>>16,n[10]=i>>>8,n[11]=i,n[12]=o>>>24,n[13]=o>>>16,n[14]=o>>>8,n[15]=o;let s="";for(let c=0;c>>4),s+=zR.charAt(n[c]&15),(c===3||c===5||c===7||c===9)&&(s+="-");return s}async function poe(t,e){return window.crypto.subtle.generateKey(IT,t,e)}async function TC(t){return window.crypto.subtle.exportKey(K3,t)}async function moe(t,e,n){return window.crypto.subtle.importKey(K3,t,IT,e,n)}async function goe(t,e){return window.crypto.subtle.sign(IT,t,e)}async function RT(){const t=await X3(),n={alg:"dir",kty:"oct",k:sl(new Uint8Array(t))};return ym(JSON.stringify(n))}async function voe(t){const e=ss(t),r=JSON.parse(e).k,i=Kc(r);return window.crypto.subtle.importKey(PT,i,Zf,!1,[OT])}async function yoe(t,e){const n=e.split(".");if(n.length!==5)throw Ze(Iy,"jwe_length");const r=await voe(t).catch(()=>{throw Ze(Iy,"import_key")});try{const i=new TextEncoder().encode(n[0]),o=Kc(n[2]),s=Kc(n[3]),c=Kc(n[4]),l=c.byteLength*8,u=new Uint8Array(s.length+c.length);u.set(s),u.set(c,s.length);const d=await window.crypto.subtle.decrypt({name:Zf,iv:o,tagLength:l,additionalData:i},r,u);return new TextDecoder().decode(d)}catch{throw Ze(Iy,"decrypt")}}async function X3(){const t=await window.crypto.subtle.generateKey({name:Zf,length:256},!0,[Y3,OT]);return window.crypto.subtle.exportKey(PT,t)}async function GR(t){return window.crypto.subtle.importKey(PT,t,q3,!1,[uoe])}async function J3(t,e,n){return window.crypto.subtle.deriveKey({name:q3,salt:e,hash:kT,info:new TextEncoder().encode(n)},t,{name:Zf,length:256},!1,[Y3,OT])}async function xoe(t,e,n){const r=new TextEncoder().encode(e),i=window.crypto.getRandomValues(new Uint8Array(16)),o=await J3(t,i,n),s=await window.crypto.subtle.encrypt({name:Zf,iv:new Uint8Array(12)},o,r);return{data:sl(new Uint8Array(s)),nonce:sl(i)}}async function VR(t,e,n,r){const i=Kc(r),o=await J3(t,Kc(e),n),s=await window.crypto.subtle.decrypt({name:Zf,iv:new Uint8Array(12)},o,i);return new TextDecoder().decode(s)}async function Z3(t){const e=await Q3(t),n=new Uint8Array(e);return sl(n)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const xm="storage_not_supported",dr="stubbed_public_client_application_called",Kx="in_mem_redirect_unavailable";/*! @azure/msal-browser v4.19.0 2025-08-05 */const Ry={[xm]:"Given storage configuration option was not supported.",[dr]:"Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors",[Kx]:"Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true."};Ry[xm],Ry[dr],Ry[Kx];class MT extends _n{constructor(e,n){super(e,n),this.name="BrowserConfigurationAuthError",Object.setPrototypeOf(this,MT.prototype)}}function fr(t){return new MT(t,Ry[t])}/*! @azure/msal-browser v4.19.0 2025-08-05 */function e6(t){t.location.hash="",typeof t.history.replaceState=="function"&&t.history.replaceState(null,"",`${t.location.origin}${t.location.pathname}${t.location.search}`)}function boe(t){const e=t.split("#");e.shift(),window.location.hash=e.length>0?e.join("#"):""}function DT(){return window.parent!==window}function woe(){return typeof window<"u"&&!!window.opener&&window.opener!==window&&typeof window.name=="string"&&window.name.indexOf(`${Ti.POPUP_NAME_PREFIX}.`)===0}function _a(){return typeof window<"u"&&window.location?window.location.href.split("?")[0].split("#")[0]:""}function Soe(){const e=new sn(window.location.href).getUrlComponents();return`${e.Protocol}//${e.HostNameAndPort}/`}function Coe(){if(sn.hashContainsKnownProperties(window.location.hash)&&DT())throw Ze(E3)}function _oe(t){if(DT()&&!t)throw Ze(j3)}function Aoe(){if(woe())throw Ze(N3)}function t6(){if(typeof window>"u")throw Ze(ww)}function n6(t){if(!t)throw Ze(Ap)}function $T(t){t6(),Coe(),Aoe(),n6(t)}function KR(t,e){if($T(t),_oe(e.system.allowRedirectInIframe),e.cache.cacheLocation===Nr.MemoryStorage&&!e.cache.storeAuthStateInCookie)throw fr(Kx)}function r6(t){const e=document.createElement("link");e.rel="preconnect",e.href=new URL(t).origin,e.crossOrigin="anonymous",document.head.appendChild(e),window.setTimeout(()=>{try{document.head.removeChild(e)}catch{}},1e4)}function joe(){return vs()}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Wx{navigateInternal(e,n){return Wx.defaultNavigateWindow(e,n)}navigateExternal(e,n){return Wx.defaultNavigateWindow(e,n)}static defaultNavigateWindow(e,n){return n.noHistory?window.location.replace(e):window.location.assign(e),new Promise((r,i)=>{setTimeout(()=>{i(Ze(Vx,"failed_to_redirect"))},n.timeout)})}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Eoe{async sendGetRequestAsync(e,n){let r,i={},o=0;const s=WR(n);try{r=await fetch(e,{method:BR.GET,headers:s})}catch(c){throw op(Ze(window.navigator.onLine?I3:Gx),void 0,void 0,c)}i=qR(r.headers);try{return o=r.status,{headers:i,body:await r.json(),status:o}}catch(c){throw op(Ze(e1),o,i,c)}}async sendPostRequestAsync(e,n){const r=n&&n.body||"",i=WR(n);let o,s=0,c={};try{o=await fetch(e,{method:BR.POST,headers:i,body:r})}catch(l){throw op(Ze(window.navigator.onLine?O3:Gx),void 0,void 0,l)}c=qR(o.headers);try{return s=o.status,{headers:c,body:await o.json(),status:s}}catch(l){throw op(Ze(e1),s,c,l)}}}function WR(t){try{const e=new Headers;if(!(t&&t.headers))return e;const n=t.headers;return Object.entries(n).forEach(([r,i])=>{e.append(r,i)}),e}catch(e){throw op(Ze(G3),void 0,void 0,e)}}function qR(t){try{const e={};return t.forEach((n,r)=>{e[r]=n}),e}catch{throw Ze(V3)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Noe=6e4,n1=1e4,Toe=3e4,i6=2e3;function koe({auth:t,cache:e,system:n,telemetry:r},i){const o={clientId:we.EMPTY_STRING,authority:`${we.DEFAULT_AUTHORITY}`,knownAuthorities:[],cloudDiscoveryMetadata:we.EMPTY_STRING,authorityMetadata:we.EMPTY_STRING,redirectUri:typeof window<"u"?_a():"",postLogoutRedirectUri:we.EMPTY_STRING,navigateToLoginRequestUrl:!0,clientCapabilities:[],protocolMode:Li.AAD,OIDCOptions:{serverResponseType:lw.FRAGMENT,defaultScopes:[we.OPENID_SCOPE,we.PROFILE_SCOPE,we.OFFLINE_ACCESS_SCOPE]},azureCloudOptions:{azureCloudInstance:XN.None,tenant:we.EMPTY_STRING},skipAuthorityMetadataCache:!1,supportsNestedAppAuth:!1,instanceAware:!1,encodeExtraQueryParams:!1},s={cacheLocation:Nr.SessionStorage,cacheRetentionDays:5,temporaryCacheLocation:Nr.SessionStorage,storeAuthStateInCookie:!1,secureCookies:!1,cacheMigrationEnabled:!!(e&&e.cacheLocation===Nr.LocalStorage),claimsBasedCachingEnabled:!1},c={loggerCallback:()=>{},logLevel:$n.Info,piiLoggingEnabled:!1},u={...{...GU,loggerOptions:c,networkClient:i?new Eoe:zie,navigationClient:new Wx,loadFrameTimeout:0,windowHashTimeout:(n==null?void 0:n.loadFrameTimeout)||Noe,iframeHashTimeout:(n==null?void 0:n.loadFrameTimeout)||n1,navigateFrameWait:0,redirectNavigationTimeout:Toe,asyncPopups:!1,allowRedirectInIframe:!1,allowPlatformBroker:!1,nativeBrokerHandshakeTimeout:(n==null?void 0:n.nativeBrokerHandshakeTimeout)||i6,pollIntervalMilliseconds:Ti.DEFAULT_POLL_INTERVAL_MS},...n,loggerOptions:(n==null?void 0:n.loggerOptions)||c},d={application:{appName:we.EMPTY_STRING,appVersion:we.EMPTY_STRING},client:new HU};if((t==null?void 0:t.protocolMode)!==Li.OIDC&&(t!=null&&t.OIDCOptions)&&new Ga(u.loggerOptions).warning(JSON.stringify(jn(RU))),t!=null&&t.protocolMode&&t.protocolMode===Li.OIDC&&(u!=null&&u.allowPlatformBroker))throw jn(MU);return{auth:{...o,...t,OIDCOptions:{...o.OIDCOptions,...t==null?void 0:t.OIDCOptions}},cache:{...s,...e},system:u,telemetry:{...d,...r}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Poe="@azure/msal-browser",bu="4.19.0";/*! @azure/msal-browser v4.19.0 2025-08-05 */const Pr="msal",LT="browser",kC="-",cc=1,r1=1,Ooe=`${Pr}.${LT}.log.level`,Ioe=`${Pr}.${LT}.log.pii`,Roe=`${Pr}.${LT}.platform.auth.dom`,YR=`${Pr}.version`,QR="account.keys",XR="token.keys";function Ts(t=r1){return t<1?`${Pr}.${QR}`:`${Pr}.${t}.${QR}`}function Hl(t,e=cc){return e<1?`${Pr}.${XR}.${t}`:`${Pr}.${e}.${XR}.${t}`}/*! @azure/msal-browser v4.19.0 2025-08-05 */class FT{static loggerCallback(e,n){switch(e){case $n.Error:console.error(n);return;case $n.Info:console.info(n);return;case $n.Verbose:console.debug(n);return;case $n.Warning:console.warn(n);return;default:console.log(n);return}}constructor(e){var l;this.browserEnvironment=typeof window<"u",this.config=koe(e,this.browserEnvironment);let n;try{n=window[Nr.SessionStorage]}catch{}const r=n==null?void 0:n.getItem(Ooe),i=(l=n==null?void 0:n.getItem(Ioe))==null?void 0:l.toLowerCase(),o=i==="true"?!0:i==="false"?!1:void 0,s={...this.config.system.loggerOptions},c=r&&Object.keys($n).includes(r)?$n[r]:void 0;c&&(s.loggerCallback=FT.loggerCallback,s.logLevel=c),o!==void 0&&(s.piiLoggingEnabled=o),this.logger=new Ga(s,Poe,bu),this.available=!1}getConfig(){return this.config}getLogger(){return this.logger}isAvailable(){return this.available}isBrowserEnvironment(){return this.browserEnvironment}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class wu extends FT{getModuleName(){return wu.MODULE_NAME}getId(){return wu.ID}async initialize(){return this.available=typeof window<"u",this.available}}wu.MODULE_NAME="";wu.ID="StandardOperatingContext";/*! @azure/msal-browser v4.19.0 2025-08-05 */class Moe{constructor(){this.dbName=t1,this.version=ioe,this.tableName=ooe,this.dbOpen=!1}async open(){return new Promise((e,n)=>{const r=window.indexedDB.open(this.dbName,this.version);r.addEventListener("upgradeneeded",i=>{i.target.result.createObjectStore(this.tableName)}),r.addEventListener("success",i=>{const o=i;this.db=o.target.result,this.dbOpen=!0,e()}),r.addEventListener("error",()=>n(Ze(NT)))})}closeConnection(){const e=this.db;e&&this.dbOpen&&(e.close(),this.dbOpen=!1)}async validateDbIsOpen(){if(!this.dbOpen)return this.open()}async getItem(e){return await this.validateDbIsOpen(),new Promise((n,r)=>{if(!this.db)return r(Ze(td));const s=this.db.transaction([this.tableName],"readonly").objectStore(this.tableName).get(e);s.addEventListener("success",c=>{const l=c;this.closeConnection(),n(l.target.result)}),s.addEventListener("error",c=>{this.closeConnection(),r(c)})})}async setItem(e,n){return await this.validateDbIsOpen(),new Promise((r,i)=>{if(!this.db)return i(Ze(td));const c=this.db.transaction([this.tableName],"readwrite").objectStore(this.tableName).put(n,e);c.addEventListener("success",()=>{this.closeConnection(),r()}),c.addEventListener("error",l=>{this.closeConnection(),i(l)})})}async removeItem(e){return await this.validateDbIsOpen(),new Promise((n,r)=>{if(!this.db)return r(Ze(td));const s=this.db.transaction([this.tableName],"readwrite").objectStore(this.tableName).delete(e);s.addEventListener("success",()=>{this.closeConnection(),n()}),s.addEventListener("error",c=>{this.closeConnection(),r(c)})})}async getKeys(){return await this.validateDbIsOpen(),new Promise((e,n)=>{if(!this.db)return n(Ze(td));const o=this.db.transaction([this.tableName],"readonly").objectStore(this.tableName).getAllKeys();o.addEventListener("success",s=>{const c=s;this.closeConnection(),e(c.target.result)}),o.addEventListener("error",s=>{this.closeConnection(),n(s)})})}async containsKey(e){return await this.validateDbIsOpen(),new Promise((n,r)=>{if(!this.db)return r(Ze(td));const s=this.db.transaction([this.tableName],"readonly").objectStore(this.tableName).count(e);s.addEventListener("success",c=>{const l=c;this.closeConnection(),n(l.target.result===1)}),s.addEventListener("error",c=>{this.closeConnection(),r(c)})})}async deleteDatabase(){return this.db&&this.dbOpen&&this.closeConnection(),new Promise((e,n)=>{const r=window.indexedDB.deleteDatabase(t1),i=setTimeout(()=>n(!1),200);r.addEventListener("success",()=>(clearTimeout(i),e(!0))),r.addEventListener("blocked",()=>(clearTimeout(i),e(!0))),r.addEventListener("error",()=>(clearTimeout(i),n(!1)))})}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Sw{constructor(){this.cache=new Map}async initialize(){}getItem(e){return this.cache.get(e)||null}getUserData(e){return this.getItem(e)}setItem(e,n){this.cache.set(e,n)}async setUserData(e,n){this.setItem(e,n)}removeItem(e){this.cache.delete(e)}getKeys(){const e=[];return this.cache.forEach((n,r)=>{e.push(r)}),e}containsKey(e){return this.cache.has(e)}clear(){this.cache.clear()}decryptData(){return Promise.resolve(null)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Doe{constructor(e){this.inMemoryCache=new Sw,this.indexedDBCache=new Moe,this.logger=e}handleDatabaseAccessError(e){if(e instanceof Bg&&e.errorCode===NT)this.logger.error("Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.");else throw e}async getItem(e){const n=this.inMemoryCache.getItem(e);if(!n)try{return this.logger.verbose("Queried item not found in in-memory cache, now querying persistent storage."),await this.indexedDBCache.getItem(e)}catch(r){this.handleDatabaseAccessError(r)}return n}async setItem(e,n){this.inMemoryCache.setItem(e,n);try{await this.indexedDBCache.setItem(e,n)}catch(r){this.handleDatabaseAccessError(r)}}async removeItem(e){this.inMemoryCache.removeItem(e);try{await this.indexedDBCache.removeItem(e)}catch(n){this.handleDatabaseAccessError(n)}}async getKeys(){const e=this.inMemoryCache.getKeys();if(e.length===0)try{return this.logger.verbose("In-memory cache is empty, now querying persistent storage."),await this.indexedDBCache.getKeys()}catch(n){this.handleDatabaseAccessError(n)}return e}async containsKey(e){const n=this.inMemoryCache.containsKey(e);if(!n)try{return this.logger.verbose("Key not found in in-memory cache, now querying persistent storage."),await this.indexedDBCache.containsKey(e)}catch(r){this.handleDatabaseAccessError(r)}return n}clearInMemory(){this.logger.verbose("Deleting in-memory keystore"),this.inMemoryCache.clear(),this.logger.verbose("In-memory keystore deleted")}async clearPersistent(){try{this.logger.verbose("Deleting persistent keystore");const e=await this.indexedDBCache.deleteDatabase();return e&&this.logger.verbose("Persistent keystore deleted"),e}catch(e){return this.handleDatabaseAccessError(e),!1}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Va{constructor(e,n,r){this.logger=e,foe(r??!1),this.cache=new Doe(this.logger),this.performanceClient=n}createNewGuid(){return vs()}base64Encode(e){return ym(e)}base64Decode(e){return ss(e)}base64UrlEncode(e){return Uv(e)}encodeKid(e){return this.base64UrlEncode(JSON.stringify({kid:e}))}async getPublicKeyThumbprint(e){var d;const n=(d=this.performanceClient)==null?void 0:d.startMeasurement(W.CryptoOptsGetPublicKeyThumbprint,e.correlationId),r=await poe(Va.EXTRACTABLE,Va.POP_KEY_USAGES),i=await TC(r.publicKey),o={e:i.e,kty:i.kty,n:i.n},s=JR(o),c=await this.hashString(s),l=await TC(r.privateKey),u=await moe(l,!1,["sign"]);return await this.cache.setItem(c,{privateKey:u,publicKey:r.publicKey,requestMethod:e.resourceRequestMethod,requestUri:e.resourceRequestUri}),n&&n.end({success:!0}),c}async removeTokenBindingKey(e){if(await this.cache.removeItem(e),await this.cache.containsKey(e))throw Te(SU)}async clearKeystore(){this.cache.clearInMemory();try{return await this.cache.clearPersistent(),!0}catch(e){return e instanceof Error?this.logger.error(`Clearing keystore failed with error: ${e.message}`):this.logger.error("Clearing keystore failed with unknown error"),!1}}async signJwt(e,n,r,i){var w;const o=(w=this.performanceClient)==null?void 0:w.startMeasurement(W.CryptoOptsSignJwt,i),s=await this.cache.getItem(n);if(!s)throw Ze(ET);const c=await TC(s.publicKey),l=JR(c),u=Uv(JSON.stringify({kid:n})),d=CT.getShrHeaderString({...r==null?void 0:r.header,alg:c.alg,kid:u}),f=Uv(d);e.cnf={jwk:JSON.parse(l)};const h=Uv(JSON.stringify(e)),p=`${f}.${h}`,m=new TextEncoder().encode(p),y=await goe(s.privateKey,m),b=sl(new Uint8Array(y)),x=`${p}.${b}`;return o&&o.end({success:!0}),x}async hashString(e){return Z3(e)}}Va.POP_KEY_USAGES=["sign","verify"];Va.EXTRACTABLE=!0;function JR(t){return JSON.stringify(t,Object.keys(t).sort())}/*! @azure/msal-browser v4.19.0 2025-08-05 */const $oe=24*60*60*1e3,i1={Lax:"Lax",None:"None"};class o6{initialize(){return Promise.resolve()}getItem(e){const n=`${encodeURIComponent(e)}`,r=document.cookie.split(";");for(let i=0;i{const i=decodeURIComponent(r).trim().split("=");n.push(i[0])}),n}containsKey(e){return this.getKeys().includes(e)}decryptData(){return Promise.resolve(null)}}function Loe(t){const e=new Date;return new Date(e.getTime()+t*$oe).toUTCString()}/*! @azure/msal-browser v4.19.0 2025-08-05 */function jp(t,e){const n=t.getItem(Ts(e));return n?JSON.parse(n):[]}function Ep(t,e,n){const r=e.getItem(Hl(t,n));if(r){const i=JSON.parse(r);if(i&&i.hasOwnProperty("idToken")&&i.hasOwnProperty("accessToken")&&i.hasOwnProperty("refreshToken"))return i}return{idToken:[],accessToken:[],refreshToken:[]}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function o1(t){return t.hasOwnProperty("id")&&t.hasOwnProperty("nonce")&&t.hasOwnProperty("data")}/*! @azure/msal-browser v4.19.0 2025-08-05 */const ZR="msal.cache.encryption",Foe="msal.broadcast.cache";class Boe{constructor(e,n,r){if(!window.localStorage)throw fr(xm);this.memoryStorage=new Sw,this.initialized=!1,this.clientId=e,this.logger=n,this.performanceClient=r,this.broadcast=new BroadcastChannel(Foe)}async initialize(e){const n=new o6,r=n.getItem(ZR);let i={key:"",id:""};if(r)try{i=JSON.parse(r)}catch{}if(i.key&&i.id){const o=no(Kc,W.Base64Decode,this.logger,this.performanceClient,e)(i.key);this.encryptionCookie={id:i.id,key:await be(GR,W.GenerateHKDF,this.logger,this.performanceClient,e)(o)}}else{const o=vs(),s=await be(X3,W.GenerateBaseKey,this.logger,this.performanceClient,e)(),c=no(sl,W.UrlEncodeArr,this.logger,this.performanceClient,e)(new Uint8Array(s));this.encryptionCookie={id:o,key:await be(GR,W.GenerateHKDF,this.logger,this.performanceClient,e)(s)};const l={id:o,key:c};n.setItem(ZR,JSON.stringify(l),0,!0,i1.None)}await be(this.importExistingCache.bind(this),W.ImportExistingCache,this.logger,this.performanceClient,e)(e),this.broadcast.addEventListener("message",this.updateCache.bind(this)),this.initialized=!0}getItem(e){return window.localStorage.getItem(e)}getUserData(e){if(!this.initialized)throw Ze(Ap);return this.memoryStorage.getItem(e)}async decryptData(e,n,r){if(!this.initialized||!this.encryptionCookie)throw Ze(Ap);if(n.id!==this.encryptionCookie.id)return this.performanceClient.incrementFields({encryptedCacheExpiredCount:1},r),null;const i=await be(VR,W.Decrypt,this.logger,this.performanceClient,r)(this.encryptionCookie.key,n.nonce,this.getContext(e),n.data);if(!i)return null;try{return JSON.parse(i)}catch{return this.performanceClient.incrementFields({encryptedCacheCorruptionCount:1},r),null}}setItem(e,n){window.localStorage.setItem(e,n)}async setUserData(e,n,r,i){if(!this.initialized||!this.encryptionCookie)throw Ze(Ap);const{data:o,nonce:s}=await be(xoe,W.Encrypt,this.logger,this.performanceClient,r)(this.encryptionCookie.key,n,this.getContext(e)),c={id:this.encryptionCookie.id,nonce:s,data:o,lastUpdatedAt:i};this.memoryStorage.setItem(e,n),this.setItem(e,JSON.stringify(c)),this.broadcast.postMessage({key:e,value:n,context:this.getContext(e)})}removeItem(e){this.memoryStorage.containsKey(e)&&(this.memoryStorage.removeItem(e),this.broadcast.postMessage({key:e,value:null,context:this.getContext(e)})),window.localStorage.removeItem(e)}getKeys(){return Object.keys(window.localStorage)}containsKey(e){return window.localStorage.hasOwnProperty(e)}clear(){this.memoryStorage.clear(),jp(this).forEach(r=>this.removeItem(r));const n=Ep(this.clientId,this);n.idToken.forEach(r=>this.removeItem(r)),n.accessToken.forEach(r=>this.removeItem(r)),n.refreshToken.forEach(r=>this.removeItem(r)),this.getKeys().forEach(r=>{(r.startsWith(Pr)||r.indexOf(this.clientId)!==-1)&&this.removeItem(r)})}async importExistingCache(e){if(!this.encryptionCookie)return;let n=jp(this);n=await this.importArray(n,e),n.length?this.setItem(Ts(),JSON.stringify(n)):this.removeItem(Ts());const r=Ep(this.clientId,this);r.idToken=await this.importArray(r.idToken,e),r.accessToken=await this.importArray(r.accessToken,e),r.refreshToken=await this.importArray(r.refreshToken,e),r.idToken.length||r.accessToken.length||r.refreshToken.length?this.setItem(Hl(this.clientId),JSON.stringify(r)):this.removeItem(Hl(this.clientId))}async getItemFromEncryptedCache(e,n){if(!this.encryptionCookie)return null;const r=this.getItem(e);if(!r)return null;let i;try{i=JSON.parse(r)}catch{return null}return o1(i)?i.id!==this.encryptionCookie.id?(this.performanceClient.incrementFields({encryptedCacheExpiredCount:1},n),null):be(VR,W.Decrypt,this.logger,this.performanceClient,n)(this.encryptionCookie.key,i.nonce,this.getContext(e),i.data):(this.performanceClient.incrementFields({unencryptedCacheCount:1},n),i)}async importArray(e,n){const r=[],i=[];return e.forEach(o=>{const s=this.getItemFromEncryptedCache(o,n).then(c=>{c?(this.memoryStorage.setItem(o,c),r.push(o)):this.removeItem(o)});i.push(s)}),await Promise.all(i),r}getContext(e){let n="";return e.includes(this.clientId)&&(n=this.clientId),n}updateCache(e){this.logger.trace("Updating internal cache from broadcast event");const n=this.performanceClient.startMeasurement(W.LocalStorageUpdated);n.add({isBackground:!0});const{key:r,value:i,context:o}=e.data;if(!r){this.logger.error("Broadcast event missing key"),n.end({success:!1,errorCode:"noKey"});return}if(o&&o!==this.clientId){this.logger.trace(`Ignoring broadcast event from clientId: ${o}`),n.end({success:!1,errorCode:"contextMismatch"});return}i?(this.memoryStorage.setItem(r,i),this.logger.verbose("Updated item in internal cache")):(this.memoryStorage.removeItem(r),this.logger.verbose("Removed item from internal cache")),n.end({success:!0})}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Uoe{constructor(){if(!window.sessionStorage)throw fr(xm)}async initialize(){}getItem(e){return window.sessionStorage.getItem(e)}getUserData(e){return this.getItem(e)}setItem(e,n){window.sessionStorage.setItem(e,n)}async setUserData(e,n){this.setItem(e,n)}removeItem(e){window.sessionStorage.removeItem(e)}getKeys(){return Object.keys(window.sessionStorage)}containsKey(e){return window.sessionStorage.hasOwnProperty(e)}decryptData(){return Promise.resolve(null)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const at={INITIALIZE_START:"msal:initializeStart",INITIALIZE_END:"msal:initializeEnd",ACCOUNT_ADDED:"msal:accountAdded",ACCOUNT_REMOVED:"msal:accountRemoved",ACTIVE_ACCOUNT_CHANGED:"msal:activeAccountChanged",LOGIN_START:"msal:loginStart",LOGIN_SUCCESS:"msal:loginSuccess",LOGIN_FAILURE:"msal:loginFailure",ACQUIRE_TOKEN_START:"msal:acquireTokenStart",ACQUIRE_TOKEN_SUCCESS:"msal:acquireTokenSuccess",ACQUIRE_TOKEN_FAILURE:"msal:acquireTokenFailure",ACQUIRE_TOKEN_NETWORK_START:"msal:acquireTokenFromNetworkStart",SSO_SILENT_START:"msal:ssoSilentStart",SSO_SILENT_SUCCESS:"msal:ssoSilentSuccess",SSO_SILENT_FAILURE:"msal:ssoSilentFailure",ACQUIRE_TOKEN_BY_CODE_START:"msal:acquireTokenByCodeStart",ACQUIRE_TOKEN_BY_CODE_SUCCESS:"msal:acquireTokenByCodeSuccess",ACQUIRE_TOKEN_BY_CODE_FAILURE:"msal:acquireTokenByCodeFailure",HANDLE_REDIRECT_START:"msal:handleRedirectStart",HANDLE_REDIRECT_END:"msal:handleRedirectEnd",POPUP_OPENED:"msal:popupOpened",LOGOUT_START:"msal:logoutStart",LOGOUT_SUCCESS:"msal:logoutSuccess",LOGOUT_FAILURE:"msal:logoutFailure",LOGOUT_END:"msal:logoutEnd",RESTORE_FROM_BFCACHE:"msal:restoreFromBFCache",BROKER_CONNECTION_ESTABLISHED:"msal:brokerConnectionEstablished"};/*! @azure/msal-browser v4.19.0 2025-08-05 */function e2(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class s1 extends XA{constructor(e,n,r,i,o,s,c){super(e,r,i,o,c),this.cacheConfig=n,this.logger=i,this.internalStorage=new Sw,this.browserStorage=t2(e,n.cacheLocation,i,o),this.temporaryCacheStorage=t2(e,n.temporaryCacheLocation,i,o),this.cookieStorage=new o6,this.eventHandler=s}async initialize(e){this.performanceClient.addFields({cacheLocation:this.cacheConfig.cacheLocation,cacheRetentionDays:this.cacheConfig.cacheRetentionDays},e),await this.browserStorage.initialize(e),await this.migrateExistingCache(e),this.trackVersionChanges(e)}async migrateExistingCache(e){const n=jp(this.browserStorage,0),r=Ep(this.clientId,this.browserStorage,0);this.performanceClient.addFields({oldAccountCount:n.length,oldAccessCount:r.accessToken.length,oldIdCount:r.idToken.length,oldRefreshCount:r.refreshToken.length},e);const i=jp(this.browserStorage,1),o=Ep(this.clientId,this.browserStorage,1);this.performanceClient.addFields({currAccountCount:i.length,currAccessCount:o.accessToken.length,currIdCount:o.idToken.length,currRefreshCount:o.refreshToken.length},e),await Promise.all([this.updateV0ToCurrent(r1,n,i,e),this.updateV0ToCurrent(cc,r.idToken,o.idToken,e),this.updateV0ToCurrent(cc,r.accessToken,o.accessToken,e),this.updateV0ToCurrent(cc,r.refreshToken,o.refreshToken,e)]),n.length>0?this.browserStorage.setItem(Ts(0),JSON.stringify(n)):this.browserStorage.removeItem(Ts(0)),i.length>0?this.browserStorage.setItem(Ts(1),JSON.stringify(i)):this.browserStorage.removeItem(Ts(1)),this.setTokenKeys(r,e,0),this.setTokenKeys(o,e,1)}async updateV0ToCurrent(e,n,r,i){const o=[];for(const s of[...n]){const c=this.browserStorage.getItem(s),l=this.validateAndParseJson(c||"");if(!l){e2(n,s);continue}l.lastUpdatedAt||(l.lastUpdatedAt=Date.now().toString(),this.setItem(s,JSON.stringify(l),i));const u=o1(l)?await this.browserStorage.decryptData(s,l,i):l;let d;if(u&&(IR(u)||RR(u))&&(d=u.expiresOn),!u||Sie(l.lastUpdatedAt,this.cacheConfig.cacheRetentionDays)||d&&Ux(d,sU)){this.browserStorage.removeItem(s),e2(n,s),this.performanceClient.incrementFields({expiredCacheRemovedCount:1},i);continue}if(this.cacheConfig.cacheLocation!==Nr.LocalStorage||o1(l)){const f=`${Pr}.${e}${kC}${s}`,h=this.browserStorage.getItem(f);if(h){const p=this.validateAndParseJson(h);if(Number(l.lastUpdatedAt)>Number(p.lastUpdatedAt)){o.push(this.setUserData(f,JSON.stringify(u),i,l.lastUpdatedAt).then(()=>{this.performanceClient.incrementFields({updatedCacheFromV0Count:1},i)}));continue}}else{o.push(this.setUserData(f,JSON.stringify(u),i,l.lastUpdatedAt).then(()=>{r.push(f),this.performanceClient.incrementFields({upgradedCacheCount:1},i)}));continue}}}return Promise.all(o)}trackVersionChanges(e){const n=this.browserStorage.getItem(YR);n&&(this.logger.info(`MSAL.js was last initialized by version: ${n}`),this.performanceClient.addFields({previousLibraryVersion:n},e)),n!==bu&&this.setItem(YR,bu,e)}validateAndParseJson(e){if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"?n:null}catch{return null}}setItem(e,n,r){let i=0,o=[];const s=20;for(let c=0;c<=s;c++)try{this.browserStorage.setItem(e,n),c>0&&(c<=i?this.removeAccessTokenKeys(o.slice(0,c),r,0):(this.removeAccessTokenKeys(o.slice(0,i),r,0),this.removeAccessTokenKeys(o.slice(i,c),r)));break}catch(l){const u=QA(l);if(u.errorCode===Dx&&c0&&(l<=o?this.removeAccessTokenKeys(s.slice(0,l),r,0):(this.removeAccessTokenKeys(s.slice(0,o),r,0),this.removeAccessTokenKeys(s.slice(o,l),r)));break}catch(u){const d=QA(u);if(d.errorCode===Dx&&l-1){if(r.splice(i,1),r.length===0){this.removeItem(Ts());return}else this.setItem(Ts(),JSON.stringify(r),n);this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap account key removed")}else this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap key not found in existing map")}removeAccount(e,n){const r=this.getActiveAccount(n);(r==null?void 0:r.homeAccountId)===e.homeAccountId&&(r==null?void 0:r.environment)===e.environment&&this.setActiveAccount(null,n),super.removeAccount(e,n),this.removeAccountKeyFromMap(this.generateAccountKey(e),n),this.browserStorage.getKeys().forEach(i=>{i.includes(e.homeAccountId)&&i.includes(e.environment)&&this.browserStorage.removeItem(i)}),this.cacheConfig.cacheLocation===Nr.LocalStorage&&this.eventHandler.emitEvent(at.ACCOUNT_REMOVED,void 0,e)}removeIdToken(e,n){super.removeIdToken(e,n);const r=this.getTokenKeys(),i=r.idToken.indexOf(e);i>-1&&(this.logger.info("idToken removed from tokenKeys map"),r.idToken.splice(i,1),this.setTokenKeys(r,n))}removeAccessToken(e,n,r=!0){super.removeAccessToken(e,n),r&&this.removeAccessTokenKeys([e],n)}removeAccessTokenKeys(e,n,r=cc){this.logger.trace("removeAccessTokenKey called");const i=this.getTokenKeys(r);let o=0;if(e.forEach(s=>{const c=i.accessToken.indexOf(s);c>-1&&(i.accessToken.splice(c,1),o++)}),o>0){this.logger.info(`removed ${o} accessToken keys from tokenKeys map`),this.setTokenKeys(i,n,r);return}}removeRefreshToken(e,n){super.removeRefreshToken(e,n);const r=this.getTokenKeys(),i=r.refreshToken.indexOf(e);i>-1&&(this.logger.info("refreshToken removed from tokenKeys map"),r.refreshToken.splice(i,1),this.setTokenKeys(r,n))}getTokenKeys(e=cc){return Ep(this.clientId,this.browserStorage,e)}setTokenKeys(e,n,r=cc){if(e.idToken.length===0&&e.accessToken.length===0&&e.refreshToken.length===0){this.removeItem(Hl(this.clientId,r));return}else this.setItem(Hl(this.clientId,r),JSON.stringify(e),n)}getIdTokenCredential(e,n){const r=this.browserStorage.getUserData(e);if(!r)return this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit"),this.removeIdToken(e,n),null;const i=this.validateAndParseJson(r);return!i||!_ie(i)?(this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getIdTokenCredential: cache hit"),i)}async setIdTokenCredential(e,n){this.logger.trace("BrowserCacheManager.setIdTokenCredential called");const r=this.generateCredentialKey(e),i=Date.now().toString();e.lastUpdatedAt=i,await this.setUserData(r,JSON.stringify(e),n,i);const o=this.getTokenKeys();o.idToken.indexOf(r)===-1&&(this.logger.info("BrowserCacheManager: addTokenKey - idToken added to map"),o.idToken.push(r),this.setTokenKeys(o,n))}getAccessTokenCredential(e,n){const r=this.browserStorage.getUserData(e);if(!r)return this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit"),this.removeAccessTokenKeys([e],n),null;const i=this.validateAndParseJson(r);return!i||!IR(i)?(this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getAccessTokenCredential: cache hit"),i)}async setAccessTokenCredential(e,n){this.logger.trace("BrowserCacheManager.setAccessTokenCredential called");const r=this.generateCredentialKey(e),i=Date.now().toString();e.lastUpdatedAt=i,await this.setUserData(r,JSON.stringify(e),n,i);const o=this.getTokenKeys(),s=o.accessToken.indexOf(r);s!==-1&&o.accessToken.splice(s,1),this.logger.trace(`access token ${s===-1?"added to":"updated in"} map`),o.accessToken.push(r),this.setTokenKeys(o,n)}getRefreshTokenCredential(e,n){const r=this.browserStorage.getUserData(e);if(!r)return this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit"),this.removeRefreshToken(e,n),null;const i=this.validateAndParseJson(r);return!i||!RR(i)?(this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: cache hit"),i)}async setRefreshTokenCredential(e,n){this.logger.trace("BrowserCacheManager.setRefreshTokenCredential called");const r=this.generateCredentialKey(e),i=Date.now().toString();e.lastUpdatedAt=i,await this.setUserData(r,JSON.stringify(e),n,i);const o=this.getTokenKeys();o.refreshToken.indexOf(r)===-1&&(this.logger.info("BrowserCacheManager: addTokenKey - refreshToken added to map"),o.refreshToken.push(r),this.setTokenKeys(o,n))}getAppMetadata(e){const n=this.browserStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit"),null;const r=this.validateAndParseJson(n);return!r||!Nie(e,r)?(this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getAppMetadata: cache hit"),r)}setAppMetadata(e,n){this.logger.trace("BrowserCacheManager.setAppMetadata called");const r=Eie(e);this.setItem(r,JSON.stringify(e),n)}getServerTelemetry(e){const n=this.browserStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit"),null;const r=this.validateAndParseJson(n);return!r||!Aie(e,r)?(this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getServerTelemetry: cache hit"),r)}setServerTelemetry(e,n,r){this.logger.trace("BrowserCacheManager.setServerTelemetry called"),this.setItem(e,JSON.stringify(n),r)}getAuthorityMetadata(e){const n=this.internalStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getAuthorityMetadata: called, no cache hit"),null;const r=this.validateAndParseJson(n);return r&&Tie(e,r)?(this.logger.trace("BrowserCacheManager.getAuthorityMetadata: cache hit"),r):null}getAuthorityMetadataKeys(){return this.internalStorage.getKeys().filter(n=>this.isAuthorityMetadata(n))}setWrapperMetadata(e,n){this.internalStorage.setItem(Bv.WRAPPER_SKU,e),this.internalStorage.setItem(Bv.WRAPPER_VER,n)}getWrapperMetadata(){const e=this.internalStorage.getItem(Bv.WRAPPER_SKU)||we.EMPTY_STRING,n=this.internalStorage.getItem(Bv.WRAPPER_VER)||we.EMPTY_STRING;return[e,n]}setAuthorityMetadata(e,n){this.logger.trace("BrowserCacheManager.setAuthorityMetadata called"),this.internalStorage.setItem(e,JSON.stringify(n))}getActiveAccount(e){const n=this.generateCacheKey(SR.ACTIVE_ACCOUNT_FILTERS),r=this.browserStorage.getItem(n);if(!r)return this.logger.trace("BrowserCacheManager.getActiveAccount: No active account filters found"),null;const i=this.validateAndParseJson(r);return i?(this.logger.trace("BrowserCacheManager.getActiveAccount: Active account filters schema found"),this.getAccountInfoFilteredBy({homeAccountId:i.homeAccountId,localAccountId:i.localAccountId,tenantId:i.tenantId},e)):(this.logger.trace("BrowserCacheManager.getActiveAccount: No active account found"),null)}setActiveAccount(e,n){const r=this.generateCacheKey(SR.ACTIVE_ACCOUNT_FILTERS);if(e){this.logger.verbose("setActiveAccount: Active account set");const i={homeAccountId:e.homeAccountId,localAccountId:e.localAccountId,tenantId:e.tenantId,lastUpdatedAt:Fi().toString()};this.setItem(r,JSON.stringify(i),n)}else this.logger.verbose("setActiveAccount: No account passed, active account not set"),this.browserStorage.removeItem(r);this.eventHandler.emitEvent(at.ACTIVE_ACCOUNT_CHANGED)}getThrottlingCache(e){const n=this.browserStorage.getItem(e);if(!n)return this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit"),null;const r=this.validateAndParseJson(n);return!r||!jie(e,r)?(this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit"),null):(this.logger.trace("BrowserCacheManager.getThrottlingCache: cache hit"),r)}setThrottlingCache(e,n,r){this.logger.trace("BrowserCacheManager.setThrottlingCache called"),this.setItem(e,JSON.stringify(n),r)}getTemporaryCache(e,n){const r=n?this.generateCacheKey(e):e;if(this.cacheConfig.storeAuthStateInCookie){const o=this.cookieStorage.getItem(r);if(o)return this.logger.trace("BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies"),o}const i=this.temporaryCacheStorage.getItem(r);if(!i){if(this.cacheConfig.cacheLocation===Nr.LocalStorage){const o=this.browserStorage.getItem(r);if(o)return this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage"),o}return this.logger.trace("BrowserCacheManager.getTemporaryCache: No cache item found in local storage"),null}return this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item returned"),i}setTemporaryCache(e,n,r){const i=r?this.generateCacheKey(e):e;this.temporaryCacheStorage.setItem(i,n),this.cacheConfig.storeAuthStateInCookie&&(this.logger.trace("BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie"),this.cookieStorage.setItem(i,n,void 0,this.cacheConfig.secureCookies))}removeItem(e){this.browserStorage.removeItem(e)}removeTemporaryItem(e){this.temporaryCacheStorage.removeItem(e),this.cacheConfig.storeAuthStateInCookie&&(this.logger.trace("BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie"),this.cookieStorage.removeItem(e))}getKeys(){return this.browserStorage.getKeys()}clear(e){this.removeAllAccounts(e),this.removeAppMetadata(e),this.temporaryCacheStorage.getKeys().forEach(n=>{(n.indexOf(Pr)!==-1||n.indexOf(this.clientId)!==-1)&&this.removeTemporaryItem(n)}),this.browserStorage.getKeys().forEach(n=>{(n.indexOf(Pr)!==-1||n.indexOf(this.clientId)!==-1)&&this.browserStorage.removeItem(n)}),this.internalStorage.clear()}clearTokensAndKeysWithClaims(e){this.performanceClient.addQueueMeasurement(W.ClearTokensAndKeysWithClaims,e);const n=this.getTokenKeys();let r=0;n.accessToken.forEach(i=>{const o=this.getAccessTokenCredential(i,e);o!=null&&o.requestedClaimsHash&&i.includes(o.requestedClaimsHash.toLowerCase())&&(this.removeAccessToken(i,e),r++)}),r>0&&this.logger.warning(`${r} access tokens with claims in the cache keys have been removed from the cache.`)}generateCacheKey(e){return Gs.startsWith(e,Pr)?e:`${Pr}.${this.clientId}.${e}`}generateCredentialKey(e){const n=e.credentialType===Vr.REFRESH_TOKEN&&e.familyId||e.clientId,r=e.tokenType&&e.tokenType.toLowerCase()!==xn.BEARER.toLowerCase()?e.tokenType.toLowerCase():"";return[`${Pr}.${cc}`,e.homeAccountId,e.environment,e.credentialType,n,e.realm||"",e.target||"",e.requestedClaimsHash||"",r].join(kC).toLowerCase()}generateAccountKey(e){const n=e.homeAccountId.split(".")[1];return[`${Pr}.${r1}`,e.homeAccountId,e.environment,n||e.tenantId||""].join(kC).toLowerCase()}resetRequestCache(){this.logger.trace("BrowserCacheManager.resetRequestCache called"),this.removeTemporaryItem(this.generateCacheKey(pr.REQUEST_PARAMS)),this.removeTemporaryItem(this.generateCacheKey(pr.VERIFIER)),this.removeTemporaryItem(this.generateCacheKey(pr.ORIGIN_URI)),this.removeTemporaryItem(this.generateCacheKey(pr.URL_HASH)),this.removeTemporaryItem(this.generateCacheKey(pr.NATIVE_REQUEST)),this.setInteractionInProgress(!1)}cacheAuthorizeRequest(e,n){this.logger.trace("BrowserCacheManager.cacheAuthorizeRequest called");const r=ym(JSON.stringify(e));if(this.setTemporaryCache(pr.REQUEST_PARAMS,r,!0),n){const i=ym(n);this.setTemporaryCache(pr.VERIFIER,i,!0)}}getCachedRequest(){this.logger.trace("BrowserCacheManager.getCachedRequest called");const e=this.getTemporaryCache(pr.REQUEST_PARAMS,!0);if(!e)throw Ze(k3);const n=this.getTemporaryCache(pr.VERIFIER,!0);let r,i="";try{r=JSON.parse(ss(e)),n&&(i=ss(n))}catch(o){throw this.logger.errorPii(`Attempted to parse: ${e}`),this.logger.error(`Parsing cached token request threw with error: ${o}`),Ze(P3)}return[r,i]}getCachedNativeRequest(){this.logger.trace("BrowserCacheManager.getCachedNativeRequest called");const e=this.getTemporaryCache(pr.NATIVE_REQUEST,!0);if(!e)return this.logger.trace("BrowserCacheManager.getCachedNativeRequest: No cached native request found"),null;const n=this.validateAndParseJson(e);return n||(this.logger.error("BrowserCacheManager.getCachedNativeRequest: Unable to parse native request"),null)}isInteractionInProgress(e){var r;const n=(r=this.getInteractionInProgress())==null?void 0:r.clientId;return e?n===this.clientId:!!n}getInteractionInProgress(){const e=`${Pr}.${pr.INTERACTION_STATUS_KEY}`,n=this.getTemporaryCache(e,!1);try{return n?JSON.parse(n):null}catch{return this.logger.error("Cannot parse interaction status. Removing temporary cache items and clearing url hash. Retrying interaction should fix the error"),this.removeTemporaryItem(e),this.resetRequestCache(),e6(window),null}}setInteractionInProgress(e,n=yc.SIGNIN){var i;const r=`${Pr}.${pr.INTERACTION_STATUS_KEY}`;if(e){if(this.getInteractionInProgress())throw Ze(S3);this.setTemporaryCache(r,JSON.stringify({clientId:this.clientId,type:n}),!1)}else!e&&((i=this.getInteractionInProgress())==null?void 0:i.clientId)===this.clientId&&this.removeTemporaryItem(r)}async hydrateCache(e,n){var c,l,u;const r=pw((c=e.account)==null?void 0:c.homeAccountId,(l=e.account)==null?void 0:l.environment,e.idToken,this.clientId,e.tenantId);let i;n.claims&&(i=await this.cryptoImpl.hashString(n.claims));const o=mw((u=e.account)==null?void 0:u.homeAccountId,e.account.environment,e.accessToken,this.clientId,e.tenantId,e.scopes.join(" "),e.expiresOn?OR(e.expiresOn):0,e.extExpiresOn?OR(e.extExpiresOn):0,ss,void 0,e.tokenType,void 0,n.sshKid,n.claims,i),s={idToken:r,accessToken:o};return this.saveCacheRecord(s,e.correlationId)}async saveCacheRecord(e,n,r){try{await super.saveCacheRecord(e,n,r)}catch(i){if(i instanceof Td&&this.performanceClient&&n)try{const o=this.getTokenKeys();this.performanceClient.addFields({cacheRtCount:o.refreshToken.length,cacheIdCount:o.idToken.length,cacheAtCount:o.accessToken.length},n)}catch{}throw i}}}function t2(t,e,n,r){try{switch(e){case Nr.LocalStorage:return new Boe(t,n,r);case Nr.SessionStorage:return new Uoe;case Nr.MemoryStorage:default:break}}catch(i){n.error(i)}return new Sw}const zoe=(t,e,n,r)=>{const i={cacheLocation:Nr.MemoryStorage,cacheRetentionDays:5,temporaryCacheLocation:Nr.MemoryStorage,storeAuthStateInCookie:!1,secureCookies:!1,cacheMigrationEnabled:!1,claimsBasedCachingEnabled:!1};return new s1(t,i,Ix,e,n,r)};/*! @azure/msal-browser v4.19.0 2025-08-05 */function Hoe(t,e,n,r,i){return t.verbose("getAllAccounts called"),n?e.getAllAccounts(i||{},r):[]}function Goe(t,e,n,r){if(e.trace("getAccount called"),Object.keys(t).length===0)return e.warning("getAccount: No accountFilter provided"),null;const i=n.getAccountInfoFilteredBy(t,r);return i?(e.verbose("getAccount: Account matching provided filter found, returning"),i):(e.verbose("getAccount: No matching account found, returning null"),null)}function Voe(t,e,n,r){if(e.trace("getAccountByUsername called"),!t)return e.warning("getAccountByUsername: No username provided"),null;const i=n.getAccountInfoFilteredBy({username:t},r);return i?(e.verbose("getAccountByUsername: Account matching username found, returning"),e.verbosePii(`getAccountByUsername: Returning signed-in accounts matching username: ${t}`),i):(e.verbose("getAccountByUsername: No matching account found, returning null"),null)}function Koe(t,e,n,r){if(e.trace("getAccountByHomeId called"),!t)return e.warning("getAccountByHomeId: No homeAccountId provided"),null;const i=n.getAccountInfoFilteredBy({homeAccountId:t},r);return i?(e.verbose("getAccountByHomeId: Account matching homeAccountId found, returning"),e.verbosePii(`getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${t}`),i):(e.verbose("getAccountByHomeId: No matching account found, returning null"),null)}function Woe(t,e,n,r){if(e.trace("getAccountByLocalId called"),!t)return e.warning("getAccountByLocalId: No localAccountId provided"),null;const i=n.getAccountInfoFilteredBy({localAccountId:t},r);return i?(e.verbose("getAccountByLocalId: Account matching localAccountId found, returning"),e.verbosePii(`getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${t}`),i):(e.verbose("getAccountByLocalId: No matching account found, returning null"),null)}function qoe(t,e,n){e.setActiveAccount(t,n)}function Yoe(t,e){return t.getActiveAccount(e)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Qoe="msal.broadcast.event";class Xoe{constructor(e){this.eventCallbacks=new Map,this.logger=e||new Ga({}),typeof BroadcastChannel<"u"&&(this.broadcastChannel=new BroadcastChannel(Qoe)),this.invokeCrossTabCallbacks=this.invokeCrossTabCallbacks.bind(this)}addEventCallback(e,n,r){if(typeof window<"u"){const i=r||joe();return this.eventCallbacks.has(i)?(this.logger.error(`Event callback with id: ${i} is already registered. Please provide a unique id or remove the existing callback and try again.`),null):(this.eventCallbacks.set(i,[e,n||[]]),this.logger.verbose(`Event callback registered with id: ${i}`),i)}return null}removeEventCallback(e){this.eventCallbacks.delete(e),this.logger.verbose(`Event callback ${e} removed.`)}emitEvent(e,n,r,i){var s;const o={eventType:e,interactionType:n||null,payload:r||null,error:i||null,timestamp:Date.now()};switch(e){case at.ACCOUNT_ADDED:case at.ACCOUNT_REMOVED:case at.ACTIVE_ACCOUNT_CHANGED:(s=this.broadcastChannel)==null||s.postMessage(o);break;default:this.invokeCallbacks(o);break}}invokeCallbacks(e){this.eventCallbacks.forEach(([n,r],i)=>{(r.length===0||r.includes(e.eventType))&&(this.logger.verbose(`Emitting event to callback ${i}: ${e.eventType}`),n.apply(null,[e]))})}invokeCrossTabCallbacks(e){const n=e.data;this.invokeCallbacks(n)}subscribeCrossTab(){var e;(e=this.broadcastChannel)==null||e.addEventListener("message",this.invokeCrossTabCallbacks)}unsubscribeCrossTab(){var e;(e=this.broadcastChannel)==null||e.removeEventListener("message",this.invokeCrossTabCallbacks)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class s6{constructor(e,n,r,i,o,s,c,l,u){this.config=e,this.browserStorage=n,this.browserCrypto=r,this.networkClient=this.config.system.networkClient,this.eventHandler=o,this.navigationClient=s,this.platformAuthProvider=l,this.correlationId=u||vs(),this.logger=i.clone(Ti.MSAL_SKU,bu,this.correlationId),this.performanceClient=c}async clearCacheOnLogout(e,n){if(n)try{this.browserStorage.removeAccount(n,e),this.logger.verbose("Cleared cache items belonging to the account provided in the logout request.")}catch{this.logger.error("Account provided in logout request was not found. Local cache unchanged.")}else try{this.logger.verbose("No account provided in logout request, clearing all cache items.",this.correlationId),this.browserStorage.clear(e),await this.browserCrypto.clearKeystore()}catch{this.logger.error("Attempted to clear all MSAL cache items and failed. Local cache unchanged.")}}getRedirectUri(e){this.logger.verbose("getRedirectUri called");const n=e||this.config.auth.redirectUri;return sn.getAbsoluteUrl(n,_a())}initializeServerTelemetryManager(e,n){this.logger.verbose("initializeServerTelemetryManager called");const r={clientId:this.config.auth.clientId,correlationId:this.correlationId,apiId:e,forceRefresh:n||!1,wrapperSKU:this.browserStorage.getWrapperMetadata()[0],wrapperVer:this.browserStorage.getWrapperMetadata()[1]};return new gm(r,this.browserStorage)}async getDiscoveredAuthority(e){const{account:n}=e,r=e.requestExtraQueryParameters&&e.requestExtraQueryParameters.hasOwnProperty("instance_aware")?e.requestExtraQueryParameters.instance_aware:void 0;this.performanceClient.addQueueMeasurement(W.StandardInteractionClientGetDiscoveredAuthority,this.correlationId);const i={protocolMode:this.config.auth.protocolMode,OIDCOptions:this.config.auth.OIDCOptions,knownAuthorities:this.config.auth.knownAuthorities,cloudDiscoveryMetadata:this.config.auth.cloudDiscoveryMetadata,authorityMetadata:this.config.auth.authorityMetadata,skipAuthorityMetadataCache:this.config.auth.skipAuthorityMetadataCache},o=e.requestAuthority||this.config.auth.authority,s=r!=null&&r.length?r==="true":this.config.auth.instanceAware,c=n&&s?this.config.auth.authority.replace(sn.getDomainFromUrl(o),n.environment):o,l=ti.generateAuthority(c,e.requestAzureCloudOptions||this.config.auth.azureCloudOptions),u=await be(a3,W.AuthorityFactoryCreateDiscoveredInstance,this.logger,this.performanceClient,this.correlationId)(l,this.config.system.networkClient,this.browserStorage,i,this.logger,this.correlationId,this.performanceClient);if(n&&!u.isAlias(n.environment))throw jn(DU);return u}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function BT(t,e,n,r){n.addQueueMeasurement(W.InitializeBaseRequest,t.correlationId);const i=t.authority||e.auth.authority,o=[...t&&t.scopes||[]],s={...t,correlationId:t.correlationId,authority:i,scopes:o};if(!s.authenticationScheme)s.authenticationScheme=xn.BEARER,r.verbose(`Authentication Scheme wasn't explicitly set in request, defaulting to "Bearer" request`);else{if(s.authenticationScheme===xn.SSH){if(!t.sshJwk)throw jn(uw);if(!t.sshKid)throw jn(IU)}r.verbose(`Authentication Scheme set to "${s.authenticationScheme}" as configured in Auth request`)}return e.cache.claimsBasedCachingEnabled&&t.claims&&!Gs.isEmptyObj(t.claims)&&(s.requestedClaimsHash=await Z3(t.claims)),s}async function Joe(t,e,n,r,i){r.addQueueMeasurement(W.InitializeSilentRequest,t.correlationId);const o=await be(BT,W.InitializeBaseRequest,i,r,t.correlationId)(t,n,r,i);return{...t,...o,account:e,forceRefresh:t.forceRefresh||!1}}function a6(t,e){let n;const r=t.httpMethod;if(e===Li.EAR){if(n=r||zl.POST,n!==zl.POST)throw jn($U)}else n=r||zl.GET;if(t.authorizePostBodyParameters&&n!==zl.POST)throw jn(LU);return n}/*! @azure/msal-browser v4.19.0 2025-08-05 */class eh extends s6{initializeLogoutRequest(e){this.logger.verbose("initializeLogoutRequest called",e==null?void 0:e.correlationId);const n={correlationId:this.correlationId||vs(),...e};if(e)if(e.logoutHint)this.logger.verbose("logoutHint has already been set in logoutRequest");else if(e.account){const r=this.getLogoutHintFromIdTokenClaims(e.account);r&&(this.logger.verbose("Setting logoutHint to login_hint ID Token Claim value for the account provided"),n.logoutHint=r)}else this.logger.verbose("logoutHint was not set and account was not passed into logout request, logoutHint will not be set");else this.logger.verbose("logoutHint will not be set since no logout request was configured");return!e||e.postLogoutRedirectUri!==null?e&&e.postLogoutRedirectUri?(this.logger.verbose("Setting postLogoutRedirectUri to uri set on logout request",n.correlationId),n.postLogoutRedirectUri=sn.getAbsoluteUrl(e.postLogoutRedirectUri,_a())):this.config.auth.postLogoutRedirectUri===null?this.logger.verbose("postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect",n.correlationId):this.config.auth.postLogoutRedirectUri?(this.logger.verbose("Setting postLogoutRedirectUri to configured uri",n.correlationId),n.postLogoutRedirectUri=sn.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri,_a())):(this.logger.verbose("Setting postLogoutRedirectUri to current page",n.correlationId),n.postLogoutRedirectUri=sn.getAbsoluteUrl(_a(),_a())):this.logger.verbose("postLogoutRedirectUri passed as null, not setting post logout redirect uri",n.correlationId),n}getLogoutHintFromIdTokenClaims(e){const n=e.idTokenClaims;if(n){if(n.login_hint)return n.login_hint;this.logger.verbose("The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request")}else this.logger.verbose("The provided account does not contain ID Token Claims, logoutHint will not be added to logout request");return null}async createAuthCodeClient(e){this.performanceClient.addQueueMeasurement(W.StandardInteractionClientCreateAuthCodeClient,this.correlationId);const n=await be(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,this.correlationId)(e);return new f3(n,this.performanceClient)}async getClientConfiguration(e){const{serverTelemetryManager:n,requestAuthority:r,requestAzureCloudOptions:i,requestExtraQueryParameters:o,account:s}=e;this.performanceClient.addQueueMeasurement(W.StandardInteractionClientGetClientConfiguration,this.correlationId);const c=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,this.correlationId)({requestAuthority:r,requestAzureCloudOptions:i,requestExtraQueryParameters:o,account:s}),l=this.config.system.loggerOptions;return{authOptions:{clientId:this.config.auth.clientId,authority:c,clientCapabilities:this.config.auth.clientCapabilities,redirectUri:this.config.auth.redirectUri},systemOptions:{tokenRenewalOffsetSeconds:this.config.system.tokenRenewalOffsetSeconds,preventCorsPreflight:!0},loggerOptions:{loggerCallback:l.loggerCallback,piiLoggingEnabled:l.piiLoggingEnabled,logLevel:l.logLevel,correlationId:this.correlationId},cacheOptions:{claimsBasedCachingEnabled:this.config.cache.claimsBasedCachingEnabled},cryptoInterface:this.browserCrypto,networkInterface:this.networkClient,storageInterface:this.browserStorage,serverTelemetryManager:n,libraryInfo:{sku:Ti.MSAL_SKU,version:bu,cpu:we.EMPTY_STRING,os:we.EMPTY_STRING},telemetry:this.config.telemetry}}async initializeAuthorizationRequest(e,n){this.performanceClient.addQueueMeasurement(W.StandardInteractionClientInitializeAuthorizationRequest,this.correlationId);const r=this.getRedirectUri(e.redirectUri),i={interactionType:n},o=Jf.setRequestState(this.browserCrypto,e&&e.state||we.EMPTY_STRING,i),c={...await be(BT,W.InitializeBaseRequest,this.logger,this.performanceClient,this.correlationId)({...e,correlationId:this.correlationId},this.config,this.performanceClient,this.logger),redirectUri:r,state:o,nonce:e.nonce||vs(),responseMode:this.config.auth.OIDCOptions.serverResponseType},l={...c,httpMethod:a6(c,this.config.auth.protocolMode)};if(e.loginHint||e.sid)return l;const u=e.account||this.browserStorage.getActiveAccount(this.correlationId);return u&&(this.logger.verbose("Setting validated request account",this.correlationId),this.logger.verbosePii(`Setting validated request account: ${u.homeAccountId}`,this.correlationId),l.account=u),l}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function Zoe(t,e){if(!e)return null;try{return Jf.parseRequestState(t,e).libraryState.meta}catch{throw Te(af)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function Np(t,e,n){const r=Rx(t);if(!r)throw BU(t)?(n.error(`A ${e} is present in the iframe but it does not contain known properties. It's likely that the ${e} has been replaced by code running on the redirectUri page.`),n.errorPii(`The ${e} detected is: ${t}`),Ze(x3)):(n.error(`The request has returned to the redirectUri but a ${e} is not present. It's likely that the ${e} has been removed or the page has been redirected by code running on the redirectUri page.`),Ze(y3));return r}function ese(t,e,n){if(!t.state)throw Ze(jT);const r=Zoe(e,t.state);if(!r)throw Ze(b3);if(r.interactionType!==n)throw Ze(w3)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class c6{constructor(e,n,r,i,o){this.authModule=e,this.browserStorage=n,this.authCodeRequest=r,this.logger=i,this.performanceClient=o}async handleCodeResponse(e,n){this.performanceClient.addQueueMeasurement(W.HandleCodeResponse,n.correlationId);let r;try{r=Gie(e,n.state)}catch(i){throw i instanceof Ru&&i.subError===vm?Ze(vm):i}return be(this.handleCodeResponseFromServer.bind(this),W.HandleCodeResponseFromServer,this.logger,this.performanceClient,n.correlationId)(r,n)}async handleCodeResponseFromServer(e,n,r=!0){if(this.performanceClient.addQueueMeasurement(W.HandleCodeResponseFromServer,n.correlationId),this.logger.trace("InteractionHandler.handleCodeResponseFromServer called"),this.authCodeRequest.code=e.code,e.cloud_instance_host_name&&await be(this.authModule.updateAuthority.bind(this.authModule),W.UpdateTokenEndpointAuthority,this.logger,this.performanceClient,n.correlationId)(e.cloud_instance_host_name,n.correlationId),r&&(e.nonce=n.nonce||void 0),e.state=n.state,e.client_info)this.authCodeRequest.clientInfo=e.client_info;else{const o=this.createCcsCredentials(n);o&&(this.authCodeRequest.ccsCredential=o)}return await be(this.authModule.acquireToken.bind(this.authModule),W.AuthClientAcquireToken,this.logger,this.performanceClient,n.correlationId)(this.authCodeRequest,e)}createCcsCredentials(e){return e.account?{credential:e.account.homeAccountId,type:ts.HOME_ACCOUNT_ID}:e.loginHint?{credential:e.loginHint,type:ts.UPN}:null}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const tse="ContentError",l6="user_switch";/*! @azure/msal-browser v4.19.0 2025-08-05 */const nse="USER_INTERACTION_REQUIRED",rse="USER_CANCEL",ise="NO_NETWORK",ose="PERSISTENT_ERROR",sse="DISABLED",ase="ACCOUNT_UNAVAILABLE",cse="UX_NOT_ALLOWED";/*! @azure/msal-browser v4.19.0 2025-08-05 */const lse=-2147186943,use={[l6]:"User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again."};class $s extends _n{constructor(e,n,r){super(e,n),Object.setPrototypeOf(this,$s.prototype),this.name="NativeAuthError",this.ext=r}}function nd(t){if(t.ext&&t.ext.status&&(t.ext.status===ose||t.ext.status===sse)||t.ext&&t.ext.error&&t.ext.error===lse)return!0;switch(t.errorCode){case tse:return!0;default:return!1}}function qx(t,e,n){if(n&&n.status)switch(n.status){case ase:return Hx(l3);case nse:return new gs(t,e);case rse:return Ze(vm);case ise:return Ze(Gx);case cse:return Hx(xT)}return new $s(t,use[t]||e,n)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class u6 extends eh{async acquireToken(e){this.performanceClient.addQueueMeasurement(W.SilentCacheClientAcquireToken,e.correlationId);const n=this.initializeServerTelemetryManager(Cn.acquireTokenSilent_silentFlow),r=await be(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:n,requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,account:e.account}),i=new Uie(r,this.performanceClient);this.logger.verbose("Silent auth client created");try{const s=(await be(i.acquireCachedToken.bind(i),W.SilentFlowClientAcquireCachedToken,this.logger,this.performanceClient,e.correlationId)(e))[0];return this.performanceClient.addFields({fromCache:!0},e.correlationId),s}catch(o){throw o instanceof Bg&&o.errorCode===ET&&this.logger.verbose("Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair."),o}}logout(e){this.logger.verbose("logoutRedirect called");const n=this.initializeLogoutRequest(e);return this.clearCacheOnLogout(n.correlationId,n==null?void 0:n.account)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class My extends s6{constructor(e,n,r,i,o,s,c,l,u,d,f,h){super(e,n,r,i,o,s,l,u,h),this.apiId=c,this.accountId=d,this.platformAuthProvider=u,this.nativeStorageManager=f,this.silentCacheClient=new u6(e,this.nativeStorageManager,r,i,o,s,l,u,h);const p=this.platformAuthProvider.getExtensionName();this.skus=gm.makeExtraSkuString({libraryName:Ti.MSAL_SKU,libraryVersion:bu,extensionName:p,extensionVersion:this.platformAuthProvider.getExtensionVersion()})}addRequestSKUs(e){e.extraParameters={...e.extraParameters,[nie]:this.skus}}async acquireToken(e,n){this.performanceClient.addQueueMeasurement(W.NativeInteractionClientAcquireToken,e.correlationId),this.logger.trace("NativeInteractionClient - acquireToken called.");const r=this.performanceClient.startMeasurement(W.NativeInteractionClientAcquireToken,e.correlationId),i=Fi(),o=this.initializeServerTelemetryManager(this.apiId);try{const s=await this.initializeNativeRequest(e);try{const l=await this.acquireTokensFromCache(this.accountId,s);return r.end({success:!0,isNativeBroker:!1,fromCache:!0}),l}catch(l){if(n===ui.AccessToken)throw this.logger.info("MSAL internal Cache does not contain tokens, return error as per cache policy"),l;this.logger.info("MSAL internal Cache does not contain tokens, proceed to make a native call")}const c=await this.platformAuthProvider.sendMessage(s);return await this.handleNativeResponse(c,s,i).then(l=>(r.end({success:!0,isNativeBroker:!0,requestId:l.requestId}),o.clearNativeBrokerErrorCode(),l)).catch(l=>{throw r.end({success:!1,errorCode:l.errorCode,subErrorCode:l.subError,isNativeBroker:!0}),l})}catch(s){throw s instanceof $s&&o.setNativeBrokerErrorCode(s.errorCode),s}}createSilentCacheRequest(e,n){return{authority:e.authority,correlationId:this.correlationId,scopes:Er.fromString(e.scope).asArray(),account:n,forceRefresh:!1}}async acquireTokensFromCache(e,n){if(!e)throw this.logger.warning("NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided"),Te(qA);const r=this.browserStorage.getBaseAccountInfo({nativeAccountId:e},this.correlationId);if(!r)throw Te(qA);try{const i=this.createSilentCacheRequest(n,r),o=await this.silentCacheClient.acquireToken(i),s={...r,idTokenClaims:o==null?void 0:o.idTokenClaims,idToken:o==null?void 0:o.idToken};return{...o,account:s}}catch(i){throw i}}async acquireTokenRedirect(e,n){this.logger.trace("NativeInteractionClient - acquireTokenRedirect called.");const{...r}=e;delete r.onRedirectNavigate;const i=await this.initializeNativeRequest(r);try{await this.platformAuthProvider.sendMessage(i)}catch(c){if(c instanceof $s&&(this.initializeServerTelemetryManager(this.apiId).setNativeBrokerErrorCode(c.errorCode),nd(c)))throw c}this.browserStorage.setTemporaryCache(pr.NATIVE_REQUEST,JSON.stringify(i),!0);const o={apiId:Cn.acquireTokenRedirect,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},s=this.config.auth.navigateToLoginRequestUrl?window.location.href:this.getRedirectUri(e.redirectUri);n.end({success:!0}),await this.navigationClient.navigateExternal(s,o)}async handleRedirectPromise(e,n){if(this.logger.trace("NativeInteractionClient - handleRedirectPromise called."),!this.browserStorage.isInteractionInProgress(!0))return this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null."),null;const r=this.browserStorage.getCachedNativeRequest();if(!r)return this.logger.verbose("NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null."),e&&n&&(e==null||e.addFields({errorCode:"no_cached_request"},n)),null;const{prompt:i,...o}=r;i&&this.logger.verbose("NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window."),this.browserStorage.removeItem(this.browserStorage.generateCacheKey(pr.NATIVE_REQUEST));const s=Fi();try{this.logger.verbose("NativeInteractionClient - handleRedirectPromise sending message to native broker.");const c=await this.platformAuthProvider.sendMessage(o),l=await this.handleNativeResponse(c,o,s);return this.initializeServerTelemetryManager(this.apiId).clearNativeBrokerErrorCode(),l}catch(c){throw c}}logout(){return this.logger.trace("NativeInteractionClient - logout called."),Promise.reject("Logout not implemented yet")}async handleNativeResponse(e,n,r){var d,f;this.logger.trace("NativeInteractionClient - handleNativeResponse called.");const i=Xf(e.id_token,ss),o=this.createHomeAccountIdentifier(e,i),s=(d=this.browserStorage.getAccountInfoFilteredBy({nativeAccountId:n.accountId},this.correlationId))==null?void 0:d.homeAccountId;if((f=n.extraParameters)!=null&&f.child_client_id&&e.account.id!==n.accountId)this.logger.info("handleNativeServerResponse: Double broker flow detected, ignoring accountId mismatch");else if(o!==s&&e.account.id!==n.accountId)throw qx(l6);const c=await this.getDiscoveredAuthority({requestAuthority:n.authority}),l=bT(this.browserStorage,c,o,ss,this.correlationId,i,e.client_info,void 0,i.tid,void 0,e.account.id,this.logger);e.expires_in=Number(e.expires_in);const u=await this.generateAuthenticationResult(e,n,i,l,c.canonicalAuthority,r);return await this.cacheAccount(l,this.correlationId),await this.cacheNativeTokens(e,n,o,i,e.access_token,u.tenantId,r),u}createHomeAccountIdentifier(e,n){return ms.generateHomeAccountId(e.client_info||we.EMPTY_STRING,qo.Default,this.logger,this.browserCrypto,n)}generateScopes(e,n){return n?Er.fromString(n):Er.fromString(e)}async generatePopAccessToken(e,n){if(n.tokenType===xn.POP&&n.signPopToken){if(e.shr)return this.logger.trace("handleNativeServerResponse: SHR is enabled in native layer"),e.shr;const r=new cf(this.browserCrypto),i={resourceRequestMethod:n.resourceRequestMethod,resourceRequestUri:n.resourceRequestUri,shrClaims:n.shrClaims,shrNonce:n.shrNonce};if(!n.keyId)throw Te(qN);return r.signPopToken(e.access_token,n.keyId,i)}else return e.access_token}async generateAuthenticationResult(e,n,r,i,o,s){const c=this.addTelemetryFromNativeResponse(e.properties.MATS),l=this.generateScopes(n.scope,e.scope),u=e.account.properties||{},d=u.UID||r.oid||r.sub||we.EMPTY_STRING,f=u.TenantId||r.tid||we.EMPTY_STRING,h=rT(i.getAccountInfo(),void 0,r,e.id_token);h.nativeAccountId!==e.account.id&&(h.nativeAccountId=e.account.id);const p=await this.generatePopAccessToken(e,n),v=n.tokenType===xn.POP?xn.POP:xn.BEARER;return{authority:o,uniqueId:d,tenantId:f,scopes:l.asArray(),account:h,idToken:e.id_token,idTokenClaims:r,accessToken:p,fromCache:c?this.isResponseFromCache(c):!1,expiresOn:Pd(s+e.expires_in),tokenType:v,correlationId:this.correlationId,state:e.state,fromNativeBroker:!0}}async cacheAccount(e,n){await this.browserStorage.setAccount(e,this.correlationId),this.browserStorage.removeAccountContext(e.getAccountInfo(),n)}cacheNativeTokens(e,n,r,i,o,s,c){const l=pw(r,n.authority,e.id_token||"",n.clientId,i.tid||""),u=n.tokenType===xn.POP?we.SHR_NONCE_VALIDITY:(typeof e.expires_in=="string"?parseInt(e.expires_in,10):e.expires_in)||0,d=c+u,f=this.generateScopes(e.scope,n.scope),h=mw(r,n.authority,o,n.clientId,i.tid||s,f.printScopes(),d,0,ss,void 0,n.tokenType,void 0,n.keyId),p={idToken:l,accessToken:h};return this.nativeStorageManager.saveCacheRecord(p,this.correlationId,n.storeInCache)}getExpiresInValue(e,n){return e===xn.POP?we.SHR_NONCE_VALIDITY:(typeof n=="string"?parseInt(n,10):n)||0}addTelemetryFromNativeResponse(e){const n=this.getMATSFromResponse(e);return n?(this.performanceClient.addFields({extensionId:this.platformAuthProvider.getExtensionId(),extensionVersion:this.platformAuthProvider.getExtensionVersion(),matsBrokerVersion:n.broker_version,matsAccountJoinOnStart:n.account_join_on_start,matsAccountJoinOnEnd:n.account_join_on_end,matsDeviceJoin:n.device_join,matsPromptBehavior:n.prompt_behavior,matsApiErrorCode:n.api_error_code,matsUiVisible:n.ui_visible,matsSilentCode:n.silent_code,matsSilentBiSubCode:n.silent_bi_sub_code,matsSilentMessage:n.silent_message,matsSilentStatus:n.silent_status,matsHttpStatus:n.http_status,matsHttpEventCount:n.http_event_count},this.correlationId),n):null}getMATSFromResponse(e){if(e)try{return JSON.parse(e)}catch{this.logger.error("NativeInteractionClient - Error parsing MATS telemetry, returning null instead")}return null}isResponseFromCache(e){return typeof e.is_cached>"u"?(this.logger.verbose("NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false."),!1):!!e.is_cached}async initializeNativeRequest(e){this.logger.trace("NativeInteractionClient - initializeNativeRequest called");const n=await this.getCanonicalAuthority(e),{scopes:r,...i}=e,o=new Er(r||[]);o.appendScopes(Fg);const s={...i,accountId:this.accountId,clientId:this.config.auth.clientId,authority:n.urlString,scope:o.printScopes(),redirectUri:this.getRedirectUri(e.redirectUri),prompt:this.getPrompt(e.prompt),correlationId:this.correlationId,tokenType:e.authenticationScheme,windowTitleSubstring:document.title,extraParameters:{...e.extraQueryParameters,...e.tokenQueryParameters},extendedExpiryToken:!1,keyId:e.popKid};if(s.signPopToken&&e.popKid)throw Ze(H3);if(this.handleExtraBrokerParams(s),s.extraParameters=s.extraParameters||{},s.extraParameters.telemetry=wo.MATS_TELEMETRY,e.authenticationScheme===xn.POP){const c={resourceRequestUri:e.resourceRequestUri,resourceRequestMethod:e.resourceRequestMethod,shrClaims:e.shrClaims,shrNonce:e.shrNonce},l=new cf(this.browserCrypto);let u;if(s.keyId)u=this.browserCrypto.base64UrlEncode(JSON.stringify({kid:s.keyId})),s.signPopToken=!1;else{const d=await be(l.generateCnf.bind(l),W.PopTokenGenerateCnf,this.logger,this.performanceClient,e.correlationId)(c,this.logger);u=d.reqCnfString,s.keyId=d.kid,s.signPopToken=!0}s.reqCnf=u}return this.addRequestSKUs(s),s}async getCanonicalAuthority(e){const n=e.authority||this.config.auth.authority;e.account&&await this.getDiscoveredAuthority({requestAuthority:n,requestAzureCloudOptions:e.azureCloudOptions,account:e.account});const r=new sn(n);return r.validateAsUri(),r}getPrompt(e){switch(this.apiId){case Cn.ssoSilent:case Cn.acquireTokenSilent_silentFlow:return this.logger.trace("initializeNativeRequest: silent request sets prompt to none"),gi.NONE}if(!e){this.logger.trace("initializeNativeRequest: prompt was not provided");return}switch(e){case gi.NONE:case gi.CONSENT:case gi.LOGIN:return this.logger.trace("initializeNativeRequest: prompt is compatible with native flow"),e;default:throw this.logger.trace(`initializeNativeRequest: prompt = ${e} is not compatible with native flow`),Ze(U3)}}handleExtraBrokerParams(e){var o;const n=e.extraParameters&&e.extraParameters.hasOwnProperty(Lx)&&e.extraParameters.hasOwnProperty(Fx)&&e.extraParameters.hasOwnProperty(yu);if(!e.embeddedClientId&&!n)return;let r="";const i=e.redirectUri;e.embeddedClientId?(e.redirectUri=this.config.auth.redirectUri,r=e.embeddedClientId):e.extraParameters&&(e.redirectUri=e.extraParameters[Fx],r=e.extraParameters[yu]),e.extraParameters={child_client_id:r,child_redirect_uri:i},(o=this.performanceClient)==null||o.addFields({embeddedClientId:r,embeddedRedirectUri:i},e.correlationId)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function UT(t,e,n,r,i){const o=Hie({...t.auth,authority:e},n,r,i);if(fT(o,{sku:Ti.MSAL_SKU,version:bu,os:"",cpu:""}),t.auth.protocolMode!==Li.OIDC&&hT(o,t.telemetry.application),n.platformBroker&&(sie(o),n.authenticationScheme===xn.POP)){const s=new Va(r,i),c=new cf(s);let l;n.popKid?l=s.encodeKid(n.popKid):l=(await be(c.generateCnf.bind(c),W.PopTokenGenerateCnf,r,i,n.correlationId)(n,r)).reqCnfString,mT(o,l)}return dw(o,n.correlationId,i),o}async function zT(t,e,n,r,i){if(!n.codeChallenge)throw jn(ZN);const o=await be(UT,W.GetStandardParams,r,i,n.correlationId)(t,e,n,r,i);return sT(o,UN.CODE),QU(o,n.codeChallenge,we.S256_CODE_CHALLENGE_METHOD),Vc(o,n.extraQueryParameters||{}),wT(e,o,t.auth.encodeExtraQueryParams,n.extraQueryParameters)}async function HT(t,e,n,r,i,o){if(!r.earJwk)throw Ze(AT);const s=await UT(e,n,r,i,o);sT(s,UN.IDTOKEN_TOKEN_REFRESHTOKEN),vie(s,r.earJwk);const c=new Map;Vc(c,r.extraQueryParameters||{});const l=wT(n,c,e.auth.encodeExtraQueryParams,r.extraQueryParameters);return d6(t,l,s)}async function GT(t,e,n,r,i,o){const s=await UT(e,n,r,i,o);sT(s,UN.CODE),QU(s,r.codeChallenge,r.codeChallengeMethod||we.S256_CODE_CHALLENGE_METHOD),yie(s,r.authorizePostBodyParameters||{});const c=new Map;Vc(c,r.extraQueryParameters||{});const l=wT(n,c,e.auth.encodeExtraQueryParams,r.extraQueryParameters);return d6(t,l,s)}function d6(t,e,n){const r=t.createElement("form");return r.method="post",r.action=e,n.forEach((i,o)=>{const s=t.createElement("input");s.hidden=!0,s.name=o,s.value=i,r.appendChild(s)}),t.body.appendChild(r),r}async function f6(t,e,n,r,i,o,s,c,l,u){if(c.verbose("Account id found, calling WAM for token"),!u)throw Ze(TT);const d=new Va(c,l),f=new My(r,i,d,c,s,r.system.navigationClient,n,l,u,e,o,t.correlationId),{userRequestState:h}=Jf.parseRequestState(d,t.state);return be(f.acquireToken.bind(f),W.NativeInteractionClientAcquireToken,c,l,t.correlationId)({...t,state:h,prompt:void 0})}async function Yx(t,e,n,r,i,o,s,c,l,u,d,f){if(Ds.removeThrottle(s,i.auth.clientId,t),e.accountId)return be(f6,W.HandleResponsePlatformBroker,u,d,t.correlationId)(t,e.accountId,r,i,s,c,l,u,d,f);const h={...t,code:e.code||"",codeVerifier:n},p=new c6(o,s,h,u,d);return await be(p.handleCodeResponse.bind(p),W.HandleCodeResponse,u,d,t.correlationId)(e,t)}async function VT(t,e,n,r,i,o,s,c,l,u,d){if(Ds.removeThrottle(o,r.auth.clientId,t),h3(e,t.state),!e.ear_jwe)throw Ze(v3);if(!t.earJwk)throw Ze(AT);const f=JSON.parse(await be(yoe,W.DecryptEarResponse,l,u,t.correlationId)(t.earJwk,e.ear_jwe));if(f.accountId)return be(f6,W.HandleResponsePlatformBroker,l,u,t.correlationId)(t,f.accountId,n,r,o,s,c,l,u,d);const h=new xu(r.auth.clientId,o,new Va(l,u),l,null,null,u);h.validateTokenResponse(f);const p={code:"",state:t.state,nonce:t.nonce,client_info:f.client_info,cloud_graph_host_name:f.cloud_graph_host_name,cloud_instance_host_name:f.cloud_instance_host_name,cloud_instance_name:f.cloud_instance_name,msgraph_host:f.msgraph_host};return await be(h.handleServerTokenResponse.bind(h),W.HandleServerTokenResponse,l,u,t.correlationId)(f,i,Fi(),t,p,void 0,void 0,void 0,void 0)}/*! @azure/msal-browser v4.19.0 2025-08-05 */const dse=32;async function Cw(t,e,n){t.addQueueMeasurement(W.GeneratePkceCodes,n);const r=no(fse,W.GenerateCodeVerifier,e,t,n)(t,e,n),i=await be(hse,W.GenerateCodeChallengeFromVerifier,e,t,n)(r,t,e,n);return{verifier:r,challenge:i}}function fse(t,e,n){try{const r=new Uint8Array(dse);return no(hoe,W.GetRandomValues,e,t,n)(r),sl(r)}catch{throw Ze(_T)}}async function hse(t,e,n,r){e.addQueueMeasurement(W.GenerateCodeChallengeFromVerifier,r);try{const i=await be(Q3,W.Sha256Digest,n,e,r)(t,e,r);return sl(new Uint8Array(i))}catch{throw Ze(_T)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Qx{constructor(e,n,r,i){this.logger=e,this.handshakeTimeoutMs=n,this.extensionId=i,this.resolvers=new Map,this.handshakeResolvers=new Map,this.messageChannel=new MessageChannel,this.windowListener=this.onWindowMessage.bind(this),this.performanceClient=r,this.handshakeEvent=r.startMeasurement(W.NativeMessageHandlerHandshake),this.platformAuthType=wo.PLATFORM_EXTENSION_PROVIDER}async sendMessage(e){this.logger.trace(this.platformAuthType+" - sendMessage called.");const n={method:Lh.GetToken,request:e},r={channel:wo.CHANNEL_ID,extensionId:this.extensionId,responseId:vs(),body:n};this.logger.trace(this.platformAuthType+" - Sending request to browser extension"),this.logger.tracePii(this.platformAuthType+` - Sending request to browser extension: ${JSON.stringify(r)}`),this.messageChannel.port1.postMessage(r);const i=await new Promise((s,c)=>{this.resolvers.set(r.responseId,{resolve:s,reject:c})});return this.validatePlatformBrokerResponse(i)}static async createProvider(e,n,r){e.trace("PlatformAuthExtensionHandler - createProvider called.");try{const i=new Qx(e,n,r,wo.PREFERRED_EXTENSION_ID);return await i.sendHandshakeRequest(),i}catch{const o=new Qx(e,n,r);return await o.sendHandshakeRequest(),o}}async sendHandshakeRequest(){this.logger.trace(this.platformAuthType+" - sendHandshakeRequest called."),window.addEventListener("message",this.windowListener,!1);const e={channel:wo.CHANNEL_ID,extensionId:this.extensionId,responseId:vs(),body:{method:Lh.HandshakeRequest}};return this.handshakeEvent.add({extensionId:this.extensionId,extensionHandshakeTimeoutMs:this.handshakeTimeoutMs}),this.messageChannel.port1.onmessage=n=>{this.onChannelMessage(n)},window.postMessage(e,window.origin,[this.messageChannel.port2]),new Promise((n,r)=>{this.handshakeResolvers.set(e.responseId,{resolve:n,reject:r}),this.timeoutId=window.setTimeout(()=>{window.removeEventListener("message",this.windowListener,!1),this.messageChannel.port1.close(),this.messageChannel.port2.close(),this.handshakeEvent.end({extensionHandshakeTimedOut:!0,success:!1}),r(Ze(F3)),this.handshakeResolvers.delete(e.responseId)},this.handshakeTimeoutMs)})}onWindowMessage(e){if(this.logger.trace(this.platformAuthType+" - onWindowMessage called"),e.source!==window)return;const n=e.data;if(!(!n.channel||n.channel!==wo.CHANNEL_ID)&&!(n.extensionId&&n.extensionId!==this.extensionId)&&n.body.method===Lh.HandshakeRequest){const r=this.handshakeResolvers.get(n.responseId);if(!r){this.logger.trace(this.platformAuthType+`.onWindowMessage - resolver can't be found for request ${n.responseId}`);return}this.logger.verbose(n.extensionId?`Extension with id: ${n.extensionId} not installed`:"No extension installed"),clearTimeout(this.timeoutId),this.messageChannel.port1.close(),this.messageChannel.port2.close(),window.removeEventListener("message",this.windowListener,!1),this.handshakeEvent.end({success:!1,extensionInstalled:!1}),r.reject(Ze(B3))}}onChannelMessage(e){this.logger.trace(this.platformAuthType+" - onChannelMessage called.");const n=e.data,r=this.resolvers.get(n.responseId),i=this.handshakeResolvers.get(n.responseId);try{const o=n.body.method;if(o===Lh.Response){if(!r)return;const s=n.body.response;if(this.logger.trace(this.platformAuthType+" - Received response from browser extension"),this.logger.tracePii(this.platformAuthType+` - Received response from browser extension: ${JSON.stringify(s)}`),s.status!=="Success")r.reject(qx(s.code,s.description,s.ext));else if(s.result)s.result.code&&s.result.description?r.reject(qx(s.result.code,s.result.description,s.result.ext)):r.resolve(s.result);else throw VA(Ox,"Event does not contain result.");this.resolvers.delete(n.responseId)}else if(o===Lh.HandshakeResponse){if(!i){this.logger.trace(this.platformAuthType+`.onChannelMessage - resolver can't be found for request ${n.responseId}`);return}clearTimeout(this.timeoutId),window.removeEventListener("message",this.windowListener,!1),this.extensionId=n.extensionId,this.extensionVersion=n.body.version,this.logger.verbose(this.platformAuthType+` - Received HandshakeResponse from extension: ${this.extensionId}`),this.handshakeEvent.end({extensionInstalled:!0,success:!0}),i.resolve(),this.handshakeResolvers.delete(n.responseId)}}catch(o){this.logger.error("Error parsing response from WAM Extension"),this.logger.errorPii(`Error parsing response from WAM Extension: ${o}`),this.logger.errorPii(`Unable to parse ${e}`),r?r.reject(o):i&&i.reject(o)}}validatePlatformBrokerResponse(e){if(e.hasOwnProperty("access_token")&&e.hasOwnProperty("id_token")&&e.hasOwnProperty("client_info")&&e.hasOwnProperty("account")&&e.hasOwnProperty("scope")&&e.hasOwnProperty("expires_in"))return e;throw VA(Ox,"Response missing expected properties.")}getExtensionId(){return this.extensionId}getExtensionVersion(){return this.extensionVersion}getExtensionName(){var e;return this.getExtensionId()===wo.PREFERRED_EXTENSION_ID?"chrome":(e=this.getExtensionId())!=null&&e.length?"unknown":void 0}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class KT{constructor(e,n,r){this.logger=e,this.performanceClient=n,this.correlationId=r,this.platformAuthType=wo.PLATFORM_DOM_PROVIDER}static async createProvider(e,n,r){var i;if(e.trace("PlatformAuthDOMHandler: createProvider called"),(i=window.navigator)!=null&&i.platformAuthentication){const o=await window.navigator.platformAuthentication.getSupportedContracts(wo.MICROSOFT_ENTRA_BROKERID);if(o!=null&&o.includes(wo.PLATFORM_DOM_APIS))return e.trace("Platform auth api available in DOM"),new KT(e,n,r)}}getExtensionId(){return wo.MICROSOFT_ENTRA_BROKERID}getExtensionVersion(){return""}getExtensionName(){return wo.DOM_API_NAME}async sendMessage(e){this.logger.trace(this.platformAuthType+" - Sending request to browser DOM API");try{const n=this.initializePlatformDOMRequest(e),r=await window.navigator.platformAuthentication.executeGetToken(n);return this.validatePlatformBrokerResponse(r)}catch(n){throw this.logger.error(this.platformAuthType+" - executeGetToken DOM API error"),n}}initializePlatformDOMRequest(e){this.logger.trace(this.platformAuthType+" - initializeNativeDOMRequest called");const{accountId:n,clientId:r,authority:i,scope:o,redirectUri:s,correlationId:c,state:l,storeInCache:u,embeddedClientId:d,extraParameters:f,...h}=e,p=this.getDOMExtraParams(h);return{accountId:n,brokerId:this.getExtensionId(),authority:i,clientId:r,correlationId:c||this.correlationId,extraParameters:{...f,...p},isSecurityTokenService:!1,redirectUri:s,scope:o,state:l,storeInCache:u,embeddedClientId:d}}validatePlatformBrokerResponse(e){if(e.hasOwnProperty("isSuccess")){if(e.hasOwnProperty("accessToken")&&e.hasOwnProperty("idToken")&&e.hasOwnProperty("clientInfo")&&e.hasOwnProperty("account")&&e.hasOwnProperty("scopes")&&e.hasOwnProperty("expiresIn"))return this.logger.trace(this.platformAuthType+" - platform broker returned successful and valid response"),this.convertToPlatformBrokerResponse(e);if(e.hasOwnProperty("error")){const n=e;if(n.isSuccess===!1&&n.error&&n.error.code)throw this.logger.trace(this.platformAuthType+" - platform broker returned error response"),qx(n.error.code,n.error.description,{error:parseInt(n.error.errorCode),protocol_error:n.error.protocolError,status:n.error.status,properties:n.error.properties})}}throw VA(Ox,"Response missing expected properties.")}convertToPlatformBrokerResponse(e){return this.logger.trace(this.platformAuthType+" - convertToNativeResponse called"),{access_token:e.accessToken,id_token:e.idToken,client_info:e.clientInfo,account:e.account,expires_in:e.expiresIn,scope:e.scopes,state:e.state||"",properties:e.properties||{},extendedLifetimeToken:e.extendedLifetimeToken??!1,shr:e.proofOfPossessionPayload}}getDOMExtraParams(e){return{...Object.entries(e).reduce((i,[o,s])=>(i[o]=String(s),i),{})}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function pse(t,e,n,r){t.trace("getPlatformAuthProvider called",n);const i=mse();t.trace("Has client allowed platform auth via DOM API: "+i);let o;try{i&&(o=await KT.createProvider(t,e,n)),o||(t.trace("Platform auth via DOM API not available, checking for extension"),o=await Qx.createProvider(t,r||i6,e))}catch(s){t.trace("Platform auth not available",s)}return o}function mse(){let t;try{return t=window[Nr.SessionStorage],(t==null?void 0:t.getItem(Roe))==="true"}catch{return!1}}function bm(t,e,n,r){if(e.trace("isPlatformAuthAllowed called"),!t.system.allowPlatformBroker)return e.trace("isPlatformAuthAllowed: allowPlatformBroker is not enabled, returning false"),!1;if(!n)return e.trace("isPlatformAuthAllowed: Platform auth provider is not initialized, returning false"),!1;if(r)switch(r){case xn.BEARER:case xn.POP:return e.trace("isPlatformAuthAllowed: authenticationScheme is supported, returning true"),!0;default:return e.trace("isPlatformAuthAllowed: authenticationScheme is not supported, returning false"),!1}return!0}/*! @azure/msal-browser v4.19.0 2025-08-05 */class gse extends eh{constructor(e,n,r,i,o,s,c,l,u,d){super(e,n,r,i,o,s,c,u,d),this.unloadWindow=this.unloadWindow.bind(this),this.nativeStorage=l,this.eventHandler=o}acquireToken(e,n){let r;try{if(r={popupName:this.generatePopupName(e.scopes||Fg,e.authority||this.config.auth.authority),popupWindowAttributes:e.popupWindowAttributes||{},popupWindowParent:e.popupWindowParent??window},this.performanceClient.addFields({isAsyncPopup:this.config.system.asyncPopups},this.correlationId),this.config.system.asyncPopups)return this.logger.verbose("asyncPopups set to true, acquiring token"),this.acquireTokenPopupAsync(e,r,n);{const o={...e,httpMethod:a6(e,this.config.auth.protocolMode)};return this.logger.verbose("asyncPopup set to false, opening popup before acquiring token"),r.popup=this.openSizedPopup("about:blank",r),this.acquireTokenPopupAsync(o,r,n)}}catch(i){return Promise.reject(i)}}logout(e){try{this.logger.verbose("logoutPopup called");const n=this.initializeLogoutRequest(e),r={popupName:this.generateLogoutPopupName(n),popupWindowAttributes:(e==null?void 0:e.popupWindowAttributes)||{},popupWindowParent:(e==null?void 0:e.popupWindowParent)??window},i=e&&e.authority,o=e&&e.mainWindowRedirectUri;return this.config.system.asyncPopups?(this.logger.verbose("asyncPopups set to true"),this.logoutPopupAsync(n,r,i,o)):(this.logger.verbose("asyncPopup set to false, opening popup"),r.popup=this.openSizedPopup("about:blank",r),this.logoutPopupAsync(n,r,i,o))}catch(n){return Promise.reject(n)}}async acquireTokenPopupAsync(e,n,r){this.logger.verbose("acquireTokenPopupAsync called");const i=await be(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,this.correlationId)(e,Ct.Popup);n.popup&&r6(i.authority);const o=bm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme);return i.platformBroker=o,this.config.auth.protocolMode===Li.EAR?this.executeEarFlow(i,n):this.executeCodeFlow(i,n,r)}async executeCodeFlow(e,n,r){var l;const i=e.correlationId,o=this.initializeServerTelemetryManager(Cn.acquireTokenPopup),s=r||await be(Cw,W.GeneratePkceCodes,this.logger,this.performanceClient,i)(this.performanceClient,this.logger,i),c={...e,codeChallenge:s.challenge};try{const u=await be(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,i)({serverTelemetryManager:o,requestAuthority:c.authority,requestAzureCloudOptions:c.azureCloudOptions,requestExtraQueryParameters:c.extraQueryParameters,account:c.account});if(c.httpMethod===zl.POST)return await this.executeCodeFlowWithPost(c,n,u,s.verifier);{const d=await be(zT,W.GetAuthCodeUrl,this.logger,this.performanceClient,i)(this.config,u.authority,c,this.logger,this.performanceClient),f=this.initiateAuthRequest(d,n);this.eventHandler.emitEvent(at.POPUP_OPENED,Ct.Popup,{popupWindow:f},null);const h=await this.monitorPopupForHash(f,n.popupWindowParent),p=no(Np,W.DeserializeResponse,this.logger,this.performanceClient,this.correlationId)(h,this.config.auth.OIDCOptions.serverResponseType,this.logger);return await be(Yx,W.HandleResponseCode,this.logger,this.performanceClient,i)(e,p,s.verifier,Cn.acquireTokenPopup,this.config,u,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}}catch(u){throw(l=n.popup)==null||l.close(),u instanceof _n&&(u.setCorrelationId(this.correlationId),o.cacheFailedRequest(u)),u}}async executeEarFlow(e,n){const r=e.correlationId,i=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,r)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),o=await be(RT,W.GenerateEarKey,this.logger,this.performanceClient,r)(),s={...e,earJwk:o},c=n.popup||this.openPopup("about:blank",n);(await HT(c.document,this.config,i,s,this.logger,this.performanceClient)).submit();const u=await be(this.monitorPopupForHash.bind(this),W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,r)(c,n.popupWindowParent),d=no(Np,W.DeserializeResponse,this.logger,this.performanceClient,this.correlationId)(u,this.config.auth.OIDCOptions.serverResponseType,this.logger);return be(VT,W.HandleResponseEar,this.logger,this.performanceClient,r)(s,d,Cn.acquireTokenPopup,this.config,i,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}async executeCodeFlowWithPost(e,n,r,i){const o=e.correlationId,s=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,o)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),c=n.popup||this.openPopup("about:blank",n);(await GT(c.document,this.config,s,e,this.logger,this.performanceClient)).submit();const u=await be(this.monitorPopupForHash.bind(this),W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,o)(c,n.popupWindowParent),d=no(Np,W.DeserializeResponse,this.logger,this.performanceClient,this.correlationId)(u,this.config.auth.OIDCOptions.serverResponseType,this.logger);return be(Yx,W.HandleResponseCode,this.logger,this.performanceClient,o)(e,d,i,Cn.acquireTokenPopup,this.config,r,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}async logoutPopupAsync(e,n,r,i){var s,c,l;this.logger.verbose("logoutPopupAsync called"),this.eventHandler.emitEvent(at.LOGOUT_START,Ct.Popup,e);const o=this.initializeServerTelemetryManager(Cn.logoutPopup);try{await this.clearCacheOnLogout(this.correlationId,e.account);const u=await be(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:o,requestAuthority:r,account:e.account||void 0});try{u.authority.endSessionEndpoint}catch{if((s=e.account)!=null&&s.homeAccountId&&e.postLogoutRedirectUri&&u.authority.protocolMode===Li.OIDC){if(this.eventHandler.emitEvent(at.LOGOUT_SUCCESS,Ct.Popup,e),i){const h={apiId:Cn.logoutPopup,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},p=sn.getAbsoluteUrl(i,_a());await this.navigationClient.navigateInternal(p,h)}(c=n.popup)==null||c.close();return}}const d=u.getLogoutUri(e);this.eventHandler.emitEvent(at.LOGOUT_SUCCESS,Ct.Popup,e);const f=this.openPopup(d,n);if(this.eventHandler.emitEvent(at.POPUP_OPENED,Ct.Popup,{popupWindow:f},null),await this.monitorPopupForHash(f,n.popupWindowParent).catch(()=>{}),i){const h={apiId:Cn.logoutPopup,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},p=sn.getAbsoluteUrl(i,_a());this.logger.verbose("Redirecting main window to url specified in the request"),this.logger.verbosePii(`Redirecting main window to: ${p}`),await this.navigationClient.navigateInternal(p,h)}else this.logger.verbose("No main window navigation requested")}catch(u){throw(l=n.popup)==null||l.close(),u instanceof _n&&(u.setCorrelationId(this.correlationId),o.cacheFailedRequest(u)),this.eventHandler.emitEvent(at.LOGOUT_FAILURE,Ct.Popup,null,u),this.eventHandler.emitEvent(at.LOGOUT_END,Ct.Popup),u}this.eventHandler.emitEvent(at.LOGOUT_END,Ct.Popup)}initiateAuthRequest(e,n){if(e)return this.logger.infoPii(`Navigate to: ${e}`),this.openPopup(e,n);throw this.logger.error("Navigate url is empty"),Ze(xw)}monitorPopupForHash(e,n){return new Promise((r,i)=>{this.logger.verbose("PopupHandler.monitorPopupForHash - polling started");const o=setInterval(()=>{if(e.closed){this.logger.error("PopupHandler.monitorPopupForHash - window closed"),clearInterval(o),i(Ze(vm));return}let s="";try{s=e.location.href}catch{}if(!s||s==="about:blank")return;clearInterval(o);let c="";const l=this.config.auth.OIDCOptions.serverResponseType;e&&(l===lw.QUERY?c=e.location.search:c=e.location.hash),this.logger.verbose("PopupHandler.monitorPopupForHash - popup window is on same origin as caller"),r(c)},this.config.system.pollIntervalMilliseconds)}).finally(()=>{this.cleanPopup(e,n)})}openPopup(e,n){try{let r;if(n.popup?(r=n.popup,this.logger.verbosePii(`Navigating popup window to: ${e}`),r.location.assign(e)):typeof n.popup>"u"&&(this.logger.verbosePii(`Opening popup window to: ${e}`),r=this.openSizedPopup(e,n)),!r)throw Ze(_3);return r.focus&&r.focus(),this.currentWindow=r,n.popupWindowParent.addEventListener("beforeunload",this.unloadWindow),r}catch(r){throw this.logger.error("error opening popup "+r.message),Ze(C3)}}openSizedPopup(e,{popupName:n,popupWindowAttributes:r,popupWindowParent:i}){var p,v,m,y;const o=i.screenLeft?i.screenLeft:i.screenX,s=i.screenTop?i.screenTop:i.screenY,c=i.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,l=i.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;let u=(p=r.popupSize)==null?void 0:p.width,d=(v=r.popupSize)==null?void 0:v.height,f=(m=r.popupPosition)==null?void 0:m.top,h=(y=r.popupPosition)==null?void 0:y.left;return(!u||u<0||u>c)&&(this.logger.verbose("Default popup window width used. Window width not configured or invalid."),u=Ti.POPUP_WIDTH),(!d||d<0||d>l)&&(this.logger.verbose("Default popup window height used. Window height not configured or invalid."),d=Ti.POPUP_HEIGHT),(!f||f<0||f>l)&&(this.logger.verbose("Default popup window top position used. Window top not configured or invalid."),f=Math.max(0,l/2-Ti.POPUP_HEIGHT/2+s)),(!h||h<0||h>c)&&(this.logger.verbose("Default popup window left position used. Window left not configured or invalid."),h=Math.max(0,c/2-Ti.POPUP_WIDTH/2+o)),i.open(e,n,`width=${u}, height=${d}, top=${f}, left=${h}, scrollbars=yes`)}unloadWindow(e){this.currentWindow&&this.currentWindow.close(),e.preventDefault()}cleanPopup(e,n){e.close(),n.removeEventListener("beforeunload",this.unloadWindow)}generatePopupName(e,n){return`${Ti.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${e.join("-")}.${n}.${this.correlationId}`}generateLogoutPopupName(e){const n=e.account&&e.account.homeAccountId;return`${Ti.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${n}.${this.correlationId}`}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function vse(){if(typeof window>"u"||typeof window.performance>"u"||typeof window.performance.getEntriesByType!="function")return;const t=window.performance.getEntriesByType("navigation"),e=t.length?t[0]:void 0;return e==null?void 0:e.type}class yse extends eh{constructor(e,n,r,i,o,s,c,l,u,d){super(e,n,r,i,o,s,c,u,d),this.nativeStorage=l}async acquireToken(e){const n=await be(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,this.correlationId)(e,Ct.Redirect);n.platformBroker=bm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme);const r=o=>{o.persisted&&(this.logger.verbose("Page was restored from back/forward cache. Clearing temporary cache."),this.browserStorage.resetRequestCache(),this.eventHandler.emitEvent(at.RESTORE_FROM_BFCACHE,Ct.Redirect))},i=this.getRedirectStartPage(e.redirectStartPage);this.logger.verbosePii(`Redirect start page: ${i}`),this.browserStorage.setTemporaryCache(pr.ORIGIN_URI,i,!0),window.addEventListener("pageshow",r);try{this.config.auth.protocolMode===Li.EAR?await this.executeEarFlow(n):await this.executeCodeFlow(n,e.onRedirectNavigate)}catch(o){throw o instanceof _n&&o.setCorrelationId(this.correlationId),window.removeEventListener("pageshow",r),o}}async executeCodeFlow(e,n){const r=e.correlationId,i=this.initializeServerTelemetryManager(Cn.acquireTokenRedirect),o=await be(Cw,W.GeneratePkceCodes,this.logger,this.performanceClient,r)(this.performanceClient,this.logger,r),s={...e,codeChallenge:o.challenge};this.browserStorage.cacheAuthorizeRequest(s,o.verifier);try{if(s.httpMethod===zl.POST)return await this.executeCodeFlowWithPost(s);{const c=await be(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:i,requestAuthority:s.authority,requestAzureCloudOptions:s.azureCloudOptions,requestExtraQueryParameters:s.extraQueryParameters,account:s.account}),l=await be(zT,W.GetAuthCodeUrl,this.logger,this.performanceClient,e.correlationId)(this.config,c.authority,s,this.logger,this.performanceClient);return await this.initiateAuthRequest(l,n)}}catch(c){throw c instanceof _n&&(c.setCorrelationId(this.correlationId),i.cacheFailedRequest(c)),c}}async executeEarFlow(e){const n=e.correlationId,r=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),i=await be(RT,W.GenerateEarKey,this.logger,this.performanceClient,n)(),o={...e,earJwk:i};return this.browserStorage.cacheAuthorizeRequest(o),(await HT(document,this.config,r,o,this.logger,this.performanceClient)).submit(),new Promise((c,l)=>{setTimeout(()=>{l(Ze(Vx,"failed_to_redirect"))},this.config.system.redirectNavigationTimeout)})}async executeCodeFlowWithPost(e){const n=e.correlationId,r=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account});return this.browserStorage.cacheAuthorizeRequest(e),(await GT(document,this.config,r,e,this.logger,this.performanceClient)).submit(),new Promise((o,s)=>{setTimeout(()=>{s(Ze(Vx,"failed_to_redirect"))},this.config.system.redirectNavigationTimeout)})}async handleRedirectPromise(e="",n,r,i){const o=this.initializeServerTelemetryManager(Cn.handleRedirectPromise);try{const[s,c]=this.getRedirectResponse(e||"");if(!s)return this.logger.info("handleRedirectPromise did not detect a response as a result of a redirect. Cleaning temporary cache."),this.browserStorage.resetRequestCache(),vse()!=="back_forward"?i.event.errorCode="no_server_response":this.logger.verbose("Back navigation event detected. Muting no_server_response error"),null;const l=this.browserStorage.getTemporaryCache(pr.ORIGIN_URI,!0)||we.EMPTY_STRING,u=sn.removeHashFromUrl(l),d=sn.removeHashFromUrl(window.location.href);if(u===d&&this.config.auth.navigateToLoginRequestUrl)return this.logger.verbose("Current page is loginRequestUrl, handling response"),l.indexOf("#")>-1&&boe(l),await this.handleResponse(s,n,r,o);if(this.config.auth.navigateToLoginRequestUrl){if(!DT()||this.config.system.allowRedirectInIframe){this.browserStorage.setTemporaryCache(pr.URL_HASH,c,!0);const f={apiId:Cn.handleRedirectPromise,timeout:this.config.system.redirectNavigationTimeout,noHistory:!0};let h=!0;if(!l||l==="null"){const p=Soe();this.browserStorage.setTemporaryCache(pr.ORIGIN_URI,p,!0),this.logger.warning("Unable to get valid login request url from cache, redirecting to home page"),h=await this.navigationClient.navigateInternal(p,f)}else this.logger.verbose(`Navigating to loginRequestUrl: ${l}`),h=await this.navigationClient.navigateInternal(l,f);if(!h)return await this.handleResponse(s,n,r,o)}}else return this.logger.verbose("NavigateToLoginRequestUrl set to false, handling response"),await this.handleResponse(s,n,r,o);return null}catch(s){throw s instanceof _n&&(s.setCorrelationId(this.correlationId),o.cacheFailedRequest(s)),s}}getRedirectResponse(e){this.logger.verbose("getRedirectResponseHash called");let n=e;n||(this.config.auth.OIDCOptions.serverResponseType===lw.QUERY?n=window.location.search:n=window.location.hash);let r=Rx(n);if(r){try{ese(r,this.browserCrypto,Ct.Redirect)}catch(o){return o instanceof _n&&this.logger.error(`Interaction type validation failed due to ${o.errorCode}: ${o.errorMessage}`),[null,""]}return e6(window),this.logger.verbose("Hash contains known properties, returning response hash"),[r,n]}const i=this.browserStorage.getTemporaryCache(pr.URL_HASH,!0);return this.browserStorage.removeItem(this.browserStorage.generateCacheKey(pr.URL_HASH)),i&&(r=Rx(i),r)?(this.logger.verbose("Hash does not contain known properties, returning cached hash"),[r,i]):[null,""]}async handleResponse(e,n,r,i){if(!e.state)throw Ze(jT);if(e.ear_jwe){const c=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n.correlationId)({requestAuthority:n.authority,requestAzureCloudOptions:n.azureCloudOptions,requestExtraQueryParameters:n.extraQueryParameters,account:n.account});return be(VT,W.HandleResponseEar,this.logger,this.performanceClient,n.correlationId)(n,e,Cn.acquireTokenRedirect,this.config,c,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}const s=await be(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:i,requestAuthority:n.authority});return be(Yx,W.HandleResponseCode,this.logger,this.performanceClient,n.correlationId)(n,e,r,Cn.acquireTokenRedirect,this.config,s,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}async initiateAuthRequest(e,n){if(this.logger.verbose("RedirectHandler.initiateAuthRequest called"),e){this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${e}`);const r={apiId:Cn.acquireTokenRedirect,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},i=n||this.config.auth.onRedirectNavigate;if(typeof i=="function")if(this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback"),i(e)!==!1){this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating"),await this.navigationClient.navigateExternal(e,r);return}else{this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");return}else{this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url"),await this.navigationClient.navigateExternal(e,r);return}}else throw this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty"),Ze(xw)}async logout(e){var i;this.logger.verbose("logoutRedirect called");const n=this.initializeLogoutRequest(e),r=this.initializeServerTelemetryManager(Cn.logout);try{this.eventHandler.emitEvent(at.LOGOUT_START,Ct.Redirect,e),await this.clearCacheOnLogout(this.correlationId,n.account);const o={apiId:Cn.logout,timeout:this.config.system.redirectNavigationTimeout,noHistory:!1},s=await be(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:r,requestAuthority:e&&e.authority,requestExtraQueryParameters:e==null?void 0:e.extraQueryParameters,account:e&&e.account||void 0});if(s.authority.protocolMode===Li.OIDC)try{s.authority.endSessionEndpoint}catch{if((i=n.account)!=null&&i.homeAccountId){this.eventHandler.emitEvent(at.LOGOUT_SUCCESS,Ct.Redirect,n);return}}const c=s.getLogoutUri(n);if(this.eventHandler.emitEvent(at.LOGOUT_SUCCESS,Ct.Redirect,n),e&&typeof e.onRedirectNavigate=="function")if(e.onRedirectNavigate(c)!==!1){this.logger.verbose("Logout onRedirectNavigate did not return false, navigating"),this.browserStorage.getInteractionInProgress()||this.browserStorage.setInteractionInProgress(!0,yc.SIGNOUT),await this.navigationClient.navigateExternal(c,o);return}else this.browserStorage.setInteractionInProgress(!1),this.logger.verbose("Logout onRedirectNavigate returned false, stopping navigation");else{this.browserStorage.getInteractionInProgress()||this.browserStorage.setInteractionInProgress(!0,yc.SIGNOUT),await this.navigationClient.navigateExternal(c,o);return}}catch(o){throw o instanceof _n&&(o.setCorrelationId(this.correlationId),r.cacheFailedRequest(o)),this.eventHandler.emitEvent(at.LOGOUT_FAILURE,Ct.Redirect,null,o),this.eventHandler.emitEvent(at.LOGOUT_END,Ct.Redirect),o}this.eventHandler.emitEvent(at.LOGOUT_END,Ct.Redirect)}getRedirectStartPage(e){const n=e||window.location.href;return sn.getAbsoluteUrl(n,_a())}}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function xse(t,e,n,r,i){if(e.addQueueMeasurement(W.SilentHandlerInitiateAuthRequest,r),!t)throw n.info("Navigate url is empty"),Ze(xw);return i?be(Sse,W.SilentHandlerLoadFrame,n,e,r)(t,i,e,r):no(Cse,W.SilentHandlerLoadFrameSync,n,e,r)(t)}async function bse(t,e,n,r,i){const o=_w();if(!o.contentDocument)throw"No document associated with iframe!";return(await GT(o.contentDocument,t,e,n,r,i)).submit(),o}async function wse(t,e,n,r,i){const o=_w();if(!o.contentDocument)throw"No document associated with iframe!";return(await HT(o.contentDocument,t,e,n,r,i)).submit(),o}async function n2(t,e,n,r,i,o,s){return r.addQueueMeasurement(W.SilentHandlerMonitorIframeForHash,o),new Promise((c,l)=>{e{window.clearInterval(d),l(Ze(A3))},e),d=window.setInterval(()=>{let f="";const h=t.contentWindow;try{f=h?h.location.href:""}catch{}if(!f||f==="about:blank")return;let p="";h&&(s===lw.QUERY?p=h.location.search:p=h.location.hash),window.clearTimeout(u),window.clearInterval(d),c(p)},n)}).finally(()=>{no(_se,W.RemoveHiddenIframe,i,r,o)(t)})}function Sse(t,e,n,r){return n.addQueueMeasurement(W.SilentHandlerLoadFrame,r),new Promise((i,o)=>{const s=_w();window.setTimeout(()=>{if(!s){o("Unable to load iframe");return}s.src=t,i(s)},e)})}function Cse(t){const e=_w();return e.src=t,e}function _w(){const t=document.createElement("iframe");return t.className="msalSilentIframe",t.style.visibility="hidden",t.style.position="absolute",t.style.width=t.style.height="0",t.style.border="0",t.setAttribute("sandbox","allow-scripts allow-same-origin allow-forms"),document.body.appendChild(t),t}function _se(t){document.body===t.parentNode&&document.body.removeChild(t)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Ase extends eh{constructor(e,n,r,i,o,s,c,l,u,d,f){super(e,n,r,i,o,s,l,d,f),this.apiId=c,this.nativeStorage=u}async acquireToken(e){this.performanceClient.addQueueMeasurement(W.SilentIframeClientAcquireToken,e.correlationId),!e.loginHint&&!e.sid&&(!e.account||!e.account.username)&&this.logger.warning("No user hint provided. The authorization server may need more information to complete this request.");const n={...e};n.prompt?n.prompt!==gi.NONE&&n.prompt!==gi.NO_SESSION&&(this.logger.warning(`SilentIframeClient. Replacing invalid prompt ${n.prompt} with ${gi.NONE}`),n.prompt=gi.NONE):n.prompt=gi.NONE;const r=await be(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,e.correlationId)(n,Ct.Silent);return r.platformBroker=bm(this.config,this.logger,this.platformAuthProvider,r.authenticationScheme),r6(r.authority),this.config.auth.protocolMode===Li.EAR?this.executeEarFlow(r):this.executeCodeFlow(r)}async executeCodeFlow(e){let n;const r=this.initializeServerTelemetryManager(this.apiId);try{return n=await be(this.createAuthCodeClient.bind(this),W.StandardInteractionClientCreateAuthCodeClient,this.logger,this.performanceClient,e.correlationId)({serverTelemetryManager:r,requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),await be(this.silentTokenHelper.bind(this),W.SilentIframeClientTokenHelper,this.logger,this.performanceClient,e.correlationId)(n,e)}catch(i){if(i instanceof _n&&(i.setCorrelationId(this.correlationId),r.cacheFailedRequest(i)),!n||!(i instanceof _n)||i.errorCode!==Ti.INVALID_GRANT_ERROR)throw i;return this.performanceClient.addFields({retryError:i.errorCode},this.correlationId),await be(this.silentTokenHelper.bind(this),W.SilentIframeClientTokenHelper,this.logger,this.performanceClient,this.correlationId)(n,e)}}async executeEarFlow(e){const n=e.correlationId,r=await be(this.getDiscoveredAuthority.bind(this),W.StandardInteractionClientGetDiscoveredAuthority,this.logger,this.performanceClient,n)({requestAuthority:e.authority,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account}),i=await be(RT,W.GenerateEarKey,this.logger,this.performanceClient,n)(),o={...e,earJwk:i},s=await be(wse,W.SilentHandlerInitiateAuthRequest,this.logger,this.performanceClient,n)(this.config,r,o,this.logger,this.performanceClient),c=this.config.auth.OIDCOptions.serverResponseType,l=await be(n2,W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,n)(s,this.config.system.iframeHashTimeout,this.config.system.pollIntervalMilliseconds,this.performanceClient,this.logger,n,c),u=no(Np,W.DeserializeResponse,this.logger,this.performanceClient,n)(l,c,this.logger);return be(VT,W.HandleResponseEar,this.logger,this.performanceClient,n)(o,u,this.apiId,this.config,r,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}logout(){return Promise.reject(Ze(bw))}async silentTokenHelper(e,n){const r=n.correlationId;this.performanceClient.addQueueMeasurement(W.SilentIframeClientTokenHelper,r);const i=await be(Cw,W.GeneratePkceCodes,this.logger,this.performanceClient,r)(this.performanceClient,this.logger,r),o={...n,codeChallenge:i.challenge};let s;if(n.httpMethod===zl.POST)s=await be(bse,W.SilentHandlerInitiateAuthRequest,this.logger,this.performanceClient,r)(this.config,e.authority,o,this.logger,this.performanceClient);else{const d=await be(zT,W.GetAuthCodeUrl,this.logger,this.performanceClient,r)(this.config,e.authority,o,this.logger,this.performanceClient);s=await be(xse,W.SilentHandlerInitiateAuthRequest,this.logger,this.performanceClient,r)(d,this.performanceClient,this.logger,r,this.config.system.navigateFrameWait)}const c=this.config.auth.OIDCOptions.serverResponseType,l=await be(n2,W.SilentHandlerMonitorIframeForHash,this.logger,this.performanceClient,r)(s,this.config.system.iframeHashTimeout,this.config.system.pollIntervalMilliseconds,this.performanceClient,this.logger,r,c),u=no(Np,W.DeserializeResponse,this.logger,this.performanceClient,r)(l,c,this.logger);return be(Yx,W.HandleResponseCode,this.logger,this.performanceClient,r)(n,u,i.verifier,this.apiId,this.config,e,this.browserStorage,this.nativeStorage,this.eventHandler,this.logger,this.performanceClient,this.platformAuthProvider)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class jse extends eh{async acquireToken(e){this.performanceClient.addQueueMeasurement(W.SilentRefreshClientAcquireToken,e.correlationId);const n=await be(BT,W.InitializeBaseRequest,this.logger,this.performanceClient,e.correlationId)(e,this.config,this.performanceClient,this.logger),r={...e,...n};e.redirectUri&&(r.redirectUri=this.getRedirectUri(e.redirectUri));const i=this.initializeServerTelemetryManager(Cn.acquireTokenSilent_silentFlow),o=await this.createRefreshTokenClient({serverTelemetryManager:i,authorityUrl:r.authority,azureCloudOptions:r.azureCloudOptions,account:r.account});return be(o.acquireTokenByRefreshToken.bind(o),W.RefreshTokenClientAcquireTokenByRefreshToken,this.logger,this.performanceClient,e.correlationId)(r).catch(s=>{throw s.setCorrelationId(this.correlationId),i.cacheFailedRequest(s),s})}logout(){return Promise.reject(Ze(bw))}async createRefreshTokenClient(e){const n=await be(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,this.correlationId)({serverTelemetryManager:e.serverTelemetryManager,requestAuthority:e.authorityUrl,requestAzureCloudOptions:e.azureCloudOptions,requestExtraQueryParameters:e.extraQueryParameters,account:e.account});return new Bie(n,this.performanceClient)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Ese{constructor(e,n,r,i){this.isBrowserEnvironment=typeof window<"u",this.config=e,this.storage=n,this.logger=r,this.cryptoObj=i}async loadExternalTokens(e,n,r){if(!this.isBrowserEnvironment)throw Ze(ww);const i=e.correlationId||vs(),o=n.id_token?Xf(n.id_token,ss):void 0,s={protocolMode:this.config.auth.protocolMode,knownAuthorities:this.config.auth.knownAuthorities,cloudDiscoveryMetadata:this.config.auth.cloudDiscoveryMetadata,authorityMetadata:this.config.auth.authorityMetadata,skipAuthorityMetadataCache:this.config.auth.skipAuthorityMetadataCache},c=e.authority?new ti(ti.generateAuthority(e.authority,e.azureCloudOptions),this.config.system.networkClient,this.storage,s,this.logger,e.correlationId||vs()):void 0,l=await this.loadAccount(e,r.clientInfo||n.client_info||"",i,o,c),u=await this.loadIdToken(n,l.homeAccountId,l.environment,l.realm,i),d=await this.loadAccessToken(e,n,l.homeAccountId,l.environment,l.realm,r,i),f=await this.loadRefreshToken(n,l.homeAccountId,l.environment,i);return this.generateAuthenticationResult(e,{account:l,idToken:u,accessToken:d,refreshToken:f},o,c)}async loadAccount(e,n,r,i,o){if(this.logger.verbose("TokenCache - loading account"),e.account){const u=ms.createFromAccountInfo(e.account);return await this.storage.setAccount(u,r),u}else if(!o||!n&&!i)throw this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead."),Ze(R3);const s=ms.generateHomeAccountId(n,o.authorityType,this.logger,this.cryptoObj,i),c=i==null?void 0:i.tid,l=bT(this.storage,o,s,ss,r,i,n,o.hostnameAndPort,c,void 0,void 0,this.logger);return await this.storage.setAccount(l,r),l}async loadIdToken(e,n,r,i,o){if(!e.id_token)return this.logger.verbose("TokenCache - no id token found in response"),null;this.logger.verbose("TokenCache - loading id token");const s=pw(n,r,e.id_token,this.config.auth.clientId,i);return await this.storage.setIdTokenCredential(s,o),s}async loadAccessToken(e,n,r,i,o,s,c){if(n.access_token)if(n.expires_in){if(!n.scope&&(!e.scopes||!e.scopes.length))return this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache."),null}else return this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache."),null;else return this.logger.verbose("TokenCache - no access token found in response"),null;this.logger.verbose("TokenCache - loading access token");const l=n.scope?Er.fromString(n.scope):new Er(e.scopes),u=s.expiresOn||n.expires_in+Fi(),d=s.extendedExpiresOn||(n.ext_expires_in||n.expires_in)+Fi(),f=mw(r,i,n.access_token,this.config.auth.clientId,o,l.printScopes(),u,d,ss);return await this.storage.setAccessTokenCredential(f,c),f}async loadRefreshToken(e,n,r,i){if(!e.refresh_token)return this.logger.verbose("TokenCache - no refresh token found in response"),null;this.logger.verbose("TokenCache - loading refresh token");const o=o3(n,r,e.refresh_token,this.config.auth.clientId,e.foci,void 0,e.refresh_token_expires_in);return await this.storage.setRefreshTokenCredential(o,i),o}generateAuthenticationResult(e,n,r,i){var d,f,h;let o="",s=[],c=null,l;n!=null&&n.accessToken&&(o=n.accessToken.secret,s=Er.fromString(n.accessToken.target).asArray(),c=Pd(n.accessToken.expiresOn),l=Pd(n.accessToken.extendedExpiresOn));const u=n.account;return{authority:i?i.canonicalAuthority:"",uniqueId:n.account.localAccountId,tenantId:n.account.realm,scopes:s,account:u.getAccountInfo(),idToken:((d=n.idToken)==null?void 0:d.secret)||"",idTokenClaims:r||{},accessToken:o,fromCache:!0,expiresOn:c,correlationId:e.correlationId||"",requestId:"",extExpiresOn:l,familyId:((f=n.refreshToken)==null?void 0:f.familyId)||"",tokenType:((h=n==null?void 0:n.accessToken)==null?void 0:h.tokenType)||"",state:e.state||"",cloudGraphHostName:u.cloudGraphHostName||"",msGraphHost:u.msGraphHost||"",fromNativeBroker:!1}}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Nse extends f3{constructor(e){super(e),this.includeRedirectUri=!1}}/*! @azure/msal-browser v4.19.0 2025-08-05 */class Tse extends eh{constructor(e,n,r,i,o,s,c,l,u,d){super(e,n,r,i,o,s,l,u,d),this.apiId=c}async acquireToken(e){if(!e.code)throw Ze(M3);const n=await be(this.initializeAuthorizationRequest.bind(this),W.StandardInteractionClientInitializeAuthorizationRequest,this.logger,this.performanceClient,e.correlationId)(e,Ct.Silent),r=this.initializeServerTelemetryManager(this.apiId);try{const i={...n,code:e.code},o=await be(this.getClientConfiguration.bind(this),W.StandardInteractionClientGetClientConfiguration,this.logger,this.performanceClient,e.correlationId)({serverTelemetryManager:r,requestAuthority:n.authority,requestAzureCloudOptions:n.azureCloudOptions,requestExtraQueryParameters:n.extraQueryParameters,account:n.account}),s=new Nse(o);this.logger.verbose("Auth code client created");const c=new c6(s,this.browserStorage,i,this.logger,this.performanceClient);return await be(c.handleCodeResponseFromServer.bind(c),W.HandleCodeResponseFromServer,this.logger,this.performanceClient,e.correlationId)({code:e.code,msgraph_host:e.msGraphHost,cloud_graph_host_name:e.cloudGraphHostName,cloud_instance_host_name:e.cloudInstanceHostName},n,!1)}catch(i){throw i instanceof _n&&(i.setCorrelationId(this.correlationId),r.cacheFailedRequest(i)),i}}logout(){return Promise.reject(Ze(bw))}}/*! @azure/msal-browser v4.19.0 2025-08-05 */function kse(t,e,n){var s;const r=((s=window.msal)==null?void 0:s.clientIds)||[],i=r.length,o=r.filter(c=>c===t).length;o>1&&n.warning("There is already an instance of MSAL.js in the window with the same client id."),e.add({msalInstanceCount:i,sameClientIdInstanceCount:o})}/*! @azure/msal-browser v4.19.0 2025-08-05 */function Es(t){const e=t==null?void 0:t.idTokenClaims;if(e!=null&&e.tfp||e!=null&&e.acr)return"B2C";if(e!=null&&e.tid){if((e==null?void 0:e.tid)==="9188040d-6c67-4c5b-b112-36a304b66dad")return"MSA"}else return;return"AAD"}function zv(t,e){try{$T(t)}catch(n){throw e.end({success:!1},n),n}}class Aw{constructor(e){this.operatingContext=e,this.isBrowserEnvironment=this.operatingContext.isBrowserEnvironment(),this.config=e.getConfig(),this.initialized=!1,this.logger=this.operatingContext.getLogger(),this.networkClient=this.config.system.networkClient,this.navigationClient=this.config.system.navigationClient,this.redirectResponse=new Map,this.hybridAuthCodeResponses=new Map,this.performanceClient=this.config.telemetry.client,this.browserCrypto=this.isBrowserEnvironment?new Va(this.logger,this.performanceClient):Ix,this.eventHandler=new Xoe(this.logger),this.browserStorage=this.isBrowserEnvironment?new s1(this.config.auth.clientId,this.config.cache,this.browserCrypto,this.logger,this.performanceClient,this.eventHandler,Pie(this.config.auth)):zoe(this.config.auth.clientId,this.logger,this.performanceClient,this.eventHandler);const n={cacheLocation:Nr.MemoryStorage,cacheRetentionDays:5,temporaryCacheLocation:Nr.MemoryStorage,storeAuthStateInCookie:!1,secureCookies:!1,cacheMigrationEnabled:!1,claimsBasedCachingEnabled:!1};this.nativeInternalStorage=new s1(this.config.auth.clientId,n,this.browserCrypto,this.logger,this.performanceClient,this.eventHandler),this.tokenCache=new Ese(this.config,this.browserStorage,this.logger,this.browserCrypto),this.activeSilentTokenRequests=new Map,this.trackPageVisibility=this.trackPageVisibility.bind(this),this.trackPageVisibilityWithMeasurement=this.trackPageVisibilityWithMeasurement.bind(this)}static async createController(e,n){const r=new Aw(e);return await r.initialize(n),r}trackPageVisibility(e){e&&(this.logger.info("Perf: Visibility change detected"),this.performanceClient.incrementFields({visibilityChangeCount:1},e))}async initialize(e,n){if(this.logger.trace("initialize called"),this.initialized){this.logger.info("initialize has already been called, exiting early.");return}if(!this.isBrowserEnvironment){this.logger.info("in non-browser environment, exiting early."),this.initialized=!0,this.eventHandler.emitEvent(at.INITIALIZE_END);return}const r=(e==null?void 0:e.correlationId)||this.getRequestCorrelationId(),i=this.config.system.allowPlatformBroker,o=this.performanceClient.startMeasurement(W.InitializeClientApplication,r);if(this.eventHandler.emitEvent(at.INITIALIZE_START),!n)try{this.logMultipleInstances(o)}catch{}if(await be(this.browserStorage.initialize.bind(this.browserStorage),W.InitializeCache,this.logger,this.performanceClient,r)(r),i)try{this.platformAuthProvider=await pse(this.logger,this.performanceClient,r,this.config.system.nativeBrokerHandshakeTimeout)}catch(s){this.logger.verbose(s)}this.config.cache.claimsBasedCachingEnabled||(this.logger.verbose("Claims-based caching is disabled. Clearing the previous cache with claims"),no(this.browserStorage.clearTokensAndKeysWithClaims.bind(this.browserStorage),W.ClearTokensAndKeysWithClaims,this.logger,this.performanceClient,r)(r)),this.config.system.asyncPopups&&await this.preGeneratePkceCodes(r),this.initialized=!0,this.eventHandler.emitEvent(at.INITIALIZE_END),o.end({allowPlatformBroker:i,success:!0})}async handleRedirectPromise(e){if(this.logger.verbose("handleRedirectPromise called"),n6(this.initialized),this.isBrowserEnvironment){const n=e||"";let r=this.redirectResponse.get(n);return typeof r>"u"?(r=this.handleRedirectPromiseInternal(e),this.redirectResponse.set(n,r),this.logger.verbose("handleRedirectPromise has been called for the first time, storing the promise")):this.logger.verbose("handleRedirectPromise has been called previously, returning the result from the first call"),r}return this.logger.verbose("handleRedirectPromise returns null, not browser environment"),null}async handleRedirectPromiseInternal(e){var l;if(!this.browserStorage.isInteractionInProgress(!0))return this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null."),null;if(((l=this.browserStorage.getInteractionInProgress())==null?void 0:l.type)===yc.SIGNOUT)return this.logger.verbose("handleRedirectPromise removing interaction_in_progress flag and returning null after sign-out"),this.browserStorage.setInteractionInProgress(!1),Promise.resolve(null);const r=this.getAllAccounts(),i=this.browserStorage.getCachedNativeRequest(),o=i&&this.platformAuthProvider&&!e;let s;this.eventHandler.emitEvent(at.HANDLE_REDIRECT_START,Ct.Redirect);let c;try{if(o&&this.platformAuthProvider){s=this.performanceClient.startMeasurement(W.AcquireTokenRedirect,(i==null?void 0:i.correlationId)||""),this.logger.trace("handleRedirectPromise - acquiring token from native platform");const u=new My(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Cn.handleRedirectPromise,this.performanceClient,this.platformAuthProvider,i.accountId,this.nativeInternalStorage,i.correlationId);c=be(u.handleRedirectPromise.bind(u),W.HandleNativeRedirectPromiseMeasurement,this.logger,this.performanceClient,s.event.correlationId)(this.performanceClient,s.event.correlationId)}else{const[u,d]=this.browserStorage.getCachedRequest(),f=u.correlationId;s=this.performanceClient.startMeasurement(W.AcquireTokenRedirect,f),this.logger.trace("handleRedirectPromise - acquiring token from web flow");const h=this.createRedirectClient(f);c=be(h.handleRedirectPromise.bind(h),W.HandleRedirectPromiseMeasurement,this.logger,this.performanceClient,s.event.correlationId)(e,u,d,s)}}catch(u){throw this.browserStorage.resetRequestCache(),u}return c.then(u=>(u?(this.browserStorage.resetRequestCache(),r.length{this.browserStorage.resetRequestCache();const d=u;throw r.length>0?this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_FAILURE,Ct.Redirect,null,d):this.eventHandler.emitEvent(at.LOGIN_FAILURE,Ct.Redirect,null,d),this.eventHandler.emitEvent(at.HANDLE_REDIRECT_END,Ct.Redirect),s.end({success:!1},d),u})}async acquireTokenRedirect(e){const n=this.getRequestCorrelationId(e);this.logger.verbose("acquireTokenRedirect called",n);const r=this.performanceClient.startMeasurement(W.AcquireTokenPreRedirect,n);r.add({accountType:Es(e.account),scenarioId:e.scenarioId});const i=e.onRedirectNavigate;if(i)e.onRedirectNavigate=s=>{const c=typeof i=="function"?i(s):void 0;return c!==!1?r.end({success:!0}):r.discard(),c};else{const s=this.config.auth.onRedirectNavigate;this.config.auth.onRedirectNavigate=c=>{const l=typeof s=="function"?s(c):void 0;return l!==!1?r.end({success:!0}):r.discard(),l}}const o=this.getAllAccounts().length>0;try{KR(this.initialized,this.config),this.browserStorage.setInteractionInProgress(!0,yc.SIGNIN),o?this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_START,Ct.Redirect,e):this.eventHandler.emitEvent(at.LOGIN_START,Ct.Redirect,e);let s;return this.platformAuthProvider&&this.canUsePlatformBroker(e)?s=new My(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Cn.acquireTokenRedirect,this.performanceClient,this.platformAuthProvider,this.getNativeAccountId(e),this.nativeInternalStorage,n).acquireTokenRedirect(e,r).catch(l=>{if(l instanceof $s&&nd(l))return this.platformAuthProvider=void 0,this.createRedirectClient(n).acquireToken(e);if(l instanceof gs)return this.logger.verbose("acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow"),this.createRedirectClient(n).acquireToken(e);throw l}):s=this.createRedirectClient(n).acquireToken(e),await s}catch(s){throw this.browserStorage.resetRequestCache(),r.end({success:!1},s),o?this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_FAILURE,Ct.Redirect,null,s):this.eventHandler.emitEvent(at.LOGIN_FAILURE,Ct.Redirect,null,s),s}}acquireTokenPopup(e){const n=this.getRequestCorrelationId(e),r=this.performanceClient.startMeasurement(W.AcquireTokenPopup,n);r.add({scenarioId:e.scenarioId,accountType:Es(e.account)});try{this.logger.verbose("acquireTokenPopup called",n),zv(this.initialized,r),this.browserStorage.setInteractionInProgress(!0,yc.SIGNIN)}catch(c){return Promise.reject(c)}const i=this.getAllAccounts();i.length>0?this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_START,Ct.Popup,e):this.eventHandler.emitEvent(at.LOGIN_START,Ct.Popup,e);let o;const s=this.getPreGeneratedPkceCodes(n);return this.canUsePlatformBroker(e)?o=this.acquireTokenNative({...e,correlationId:n},Cn.acquireTokenPopup).then(c=>(r.end({success:!0,isNativeBroker:!0,accountType:Es(c.account)}),c)).catch(c=>{if(c instanceof $s&&nd(c))return this.platformAuthProvider=void 0,this.createPopupClient(n).acquireToken(e,s);if(c instanceof gs)return this.logger.verbose("acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow"),this.createPopupClient(n).acquireToken(e,s);throw c}):o=this.createPopupClient(n).acquireToken(e,s),o.then(c=>(i.length(i.length>0?this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_FAILURE,Ct.Popup,null,c):this.eventHandler.emitEvent(at.LOGIN_FAILURE,Ct.Popup,null,c),r.end({success:!1},c),Promise.reject(c))).finally(async()=>{this.browserStorage.setInteractionInProgress(!1),this.config.system.asyncPopups&&await this.preGeneratePkceCodes(n)})}trackPageVisibilityWithMeasurement(){const e=this.ssoSilentMeasurement||this.acquireTokenByCodeAsyncMeasurement;e&&(this.logger.info("Perf: Visibility change detected in ",e.event.name),e.increment({visibilityChangeCount:1}))}async ssoSilent(e){var o,s;const n=this.getRequestCorrelationId(e),r={...e,prompt:e.prompt,correlationId:n};this.ssoSilentMeasurement=this.performanceClient.startMeasurement(W.SsoSilent,n),(o=this.ssoSilentMeasurement)==null||o.add({scenarioId:e.scenarioId,accountType:Es(e.account)}),zv(this.initialized,this.ssoSilentMeasurement),(s=this.ssoSilentMeasurement)==null||s.increment({visibilityChangeCount:0}),document.addEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement),this.logger.verbose("ssoSilent called",n),this.eventHandler.emitEvent(at.SSO_SILENT_START,Ct.Silent,r);let i;return this.canUsePlatformBroker(r)?i=this.acquireTokenNative(r,Cn.ssoSilent).catch(c=>{if(c instanceof $s&&nd(c))return this.platformAuthProvider=void 0,this.createSilentIframeClient(r.correlationId).acquireToken(r);throw c}):i=this.createSilentIframeClient(r.correlationId).acquireToken(r),i.then(c=>{var l;return this.eventHandler.emitEvent(at.SSO_SILENT_SUCCESS,Ct.Silent,c),(l=this.ssoSilentMeasurement)==null||l.end({success:!0,isNativeBroker:c.fromNativeBroker,accessTokenSize:c.accessToken.length,idTokenSize:c.idToken.length,accountType:Es(c.account)}),c}).catch(c=>{var l;throw this.eventHandler.emitEvent(at.SSO_SILENT_FAILURE,Ct.Silent,null,c),(l=this.ssoSilentMeasurement)==null||l.end({success:!1},c),c}).finally(()=>{document.removeEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement)})}async acquireTokenByCode(e){const n=this.getRequestCorrelationId(e);this.logger.trace("acquireTokenByCode called",n);const r=this.performanceClient.startMeasurement(W.AcquireTokenByCode,n);zv(this.initialized,r),this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_BY_CODE_START,Ct.Silent,e),r.add({scenarioId:e.scenarioId});try{if(e.code&&e.nativeAccountId)throw Ze($3);if(e.code){const i=e.code;let o=this.hybridAuthCodeResponses.get(i);return o?(this.logger.verbose("Existing acquireTokenByCode request found",n),r.discard()):(this.logger.verbose("Initiating new acquireTokenByCode request",n),o=this.acquireTokenByCodeAsync({...e,correlationId:n}).then(s=>(this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_BY_CODE_SUCCESS,Ct.Silent,s),this.hybridAuthCodeResponses.delete(i),r.end({success:!0,isNativeBroker:s.fromNativeBroker,accessTokenSize:s.accessToken.length,idTokenSize:s.idToken.length,accountType:Es(s.account)}),s)).catch(s=>{throw this.hybridAuthCodeResponses.delete(i),this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_BY_CODE_FAILURE,Ct.Silent,null,s),r.end({success:!1},s),s}),this.hybridAuthCodeResponses.set(i,o)),await o}else if(e.nativeAccountId)if(this.canUsePlatformBroker(e,e.nativeAccountId)){const i=await this.acquireTokenNative({...e,correlationId:n},Cn.acquireTokenByCode,e.nativeAccountId).catch(o=>{throw o instanceof $s&&nd(o)&&(this.platformAuthProvider=void 0),o});return r.end({accountType:Es(i.account),success:!0}),i}else throw Ze(L3);else throw Ze(D3)}catch(i){throw this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_BY_CODE_FAILURE,Ct.Silent,null,i),r.end({success:!1},i),i}}async acquireTokenByCodeAsync(e){var i;return this.logger.trace("acquireTokenByCodeAsync called",e.correlationId),this.acquireTokenByCodeAsyncMeasurement=this.performanceClient.startMeasurement(W.AcquireTokenByCodeAsync,e.correlationId),(i=this.acquireTokenByCodeAsyncMeasurement)==null||i.increment({visibilityChangeCount:0}),document.addEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement),await this.createSilentAuthCodeClient(e.correlationId).acquireToken(e).then(o=>{var s;return(s=this.acquireTokenByCodeAsyncMeasurement)==null||s.end({success:!0,fromCache:o.fromCache,isNativeBroker:o.fromNativeBroker}),o}).catch(o=>{var s;throw(s=this.acquireTokenByCodeAsyncMeasurement)==null||s.end({success:!1},o),o}).finally(()=>{document.removeEventListener("visibilitychange",this.trackPageVisibilityWithMeasurement)})}async acquireTokenFromCache(e,n){switch(this.performanceClient.addQueueMeasurement(W.AcquireTokenFromCache,e.correlationId),n){case ui.Default:case ui.AccessToken:case ui.AccessTokenAndRefreshToken:const r=this.createSilentCacheClient(e.correlationId);return be(r.acquireToken.bind(r),W.SilentCacheClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(e);default:throw Te(Gc)}}async acquireTokenByRefreshToken(e,n){switch(this.performanceClient.addQueueMeasurement(W.AcquireTokenByRefreshToken,e.correlationId),n){case ui.Default:case ui.AccessTokenAndRefreshToken:case ui.RefreshToken:case ui.RefreshTokenAndNetwork:const r=this.createSilentRefreshClient(e.correlationId);return be(r.acquireToken.bind(r),W.SilentRefreshClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(e);default:throw Te(Gc)}}async acquireTokenBySilentIframe(e){this.performanceClient.addQueueMeasurement(W.AcquireTokenBySilentIframe,e.correlationId);const n=this.createSilentIframeClient(e.correlationId);return be(n.acquireToken.bind(n),W.SilentIframeClientAcquireToken,this.logger,this.performanceClient,e.correlationId)(e)}async logout(e){const n=this.getRequestCorrelationId(e);return this.logger.warning("logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.",n),this.logoutRedirect({correlationId:n,...e})}async logoutRedirect(e){const n=this.getRequestCorrelationId(e);return KR(this.initialized,this.config),this.browserStorage.setInteractionInProgress(!0,yc.SIGNOUT),this.createRedirectClient(n).logout(e)}logoutPopup(e){try{const n=this.getRequestCorrelationId(e);return $T(this.initialized),this.browserStorage.setInteractionInProgress(!0,yc.SIGNOUT),this.createPopupClient(n).logout(e).finally(()=>{this.browserStorage.setInteractionInProgress(!1)})}catch(n){return Promise.reject(n)}}async clearCache(e){if(!this.isBrowserEnvironment){this.logger.info("in non-browser environment, returning early.");return}const n=this.getRequestCorrelationId(e);return this.createSilentCacheClient(n).logout(e)}getAllAccounts(e){const n=this.getRequestCorrelationId();return Hoe(this.logger,this.browserStorage,this.isBrowserEnvironment,n,e)}getAccount(e){const n=this.getRequestCorrelationId();return Goe(e,this.logger,this.browserStorage,n)}getAccountByUsername(e){const n=this.getRequestCorrelationId();return Voe(e,this.logger,this.browserStorage,n)}getAccountByHomeId(e){const n=this.getRequestCorrelationId();return Koe(e,this.logger,this.browserStorage,n)}getAccountByLocalId(e){const n=this.getRequestCorrelationId();return Woe(e,this.logger,this.browserStorage,n)}setActiveAccount(e){const n=this.getRequestCorrelationId();qoe(e,this.browserStorage,n)}getActiveAccount(){const e=this.getRequestCorrelationId();return Yoe(this.browserStorage,e)}async hydrateCache(e,n){this.logger.verbose("hydrateCache called");const r=ms.createFromAccountInfo(e.account,e.cloudGraphHostName,e.msGraphHost);return await this.browserStorage.setAccount(r,e.correlationId),e.fromNativeBroker?(this.logger.verbose("Response was from native broker, storing in-memory"),this.nativeInternalStorage.hydrateCache(e,n)):this.browserStorage.hydrateCache(e,n)}async acquireTokenNative(e,n,r,i){if(this.logger.trace("acquireTokenNative called"),!this.platformAuthProvider)throw Ze(TT);return new My(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,n,this.performanceClient,this.platformAuthProvider,r||this.getNativeAccountId(e),this.nativeInternalStorage,e.correlationId).acquireToken(e,i)}canUsePlatformBroker(e,n){if(this.logger.trace("canUsePlatformBroker called"),!this.platformAuthProvider)return this.logger.trace("canUsePlatformBroker: platform broker unavilable, returning false"),!1;if(!bm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme))return this.logger.trace("canUsePlatformBroker: isBrokerAvailable returned false, returning false"),!1;if(e.prompt)switch(e.prompt){case gi.NONE:case gi.CONSENT:case gi.LOGIN:this.logger.trace("canUsePlatformBroker: prompt is compatible with platform broker flow");break;default:return this.logger.trace(`canUsePlatformBroker: prompt = ${e.prompt} is not compatible with platform broker flow, returning false`),!1}return!n&&!this.getNativeAccountId(e)?(this.logger.trace("canUsePlatformBroker: nativeAccountId is not available, returning false"),!1):!0}getNativeAccountId(e){const n=e.account||this.getAccount({loginHint:e.loginHint,sid:e.sid})||this.getActiveAccount();return n&&n.nativeAccountId||""}createPopupClient(e){return new gse(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.nativeInternalStorage,this.platformAuthProvider,e)}createRedirectClient(e){return new yse(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.nativeInternalStorage,this.platformAuthProvider,e)}createSilentIframeClient(e){return new Ase(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Cn.ssoSilent,this.performanceClient,this.nativeInternalStorage,this.platformAuthProvider,e)}createSilentCacheClient(e){return new u6(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.platformAuthProvider,e)}createSilentRefreshClient(e){return new jse(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,this.performanceClient,this.platformAuthProvider,e)}createSilentAuthCodeClient(e){return new Tse(this.config,this.browserStorage,this.browserCrypto,this.logger,this.eventHandler,this.navigationClient,Cn.acquireTokenByCode,this.performanceClient,this.platformAuthProvider,e)}addEventCallback(e,n){return this.eventHandler.addEventCallback(e,n)}removeEventCallback(e){this.eventHandler.removeEventCallback(e)}addPerformanceCallback(e){return t6(),this.performanceClient.addPerformanceCallback(e)}removePerformanceCallback(e){return this.performanceClient.removePerformanceCallback(e)}enableAccountStorageEvents(){if(this.config.cache.cacheLocation!==Nr.LocalStorage){this.logger.info("Account storage events are only available when cacheLocation is set to localStorage");return}this.eventHandler.subscribeCrossTab()}disableAccountStorageEvents(){if(this.config.cache.cacheLocation!==Nr.LocalStorage){this.logger.info("Account storage events are only available when cacheLocation is set to localStorage");return}this.eventHandler.unsubscribeCrossTab()}getTokenCache(){return this.tokenCache}getLogger(){return this.logger}setLogger(e){this.logger=e}initializeWrapperLibrary(e,n){this.browserStorage.setWrapperMetadata(e,n)}setNavigationClient(e){this.navigationClient=e}getConfiguration(){return this.config}getPerformanceClient(){return this.performanceClient}isBrowserEnv(){return this.isBrowserEnvironment}getRequestCorrelationId(e){return e!=null&&e.correlationId?e.correlationId:this.isBrowserEnvironment?vs():we.EMPTY_STRING}async loginRedirect(e){const n=this.getRequestCorrelationId(e);return this.logger.verbose("loginRedirect called",n),this.acquireTokenRedirect({correlationId:n,...e||UR})}loginPopup(e){const n=this.getRequestCorrelationId(e);return this.logger.verbose("loginPopup called",n),this.acquireTokenPopup({correlationId:n,...e||UR})}async acquireTokenSilent(e){const n=this.getRequestCorrelationId(e),r=this.performanceClient.startMeasurement(W.AcquireTokenSilent,n);r.add({cacheLookupPolicy:e.cacheLookupPolicy,scenarioId:e.scenarioId}),zv(this.initialized,r),this.logger.verbose("acquireTokenSilent called",n);const i=e.account||this.getActiveAccount();if(!i)throw Ze(T3);return r.add({accountType:Es(i)}),this.acquireTokenSilentDeduped(e,i,n).then(o=>(r.end({success:!0,fromCache:o.fromCache,isNativeBroker:o.fromNativeBroker,accessTokenSize:o.accessToken.length,idTokenSize:o.idToken.length}),{...o,state:e.state,correlationId:n})).catch(o=>{throw o instanceof _n&&o.setCorrelationId(n),r.end({success:!1},o),o})}async acquireTokenSilentDeduped(e,n,r){const i=gw(this.config.auth.clientId,{...e,authority:e.authority||this.config.auth.authority,correlationId:r},n.homeAccountId),o=JSON.stringify(i),s=this.activeSilentTokenRequests.get(o);if(typeof s>"u"){this.logger.verbose("acquireTokenSilent called for the first time, storing active request",r),this.performanceClient.addFields({deduped:!1},r);const c=be(this.acquireTokenSilentAsync.bind(this),W.AcquireTokenSilentAsync,this.logger,this.performanceClient,r)({...e,correlationId:r},n);return this.activeSilentTokenRequests.set(o,c),c.finally(()=>{this.activeSilentTokenRequests.delete(o)})}else return this.logger.verbose("acquireTokenSilent has been called previously, returning the result from the first call",r),this.performanceClient.addFields({deduped:!0},r),s}async acquireTokenSilentAsync(e,n){const r=()=>this.trackPageVisibility(e.correlationId);this.performanceClient.addQueueMeasurement(W.AcquireTokenSilentAsync,e.correlationId),this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_START,Ct.Silent,e),e.correlationId&&this.performanceClient.incrementFields({visibilityChangeCount:0},e.correlationId),document.addEventListener("visibilitychange",r);const i=await be(Joe,W.InitializeSilentRequest,this.logger,this.performanceClient,e.correlationId)(e,n,this.config,this.performanceClient,this.logger),o=e.cacheLookupPolicy||ui.Default;return this.acquireTokenSilentNoIframe(i,o).catch(async c=>{if(Pse(c,o))if(this.activeIframeRequest)if(o!==ui.Skip){const[u,d]=this.activeIframeRequest;this.logger.verbose(`Iframe request is already in progress, awaiting resolution for request with correlationId: ${d}`,i.correlationId);const f=this.performanceClient.startMeasurement(W.AwaitConcurrentIframe,i.correlationId);f.add({awaitIframeCorrelationId:d});const h=await u;if(f.end({success:h}),h)return this.logger.verbose(`Parallel iframe request with correlationId: ${d} succeeded. Retrying cache and/or RT redemption`,i.correlationId),this.acquireTokenSilentNoIframe(i,o);throw this.logger.info(`Iframe request with correlationId: ${d} failed. Interaction is required.`),c}else return this.logger.warning("Another iframe request is currently in progress and CacheLookupPolicy is set to Skip. This may result in degraded performance and/or reliability for both calls. Please consider changing the CacheLookupPolicy to take advantage of request queuing and token cache.",i.correlationId),be(this.acquireTokenBySilentIframe.bind(this),W.AcquireTokenBySilentIframe,this.logger,this.performanceClient,i.correlationId)(i);else{let u;return this.activeIframeRequest=[new Promise(d=>{u=d}),i.correlationId],this.logger.verbose("Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.",i.correlationId),be(this.acquireTokenBySilentIframe.bind(this),W.AcquireTokenBySilentIframe,this.logger,this.performanceClient,i.correlationId)(i).then(d=>(u(!0),d)).catch(d=>{throw u(!1),d}).finally(()=>{this.activeIframeRequest=void 0})}else throw c}).then(c=>(this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_SUCCESS,Ct.Silent,c),e.correlationId&&this.performanceClient.addFields({fromCache:c.fromCache,isNativeBroker:c.fromNativeBroker},e.correlationId),c)).catch(c=>{throw this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_FAILURE,Ct.Silent,null,c),c}).finally(()=>{document.removeEventListener("visibilitychange",r)})}async acquireTokenSilentNoIframe(e,n){return bm(this.config,this.logger,this.platformAuthProvider,e.authenticationScheme)&&e.account.nativeAccountId?(this.logger.verbose("acquireTokenSilent - attempting to acquire token from native platform"),this.acquireTokenNative(e,Cn.acquireTokenSilent_silentFlow,e.account.nativeAccountId,n).catch(async r=>{throw r instanceof $s&&nd(r)?(this.logger.verbose("acquireTokenSilent - native platform unavailable, falling back to web flow"),this.platformAuthProvider=void 0,Te(Gc)):r})):(this.logger.verbose("acquireTokenSilent - attempting to acquire token from web flow"),n===ui.AccessToken&&this.logger.verbose("acquireTokenSilent - cache lookup policy set to AccessToken, attempting to acquire token from local cache"),be(this.acquireTokenFromCache.bind(this),W.AcquireTokenFromCache,this.logger,this.performanceClient,e.correlationId)(e,n).catch(r=>{if(n===ui.AccessToken)throw r;return this.eventHandler.emitEvent(at.ACQUIRE_TOKEN_NETWORK_START,Ct.Silent,e),be(this.acquireTokenByRefreshToken.bind(this),W.AcquireTokenByRefreshToken,this.logger,this.performanceClient,e.correlationId)(e,n)}))}async preGeneratePkceCodes(e){return this.logger.verbose("Generating new PKCE codes"),this.pkceCode=await be(Cw,W.GeneratePkceCodes,this.logger,this.performanceClient,e)(this.performanceClient,this.logger,e),Promise.resolve()}getPreGeneratedPkceCodes(e){this.logger.verbose("Attempting to pick up pre-generated PKCE codes");const n=this.pkceCode?{...this.pkceCode}:void 0;return this.pkceCode=void 0,this.logger.verbose(`${n?"Found":"Did not find"} pre-generated PKCE codes`),this.performanceClient.addFields({usePreGeneratedPkce:!!n},e),n}logMultipleInstances(e){const n=this.config.auth.clientId;if(!window)return;window.msal=window.msal||{},window.msal.clientIds=window.msal.clientIds||[],window.msal.clientIds.length>0&&this.logger.verbose("There is already an instance of MSAL.js in the window."),window.msal.clientIds.push(n),kse(n,e,this.logger)}}function Pse(t,e){const n=!(t instanceof gs&&t.subError!==yw),r=t.errorCode===Ti.INVALID_GRANT_ERROR||t.errorCode===Gc,i=n&&r||t.errorCode===zx||t.errorCode===yT,o=soe.includes(e);return i&&o}/*! @azure/msal-browser v4.19.0 2025-08-05 */async function Ose(t,e){const n=new wu(t);return await n.initialize(),Aw.createController(n,e)}/*! @azure/msal-browser v4.19.0 2025-08-05 */class WT{static async createPublicClientApplication(e){const n=await Ose(e);return new WT(e,n)}constructor(e,n){this.isBroker=!1,this.controller=n||new Aw(new wu(e))}async initialize(e){return this.controller.initialize(e,this.isBroker)}async acquireTokenPopup(e){return this.controller.acquireTokenPopup(e)}acquireTokenRedirect(e){return this.controller.acquireTokenRedirect(e)}acquireTokenSilent(e){return this.controller.acquireTokenSilent(e)}acquireTokenByCode(e){return this.controller.acquireTokenByCode(e)}addEventCallback(e,n){return this.controller.addEventCallback(e,n)}removeEventCallback(e){return this.controller.removeEventCallback(e)}addPerformanceCallback(e){return this.controller.addPerformanceCallback(e)}removePerformanceCallback(e){return this.controller.removePerformanceCallback(e)}enableAccountStorageEvents(){this.controller.enableAccountStorageEvents()}disableAccountStorageEvents(){this.controller.disableAccountStorageEvents()}getAccount(e){return this.controller.getAccount(e)}getAccountByHomeId(e){return this.controller.getAccountByHomeId(e)}getAccountByLocalId(e){return this.controller.getAccountByLocalId(e)}getAccountByUsername(e){return this.controller.getAccountByUsername(e)}getAllAccounts(e){return this.controller.getAllAccounts(e)}handleRedirectPromise(e){return this.controller.handleRedirectPromise(e)}loginPopup(e){return this.controller.loginPopup(e)}loginRedirect(e){return this.controller.loginRedirect(e)}logout(e){return this.controller.logout(e)}logoutRedirect(e){return this.controller.logoutRedirect(e)}logoutPopup(e){return this.controller.logoutPopup(e)}ssoSilent(e){return this.controller.ssoSilent(e)}getTokenCache(){return this.controller.getTokenCache()}getLogger(){return this.controller.getLogger()}setLogger(e){this.controller.setLogger(e)}setActiveAccount(e){this.controller.setActiveAccount(e)}getActiveAccount(){return this.controller.getActiveAccount()}initializeWrapperLibrary(e,n){return this.controller.initializeWrapperLibrary(e,n)}setNavigationClient(e){this.controller.setNavigationClient(e)}getConfiguration(){return this.controller.getConfiguration()}async hydrateCache(e,n){return this.controller.hydrateCache(e,n)}clearCache(e){return this.controller.clearCache(e)}}/*! @azure/msal-browser v4.19.0 2025-08-05 */const Ise={initialize:()=>Promise.reject(fr(dr)),acquireTokenPopup:()=>Promise.reject(fr(dr)),acquireTokenRedirect:()=>Promise.reject(fr(dr)),acquireTokenSilent:()=>Promise.reject(fr(dr)),acquireTokenByCode:()=>Promise.reject(fr(dr)),getAllAccounts:()=>[],getAccount:()=>null,getAccountByHomeId:()=>null,getAccountByUsername:()=>null,getAccountByLocalId:()=>null,handleRedirectPromise:()=>Promise.reject(fr(dr)),loginPopup:()=>Promise.reject(fr(dr)),loginRedirect:()=>Promise.reject(fr(dr)),logout:()=>Promise.reject(fr(dr)),logoutRedirect:()=>Promise.reject(fr(dr)),logoutPopup:()=>Promise.reject(fr(dr)),ssoSilent:()=>Promise.reject(fr(dr)),addEventCallback:()=>null,removeEventCallback:()=>{},addPerformanceCallback:()=>"",removePerformanceCallback:()=>!1,enableAccountStorageEvents:()=>{},disableAccountStorageEvents:()=>{},getTokenCache:()=>{throw fr(dr)},getLogger:()=>{throw fr(dr)},setLogger:()=>{},setActiveAccount:()=>{},getActiveAccount:()=>null,initializeWrapperLibrary:()=>{},setNavigationClient:()=>{},getConfiguration:()=>{throw fr(dr)},hydrateCache:()=>Promise.reject(fr(dr)),clearCache:()=>Promise.reject(fr(dr))};/*! @azure/msal-browser v4.19.0 2025-08-05 */class Rse{static getInteractionStatusFromEvent(e,n){switch(e.eventType){case at.LOGIN_START:return wr.Login;case at.SSO_SILENT_START:return wr.SsoSilent;case at.ACQUIRE_TOKEN_START:if(e.interactionType===Ct.Redirect||e.interactionType===Ct.Popup)return wr.AcquireToken;break;case at.HANDLE_REDIRECT_START:return wr.HandleRedirect;case at.LOGOUT_START:return wr.Logout;case at.SSO_SILENT_SUCCESS:case at.SSO_SILENT_FAILURE:if(n&&n!==wr.SsoSilent)break;return wr.None;case at.LOGOUT_END:if(n&&n!==wr.Logout)break;return wr.None;case at.HANDLE_REDIRECT_END:if(n&&n!==wr.HandleRedirect)break;return wr.None;case at.LOGIN_SUCCESS:case at.LOGIN_FAILURE:case at.ACQUIRE_TOKEN_SUCCESS:case at.ACQUIRE_TOKEN_FAILURE:case at.RESTORE_FROM_BFCACHE:if(e.interactionType===Ct.Redirect||e.interactionType===Ct.Popup){if(n&&n!==wr.Login&&n!==wr.AcquireToken)break;return wr.None}break}return null}}const Mse="modulepreload",Dse=function(t){return"/semblance/"+t},r2={},$se=function(e,n,r){let i=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),c=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));i=Promise.allSettled(n.map(l=>{if(l=Dse(l),l in r2)return;r2[l]=!0;const u=l.endsWith(".css"),d=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${d}`))return;const f=document.createElement("link");if(f.rel=u?"stylesheet":Mse,u||(f.as="script"),f.crossOrigin="",f.href=l,c&&f.setAttribute("nonce",c),document.head.appendChild(f),u)return new Promise((h,p)=>{f.addEventListener("load",h),f.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}function o(s){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=s,window.dispatchEvent(c),!c.defaultPrevented)throw s}return i.then(s=>{for(const c of s||[])c.status==="rejected"&&o(c.reason);return e().catch(o)})};/*! @azure/msal-react v3.0.17 2025-08-05 */const Lse={instance:Ise,inProgress:wr.None,accounts:[],logger:new Ga({})},qT=g.createContext(Lse);qT.Consumer;/*! @azure/msal-react v3.0.17 2025-08-05 */function i2(t,e){if(t.length!==e.length)return!1;const n=[...e];return t.every(r=>{const i=n.shift();return!r||!i?!1:r.homeAccountId===i.homeAccountId&&r.localAccountId===i.localAccountId&&r.username===i.username})}/*! @azure/msal-react v3.0.17 2025-08-05 */const Fse="@azure/msal-react",o2="3.0.17";/*! @azure/msal-react v3.0.17 2025-08-05 */const Xx={UNBLOCK_INPROGRESS:"UNBLOCK_INPROGRESS",EVENT:"EVENT"},Bse=(t,e)=>{const{type:n,payload:r}=e;let i=t.inProgress;switch(n){case Xx.UNBLOCK_INPROGRESS:t.inProgress===wr.Startup&&(i=wr.None,r.logger.info("MsalProvider - handleRedirectPromise resolved, setting inProgress to 'none'"));break;case Xx.EVENT:const s=r.message,c=Rse.getInteractionStatusFromEvent(s,t.inProgress);c&&(r.logger.info(`MsalProvider - ${s.eventType} results in setting inProgress from ${t.inProgress} to ${c}`),i=c);break;default:throw new Error(`Unknown action type: ${n}`)}if(i===wr.Startup)return t;const o=r.instance.getAllAccounts();return i!==t.inProgress&&!i2(o,t.accounts)?{...t,inProgress:i,accounts:o}:i!==t.inProgress?{...t,inProgress:i}:i2(o,t.accounts)?t:{...t,accounts:o}};function Use({instance:t,children:e}){g.useEffect(()=>{t.initializeWrapperLibrary(roe.React,o2)},[t]);const n=g.useMemo(()=>t.getLogger().clone(Fse,o2),[t]),[r,i]=g.useReducer(Bse,void 0,()=>({inProgress:wr.Startup,accounts:[]}));g.useEffect(()=>{const s=t.addEventCallback(c=>{i({payload:{instance:t,logger:n,message:c},type:Xx.EVENT})});return n.verbose(`MsalProvider - Registered event callback with id: ${s}`),t.initialize().then(()=>{t.handleRedirectPromise().catch(()=>{}).finally(()=>{i({payload:{instance:t,logger:n},type:Xx.UNBLOCK_INPROGRESS})})}).catch(()=>{}),()=>{s&&(n.verbose(`MsalProvider - Removing event callback ${s}`),t.removeEventCallback(s))}},[t,n]);const o={instance:t,inProgress:r.inProgress,accounts:r.accounts,logger:n};return T.createElement(qT.Provider,{value:o},e)}/*! @azure/msal-react v3.0.17 2025-08-05 */const zse=()=>g.useContext(qT),Hse={auth:{clientId:"7e9b250a-d984-4fba-8e1c-a0622242a595",authority:"https://login.microsoftonline.com/e519c2e6-bc6d-4fdf-8d9c-923c2f002385",redirectUri:"https://ai-sandbox.oliver.solutions/semblance",postLogoutRedirectUri:"https://ai-sandbox.oliver.solutions/semblance"},cache:{cacheLocation:"localStorage",storeAuthStateInCookie:!1},system:{loggerOptions:{loggerCallback:(t,e,n)=>{n||console.log(e)},logLevel:$n.Verbose,piiLoggingEnabled:!1},allowNativeBroker:!1}},Gse={scopes:["openid","profile","email"],prompt:"select_account",extraQueryParameters:{code_challenge_method:"S256"}},h6=g.createContext(void 0);function Vse({children:t}){const[e,n]=g.useState(null),[r,i]=g.useState(null),[o,s]=g.useState(!0),[c,l]=g.useState(!1),u=ur(),{instance:d,accounts:f,inProgress:h}=zse();g.useEffect(()=>{const w=S=>{const _=S.detail||{};if(_.isPersonaCreation){console.log("Ignoring auth error from persona creation",_);return}i(null),n(null),ae.error("Session expired",{description:"Please log in again"}),u("/login")};return window.addEventListener(GA,w),()=>{window.removeEventListener(GA,w)}},[u]),g.useEffect(()=>{const w=localStorage.getItem("auth_token"),S=localStorage.getItem("user");if(console.log("AuthContext initializing - stored data check:",{hasToken:!!w,hasUser:!!S}),w&&S)try{i(w),n(JSON.parse(S)),console.log("User session restored from localStorage")}catch(C){console.error("Failed to parse stored user data:",C),localStorage.removeItem("auth_token"),localStorage.removeItem("user")}else console.log("No stored authentication data found");s(!1)},[]),g.useEffect(()=>{if(r){console.log("Verifying token...");const w=`token_validated_${r.substring(0,10)}`;if(sessionStorage.getItem(w)==="true"&&e){console.log("Token already validated this session, skipping validation");return}Oy.getProfile().then(C=>{C&&"data"in C&&(console.log("Profile verified successfully"),n(C.data),sessionStorage.setItem(w,"true"))}).catch(C=>{C.response&&C.response.status===401?(console.error("Token invalid (401):",C),localStorage.removeItem("auth_token"),localStorage.removeItem("user"),i(null),n(null)):(console.warn("Profile validation error (not clearing token):",C),sessionStorage.setItem(w,"true"))})}else console.log("No token available, not validating profile")},[r,e]);const p=async(w,S)=>{var C,_;s(!0),console.log("Attempting login for user:",w);try{const A=await Oy.login(w,S);if(console.log("Login API response received"),!A.data.access_token)throw new Error("No access token received from server");return localStorage.setItem("auth_token",A.data.access_token),localStorage.setItem("user",JSON.stringify(A.data.user)),i(A.data.access_token),n(A.data.user),console.log("Authentication state updated"),ae.success("Login successful!"),A.data.access_token}catch(A){throw console.error("Login failed:",A),ae.error("Login failed",{description:((_=(C=A.response)==null?void 0:C.data)==null?void 0:_.message)||"Invalid username or password"}),A}finally{s(!1)}},v=async()=>{l(!0);try{console.log("Starting Microsoft authentication...");const w=await d.loginPopup(Gse);if(w&&w.account&&w.idToken){console.log("Microsoft authentication successful",w.account);const S=await Oy.loginWithMicrosoft(w.idToken);S.data.access_token&&(localStorage.setItem("auth_token",S.data.access_token),localStorage.setItem("user",JSON.stringify(S.data.user)),localStorage.setItem("auth_type","microsoft"),i(S.data.access_token),n(S.data.user),console.log("Microsoft user authenticated and stored"),ae.success("Successfully signed in with Microsoft!"))}}catch(w){throw console.error("Microsoft login failed:",w),w.name==="BrowserAuthError"&&w.errorCode==="popup_window_error"?ae.error("Sign-in cancelled",{description:"The sign-in popup was closed before completing authentication."}):w.name==="InteractionRequiredAuthError"?ae.error("Authentication required",{description:"Please complete the authentication process."}):ae.error("Microsoft sign-in failed",{description:w.message||"An error occurred during authentication"}),w}finally{l(!1)}},m=async()=>{const w=localStorage.getItem("auth_type");if(localStorage.removeItem("auth_token"),localStorage.removeItem("user"),localStorage.removeItem("auth_type"),i(null),n(null),w==="microsoft"&&f.length>0)try{await d.logoutPopup({account:f[0],postLogoutRedirectUri:window.location.origin+"/semblance/"})}catch(S){console.error("Microsoft logout error:",S)}ae.info("You have been logged out")},y=!!localStorage.getItem("auth_token"),x={user:e,token:r,isLoading:o,login:p,loginWithMicrosoft:v,logout:m,isAuthenticated:!!r||y,isMsalLoading:c};return a.jsx(h6.Provider,{value:x,children:t})}function ia(){const t=g.useContext(h6);if(t===void 0)throw new Error("useAuth must be used within an AuthProvider");return t}function ka(){const[t,e]=g.useState(!1),n=Ui(),r=ur(),{isAuthenticated:i,logout:o}=ia(),s=[{name:"Home",href:"/",icon:Ax},{name:"Synthetic Personas",href:"/synthetic-users",icon:Fr},{name:"Focus Groups",href:"/focus-groups",icon:Xs},{name:"Dashboard",href:"/dashboard",icon:DA}],c=()=>{e(!t)},l=d=>n.pathname===d,u=d=>{if(d==="/synthetic-users"){const f=new CustomEvent("syntheticUsersNavigation");window.dispatchEvent(f)}r(d)};return a.jsxs("header",{className:"fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200/80",children:[a.jsx("div",{className:"px-4 sm:px-6 lg:px-8",children:a.jsxs("div",{className:"flex h-16 items-center justify-between",children:[a.jsx("div",{className:"flex items-center",children:a.jsx(Co,{to:"/",className:"flex items-center",children:a.jsx("span",{className:"font-sf text-2xl font-semibold text-gradient",children:"Semblance"})})}),a.jsx("nav",{className:"hidden md:block",children:a.jsxs("ul",{className:"flex items-center space-x-8",children:[s.map(d=>a.jsx("li",{children:d.href==="/"?a.jsxs(Co,{to:d.href,className:Le("flex items-center px-1 py-2 text-sm font-medium hover-transition border-b-2",l(d.href)?"border-primary text-primary":"border-transparent text-slate-600 hover:text-slate-900 hover:border-slate-300"),children:[a.jsx(d.icon,{className:"mr-1 h-4 w-4"}),d.name]}):a.jsxs("button",{onClick:()=>u(d.href),className:Le("flex items-center px-1 py-2 text-sm font-medium hover-transition border-b-2",l(d.href)?"border-primary text-primary":"border-transparent text-slate-600 hover:text-slate-900 hover:border-slate-300"),children:[a.jsx(d.icon,{className:"mr-1 h-4 w-4"}),d.name]})},d.name)),a.jsx("li",{children:i?a.jsxs("button",{onClick:()=>{o(),r("/login")},className:"flex items-center px-3 py-2 text-sm font-medium text-slate-600 hover:text-slate-900 button-transition rounded-md hover:bg-slate-50",children:[a.jsx(sR,{className:"mr-1 h-4 w-4"}),"Logout"]}):a.jsxs(Co,{to:"/login",className:"flex items-center px-3 py-2 text-sm font-medium text-slate-600 hover:text-slate-900 button-transition rounded-md hover:bg-slate-50",children:[a.jsx(oR,{className:"mr-1 h-4 w-4"}),"Login"]})})]})}),a.jsx("div",{className:"flex md:hidden",children:a.jsxs("button",{type:"button",className:"inline-flex items-center justify-center rounded-md p-2 text-slate-700 hover:bg-slate-100 hover:text-slate-900 button-transition",onClick:c,children:[a.jsx("span",{className:"sr-only",children:"Open main menu"}),t?a.jsx(Mi,{className:"block h-6 w-6","aria-hidden":"true"}):a.jsx(Qee,{className:"block h-6 w-6","aria-hidden":"true"})]})})]})}),t&&a.jsx("div",{className:"md:hidden glass-panel animate-fade-in",children:a.jsxs("div",{className:"space-y-1 px-4 pb-3 pt-2",children:[s.map(d=>a.jsx("div",{children:d.href==="/"?a.jsxs(Co,{to:d.href,className:Le("flex items-center rounded-md px-3 py-2 text-base font-medium button-transition",l(d.href)?"bg-primary text-white":"text-slate-600 hover:bg-slate-50 hover:text-slate-900"),onClick:()=>e(!1),children:[a.jsx(d.icon,{className:"mr-3 h-5 w-5"}),d.name]}):a.jsxs("button",{className:Le("flex items-center rounded-md px-3 py-2 text-base font-medium button-transition w-full text-left",l(d.href)?"bg-primary text-white":"text-slate-600 hover:bg-slate-50 hover:text-slate-900"),onClick:()=>{e(!1),u(d.href)},children:[a.jsx(d.icon,{className:"mr-3 h-5 w-5"}),d.name]})},d.name)),i?a.jsxs("button",{onClick:()=>{o(),e(!1),r("/login")},className:"flex items-center rounded-md px-3 py-2 text-base font-medium button-transition text-slate-600 hover:bg-slate-50 hover:text-slate-900 w-full",children:[a.jsx(sR,{className:"mr-3 h-5 w-5"}),"Logout"]}):a.jsxs(Co,{to:"/login",className:"flex items-center rounded-md px-3 py-2 text-base font-medium button-transition text-slate-600 hover:bg-slate-50 hover:text-slate-900",onClick:()=>e(!1),children:[a.jsx(oR,{className:"mr-3 h-5 w-5"}),"Login"]})]})})]})}const s2=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,a2=Mt,YT=(t,e)=>n=>{var r;if((e==null?void 0:e.variants)==null)return a2(t,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:i,defaultVariants:o}=e,s=Object.keys(i).map(u=>{const d=n==null?void 0:n[u],f=o==null?void 0:o[u];if(d===null)return null;const h=s2(d)||s2(f);return i[u][h]}),c=n&&Object.entries(n).reduce((u,d)=>{let[f,h]=d;return h===void 0||(u[f]=h),u},{}),l=e==null||(r=e.compoundVariants)===null||r===void 0?void 0:r.reduce((u,d)=>{let{class:f,className:h,...p}=d;return Object.entries(p).every(v=>{let[m,y]=v;return Array.isArray(y)?y.includes({...o,...c}[m]):{...o,...c}[m]===y})?[...u,f,h]:u},[]);return a2(t,s,l,n==null?void 0:n.class,n==null?void 0:n.className)},QT=YT("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),se=g.forwardRef(({className:t,variant:e,size:n,asChild:r=!1,...i},o)=>{const s=r?Ys:"button";return a.jsx(s,{className:Le(QT({variant:e,size:n,className:t})),ref:o,...i})});se.displayName="Button";function Kse(){return a.jsxs("div",{className:"relative isolate overflow-hidden",children:[a.jsx("div",{className:"absolute inset-x-0 top-[-10rem] -z-10 transform-gpu overflow-hidden blur-3xl sm:top-[-20rem]","aria-hidden":"true",children:a.jsx("div",{className:"relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-primary to-blue-400 opacity-20 sm:left-[calc(50%-30rem)] sm:w-[72.1875rem]",style:{clipPath:"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"}})}),a.jsxs("div",{className:"mx-auto max-w-7xl px-6 py-24 sm:py-32 lg:flex lg:items-center lg:gap-x-10 lg:px-8 lg:py-40",children:[a.jsxs("div",{className:"mx-auto max-w-2xl lg:mx-0 lg:flex-auto",children:[a.jsx("div",{className:"flex",children:a.jsxs("div",{className:"relative flex items-center gap-x-4 rounded-full px-4 py-1 text-sm leading-6 text-gray-600 ring-1 ring-gray-900/10 hover:ring-gray-900/20",children:[a.jsx("span",{className:"font-semibold text-primary",children:"New"}),a.jsx("span",{className:"h-4 w-px bg-gray-900/10","aria-hidden":"true"}),a.jsx("span",{children:"Introducing AI-driven focus groups"})]})}),a.jsxs("h1",{className:"mt-10 max-w-lg text-4xl font-sf font-bold tracking-tight text-gray-900 sm:text-6xl",children:["Research with ",a.jsx("span",{className:"text-gradient",children:"synthetic personas"})]}),a.jsx("p",{className:"mt-6 text-lg leading-8 text-gray-600",children:"Conduct research using AI-powered synthetic personas and autonomous focus groups. Gain valuable insights without the limitations of traditional research methods."}),a.jsxs("div",{className:"mt-10 flex items-center gap-x-6",children:[a.jsx(Co,{to:"/synthetic-users",children:a.jsxs(se,{className:"px-6 py-6 text-base hover:shadow-lg hover:translate-y-[-2px] button-transition",children:["Create synthetic personas",a.jsx(po,{className:"ml-2 h-4 w-4"})]})}),a.jsxs(Co,{to:"/focus-groups",className:"text-sm font-semibold leading-6 text-gray-900 hover:text-primary button-transition",children:["Set up focus groups ",a.jsx("span",{"aria-hidden":"true",children:"→"})]})]})]}),a.jsx("div",{className:"mt-16 sm:mt-24 lg:mt-0 lg:flex-shrink-0 lg:flex-grow",children:a.jsxs("div",{className:"relative glass-card mx-auto w-[350px] h-[450px] rounded-2xl shadow-xl overflow-hidden animate-float",children:[a.jsxs("div",{className:"absolute top-4 left-4 right-4 h-12 bg-white/70 backdrop-blur-sm rounded-lg flex items-center px-4",children:[a.jsx("div",{className:"h-3 w-3 rounded-full bg-red-400 mr-2"}),a.jsx("div",{className:"h-3 w-3 rounded-full bg-yellow-400 mr-2"}),a.jsx("div",{className:"h-3 w-3 rounded-full bg-green-400 mr-2"}),a.jsx("div",{className:"text-xs text-gray-500 ml-2",children:"Shampoo Brand Perception"})]}),a.jsx("div",{className:"absolute top-20 left-4 right-4 bottom-4 bg-gray-50 rounded-lg overflow-hidden",children:[1,2,3,4].map(t=>a.jsx("div",{className:`flex ${t%2===0?"justify-end":"justify-start"} px-3 py-2`,children:a.jsxs("div",{className:`max-w-[70%] rounded-lg px-3 py-2 text-xs ${t%2===0?"bg-primary text-white":"bg-gray-200 text-gray-800"}`,children:[t===1&&"What qualities do you look for in a premium shampoo brand?",t===2&&"I value natural ingredients and a brand that feels luxurious but still eco-friendly.",t===3&&"How important is fragrance in your shampoo selection?",t===4&&"Very important - it affects my mood and how I feel about the product throughout the day."]})},t))})]})})]}),a.jsx("div",{className:"absolute inset-x-0 bottom-[-10rem] -z-10 transform-gpu overflow-hidden blur-3xl sm:bottom-[-20rem]","aria-hidden":"true",children:a.jsx("div",{className:"relative left-[calc(50%+11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-blue-400 to-primary opacity-20 sm:left-[calc(50%+30rem)] sm:w-[72.1875rem]",style:{clipPath:"polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 85.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 27.5% 76.7%, 0.1% 64.9%, 17.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 74.1% 44.1%)"}})})]})}function Gu({title:t,description:e,icon:n,className:r}){return a.jsxs("div",{className:Le("relative group glass-card rounded-xl overflow-hidden p-6 hover:shadow-lg hover:translate-y-[-4px] button-transition",r),children:[a.jsx("div",{className:"absolute inset-0 bg-gradient-to-r from-primary/5 to-blue-400/5 opacity-0 group-hover:opacity-100 transition-opacity duration-300"}),a.jsxs("div",{className:"relative",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-12 h-12 flex items-center justify-center mb-4",children:a.jsx(n,{className:"h-6 w-6 text-primary"})}),a.jsx("h3",{className:"font-sf text-lg font-semibold mb-2",children:t}),a.jsx("p",{className:"text-gray-600 text-sm",children:e})]})]})}const Wse=()=>(ia(),ur(),a.jsxs("div",{className:"min-h-screen overflow-hidden bg-background",children:[a.jsx(ka,{}),a.jsx("main",{children:a.jsxs("div",{className:"pt-16",children:[a.jsx(Kse,{}),a.jsx("section",{className:"py-20 px-6 bg-white",children:a.jsxs("div",{className:"max-w-7xl mx-auto",children:[a.jsxs("div",{className:"text-center mb-16",children:[a.jsx("h2",{className:"text-3xl font-sf font-bold sm:text-4xl",children:"Why Synthetic Personas?"}),a.jsx("p",{className:"mt-4 text-lg text-gray-600 max-w-3xl mx-auto",children:"Our platform combines advanced AI with intuitive design to help researchers gain deeper insights faster than traditional methods."})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:[a.jsx(Gu,{title:"Scalable Research",description:"Create and test with thousands of synthetic personas, each with unique demographic profiles and behaviors.",icon:Fr}),a.jsx(Gu,{title:"AI-Driven Focus Groups",description:"Run autonomous focus groups moderated by AI that adapts to participant responses in real-time.",icon:Xs}),a.jsx(Gu,{title:"Instant Analysis",description:"Generate comprehensive reports and visualizations that highlight key insights and patterns.",icon:DA}),a.jsx(Gu,{title:"Diverse Perspectives",description:"Access synthetic personas from various backgrounds, ensuring representation across age, gender, and location.",icon:Fr}),a.jsx(Gu,{title:"Dynamic Discussions",description:"AI moderators guide conversations naturally, following up on interesting points without bias.",icon:rte}),a.jsx(Gu,{title:"Comprehensive Reporting",description:"Export detailed reports with sentiment analysis, key themes, and actionable recommendations.",icon:DA})]})]})}),a.jsx("section",{className:"py-20 px-6 bg-gradient-to-b from-white to-slate-50",children:a.jsxs("div",{className:"max-w-7xl mx-auto",children:[a.jsxs("div",{className:"text-center mb-16",children:[a.jsx("h2",{className:"text-3xl font-sf font-bold sm:text-4xl",children:"How It Works"}),a.jsx("p",{className:"mt-4 text-lg text-gray-600 max-w-3xl mx-auto",children:"Just three simple steps to gather valuable insights from synthetic personas."})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8",children:[a.jsxs("div",{className:"text-center p-6",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-16 h-16 flex items-center justify-center mx-auto mb-4",children:a.jsx("span",{className:"text-2xl font-bold text-primary",children:"1"})}),a.jsx("h3",{className:"text-xl font-sf font-semibold mb-3",children:"Create Synthetic Personas"}),a.jsx("p",{className:"text-gray-600",children:"Define your target audience with customizable demographic profiles and personality traits."})]}),a.jsxs("div",{className:"text-center p-6",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-16 h-16 flex items-center justify-center mx-auto mb-4",children:a.jsx("span",{className:"text-2xl font-bold text-primary",children:"2"})}),a.jsx("h3",{className:"text-xl font-sf font-semibold mb-3",children:"Set Up Focus Groups"}),a.jsx("p",{className:"text-gray-600",children:"Configure your research objectives, topics, and parameters for the AI moderator."})]}),a.jsxs("div",{className:"text-center p-6",children:[a.jsx("div",{className:"rounded-full bg-primary/10 w-16 h-16 flex items-center justify-center mx-auto mb-4",children:a.jsx("span",{className:"text-2xl font-bold text-primary",children:"3"})}),a.jsx("h3",{className:"text-xl font-sf font-semibold mb-3",children:"Analyze Results"}),a.jsx("p",{className:"text-gray-600",children:"Review comprehensive visual reports and actionable insights from your synthetic research."})]})]}),a.jsx("div",{className:"text-center mt-12",children:a.jsx(Co,{to:"synthetic-users",className:"inline-flex items-center justify-center px-6 py-3 border border-transparent text-base font-medium rounded-md text-white bg-primary hover:bg-primary/90 button-transition",children:"Get Started"})})]})}),a.jsxs("footer",{className:"bg-white py-12 px-6",children:[a.jsxs("div",{className:"max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center",children:[a.jsxs("div",{className:"mb-6 md:mb-0",children:[a.jsx("span",{className:"text-xl font-sf font-semibold text-gradient",children:"Semblance"}),a.jsx("p",{className:"text-sm text-gray-500 mt-2",children:"AI-powered synthetic persona research"})]}),a.jsxs("div",{className:"flex flex-col md:flex-row gap-8",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Platform"}),a.jsxs("ul",{className:"space-y-2",children:[a.jsx("li",{children:a.jsx(Co,{to:"/",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Home"})}),a.jsx("li",{children:a.jsx(Co,{to:"/synthetic-users",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Synthetic Personas"})}),a.jsx("li",{children:a.jsx(Co,{to:"/focus-groups",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Focus Groups"})}),a.jsx("li",{children:a.jsx(Co,{to:"/dashboard",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Dashboard"})})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Company"}),a.jsxs("ul",{className:"space-y-2",children:[a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"About"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Blog"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Careers"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Contact"})})]})]}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-sm font-semibold text-gray-900 mb-3",children:"Legal"}),a.jsxs("ul",{className:"space-y-2",children:[a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Privacy"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Terms"})}),a.jsx("li",{children:a.jsx("a",{href:"#",className:"text-sm text-gray-600 hover:text-primary button-transition",children:"Security"})})]})]})]})]}),a.jsx("div",{className:"max-w-7xl mx-auto mt-8 pt-8 border-t border-gray-200",children:a.jsxs("p",{className:"text-sm text-gray-500 text-center",children:["© ",new Date().getFullYear()," Semblance. All rights reserved."]})})]})]})})]})),qse=()=>{const t=Ui(),e=ur();g.useEffect(()=>{console.error("404 Error: User attempted to access non-existent route:",t.pathname)},[t.pathname]);const n=t.pathname.startsWith("/synthetic-users/"),i=new URLSearchParams(t.search).get("fromReview")==="true";return a.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-100",children:a.jsxs("div",{className:"text-center p-8 max-w-md bg-white rounded-lg shadow-md",children:[a.jsx("h1",{className:"text-4xl font-bold mb-4",children:"404"}),n?a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-xl text-gray-600 mb-4",children:"Persona Not Found"}),a.jsx("p",{className:"text-gray-500 mb-6",children:"The persona you're looking for may have been removed or doesn't exist."}),i?a.jsx(se,{onClick:()=>e("/synthetic-users?mode=create&tab=ai&step=review"),className:"mb-2 w-full",children:"Return to Review Page"}):a.jsx(se,{onClick:()=>e("/synthetic-users"),className:"mb-2 w-full",children:"View All Personas"})]}):a.jsxs(a.Fragment,{children:[a.jsx("p",{className:"text-xl text-gray-600 mb-4",children:"Oops! Page not found"}),a.jsx("p",{className:"text-gray-500 mb-6",children:"The page you're looking for doesn't exist or has been moved."})]}),a.jsx(se,{variant:"outline",onClick:()=>e("/"),className:"w-full",children:"Return to Home"})]})})},p6=g.createContext(void 0),PC="synthetic-society-navigation-state",Yse=({children:t})=>{const[e,n]=g.useState(()=>{try{const o=localStorage.getItem(PC);return o?JSON.parse(o):{}}catch{return{}}});g.useEffect(()=>{localStorage.setItem(PC,JSON.stringify(e))},[e]);const r=(o,s)=>{n({...e,previousRoute:o,...s})},i=()=>{n({}),localStorage.removeItem(PC)};return a.jsx(p6.Provider,{value:{navigationState:e,setNavigationState:n,clearNavigationState:i,setPreviousRoute:r},children:t})},Ug=()=>{const t=g.useContext(p6);if(!t)throw new Error("useNavigation must be used within a NavigationProvider");return t};function Qse(t,e=[]){let n=[];function r(o,s){const c=g.createContext(s),l=n.length;n=[...n,s];function u(f){const{scope:h,children:p,...v}=f,m=(h==null?void 0:h[t][l])||c,y=g.useMemo(()=>v,Object.values(v));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,v=g.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${f}\` must be used within \`${o}\``)}return u.displayName=o+"Provider",[u,d]}const i=()=>{const o=n.map(s=>g.createContext(s));return function(c){const l=(c==null?void 0:c[t])||o;return g.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,Xse(i,...e)]}function Xse(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(o)[`__scope${u}`];return{...c,...f}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])}};return n.scopeName=e.scopeName,n}var XT="Progress",JT=100,[Jse,WBe]=Qse(XT),[Zse,eae]=Jse(XT),m6=g.forwardRef((t,e)=>{const{__scopeProgress:n,value:r=null,max:i,getValueLabel:o=tae,...s}=t;(i||i===0)&&!c2(i)&&console.error(nae(`${i}`,"Progress"));const c=c2(i)?i:JT;r!==null&&!l2(r,c)&&console.error(rae(`${r}`,"Progress"));const l=l2(r,c)?r:null,u=Jx(l)?o(l,c):void 0;return a.jsx(Zse,{scope:n,value:l,max:c,children:a.jsx(ht.div,{"aria-valuemax":c,"aria-valuemin":0,"aria-valuenow":Jx(l)?l:void 0,"aria-valuetext":u,role:"progressbar","data-state":y6(l,c),"data-value":l??void 0,"data-max":c,...s,ref:e})})});m6.displayName=XT;var g6="ProgressIndicator",v6=g.forwardRef((t,e)=>{const{__scopeProgress:n,...r}=t,i=eae(g6,n);return a.jsx(ht.div,{"data-state":y6(i.value,i.max),"data-value":i.value??void 0,"data-max":i.max,...r,ref:e})});v6.displayName=g6;function tae(t,e){return`${Math.round(t/e*100)}%`}function y6(t,e){return t==null?"indeterminate":t===e?"complete":"loading"}function Jx(t){return typeof t=="number"}function c2(t){return Jx(t)&&!isNaN(t)&&t>0}function l2(t,e){return Jx(t)&&!isNaN(t)&&t<=e&&t>=0}function nae(t,e){return`Invalid prop \`max\` of value \`${t}\` supplied to \`${e}\`. Only numbers greater than 0 are valid max values. Defaulting to \`${JT}\`.`}function rae(t,e){return`Invalid prop \`value\` of value \`${t}\` supplied to \`${e}\`. The \`value\` prop must be: + - a positive number + - less than the value passed to \`max\` (or ${JT} if no \`max\` prop is set) + - \`null\` or \`undefined\` if the progress is indeterminate. + +Defaulting to \`null\`.`}var x6=m6,iae=v6;const Pc=g.forwardRef(({className:t,value:e,...n},r)=>a.jsx(x6,{ref:r,className:Le("relative h-4 w-full overflow-hidden rounded-full bg-secondary",t),...n,children:a.jsx(iae,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(e||0)}%)`}})}));Pc.displayName=x6.displayName;var zg=t=>t.type==="checkbox",Gl=t=>t instanceof Date,pi=t=>t==null;const b6=t=>typeof t=="object";var lr=t=>!pi(t)&&!Array.isArray(t)&&b6(t)&&!Gl(t),w6=t=>lr(t)&&t.target?zg(t.target)?t.target.checked:t.target.value:t,oae=t=>t.substring(0,t.search(/\.\d+(\.|$)/))||t,S6=(t,e)=>t.has(oae(e)),sae=t=>{const e=t.constructor&&t.constructor.prototype;return lr(e)&&e.hasOwnProperty("isPrototypeOf")},ZT=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function Ai(t){let e;const n=Array.isArray(t);if(t instanceof Date)e=new Date(t);else if(t instanceof Set)e=new Set(t);else if(!(ZT&&(t instanceof Blob||t instanceof FileList))&&(n||lr(t)))if(e=n?[]:{},!n&&!sae(t))e=t;else for(const r in t)t.hasOwnProperty(r)&&(e[r]=Ai(t[r]));else return t;return e}var jw=t=>Array.isArray(t)?t.filter(Boolean):[],ir=t=>t===void 0,He=(t,e,n)=>{if(!e||!lr(t))return n;const r=jw(e.split(/[,[\].]+?/)).reduce((i,o)=>pi(i)?i:i[o],t);return ir(r)||r===t?ir(t[e])?n:t[e]:r},go=t=>typeof t=="boolean",ek=t=>/^\w*$/.test(t),C6=t=>jw(t.replace(/["|']|\]/g,"").split(/\.|\[/)),gn=(t,e,n)=>{let r=-1;const i=ek(e)?[e]:C6(e),o=i.length,s=o-1;for(;++rT.useContext(_6),aae=t=>{const{children:e,...n}=t;return T.createElement(_6.Provider,{value:n},e)};var A6=(t,e,n,r=!0)=>{const i={defaultValues:e._defaultValues};for(const o in t)Object.defineProperty(i,o,{get:()=>{const s=o;return e._proxyFormState[s]!==Jo.all&&(e._proxyFormState[s]=!r||Jo.all),n&&(n[s]=!0),t[s]}});return i},ji=t=>lr(t)&&!Object.keys(t).length,j6=(t,e,n,r)=>{n(t);const{name:i,...o}=t;return ji(o)||Object.keys(o).length>=Object.keys(e).length||Object.keys(o).find(s=>e[s]===(!r||Jo.all))},Tp=t=>Array.isArray(t)?t:[t],E6=(t,e,n)=>!t||!e||t===e||Tp(t).some(r=>r&&(n?r===e:r.startsWith(e)||e.startsWith(r)));function tk(t){const e=T.useRef(t);e.current=t,T.useEffect(()=>{const n=!t.disabled&&e.current.subject&&e.current.subject.subscribe({next:e.current.next});return()=>{n&&n.unsubscribe()}},[t.disabled])}function cae(t){const e=Ew(),{control:n=e.control,disabled:r,name:i,exact:o}=t||{},[s,c]=T.useState(n._formState),l=T.useRef(!0),u=T.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1}),d=T.useRef(i);return d.current=i,tk({disabled:r,next:f=>l.current&&E6(d.current,f.name,o)&&j6(f,u.current,n._updateFormState)&&c({...n._formState,...f}),subject:n._subjects.state}),T.useEffect(()=>(l.current=!0,u.current.isValid&&n._updateValid(!0),()=>{l.current=!1}),[n]),A6(s,n,u.current,!1)}var Fs=t=>typeof t=="string",N6=(t,e,n,r,i)=>Fs(t)?(r&&e.watch.add(t),He(n,t,i)):Array.isArray(t)?t.map(o=>(r&&e.watch.add(o),He(n,o))):(r&&(e.watchAll=!0),n);function lae(t){const e=Ew(),{control:n=e.control,name:r,defaultValue:i,disabled:o,exact:s}=t||{},c=T.useRef(r);c.current=r,tk({disabled:o,subject:n._subjects.values,next:d=>{E6(c.current,d.name,s)&&u(Ai(N6(c.current,n._names,d.values||n._formValues,!1,i)))}});const[l,u]=T.useState(n._getWatch(r,i));return T.useEffect(()=>n._removeUnmounted()),l}function uae(t){const e=Ew(),{name:n,disabled:r,control:i=e.control,shouldUnregister:o}=t,s=S6(i._names.array,n),c=lae({control:i,name:n,defaultValue:He(i._formValues,n,He(i._defaultValues,n,t.defaultValue)),exact:!0}),l=cae({control:i,name:n,exact:!0}),u=T.useRef(i.register(n,{...t.rules,value:c,...go(t.disabled)?{disabled:t.disabled}:{}}));return T.useEffect(()=>{const d=i._options.shouldUnregister||o,f=(h,p)=>{const v=He(i._fields,h);v&&v._f&&(v._f.mount=p)};if(f(n,!0),d){const h=Ai(He(i._options.defaultValues,n));gn(i._defaultValues,n,h),ir(He(i._formValues,n))&&gn(i._formValues,n,h)}return()=>{(s?d&&!i._state.action:d)?i.unregister(n):f(n,!1)}},[n,i,s,o]),T.useEffect(()=>{He(i._fields,n)&&i._updateDisabledField({disabled:r,fields:i._fields,name:n,value:He(i._fields,n)._f.value})},[r,n,i]),{field:{name:n,value:c,...go(r)||l.disabled?{disabled:l.disabled||r}:{},onChange:T.useCallback(d=>u.current.onChange({target:{value:w6(d),name:n},type:Zx.CHANGE}),[n]),onBlur:T.useCallback(()=>u.current.onBlur({target:{value:He(i._formValues,n),name:n},type:Zx.BLUR}),[n,i]),ref:T.useCallback(d=>{const f=He(i._fields,n);f&&d&&(f._f.ref={focus:()=>d.focus(),select:()=>d.select(),setCustomValidity:h=>d.setCustomValidity(h),reportValidity:()=>d.reportValidity()})},[i._fields,n])},formState:l,fieldState:Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!He(l.errors,n)},isDirty:{enumerable:!0,get:()=>!!He(l.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!He(l.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!He(l.validatingFields,n)},error:{enumerable:!0,get:()=>He(l.errors,n)}})}}const dae=t=>t.render(uae(t));var T6=(t,e,n,r,i)=>e?{...n[t],types:{...n[t]&&n[t].types?n[t].types:{},[r]:i||!0}}:{},u2=t=>({isOnSubmit:!t||t===Jo.onSubmit,isOnBlur:t===Jo.onBlur,isOnChange:t===Jo.onChange,isOnAll:t===Jo.all,isOnTouch:t===Jo.onTouched}),d2=(t,e,n)=>!n&&(e.watchAll||e.watch.has(t)||[...e.watch].some(r=>t.startsWith(r)&&/^\.\w+/.test(t.slice(r.length))));const kp=(t,e,n,r)=>{for(const i of n||Object.keys(t)){const o=He(t,i);if(o){const{_f:s,...c}=o;if(s){if(s.refs&&s.refs[0]&&e(s.refs[0],i)&&!r)return!0;if(s.ref&&e(s.ref,s.name)&&!r)return!0;if(kp(c,e))break}else if(lr(c)&&kp(c,e))break}}};var fae=(t,e,n)=>{const r=Tp(He(t,n));return gn(r,"root",e[n]),gn(t,n,r),t},nk=t=>t.type==="file",Aa=t=>typeof t=="function",eb=t=>{if(!ZT)return!1;const e=t?t.ownerDocument:0;return t instanceof(e&&e.defaultView?e.defaultView.HTMLElement:HTMLElement)},Dy=t=>Fs(t),rk=t=>t.type==="radio",tb=t=>t instanceof RegExp;const f2={value:!1,isValid:!1},h2={value:!0,isValid:!0};var k6=t=>{if(Array.isArray(t)){if(t.length>1){const e=t.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:e,isValid:!!e.length}}return t[0].checked&&!t[0].disabled?t[0].attributes&&!ir(t[0].attributes.value)?ir(t[0].value)||t[0].value===""?h2:{value:t[0].value,isValid:!0}:h2:f2}return f2};const p2={isValid:!1,value:null};var P6=t=>Array.isArray(t)?t.reduce((e,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:e,p2):p2;function m2(t,e,n="validate"){if(Dy(t)||Array.isArray(t)&&t.every(Dy)||go(t)&&!t)return{type:n,message:Dy(t)?t:"",ref:e}}var Vu=t=>lr(t)&&!tb(t)?t:{value:t,message:""},g2=async(t,e,n,r,i)=>{const{ref:o,refs:s,required:c,maxLength:l,minLength:u,min:d,max:f,pattern:h,validate:p,name:v,valueAsNumber:m,mount:y,disabled:b}=t._f,x=He(e,v);if(!y||b)return{};const w=s?s[0]:o,S=E=>{r&&w.reportValidity&&(w.setCustomValidity(go(E)?"":E||""),w.reportValidity())},C={},_=rk(o),A=zg(o),j=_||A,N=(m||nk(o))&&ir(o.value)&&ir(x)||eb(o)&&o.value===""||x===""||Array.isArray(x)&&!x.length,k=T6.bind(null,v,n,C),O=(E,R,D,G=ua.maxLength,L=ua.minLength)=>{const z=E?R:D;C[v]={type:E?G:L,message:z,ref:o,...k(E?G:L,z)}};if(i?!Array.isArray(x)||!x.length:c&&(!j&&(N||pi(x))||go(x)&&!x||A&&!k6(s).isValid||_&&!P6(s).isValid)){const{value:E,message:R}=Dy(c)?{value:!!c,message:c}:Vu(c);if(E&&(C[v]={type:ua.required,message:R,ref:w,...k(ua.required,R)},!n))return S(R),C}if(!N&&(!pi(d)||!pi(f))){let E,R;const D=Vu(f),G=Vu(d);if(!pi(x)&&!isNaN(x)){const L=o.valueAsNumber||x&&+x;pi(D.value)||(E=L>D.value),pi(G.value)||(R=Lnew Date(new Date().toDateString()+" "+Q),M=o.type=="time",$=o.type=="week";Fs(D.value)&&x&&(E=M?z(x)>z(D.value):$?x>D.value:L>new Date(D.value)),Fs(G.value)&&x&&(R=M?z(x)+E.value,G=!pi(R.value)&&x.length<+R.value;if((D||G)&&(O(D,E.message,R.message),!n))return S(C[v].message),C}if(h&&!N&&Fs(x)){const{value:E,message:R}=Vu(h);if(tb(E)&&!x.match(E)&&(C[v]={type:ua.pattern,message:R,ref:o,...k(ua.pattern,R)},!n))return S(R),C}if(p){if(Aa(p)){const E=await p(x,e),R=m2(E,w);if(R&&(C[v]={...R,...k(ua.validate,R.message)},!n))return S(R.message),C}else if(lr(p)){let E={};for(const R in p){if(!ji(E)&&!n)break;const D=m2(await p[R](x,e),w,R);D&&(E={...D,...k(R,D.message)},S(D.message),n&&(C[v]=E))}if(!ji(E)&&(C[v]={ref:w,...E},!n))return C}}return S(!0),C};function hae(t,e){const n=e.slice(0,-1).length;let r=0;for(;r{let t=[];return{get observers(){return t},next:i=>{for(const o of t)o.next&&o.next(i)},subscribe:i=>(t.push(i),{unsubscribe:()=>{t=t.filter(o=>o!==i)}}),unsubscribe:()=>{t=[]}}},a1=t=>pi(t)||!b6(t);function xc(t,e){if(a1(t)||a1(e))return t===e;if(Gl(t)&&Gl(e))return t.getTime()===e.getTime();const n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(const i of n){const o=t[i];if(!r.includes(i))return!1;if(i!=="ref"){const s=e[i];if(Gl(o)&&Gl(s)||lr(o)&&lr(s)||Array.isArray(o)&&Array.isArray(s)?!xc(o,s):o!==s)return!1}}return!0}var O6=t=>t.type==="select-multiple",mae=t=>rk(t)||zg(t),IC=t=>eb(t)&&t.isConnected,I6=t=>{for(const e in t)if(Aa(t[e]))return!0;return!1};function nb(t,e={}){const n=Array.isArray(t);if(lr(t)||n)for(const r in t)Array.isArray(t[r])||lr(t[r])&&!I6(t[r])?(e[r]=Array.isArray(t[r])?[]:{},nb(t[r],e[r])):pi(t[r])||(e[r]=!0);return e}function R6(t,e,n){const r=Array.isArray(t);if(lr(t)||r)for(const i in t)Array.isArray(t[i])||lr(t[i])&&!I6(t[i])?ir(e)||a1(n[i])?n[i]=Array.isArray(t[i])?nb(t[i],[]):{...nb(t[i])}:R6(t[i],pi(e)?{}:e[i],n[i]):n[i]=!xc(t[i],e[i]);return n}var Fh=(t,e)=>R6(t,e,nb(e)),M6=(t,{valueAsNumber:e,valueAsDate:n,setValueAs:r})=>ir(t)?t:e?t===""?NaN:t&&+t:n&&Fs(t)?new Date(t):r?r(t):t;function RC(t){const e=t.ref;if(!(t.refs?t.refs.every(n=>n.disabled):e.disabled))return nk(e)?e.files:rk(e)?P6(t.refs).value:O6(e)?[...e.selectedOptions].map(({value:n})=>n):zg(e)?k6(t.refs).value:M6(ir(e.value)?t.ref.value:e.value,t)}var gae=(t,e,n,r)=>{const i={};for(const o of t){const s=He(e,o);s&&gn(i,o,s._f)}return{criteriaMode:n,names:[...t],fields:i,shouldUseNativeValidation:r}},Bh=t=>ir(t)?t:tb(t)?t.source:lr(t)?tb(t.value)?t.value.source:t.value:t;const v2="AsyncFunction";var vae=t=>(!t||!t.validate)&&!!(Aa(t.validate)&&t.validate.constructor.name===v2||lr(t.validate)&&Object.values(t.validate).find(e=>e.constructor.name===v2)),yae=t=>t.mount&&(t.required||t.min||t.max||t.maxLength||t.minLength||t.pattern||t.validate);function y2(t,e,n){const r=He(t,n);if(r||ek(n))return{error:r,name:n};const i=n.split(".");for(;i.length;){const o=i.join("."),s=He(e,o),c=He(t,o);if(s&&!Array.isArray(s)&&n!==o)return{name:n};if(c&&c.type)return{name:o,error:c};i.pop()}return{name:n}}var xae=(t,e,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(e||t):(n?r.isOnBlur:i.isOnBlur)?!t:(n?r.isOnChange:i.isOnChange)?t:!0,bae=(t,e)=>!jw(He(t,e)).length&&br(t,e);const wae={mode:Jo.onSubmit,reValidateMode:Jo.onChange,shouldFocusError:!0};function Sae(t={}){let e={...wae,...t},n={submitCount:0,isDirty:!1,isLoading:Aa(e.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1},r={},i=lr(e.defaultValues)||lr(e.values)?Ai(e.defaultValues||e.values)||{}:{},o=e.shouldUnregister?{}:Ai(i),s={action:!1,mount:!1,watch:!1},c={mount:new Set,unMount:new Set,array:new Set,watch:new Set},l,u=0;const d={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},f={values:OC(),array:OC(),state:OC()},h=u2(e.mode),p=u2(e.reValidateMode),v=e.criteriaMode===Jo.all,m=F=>J=>{clearTimeout(u),u=setTimeout(F,J)},y=async F=>{if(!t.disabled&&(d.isValid||F)){const J=e.resolver?ji((await j()).errors):await k(r,!0);J!==n.isValid&&f.state.next({isValid:J})}},b=(F,J)=>{!t.disabled&&(d.isValidating||d.validatingFields)&&((F||Array.from(c.mount)).forEach(ie=>{ie&&(J?gn(n.validatingFields,ie,J):br(n.validatingFields,ie))}),f.state.next({validatingFields:n.validatingFields,isValidating:!ji(n.validatingFields)}))},x=(F,J=[],ie,ye,Ee=!0,P=!0)=>{if(ye&&ie&&!t.disabled){if(s.action=!0,P&&Array.isArray(He(r,F))){const H=ie(He(r,F),ye.argA,ye.argB);Ee&&gn(r,F,H)}if(P&&Array.isArray(He(n.errors,F))){const H=ie(He(n.errors,F),ye.argA,ye.argB);Ee&&gn(n.errors,F,H),bae(n.errors,F)}if(d.touchedFields&&P&&Array.isArray(He(n.touchedFields,F))){const H=ie(He(n.touchedFields,F),ye.argA,ye.argB);Ee&&gn(n.touchedFields,F,H)}d.dirtyFields&&(n.dirtyFields=Fh(i,o)),f.state.next({name:F,isDirty:E(F,J),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else gn(o,F,J)},w=(F,J)=>{gn(n.errors,F,J),f.state.next({errors:n.errors})},S=F=>{n.errors=F,f.state.next({errors:n.errors,isValid:!1})},C=(F,J,ie,ye)=>{const Ee=He(r,F);if(Ee){const P=He(o,F,ir(ie)?He(i,F):ie);ir(P)||ye&&ye.defaultChecked||J?gn(o,F,J?P:RC(Ee._f)):G(F,P),s.mount&&y()}},_=(F,J,ie,ye,Ee)=>{let P=!1,H=!1;const ee={name:F};if(!t.disabled){const re=!!(He(r,F)&&He(r,F)._f&&He(r,F)._f.disabled);if(!ie||ye){d.isDirty&&(H=n.isDirty,n.isDirty=ee.isDirty=E(),P=H!==ee.isDirty);const Z=re||xc(He(i,F),J);H=!!(!re&&He(n.dirtyFields,F)),Z||re?br(n.dirtyFields,F):gn(n.dirtyFields,F,!0),ee.dirtyFields=n.dirtyFields,P=P||d.dirtyFields&&H!==!Z}if(ie){const Z=He(n.touchedFields,F);Z||(gn(n.touchedFields,F,ie),ee.touchedFields=n.touchedFields,P=P||d.touchedFields&&Z!==ie)}P&&Ee&&f.state.next(ee)}return P?ee:{}},A=(F,J,ie,ye)=>{const Ee=He(n.errors,F),P=d.isValid&&go(J)&&n.isValid!==J;if(t.delayError&&ie?(l=m(()=>w(F,ie)),l(t.delayError)):(clearTimeout(u),l=null,ie?gn(n.errors,F,ie):br(n.errors,F)),(ie?!xc(Ee,ie):Ee)||!ji(ye)||P){const H={...ye,...P&&go(J)?{isValid:J}:{},errors:n.errors,name:F};n={...n,...H},f.state.next(H)}},j=async F=>{b(F,!0);const J=await e.resolver(o,e.context,gae(F||c.mount,r,e.criteriaMode,e.shouldUseNativeValidation));return b(F),J},N=async F=>{const{errors:J}=await j(F);if(F)for(const ie of F){const ye=He(J,ie);ye?gn(n.errors,ie,ye):br(n.errors,ie)}else n.errors=J;return J},k=async(F,J,ie={valid:!0})=>{for(const ye in F){const Ee=F[ye];if(Ee){const{_f:P,...H}=Ee;if(P){const ee=c.array.has(P.name),re=Ee._f&&vae(Ee._f);re&&d.validatingFields&&b([ye],!0);const Z=await g2(Ee,o,v,e.shouldUseNativeValidation&&!J,ee);if(re&&d.validatingFields&&b([ye]),Z[P.name]&&(ie.valid=!1,J))break;!J&&(He(Z,P.name)?ee?fae(n.errors,Z,P.name):gn(n.errors,P.name,Z[P.name]):br(n.errors,P.name))}!ji(H)&&await k(H,J,ie)}}return ie.valid},O=()=>{for(const F of c.unMount){const J=He(r,F);J&&(J._f.refs?J._f.refs.every(ie=>!IC(ie)):!IC(J._f.ref))&&fe(F)}c.unMount=new Set},E=(F,J)=>!t.disabled&&(F&&J&&gn(o,F,J),!xc(q(),i)),R=(F,J,ie)=>N6(F,c,{...s.mount?o:ir(J)?i:Fs(F)?{[F]:J}:J},ie,J),D=F=>jw(He(s.mount?o:i,F,t.shouldUnregister?He(i,F,[]):[])),G=(F,J,ie={})=>{const ye=He(r,F);let Ee=J;if(ye){const P=ye._f;P&&(!P.disabled&&gn(o,F,M6(J,P)),Ee=eb(P.ref)&&pi(J)?"":J,O6(P.ref)?[...P.ref.options].forEach(H=>H.selected=Ee.includes(H.value)):P.refs?zg(P.ref)?P.refs.length>1?P.refs.forEach(H=>(!H.defaultChecked||!H.disabled)&&(H.checked=Array.isArray(Ee)?!!Ee.find(ee=>ee===H.value):Ee===H.value)):P.refs[0]&&(P.refs[0].checked=!!Ee):P.refs.forEach(H=>H.checked=H.value===Ee):nk(P.ref)?P.ref.value="":(P.ref.value=Ee,P.ref.type||f.values.next({name:F,values:{...o}})))}(ie.shouldDirty||ie.shouldTouch)&&_(F,Ee,ie.shouldTouch,ie.shouldDirty,!0),ie.shouldValidate&&Q(F)},L=(F,J,ie)=>{for(const ye in J){const Ee=J[ye],P=`${F}.${ye}`,H=He(r,P);(c.array.has(F)||lr(Ee)||H&&!H._f)&&!Gl(Ee)?L(P,Ee,ie):G(P,Ee,ie)}},z=(F,J,ie={})=>{const ye=He(r,F),Ee=c.array.has(F),P=Ai(J);gn(o,F,P),Ee?(f.array.next({name:F,values:{...o}}),(d.isDirty||d.dirtyFields)&&ie.shouldDirty&&f.state.next({name:F,dirtyFields:Fh(i,o),isDirty:E(F,P)})):ye&&!ye._f&&!pi(P)?L(F,P,ie):G(F,P,ie),d2(F,c)&&f.state.next({...n}),f.values.next({name:s.mount?F:void 0,values:{...o}})},M=async F=>{s.mount=!0;const J=F.target;let ie=J.name,ye=!0;const Ee=He(r,ie),P=()=>J.type?RC(Ee._f):w6(F),H=ee=>{ye=Number.isNaN(ee)||Gl(ee)&&isNaN(ee.getTime())||xc(ee,He(o,ie,ee))};if(Ee){let ee,re;const Z=P(),Se=F.type===Zx.BLUR||F.type===Zx.FOCUS_OUT,Ae=!yae(Ee._f)&&!e.resolver&&!He(n.errors,ie)&&!Ee._f.deps||xae(Se,He(n.touchedFields,ie),n.isSubmitted,p,h),Ie=d2(ie,c,Se);gn(o,ie,Z),Se?(Ee._f.onBlur&&Ee._f.onBlur(F),l&&l(0)):Ee._f.onChange&&Ee._f.onChange(F);const Ve=_(ie,Z,Se,!1),Be=!ji(Ve)||Ie;if(!Se&&f.values.next({name:ie,type:F.type,values:{...o}}),Ae)return d.isValid&&(t.mode==="onBlur"?Se&&y():y()),Be&&f.state.next({name:ie,...Ie?{}:Ve});if(!Se&&Ie&&f.state.next({...n}),e.resolver){const{errors:Fe}=await j([ie]);if(H(Z),ye){const nt=y2(n.errors,r,ie),Ne=y2(Fe,r,nt.name||ie);ee=Ne.error,ie=Ne.name,re=ji(Fe)}}else b([ie],!0),ee=(await g2(Ee,o,v,e.shouldUseNativeValidation))[ie],b([ie]),H(Z),ye&&(ee?re=!1:d.isValid&&(re=await k(r,!0)));ye&&(Ee._f.deps&&Q(Ee._f.deps),A(ie,re,ee,Ve))}},$=(F,J)=>{if(He(n.errors,J)&&F.focus)return F.focus(),1},Q=async(F,J={})=>{let ie,ye;const Ee=Tp(F);if(e.resolver){const P=await N(ir(F)?F:Ee);ie=ji(P),ye=F?!Ee.some(H=>He(P,H)):ie}else F?(ye=(await Promise.all(Ee.map(async P=>{const H=He(r,P);return await k(H&&H._f?{[P]:H}:H)}))).every(Boolean),!(!ye&&!n.isValid)&&y()):ye=ie=await k(r);return f.state.next({...!Fs(F)||d.isValid&&ie!==n.isValid?{}:{name:F},...e.resolver||!F?{isValid:ie}:{},errors:n.errors}),J.shouldFocus&&!ye&&kp(r,$,F?Ee:c.mount),ye},q=F=>{const J={...s.mount?o:i};return ir(F)?J:Fs(F)?He(J,F):F.map(ie=>He(J,ie))},te=(F,J)=>({invalid:!!He((J||n).errors,F),isDirty:!!He((J||n).dirtyFields,F),error:He((J||n).errors,F),isValidating:!!He(n.validatingFields,F),isTouched:!!He((J||n).touchedFields,F)}),xe=F=>{F&&Tp(F).forEach(J=>br(n.errors,J)),f.state.next({errors:F?n.errors:{}})},B=(F,J,ie)=>{const ye=(He(r,F,{_f:{}})._f||{}).ref,Ee=He(n.errors,F)||{},{ref:P,message:H,type:ee,...re}=Ee;gn(n.errors,F,{...re,...J,ref:ye}),f.state.next({name:F,errors:n.errors,isValid:!1}),ie&&ie.shouldFocus&&ye&&ye.focus&&ye.focus()},ce=(F,J)=>Aa(F)?f.values.subscribe({next:ie=>F(R(void 0,J),ie)}):R(F,J,!0),fe=(F,J={})=>{for(const ie of F?Tp(F):c.mount)c.mount.delete(ie),c.array.delete(ie),J.keepValue||(br(r,ie),br(o,ie)),!J.keepError&&br(n.errors,ie),!J.keepDirty&&br(n.dirtyFields,ie),!J.keepTouched&&br(n.touchedFields,ie),!J.keepIsValidating&&br(n.validatingFields,ie),!e.shouldUnregister&&!J.keepDefaultValue&&br(i,ie);f.values.next({values:{...o}}),f.state.next({...n,...J.keepDirty?{isDirty:E()}:{}}),!J.keepIsValid&&y()},U=({disabled:F,name:J,field:ie,fields:ye,value:Ee})=>{if(go(F)&&s.mount||F){const P=F?void 0:ir(Ee)?RC(ie?ie._f:He(ye,J)._f):Ee;gn(o,J,P),_(J,P,!1,!1,!0)}},ue=(F,J={})=>{let ie=He(r,F);const ye=go(J.disabled)||go(t.disabled);return gn(r,F,{...ie||{},_f:{...ie&&ie._f?ie._f:{ref:{name:F}},name:F,mount:!0,...J}}),c.mount.add(F),ie?U({field:ie,disabled:go(J.disabled)?J.disabled:t.disabled,name:F,value:J.value}):C(F,!0,J.value),{...ye?{disabled:J.disabled||t.disabled}:{},...e.progressive?{required:!!J.required,min:Bh(J.min),max:Bh(J.max),minLength:Bh(J.minLength),maxLength:Bh(J.maxLength),pattern:Bh(J.pattern)}:{},name:F,onChange:M,onBlur:M,ref:Ee=>{if(Ee){ue(F,J),ie=He(r,F);const P=ir(Ee.value)&&Ee.querySelectorAll&&Ee.querySelectorAll("input,select,textarea")[0]||Ee,H=mae(P),ee=ie._f.refs||[];if(H?ee.find(re=>re===P):P===ie._f.ref)return;gn(r,F,{_f:{...ie._f,...H?{refs:[...ee.filter(IC),P,...Array.isArray(He(i,F))?[{}]:[]],ref:{type:P.type,name:F}}:{ref:P}}}),C(F,!1,void 0,P)}else ie=He(r,F,{}),ie._f&&(ie._f.mount=!1),(e.shouldUnregister||J.shouldUnregister)&&!(S6(c.array,F)&&s.action)&&c.unMount.add(F)}}},oe=()=>e.shouldFocusError&&kp(r,$,c.mount),ne=F=>{go(F)&&(f.state.next({disabled:F}),kp(r,(J,ie)=>{const ye=He(r,ie);ye&&(J.disabled=ye._f.disabled||F,Array.isArray(ye._f.refs)&&ye._f.refs.forEach(Ee=>{Ee.disabled=ye._f.disabled||F}))},0,!1))},je=(F,J)=>async ie=>{let ye;ie&&(ie.preventDefault&&ie.preventDefault(),ie.persist&&ie.persist());let Ee=Ai(o);if(f.state.next({isSubmitting:!0}),e.resolver){const{errors:P,values:H}=await j();n.errors=P,Ee=H}else await k(r);if(br(n.errors,"root"),ji(n.errors)){f.state.next({errors:{}});try{await F(Ee,ie)}catch(P){ye=P}}else J&&await J({...n.errors},ie),oe(),setTimeout(oe);if(f.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:ji(n.errors)&&!ye,submitCount:n.submitCount+1,errors:n.errors}),ye)throw ye},K=(F,J={})=>{He(r,F)&&(ir(J.defaultValue)?z(F,Ai(He(i,F))):(z(F,J.defaultValue),gn(i,F,Ai(J.defaultValue))),J.keepTouched||br(n.touchedFields,F),J.keepDirty||(br(n.dirtyFields,F),n.isDirty=J.defaultValue?E(F,Ai(He(i,F))):E()),J.keepError||(br(n.errors,F),d.isValid&&y()),f.state.next({...n}))},et=(F,J={})=>{const ie=F?Ai(F):i,ye=Ai(ie),Ee=ji(F),P=Ee?i:ye;if(J.keepDefaultValues||(i=ie),!J.keepValues){if(J.keepDirtyValues){const H=new Set([...c.mount,...Object.keys(Fh(i,o))]);for(const ee of Array.from(H))He(n.dirtyFields,ee)?gn(P,ee,He(o,ee)):z(ee,He(P,ee))}else{if(ZT&&ir(F))for(const H of c.mount){const ee=He(r,H);if(ee&&ee._f){const re=Array.isArray(ee._f.refs)?ee._f.refs[0]:ee._f.ref;if(eb(re)){const Z=re.closest("form");if(Z){Z.reset();break}}}}r={}}o=t.shouldUnregister?J.keepDefaultValues?Ai(i):{}:Ai(P),f.array.next({values:{...P}}),f.values.next({values:{...P}})}c={mount:J.keepDirtyValues?c.mount:new Set,unMount:new Set,array:new Set,watch:new Set,watchAll:!1,focus:""},s.mount=!d.isValid||!!J.keepIsValid||!!J.keepDirtyValues,s.watch=!!t.shouldUnregister,f.state.next({submitCount:J.keepSubmitCount?n.submitCount:0,isDirty:Ee?!1:J.keepDirty?n.isDirty:!!(J.keepDefaultValues&&!xc(F,i)),isSubmitted:J.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:Ee?{}:J.keepDirtyValues?J.keepDefaultValues&&o?Fh(i,o):n.dirtyFields:J.keepDefaultValues&&F?Fh(i,F):J.keepDirty?n.dirtyFields:{},touchedFields:J.keepTouched?n.touchedFields:{},errors:J.keepErrors?n.errors:{},isSubmitSuccessful:J.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1})},Me=(F,J)=>et(Aa(F)?F(o):F,J);return{control:{register:ue,unregister:fe,getFieldState:te,handleSubmit:je,setError:B,_executeSchema:j,_getWatch:R,_getDirty:E,_updateValid:y,_removeUnmounted:O,_updateFieldArray:x,_updateDisabledField:U,_getFieldArray:D,_reset:et,_resetDefaultValues:()=>Aa(e.defaultValues)&&e.defaultValues().then(F=>{Me(F,e.resetOptions),f.state.next({isLoading:!1})}),_updateFormState:F=>{n={...n,...F}},_disableForm:ne,_subjects:f,_proxyFormState:d,_setErrors:S,get _fields(){return r},get _formValues(){return o},get _state(){return s},set _state(F){s=F},get _defaultValues(){return i},get _names(){return c},set _names(F){c=F},get _formState(){return n},set _formState(F){n=F},get _options(){return e},set _options(F){e={...e,...F}}},trigger:Q,register:ue,handleSubmit:je,watch:ce,setValue:z,getValues:q,reset:Me,resetField:K,clearErrors:xe,unregister:fe,setError:B,setFocus:(F,J={})=>{const ie=He(r,F),ye=ie&&ie._f;if(ye){const Ee=ye.refs?ye.refs[0]:ye.ref;Ee.focus&&(Ee.focus(),J.shouldSelect&&Ee.select())}},getFieldState:te}}function Nw(t={}){const e=T.useRef(),n=T.useRef(),[r,i]=T.useState({isDirty:!1,isValidating:!1,isLoading:Aa(t.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1,defaultValues:Aa(t.defaultValues)?void 0:t.defaultValues});e.current||(e.current={...Sae(t),formState:r});const o=e.current.control;return o._options=t,tk({subject:o._subjects.state,next:s=>{j6(s,o._proxyFormState,o._updateFormState,!0)&&i({...o._formState})}}),T.useEffect(()=>o._disableForm(t.disabled),[o,t.disabled]),T.useEffect(()=>{if(o._proxyFormState.isDirty){const s=o._getDirty();s!==r.isDirty&&o._subjects.state.next({isDirty:s})}},[o,r.isDirty]),T.useEffect(()=>{t.values&&!xc(t.values,n.current)?(o._reset(t.values,o._options.resetOptions),n.current=t.values,i(s=>({...s}))):o._resetDefaultValues()},[t.values,o]),T.useEffect(()=>{t.errors&&o._setErrors(t.errors)},[t.errors,o]),T.useEffect(()=>{o._state.mount||(o._updateValid(),o._state.mount=!0),o._state.watch&&(o._state.watch=!1,o._subjects.state.next({...o._formState})),o._removeUnmounted()}),T.useEffect(()=>{t.shouldUnregister&&o._subjects.values.next({values:o._getWatch()})},[t.shouldUnregister,o]),T.useEffect(()=>{e.current&&(e.current.watch=e.current.watch.bind({}))},[r]),e.current.formState=A6(r,o),e.current}const x2=(t,e,n)=>{if(t&&"reportValidity"in t){const r=He(n,e);t.setCustomValidity(r&&r.message||""),t.reportValidity()}},D6=(t,e)=>{for(const n in e.fields){const r=e.fields[n];r&&r.ref&&"reportValidity"in r.ref?x2(r.ref,n,t):r.refs&&r.refs.forEach(i=>x2(i,n,t))}},Cae=(t,e)=>{e.shouldUseNativeValidation&&D6(t,e);const n={};for(const r in t){const i=He(e.fields,r),o=Object.assign(t[r]||{},{ref:i&&i.ref});if(_ae(e.names||Object.keys(t),r)){const s=Object.assign({},He(n,r));gn(s,"root",o),gn(n,r,s)}else gn(n,r,o)}return n},_ae=(t,e)=>t.some(n=>n.startsWith(e+"."));var Aae=function(t,e){for(var n={};t.length;){var r=t[0],i=r.code,o=r.message,s=r.path.join(".");if(!n[s])if("unionErrors"in r){var c=r.unionErrors[0].errors[0];n[s]={message:c.message,type:c.code}}else n[s]={message:o,type:i};if("unionErrors"in r&&r.unionErrors.forEach(function(d){return d.errors.forEach(function(f){return t.push(f)})}),e){var l=n[s].types,u=l&&l[r.code];n[s]=T6(s,e,n,i,u?[].concat(u,r.message):r.message)}t.shift()}return n},Tw=function(t,e,n){return n===void 0&&(n={}),function(r,i,o){try{return Promise.resolve(function(s,c){try{var l=Promise.resolve(t[n.mode==="sync"?"parse":"parseAsync"](r,e)).then(function(u){return o.shouldUseNativeValidation&&D6({},o),{errors:{},values:n.raw?r:u}})}catch(u){return c(u)}return l&&l.then?l.then(void 0,c):l}(0,function(s){if(function(c){return Array.isArray(c==null?void 0:c.errors)}(s))return{values:{},errors:Cae(Aae(s.errors,!o.shouldUseNativeValidation&&o.criteriaMode==="all"),o)};throw s}))}catch(s){return Promise.reject(s)}}},an;(function(t){t.assertEqual=i=>i;function e(i){}t.assertIs=e;function n(i){throw new Error}t.assertNever=n,t.arrayToEnum=i=>{const o={};for(const s of i)o[s]=s;return o},t.getValidEnumValues=i=>{const o=t.objectKeys(i).filter(c=>typeof i[i[c]]!="number"),s={};for(const c of o)s[c]=i[c];return t.objectValues(s)},t.objectValues=i=>t.objectKeys(i).map(function(o){return i[o]}),t.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const s in i)Object.prototype.hasOwnProperty.call(i,s)&&o.push(s);return o},t.find=(i,o)=>{for(const s of i)if(o(s))return s},t.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(s=>typeof s=="string"?`'${s}'`:s).join(o)}t.joinValues=r,t.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(an||(an={}));var c1;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(c1||(c1={}));const it=an.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),bc=t=>{switch(typeof t){case"undefined":return it.undefined;case"string":return it.string;case"number":return isNaN(t)?it.nan:it.number;case"boolean":return it.boolean;case"function":return it.function;case"bigint":return it.bigint;case"symbol":return it.symbol;case"object":return Array.isArray(t)?it.array:t===null?it.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?it.promise:typeof Map<"u"&&t instanceof Map?it.map:typeof Set<"u"&&t instanceof Set?it.set:typeof Date<"u"&&t instanceof Date?it.date:it.object;default:return it.unknown}},Re=an.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),jae=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:");class ro extends Error{constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}get errors(){return this.issues}format(e){const n=e||function(o){return o.message},r={_errors:[]},i=o=>{for(const s of o.issues)if(s.code==="invalid_union")s.unionErrors.map(i);else if(s.code==="invalid_return_type")i(s.returnTypeError);else if(s.code==="invalid_arguments")i(s.argumentsError);else if(s.path.length===0)r._errors.push(n(s));else{let c=r,l=0;for(;ln.message){const n={},r=[];for(const i of this.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(e(i))):r.push(e(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}ro.create=t=>new ro(t);const lf=(t,e)=>{let n;switch(t.code){case Re.invalid_type:t.received===it.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case Re.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,an.jsonStringifyReplacer)}`;break;case Re.unrecognized_keys:n=`Unrecognized key(s) in object: ${an.joinValues(t.keys,", ")}`;break;case Re.invalid_union:n="Invalid input";break;case Re.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${an.joinValues(t.options)}`;break;case Re.invalid_enum_value:n=`Invalid enum value. Expected ${an.joinValues(t.options)}, received '${t.received}'`;break;case Re.invalid_arguments:n="Invalid function arguments";break;case Re.invalid_return_type:n="Invalid function return type";break;case Re.invalid_date:n="Invalid date";break;case Re.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:an.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case Re.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case Re.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case Re.custom:n="Invalid input";break;case Re.invalid_intersection_types:n="Intersection results could not be merged";break;case Re.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case Re.not_finite:n="Number must be finite";break;default:n=e.defaultError,an.assertNever(t)}return{message:n}};let $6=lf;function Eae(t){$6=t}function rb(){return $6}const ib=t=>{const{data:e,path:n,errorMaps:r,issueData:i}=t,o=[...n,...i.path||[]],s={...i,path:o};if(i.message!==void 0)return{...i,path:o,message:i.message};let c="";const l=r.filter(u=>!!u).slice().reverse();for(const u of l)c=u(s,{data:e,defaultError:c}).message;return{...i,path:o,message:c}},Nae=[];function Xe(t,e){const n=rb(),r=ib({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===lf?void 0:lf].filter(i=>!!i)});t.common.issues.push(r)}class ai{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){const r=[];for(const i of n){if(i.status==="aborted")return kt;i.status==="dirty"&&e.dirty(),r.push(i.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){const r=[];for(const i of n){const o=await i.key,s=await i.value;r.push({key:o,value:s})}return ai.mergeObjectSync(e,r)}static mergeObjectSync(e,n){const r={};for(const i of n){const{key:o,value:s}=i;if(o.status==="aborted"||s.status==="aborted")return kt;o.status==="dirty"&&e.dirty(),s.status==="dirty"&&e.dirty(),o.value!=="__proto__"&&(typeof s.value<"u"||i.alwaysSet)&&(r[o.value]=s.value)}return{status:e.value,value:r}}}const kt=Object.freeze({status:"aborted"}),gd=t=>({status:"dirty",value:t}),wi=t=>({status:"valid",value:t}),l1=t=>t.status==="aborted",u1=t=>t.status==="dirty",wm=t=>t.status==="valid",Sm=t=>typeof Promise<"u"&&t instanceof Promise;function ob(t,e,n,r){if(typeof e=="function"?t!==e||!r:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e.get(t)}function L6(t,e,n,r,i){if(typeof e=="function"?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var mt;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(mt||(mt={}));var sp,ap;class Js{constructor(e,n,r,i){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(this._key instanceof Array?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const b2=(t,e)=>{if(wm(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new ro(t.common.issues);return this._error=n,this._error}}};function zt(t){if(!t)return{};const{errorMap:e,invalid_type_error:n,required_error:r,description:i}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:i}:{errorMap:(s,c)=>{var l,u;const{message:d}=t;return s.code==="invalid_enum_value"?{message:d??c.defaultError}:typeof c.data>"u"?{message:(l=d??r)!==null&&l!==void 0?l:c.defaultError}:s.code!=="invalid_type"?{message:c.defaultError}:{message:(u=d??n)!==null&&u!==void 0?u:c.defaultError}},description:i}}class Qt{constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this)}get description(){return this._def.description}_getType(e){return bc(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:bc(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new ai,ctx:{common:e.parent.common,data:e.data,parsedType:bc(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const n=this._parse(e);if(Sm(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){const n=this._parse(e);return Promise.resolve(n)}parse(e,n){const r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){var r;const i={common:{issues:[],async:(r=n==null?void 0:n.async)!==null&&r!==void 0?r:!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:bc(e)},o=this._parseSync({data:e,path:i.path,parent:i});return b2(i,o)}async parseAsync(e,n){const r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:bc(e)},i=this._parse({data:e,path:r.path,parent:r}),o=await(Sm(i)?i:Promise.resolve(i));return b2(r,o)}refine(e,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const s=e(i),c=()=>o.addIssue({code:Re.custom,...r(i)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(c(),!1)):s?!0:(c(),!1)})}refinement(e,n){return this._refinement((r,i)=>e(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(e){return new ys({schema:this,typeName:Et.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}optional(){return Vs.create(this,this._def)}nullable(){return ul.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return as.create(this,this._def)}promise(){return df.create(this,this._def)}or(e){return jm.create([this,e],this._def)}and(e){return Em.create(this,e,this._def)}transform(e){return new ys({...zt(this._def),schema:this,typeName:Et.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const n=typeof e=="function"?e:()=>e;return new Om({...zt(this._def),innerType:this,defaultValue:n,typeName:Et.ZodDefault})}brand(){return new ik({typeName:Et.ZodBranded,type:this,...zt(this._def)})}catch(e){const n=typeof e=="function"?e:()=>e;return new Im({...zt(this._def),innerType:this,catchValue:n,typeName:Et.ZodCatch})}describe(e){const n=this.constructor;return new n({...this._def,description:e})}pipe(e){return Hg.create(this,e)}readonly(){return Rm.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Tae=/^c[^\s-]{8,}$/i,kae=/^[0-9a-z]+$/,Pae=/^[0-9A-HJKMNP-TV-Z]{26}$/,Oae=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Iae=/^[a-z0-9_-]{21}$/i,Rae=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Mae=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Dae="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let MC;const $ae=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Lae=/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,Fae=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,F6="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Bae=new RegExp(`^${F6}$`);function B6(t){let e="([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";return t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`),e}function Uae(t){return new RegExp(`^${B6(t)}$`)}function U6(t){let e=`${F6}T${B6(t)}`;const n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function zae(t,e){return!!((e==="v4"||!e)&&$ae.test(t)||(e==="v6"||!e)&&Lae.test(t))}class ns extends Qt{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==it.string){const o=this._getOrReturnCtx(e);return Xe(o,{code:Re.invalid_type,expected:it.string,received:o.parsedType}),kt}const r=new ai;let i;for(const o of this._def.checks)if(o.kind==="min")e.data.lengtho.value&&(i=this._getOrReturnCtx(e,i),Xe(i,{code:Re.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const s=e.data.length>o.value,c=e.data.lengthe.test(i),{validation:n,code:Re.invalid_string,...mt.errToObj(r)})}_addCheck(e){return new ns({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...mt.errToObj(e)})}url(e){return this._addCheck({kind:"url",...mt.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...mt.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...mt.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...mt.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...mt.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...mt.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...mt.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...mt.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...mt.errToObj(e)})}datetime(e){var n,r;return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,offset:(n=e==null?void 0:e.offset)!==null&&n!==void 0?n:!1,local:(r=e==null?void 0:e.local)!==null&&r!==void 0?r:!1,...mt.errToObj(e==null?void 0:e.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,...mt.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...mt.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...mt.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n==null?void 0:n.position,...mt.errToObj(n==null?void 0:n.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...mt.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...mt.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...mt.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...mt.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...mt.errToObj(n)})}nonempty(e){return this.min(1,mt.errToObj(e))}trim(){return new ns({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new ns({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new ns({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get minLength(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value{var e;return new ns({checks:[],typeName:Et.ZodString,coerce:(e=t==null?void 0:t.coerce)!==null&&e!==void 0?e:!1,...zt(t)})};function Hae(t,e){const n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,i=n>r?n:r,o=parseInt(t.toFixed(i).replace(".","")),s=parseInt(e.toFixed(i).replace(".",""));return o%s/Math.pow(10,i)}class al extends Qt{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==it.number){const o=this._getOrReturnCtx(e);return Xe(o,{code:Re.invalid_type,expected:it.number,received:o.parsedType}),kt}let r;const i=new ai;for(const o of this._def.checks)o.kind==="int"?an.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),Xe(r,{code:Re.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?e.datao.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),Xe(r,{code:Re.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?Hae(e.data,o.value)!==0&&(r=this._getOrReturnCtx(e,r),Xe(r,{code:Re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),Xe(r,{code:Re.not_finite,message:o.message}),i.dirty()):an.assertNever(o);return{status:i.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,mt.toString(n))}gt(e,n){return this.setLimit("min",e,!1,mt.toString(n))}lte(e,n){return this.setLimit("max",e,!0,mt.toString(n))}lt(e,n){return this.setLimit("max",e,!1,mt.toString(n))}setLimit(e,n,r,i){return new al({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:mt.toString(i)}]})}_addCheck(e){return new al({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:mt.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:mt.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:mt.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:mt.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:mt.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:mt.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:mt.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:mt.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:mt.toString(e)})}get minValue(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.valuee.kind==="int"||e.kind==="multipleOf"&&an.isInteger(e.value))}get isFinite(){let e=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.valuenew al({checks:[],typeName:Et.ZodNumber,coerce:(t==null?void 0:t.coerce)||!1,...zt(t)});class cl extends Qt{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce&&(e.data=BigInt(e.data)),this._getType(e)!==it.bigint){const o=this._getOrReturnCtx(e);return Xe(o,{code:Re.invalid_type,expected:it.bigint,received:o.parsedType}),kt}let r;const i=new ai;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?e.datao.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),Xe(r,{code:Re.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?e.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),Xe(r,{code:Re.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):an.assertNever(o);return{status:i.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,mt.toString(n))}gt(e,n){return this.setLimit("min",e,!1,mt.toString(n))}lte(e,n){return this.setLimit("max",e,!0,mt.toString(n))}lt(e,n){return this.setLimit("max",e,!1,mt.toString(n))}setLimit(e,n,r,i){return new cl({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:mt.toString(i)}]})}_addCheck(e){return new cl({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:mt.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:mt.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:mt.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:mt.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:mt.toString(n)})}get minValue(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value{var e;return new cl({checks:[],typeName:Et.ZodBigInt,coerce:(e=t==null?void 0:t.coerce)!==null&&e!==void 0?e:!1,...zt(t)})};class Cm extends Qt{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==it.boolean){const r=this._getOrReturnCtx(e);return Xe(r,{code:Re.invalid_type,expected:it.boolean,received:r.parsedType}),kt}return wi(e.data)}}Cm.create=t=>new Cm({typeName:Et.ZodBoolean,coerce:(t==null?void 0:t.coerce)||!1,...zt(t)});class Su extends Qt{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==it.date){const o=this._getOrReturnCtx(e);return Xe(o,{code:Re.invalid_type,expected:it.date,received:o.parsedType}),kt}if(isNaN(e.data.getTime())){const o=this._getOrReturnCtx(e);return Xe(o,{code:Re.invalid_date}),kt}const r=new ai;let i;for(const o of this._def.checks)o.kind==="min"?e.data.getTime()o.value&&(i=this._getOrReturnCtx(e,i),Xe(i,{code:Re.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):an.assertNever(o);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new Su({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:mt.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:mt.toString(n)})}get minDate(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.valuenew Su({checks:[],coerce:(t==null?void 0:t.coerce)||!1,typeName:Et.ZodDate,...zt(t)});class sb extends Qt{_parse(e){if(this._getType(e)!==it.symbol){const r=this._getOrReturnCtx(e);return Xe(r,{code:Re.invalid_type,expected:it.symbol,received:r.parsedType}),kt}return wi(e.data)}}sb.create=t=>new sb({typeName:Et.ZodSymbol,...zt(t)});class _m extends Qt{_parse(e){if(this._getType(e)!==it.undefined){const r=this._getOrReturnCtx(e);return Xe(r,{code:Re.invalid_type,expected:it.undefined,received:r.parsedType}),kt}return wi(e.data)}}_m.create=t=>new _m({typeName:Et.ZodUndefined,...zt(t)});class Am extends Qt{_parse(e){if(this._getType(e)!==it.null){const r=this._getOrReturnCtx(e);return Xe(r,{code:Re.invalid_type,expected:it.null,received:r.parsedType}),kt}return wi(e.data)}}Am.create=t=>new Am({typeName:Et.ZodNull,...zt(t)});class uf extends Qt{constructor(){super(...arguments),this._any=!0}_parse(e){return wi(e.data)}}uf.create=t=>new uf({typeName:Et.ZodAny,...zt(t)});class ou extends Qt{constructor(){super(...arguments),this._unknown=!0}_parse(e){return wi(e.data)}}ou.create=t=>new ou({typeName:Et.ZodUnknown,...zt(t)});class Ka extends Qt{_parse(e){const n=this._getOrReturnCtx(e);return Xe(n,{code:Re.invalid_type,expected:it.never,received:n.parsedType}),kt}}Ka.create=t=>new Ka({typeName:Et.ZodNever,...zt(t)});class ab extends Qt{_parse(e){if(this._getType(e)!==it.undefined){const r=this._getOrReturnCtx(e);return Xe(r,{code:Re.invalid_type,expected:it.void,received:r.parsedType}),kt}return wi(e.data)}}ab.create=t=>new ab({typeName:Et.ZodVoid,...zt(t)});class as extends Qt{_parse(e){const{ctx:n,status:r}=this._processInputParams(e),i=this._def;if(n.parsedType!==it.array)return Xe(n,{code:Re.invalid_type,expected:it.array,received:n.parsedType}),kt;if(i.exactLength!==null){const s=n.data.length>i.exactLength.value,c=n.data.lengthi.maxLength.value&&(Xe(n,{code:Re.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((s,c)=>i.type._parseAsync(new Js(n,s,n.path,c)))).then(s=>ai.mergeArray(r,s));const o=[...n.data].map((s,c)=>i.type._parseSync(new Js(n,s,n.path,c)));return ai.mergeArray(r,o)}get element(){return this._def.type}min(e,n){return new as({...this._def,minLength:{value:e,message:mt.toString(n)}})}max(e,n){return new as({...this._def,maxLength:{value:e,message:mt.toString(n)}})}length(e,n){return new as({...this._def,exactLength:{value:e,message:mt.toString(n)}})}nonempty(e){return this.min(1,e)}}as.create=(t,e)=>new as({type:t,minLength:null,maxLength:null,exactLength:null,typeName:Et.ZodArray,...zt(e)});function rd(t){if(t instanceof qn){const e={};for(const n in t.shape){const r=t.shape[n];e[n]=Vs.create(rd(r))}return new qn({...t._def,shape:()=>e})}else return t instanceof as?new as({...t._def,type:rd(t.element)}):t instanceof Vs?Vs.create(rd(t.unwrap())):t instanceof ul?ul.create(rd(t.unwrap())):t instanceof Zs?Zs.create(t.items.map(e=>rd(e))):t}class qn extends Qt{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),n=an.objectKeys(e);return this._cached={shape:e,keys:n}}_parse(e){if(this._getType(e)!==it.object){const u=this._getOrReturnCtx(e);return Xe(u,{code:Re.invalid_type,expected:it.object,received:u.parsedType}),kt}const{status:r,ctx:i}=this._processInputParams(e),{shape:o,keys:s}=this._getCached(),c=[];if(!(this._def.catchall instanceof Ka&&this._def.unknownKeys==="strip"))for(const u in i.data)s.includes(u)||c.push(u);const l=[];for(const u of s){const d=o[u],f=i.data[u];l.push({key:{status:"valid",value:u},value:d._parse(new Js(i,f,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof Ka){const u=this._def.unknownKeys;if(u==="passthrough")for(const d of c)l.push({key:{status:"valid",value:d},value:{status:"valid",value:i.data[d]}});else if(u==="strict")c.length>0&&(Xe(i,{code:Re.unrecognized_keys,keys:c}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const d of c){const f=i.data[d];l.push({key:{status:"valid",value:d},value:u._parse(new Js(i,f,i.path,d)),alwaysSet:d in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const u=[];for(const d of l){const f=await d.key,h=await d.value;u.push({key:f,value:h,alwaysSet:d.alwaysSet})}return u}).then(u=>ai.mergeObjectSync(r,u)):ai.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(e){return mt.errToObj,new qn({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{var i,o,s,c;const l=(s=(o=(i=this._def).errorMap)===null||o===void 0?void 0:o.call(i,n,r).message)!==null&&s!==void 0?s:r.defaultError;return n.code==="unrecognized_keys"?{message:(c=mt.errToObj(e).message)!==null&&c!==void 0?c:l}:{message:l}}}:{}})}strip(){return new qn({...this._def,unknownKeys:"strip"})}passthrough(){return new qn({...this._def,unknownKeys:"passthrough"})}extend(e){return new qn({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new qn({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:Et.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new qn({...this._def,catchall:e})}pick(e){const n={};return an.objectKeys(e).forEach(r=>{e[r]&&this.shape[r]&&(n[r]=this.shape[r])}),new qn({...this._def,shape:()=>n})}omit(e){const n={};return an.objectKeys(this.shape).forEach(r=>{e[r]||(n[r]=this.shape[r])}),new qn({...this._def,shape:()=>n})}deepPartial(){return rd(this)}partial(e){const n={};return an.objectKeys(this.shape).forEach(r=>{const i=this.shape[r];e&&!e[r]?n[r]=i:n[r]=i.optional()}),new qn({...this._def,shape:()=>n})}required(e){const n={};return an.objectKeys(this.shape).forEach(r=>{if(e&&!e[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof Vs;)o=o._def.innerType;n[r]=o}}),new qn({...this._def,shape:()=>n})}keyof(){return z6(an.objectKeys(this.shape))}}qn.create=(t,e)=>new qn({shape:()=>t,unknownKeys:"strip",catchall:Ka.create(),typeName:Et.ZodObject,...zt(e)});qn.strictCreate=(t,e)=>new qn({shape:()=>t,unknownKeys:"strict",catchall:Ka.create(),typeName:Et.ZodObject,...zt(e)});qn.lazycreate=(t,e)=>new qn({shape:t,unknownKeys:"strip",catchall:Ka.create(),typeName:Et.ZodObject,...zt(e)});class jm extends Qt{_parse(e){const{ctx:n}=this._processInputParams(e),r=this._def.options;function i(o){for(const c of o)if(c.result.status==="valid")return c.result;for(const c of o)if(c.result.status==="dirty")return n.common.issues.push(...c.ctx.common.issues),c.result;const s=o.map(c=>new ro(c.ctx.common.issues));return Xe(n,{code:Re.invalid_union,unionErrors:s}),kt}if(n.common.async)return Promise.all(r.map(async o=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(i);{let o;const s=[];for(const l of r){const u={...n,common:{...n.common,issues:[]},parent:null},d=l._parseSync({data:n.data,path:n.path,parent:u});if(d.status==="valid")return d;d.status==="dirty"&&!o&&(o={result:d,ctx:u}),u.common.issues.length&&s.push(u.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const c=s.map(l=>new ro(l));return Xe(n,{code:Re.invalid_union,unionErrors:c}),kt}}get options(){return this._def.options}}jm.create=(t,e)=>new jm({options:t,typeName:Et.ZodUnion,...zt(e)});const ha=t=>t instanceof Tm?ha(t.schema):t instanceof ys?ha(t.innerType()):t instanceof km?[t.value]:t instanceof ll?t.options:t instanceof Pm?an.objectValues(t.enum):t instanceof Om?ha(t._def.innerType):t instanceof _m?[void 0]:t instanceof Am?[null]:t instanceof Vs?[void 0,...ha(t.unwrap())]:t instanceof ul?[null,...ha(t.unwrap())]:t instanceof ik||t instanceof Rm?ha(t.unwrap()):t instanceof Im?ha(t._def.innerType):[];class kw extends Qt{_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==it.object)return Xe(n,{code:Re.invalid_type,expected:it.object,received:n.parsedType}),kt;const r=this.discriminator,i=n.data[r],o=this.optionsMap.get(i);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(Xe(n,{code:Re.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),kt)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){const i=new Map;for(const o of n){const s=ha(o.shape[e]);if(!s.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const c of s){if(i.has(c))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(c)}`);i.set(c,o)}}return new kw({typeName:Et.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:i,...zt(r)})}}function d1(t,e){const n=bc(t),r=bc(e);if(t===e)return{valid:!0,data:t};if(n===it.object&&r===it.object){const i=an.objectKeys(e),o=an.objectKeys(t).filter(c=>i.indexOf(c)!==-1),s={...t,...e};for(const c of o){const l=d1(t[c],e[c]);if(!l.valid)return{valid:!1};s[c]=l.data}return{valid:!0,data:s}}else if(n===it.array&&r===it.array){if(t.length!==e.length)return{valid:!1};const i=[];for(let o=0;o{if(l1(o)||l1(s))return kt;const c=d1(o.value,s.value);return c.valid?((u1(o)||u1(s))&&n.dirty(),{status:n.value,value:c.data}):(Xe(r,{code:Re.invalid_intersection_types}),kt)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,s])=>i(o,s)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}Em.create=(t,e,n)=>new Em({left:t,right:e,typeName:Et.ZodIntersection,...zt(n)});class Zs extends Qt{_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==it.array)return Xe(r,{code:Re.invalid_type,expected:it.array,received:r.parsedType}),kt;if(r.data.lengththis._def.items.length&&(Xe(r,{code:Re.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((s,c)=>{const l=this._def.items[c]||this._def.rest;return l?l._parse(new Js(r,s,r.path,c)):null}).filter(s=>!!s);return r.common.async?Promise.all(o).then(s=>ai.mergeArray(n,s)):ai.mergeArray(n,o)}get items(){return this._def.items}rest(e){return new Zs({...this._def,rest:e})}}Zs.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Zs({items:t,typeName:Et.ZodTuple,rest:null,...zt(e)})};class Nm extends Qt{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==it.object)return Xe(r,{code:Re.invalid_type,expected:it.object,received:r.parsedType}),kt;const i=[],o=this._def.keyType,s=this._def.valueType;for(const c in r.data)i.push({key:o._parse(new Js(r,c,r.path,c)),value:s._parse(new Js(r,r.data[c],r.path,c)),alwaysSet:c in r.data});return r.common.async?ai.mergeObjectAsync(n,i):ai.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof Qt?new Nm({keyType:e,valueType:n,typeName:Et.ZodRecord,...zt(r)}):new Nm({keyType:ns.create(),valueType:e,typeName:Et.ZodRecord,...zt(n)})}}class cb extends Qt{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==it.map)return Xe(r,{code:Re.invalid_type,expected:it.map,received:r.parsedType}),kt;const i=this._def.keyType,o=this._def.valueType,s=[...r.data.entries()].map(([c,l],u)=>({key:i._parse(new Js(r,c,r.path,[u,"key"])),value:o._parse(new Js(r,l,r.path,[u,"value"]))}));if(r.common.async){const c=new Map;return Promise.resolve().then(async()=>{for(const l of s){const u=await l.key,d=await l.value;if(u.status==="aborted"||d.status==="aborted")return kt;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),c.set(u.value,d.value)}return{status:n.value,value:c}})}else{const c=new Map;for(const l of s){const u=l.key,d=l.value;if(u.status==="aborted"||d.status==="aborted")return kt;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),c.set(u.value,d.value)}return{status:n.value,value:c}}}}cb.create=(t,e,n)=>new cb({valueType:e,keyType:t,typeName:Et.ZodMap,...zt(n)});class Cu extends Qt{_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==it.set)return Xe(r,{code:Re.invalid_type,expected:it.set,received:r.parsedType}),kt;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(Xe(r,{code:Re.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function s(l){const u=new Set;for(const d of l){if(d.status==="aborted")return kt;d.status==="dirty"&&n.dirty(),u.add(d.value)}return{status:n.value,value:u}}const c=[...r.data.values()].map((l,u)=>o._parse(new Js(r,l,r.path,u)));return r.common.async?Promise.all(c).then(l=>s(l)):s(c)}min(e,n){return new Cu({...this._def,minSize:{value:e,message:mt.toString(n)}})}max(e,n){return new Cu({...this._def,maxSize:{value:e,message:mt.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}}Cu.create=(t,e)=>new Cu({valueType:t,minSize:null,maxSize:null,typeName:Et.ZodSet,...zt(e)});class Od extends Qt{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==it.function)return Xe(n,{code:Re.invalid_type,expected:it.function,received:n.parsedType}),kt;function r(c,l){return ib({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,rb(),lf].filter(u=>!!u),issueData:{code:Re.invalid_arguments,argumentsError:l}})}function i(c,l){return ib({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,rb(),lf].filter(u=>!!u),issueData:{code:Re.invalid_return_type,returnTypeError:l}})}const o={errorMap:n.common.contextualErrorMap},s=n.data;if(this._def.returns instanceof df){const c=this;return wi(async function(...l){const u=new ro([]),d=await c._def.args.parseAsync(l,o).catch(p=>{throw u.addIssue(r(l,p)),u}),f=await Reflect.apply(s,this,d);return await c._def.returns._def.type.parseAsync(f,o).catch(p=>{throw u.addIssue(i(f,p)),u})})}else{const c=this;return wi(function(...l){const u=c._def.args.safeParse(l,o);if(!u.success)throw new ro([r(l,u.error)]);const d=Reflect.apply(s,this,u.data),f=c._def.returns.safeParse(d,o);if(!f.success)throw new ro([i(d,f.error)]);return f.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new Od({...this._def,args:Zs.create(e).rest(ou.create())})}returns(e){return new Od({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new Od({args:e||Zs.create([]).rest(ou.create()),returns:n||ou.create(),typeName:Et.ZodFunction,...zt(r)})}}class Tm extends Qt{get schema(){return this._def.getter()}_parse(e){const{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}Tm.create=(t,e)=>new Tm({getter:t,typeName:Et.ZodLazy,...zt(e)});class km extends Qt{_parse(e){if(e.data!==this._def.value){const n=this._getOrReturnCtx(e);return Xe(n,{received:n.data,code:Re.invalid_literal,expected:this._def.value}),kt}return{status:"valid",value:e.data}}get value(){return this._def.value}}km.create=(t,e)=>new km({value:t,typeName:Et.ZodLiteral,...zt(e)});function z6(t,e){return new ll({values:t,typeName:Et.ZodEnum,...zt(e)})}class ll extends Qt{constructor(){super(...arguments),sp.set(this,void 0)}_parse(e){if(typeof e.data!="string"){const n=this._getOrReturnCtx(e),r=this._def.values;return Xe(n,{expected:an.joinValues(r),received:n.parsedType,code:Re.invalid_type}),kt}if(ob(this,sp)||L6(this,sp,new Set(this._def.values)),!ob(this,sp).has(e.data)){const n=this._getOrReturnCtx(e),r=this._def.values;return Xe(n,{received:n.data,code:Re.invalid_enum_value,options:r}),kt}return wi(e.data)}get options(){return this._def.values}get enum(){const e={};for(const n of this._def.values)e[n]=n;return e}get Values(){const e={};for(const n of this._def.values)e[n]=n;return e}get Enum(){const e={};for(const n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return ll.create(e,{...this._def,...n})}exclude(e,n=this._def){return ll.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}}sp=new WeakMap;ll.create=z6;class Pm extends Qt{constructor(){super(...arguments),ap.set(this,void 0)}_parse(e){const n=an.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==it.string&&r.parsedType!==it.number){const i=an.objectValues(n);return Xe(r,{expected:an.joinValues(i),received:r.parsedType,code:Re.invalid_type}),kt}if(ob(this,ap)||L6(this,ap,new Set(an.getValidEnumValues(this._def.values))),!ob(this,ap).has(e.data)){const i=an.objectValues(n);return Xe(r,{received:r.data,code:Re.invalid_enum_value,options:i}),kt}return wi(e.data)}get enum(){return this._def.values}}ap=new WeakMap;Pm.create=(t,e)=>new Pm({values:t,typeName:Et.ZodNativeEnum,...zt(e)});class df extends Qt{unwrap(){return this._def.type}_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==it.promise&&n.common.async===!1)return Xe(n,{code:Re.invalid_type,expected:it.promise,received:n.parsedType}),kt;const r=n.parsedType===it.promise?n.data:Promise.resolve(n.data);return wi(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}df.create=(t,e)=>new df({type:t,typeName:Et.ZodPromise,...zt(e)});class ys extends Qt{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Et.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:n,ctx:r}=this._processInputParams(e),i=this._def.effect||null,o={addIssue:s=>{Xe(r,s),s.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="preprocess"){const s=i.transform(r.data,o);if(r.common.async)return Promise.resolve(s).then(async c=>{if(n.value==="aborted")return kt;const l=await this._def.schema._parseAsync({data:c,path:r.path,parent:r});return l.status==="aborted"?kt:l.status==="dirty"||n.value==="dirty"?gd(l.value):l});{if(n.value==="aborted")return kt;const c=this._def.schema._parseSync({data:s,path:r.path,parent:r});return c.status==="aborted"?kt:c.status==="dirty"||n.value==="dirty"?gd(c.value):c}}if(i.type==="refinement"){const s=c=>{const l=i.refinement(c,o);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return c};if(r.common.async===!1){const c=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return c.status==="aborted"?kt:(c.status==="dirty"&&n.dirty(),s(c.value),{status:n.value,value:c.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(c=>c.status==="aborted"?kt:(c.status==="dirty"&&n.dirty(),s(c.value).then(()=>({status:n.value,value:c.value}))))}if(i.type==="transform")if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!wm(s))return s;const c=i.transform(s.value,o);if(c instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:c}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>wm(s)?Promise.resolve(i.transform(s.value,o)).then(c=>({status:n.value,value:c})):s);an.assertNever(i)}}ys.create=(t,e,n)=>new ys({schema:t,typeName:Et.ZodEffects,effect:e,...zt(n)});ys.createWithPreprocess=(t,e,n)=>new ys({schema:e,effect:{type:"preprocess",transform:t},typeName:Et.ZodEffects,...zt(n)});class Vs extends Qt{_parse(e){return this._getType(e)===it.undefined?wi(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Vs.create=(t,e)=>new Vs({innerType:t,typeName:Et.ZodOptional,...zt(e)});class ul extends Qt{_parse(e){return this._getType(e)===it.null?wi(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}ul.create=(t,e)=>new ul({innerType:t,typeName:Et.ZodNullable,...zt(e)});class Om extends Qt{_parse(e){const{ctx:n}=this._processInputParams(e);let r=n.data;return n.parsedType===it.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}Om.create=(t,e)=>new Om({innerType:t,typeName:Et.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...zt(e)});class Im extends Qt{_parse(e){const{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Sm(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new ro(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new ro(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}Im.create=(t,e)=>new Im({innerType:t,typeName:Et.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...zt(e)});class lb extends Qt{_parse(e){if(this._getType(e)!==it.nan){const r=this._getOrReturnCtx(e);return Xe(r,{code:Re.invalid_type,expected:it.nan,received:r.parsedType}),kt}return{status:"valid",value:e.data}}}lb.create=t=>new lb({typeName:Et.ZodNaN,...zt(t)});const Gae=Symbol("zod_brand");class ik extends Qt{_parse(e){const{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class Hg extends Qt{_parse(e){const{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?kt:o.status==="dirty"?(n.dirty(),gd(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?kt:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(e,n){return new Hg({in:e,out:n,typeName:Et.ZodPipeline})}}class Rm extends Qt{_parse(e){const n=this._def.innerType._parse(e),r=i=>(wm(i)&&(i.value=Object.freeze(i.value)),i);return Sm(n)?n.then(i=>r(i)):r(n)}unwrap(){return this._def.innerType}}Rm.create=(t,e)=>new Rm({innerType:t,typeName:Et.ZodReadonly,...zt(e)});function H6(t,e={},n){return t?uf.create().superRefine((r,i)=>{var o,s;if(!t(r)){const c=typeof e=="function"?e(r):typeof e=="string"?{message:e}:e,l=(s=(o=c.fatal)!==null&&o!==void 0?o:n)!==null&&s!==void 0?s:!0,u=typeof c=="string"?{message:c}:c;i.addIssue({code:"custom",...u,fatal:l})}}):uf.create()}const Vae={object:qn.lazycreate};var Et;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(Et||(Et={}));const Kae=(t,e={message:`Input not instance of ${t.name}`})=>H6(n=>n instanceof t,e),G6=ns.create,V6=al.create,Wae=lb.create,qae=cl.create,K6=Cm.create,Yae=Su.create,Qae=sb.create,Xae=_m.create,Jae=Am.create,Zae=uf.create,ece=ou.create,tce=Ka.create,nce=ab.create,rce=as.create,ice=qn.create,oce=qn.strictCreate,sce=jm.create,ace=kw.create,cce=Em.create,lce=Zs.create,uce=Nm.create,dce=cb.create,fce=Cu.create,hce=Od.create,pce=Tm.create,mce=km.create,gce=ll.create,vce=Pm.create,yce=df.create,w2=ys.create,xce=Vs.create,bce=ul.create,wce=ys.createWithPreprocess,Sce=Hg.create,Cce=()=>G6().optional(),_ce=()=>V6().optional(),Ace=()=>K6().optional(),jce={string:t=>ns.create({...t,coerce:!0}),number:t=>al.create({...t,coerce:!0}),boolean:t=>Cm.create({...t,coerce:!0}),bigint:t=>cl.create({...t,coerce:!0}),date:t=>Su.create({...t,coerce:!0})},Ece=kt;var Ue=Object.freeze({__proto__:null,defaultErrorMap:lf,setErrorMap:Eae,getErrorMap:rb,makeIssue:ib,EMPTY_PATH:Nae,addIssueToContext:Xe,ParseStatus:ai,INVALID:kt,DIRTY:gd,OK:wi,isAborted:l1,isDirty:u1,isValid:wm,isAsync:Sm,get util(){return an},get objectUtil(){return c1},ZodParsedType:it,getParsedType:bc,ZodType:Qt,datetimeRegex:U6,ZodString:ns,ZodNumber:al,ZodBigInt:cl,ZodBoolean:Cm,ZodDate:Su,ZodSymbol:sb,ZodUndefined:_m,ZodNull:Am,ZodAny:uf,ZodUnknown:ou,ZodNever:Ka,ZodVoid:ab,ZodArray:as,ZodObject:qn,ZodUnion:jm,ZodDiscriminatedUnion:kw,ZodIntersection:Em,ZodTuple:Zs,ZodRecord:Nm,ZodMap:cb,ZodSet:Cu,ZodFunction:Od,ZodLazy:Tm,ZodLiteral:km,ZodEnum:ll,ZodNativeEnum:Pm,ZodPromise:df,ZodEffects:ys,ZodTransformer:ys,ZodOptional:Vs,ZodNullable:ul,ZodDefault:Om,ZodCatch:Im,ZodNaN:lb,BRAND:Gae,ZodBranded:ik,ZodPipeline:Hg,ZodReadonly:Rm,custom:H6,Schema:Qt,ZodSchema:Qt,late:Vae,get ZodFirstPartyTypeKind(){return Et},coerce:jce,any:Zae,array:rce,bigint:qae,boolean:K6,date:Yae,discriminatedUnion:ace,effect:w2,enum:gce,function:hce,instanceof:Kae,intersection:cce,lazy:pce,literal:mce,map:dce,nan:Wae,nativeEnum:vce,never:tce,null:Jae,nullable:bce,number:V6,object:ice,oboolean:Ace,onumber:_ce,optional:xce,ostring:Cce,pipeline:Sce,preprocess:wce,promise:yce,record:uce,set:fce,strictObject:oce,string:G6,symbol:Qae,transformer:w2,tuple:lce,undefined:Xae,union:sce,unknown:ece,void:nce,NEVER:Ece,ZodIssueCode:Re,quotelessJson:jae,ZodError:ro});const pt=g.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Le("rounded-lg border bg-card text-card-foreground shadow-sm",t),...e}));pt.displayName="Card";const Ei=g.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Le("flex flex-col space-y-1.5 p-6",t),...e}));Ei.displayName="CardHeader";const Qi=g.forwardRef(({className:t,...e},n)=>a.jsx("h3",{ref:n,className:Le("text-2xl font-semibold leading-none tracking-tight",t),...e}));Qi.displayName="CardTitle";const ok=g.forwardRef(({className:t,...e},n)=>a.jsx("p",{ref:n,className:Le("text-sm text-muted-foreground",t),...e}));ok.displayName="CardDescription";const Rt=g.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Le("p-6 pt-0",t),...e}));Rt.displayName="CardContent";const sk=g.forwardRef(({className:t,...e},n)=>a.jsx("div",{ref:n,className:Le("flex items-center p-6 pt-0",t),...e}));sk.displayName="CardFooter";const Kt=g.forwardRef(({className:t,type:e,...n},r)=>a.jsx("input",{type:e,className:Le("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",t),ref:r,...n}));Kt.displayName="Input";const Nce=YT("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function On({className:t,variant:e,...n}){return a.jsx("div",{className:Le(Nce({variant:e}),t),...n})}function W6({onAssetsChange:t,onUploadComplete:e,onUploadError:n,onFilesChange:r,focusGroupId:i,disabled:o=!1,maxAssets:s=10,allowedTypes:c=["image/*","application/pdf","video/*"],label:l="Upload Assets",description:u="Upload creative assets for testing",maxFileSize:d=10,enableRenaming:f=!0}){const[h,p]=g.useState([]),[v,m]=g.useState([]),[y,b]=g.useState(null),[x,w]=g.useState(""),[S,C]=g.useState(!1),_=g.useRef(null),A=g.useRef(null);g.useEffect(()=>{i&&j()},[i]),g.useEffect(()=>{if(r){const U=h.map(ue=>ue.file);r(U)}},[h,r]);const j=async()=>{if(i)try{const ue=(await gt.getAssets(i)).data.assets||[];m(ue),t&&t(ue)}catch(U){console.error("Error fetching backend assets:",U)}},N=U=>{if(!c.some(ne=>{if(ne.includes("*")){const je=ne.split("/")[0];return U.type.startsWith(je+"/")}return U.type===ne}))return`File "${U.name}" is not a supported file type. Supported types: ${k().join(", ")}.`;const oe=d*1024*1024;return U.size>oe?`File "${U.name}" is too large. Maximum file size: ${d}MB.`:null},k=()=>{const U={"image/*":"Images","application/pdf":"PDF","video/*":"Videos","text/*":"Text files","application/msword":"Word docs","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"Word docs","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"Excel files"};return c.map(ue=>U[ue]||ue).filter((ue,oe,ne)=>ne.indexOf(ue)===oe)},O=async U=>{if(!U||U.length===0)return;if(h.length+v.length+U.length>s){ae.error(`You can only upload up to ${s} assets`);return}const oe=[],ne=[];if(Array.from(U).forEach(K=>{const et=N(K);et?ne.push(et):oe.push(K)}),ne.length>0&&(ne.forEach(K=>ae.error(K)),oe.length===0))return;const je=oe.map(K=>{const et=K.type.startsWith("image/")?URL.createObjectURL(K):void 0;return{id:`local-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,file:K,previewUrl:et,status:"uploading",progress:0}});p(K=>[...K,...je]);for(const K of je){if(!i){p(Me=>Me.map(ut=>ut.id===K.id?{...ut,status:"uploaded",progress:100}:ut));continue}const et=Me=>{p(ut=>ut.map(qe=>qe.id===K.id?{...qe,progress:Me}:qe))};try{et(10);const Me=new FormData;if(Me.append("assets",K.file),et(50),(await gt.uploadAssets(i,Me,!1)).data.uploaded_assets>0)et(100),setTimeout(()=>{p(Pt=>Pt.filter(F=>F.id!==K.id))},500),await j(),ae.success(`${K.file.name} uploaded successfully`);else throw new Error("Upload failed")}catch(Me){console.error(`Upload failed for ${K.file.name}:`,Me),p(ut=>ut.map(qe=>{var Pt,F;return qe.id===K.id?{...qe,status:"failed",progress:0,error:((F=(Pt=Me.response)==null?void 0:Pt.data)==null?void 0:F.error)||"Upload failed"}:qe})),n&&n(Me)}}e&&setTimeout(()=>{e(v)},500)},E=async U=>{if(i)try{await gt.deleteAsset(i,U),await j(),ae.info("Asset removed")}catch(ue){console.error("Error removing asset:",ue),ae.error("Failed to remove asset")}},R=U=>{const ue=h.find(oe=>oe.id===U);ue!=null&&ue.previewUrl&&URL.revokeObjectURL(ue.previewUrl),p(oe=>oe.filter(ne=>ne.id!==U))},D=U=>{U.preventDefault(),U.stopPropagation(),C(!0)},G=U=>{var ue;U.preventDefault(),U.stopPropagation(),(ue=A.current)!=null&&ue.contains(U.relatedTarget)||C(!1)},L=U=>{U.preventDefault(),U.stopPropagation()},z=U=>{if(U.preventDefault(),U.stopPropagation(),C(!1),o)return;const ue=U.dataTransfer.files;ue.length>0&&O(ue)},M=()=>{h.length===0&&v.length===0||(h.forEach(U=>{U.previewUrl&&URL.revokeObjectURL(U.previewUrl)}),p([]),i&&v.length>0?Promise.all(v.map(U=>gt.deleteAsset(i,U.filename).catch(console.error))).then(()=>{m([]),t&&t([]),ae.info("All assets cleared")}):(m([]),t&&t([])))},$=async U=>{if(i){p(ue=>ue.map(oe=>oe.id===U.id?{...oe,status:"uploading",error:void 0,progress:0}:oe));try{const ue=new FormData;if(ue.append("assets",U.file),p(je=>je.map(K=>K.id===U.id?{...K,progress:50}:K)),(await gt.uploadAssets(i,ue,!1)).data.uploaded_assets>0)p(je=>je.map(K=>K.id===U.id?{...K,progress:100}:K)),setTimeout(()=>{p(je=>je.filter(K=>K.id!==U.id))},500),await j(),ae.success(`${U.file.name} uploaded successfully`);else throw new Error("Upload failed")}catch(ue){p(oe=>oe.map(ne=>{var je,K;return ne.id===U.id?{...ne,status:"failed",progress:0,error:((K=(je=ue.response)==null?void 0:je.data)==null?void 0:K.error)||"Upload failed"}:ne})),ae.error(`Failed to upload ${U.file.name}`)}}},Q=U=>{b(U.filename),w(U.user_assigned_name||"")},q=async U=>{if(!i||!x.trim()){te();return}try{await gt.updateAssetName(i,U,x.trim()),m(ue=>ue.map(oe=>oe.filename===U?{...oe,user_assigned_name:x.trim()}:oe)),t&&t(v),b(null),w(""),ae.success("Asset name updated")}catch(ue){console.error("Error updating asset name:",ue),ae.error("Failed to update asset name")}},te=()=>{b(null),w("")},xe=U=>U.startsWith("image/")?a.jsx(Sp,{className:"h-8 w-8 text-slate-400"}):U.startsWith("video/")?a.jsx(zee,{className:"h-8 w-8 text-slate-400"}):U==="application/pdf"?a.jsx(sf,{className:"h-8 w-8 text-slate-400"}):a.jsx(sf,{className:"h-8 w-8 text-slate-400"}),B=(U,ue)=>U.user_assigned_name||`Asset ${ue+1}`,ce=h.length+v.length,fe=s-ce;return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"text-center",children:[a.jsx("h3",{className:"text-lg font-semibold text-foreground",children:l}),a.jsx("p",{className:"text-muted-foreground mt-1",children:u})]}),a.jsx("div",{ref:A,className:`relative border-2 border-dashed rounded-xl p-8 transition-all duration-200 ${o?"border-muted-foreground/20 bg-muted/30 cursor-not-allowed":S?"border-primary bg-primary/5 scale-[1.02]":"border-muted-foreground/30 bg-background hover:border-primary/50 hover:bg-muted/50 cursor-pointer"}`,onDragEnter:D,onDragLeave:G,onDragOver:L,onDrop:z,onClick:()=>{var U;return!o&&((U=_.current)==null?void 0:U.click())},children:a.jsxs("div",{className:"flex flex-col items-center justify-center text-center",children:[a.jsx(Fee,{className:`h-12 w-12 mb-4 ${o?"text-muted-foreground/40":S?"text-primary":"text-muted-foreground"}`}),o?a.jsxs("div",{children:[a.jsx("p",{className:"text-lg font-medium text-muted-foreground mb-2",children:"File Upload Disabled"}),a.jsx("p",{className:"text-sm text-muted-foreground",children:"Complete the required details above to enable file uploads"})]}):a.jsxs("div",{children:[a.jsx("p",{className:"text-lg font-medium text-foreground mb-2",children:S?"Drop files here":"Drag and drop files here, or click to browse"}),a.jsx("div",{className:"flex flex-wrap justify-center gap-2 mb-4",children:k().map((U,ue)=>a.jsx(On,{variant:"secondary",className:"text-xs",children:U},ue))}),a.jsxs("p",{className:"text-sm text-muted-foreground mb-4",children:["Maximum file size: ",d,"MB"]}),a.jsx("input",{ref:_,type:"file",accept:c.join(","),multiple:!0,onChange:U=>O(U.target.files),className:"hidden",disabled:o}),a.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-center gap-3",children:[a.jsxs(se,{type:"button",variant:"default",size:"sm",disabled:o||fe<=0,onClick:U=>{var ue;U.stopPropagation(),(ue=_.current)==null||ue.click()},children:[a.jsx(lte,{className:"mr-2 h-4 w-4"}),"Select Files"]}),(h.length>0||v.length>0)&&a.jsxs(se,{type:"button",variant:"outline",size:"sm",onClick:U=>{U.stopPropagation(),M()},children:[a.jsx(Qn,{className:"mr-2 h-4 w-4"}),"Clear All"]})]}),a.jsxs("p",{className:"text-xs text-muted-foreground mt-3",children:[fe," of ",s," uploads remaining"]})]})]})})]}),(v.length>0||h.length>0)&&a.jsxs(pt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsxs("h4",{className:"text-lg font-semibold text-foreground",children:["Uploaded Files (",h.length+v.length,")"]}),(h.length>0||v.length>0)&&a.jsxs(se,{type:"button",variant:"ghost",size:"sm",onClick:M,className:"text-muted-foreground hover:text-destructive",children:[a.jsx(Qn,{className:"mr-2 h-4 w-4"}),"Clear All"]})]}),a.jsxs("div",{className:"space-y-3",children:[v.map((U,ue)=>{var oe;return a.jsxs("div",{className:"flex items-center gap-4 p-4 border rounded-lg bg-card shadow-sm",children:[a.jsx("div",{className:"w-12 h-12 bg-muted/50 rounded-md flex items-center justify-center flex-shrink-0",children:(oe=U.mime_type)!=null&&oe.startsWith("image/")?a.jsx("img",{src:gt.getAssetUrl(i,U.filename),alt:B(U,ue),className:"max-h-full max-w-full object-contain rounded-md"}):xe(U.mime_type)}),a.jsx("div",{className:"flex-grow min-w-0",children:f&&y===U.filename?a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Kt,{value:x,onChange:ne=>w(ne.target.value),placeholder:`Asset ${ue+1}`,className:"flex-1",autoFocus:!0,onKeyDown:ne=>{ne.key==="Enter"?(ne.preventDefault(),q(U.filename)):ne.key==="Escape"&&te()}}),a.jsx(se,{size:"sm",variant:"outline",type:"button",onClick:()=>q(U.filename),children:a.jsx(Io,{className:"h-4 w-4"})}),a.jsx(se,{size:"sm",variant:"outline",type:"button",onClick:te,children:a.jsx(Mi,{className:"h-4 w-4"})})]}):a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("p",{className:"font-medium text-sm truncate",children:B(U,ue)}),f&&a.jsx(se,{size:"sm",variant:"ghost",type:"button",onClick:()=>Q(U),className:"h-6 w-6 p-0",children:a.jsx($A,{className:"h-3 w-3"})})]}),a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("p",{className:"text-xs text-muted-foreground truncate",children:["Original: ",U.original_name]}),a.jsx(On,{variant:"outline",className:"text-xs text-green-600 bg-green-50 border-green-200",children:"Complete"})]})]})}),a.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f&&a.jsxs("div",{className:"text-right mr-2",children:[a.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"Will appear as:"}),a.jsxs("div",{className:"text-sm font-medium text-primary",children:['"',B(U,ue),'"']})]}),a.jsx(se,{size:"sm",variant:"ghost",type:"button",onClick:()=>E(U.filename),className:"h-8 w-8 p-0 text-muted-foreground hover:text-destructive",children:a.jsx(Mi,{className:"h-4 w-4"})})]})]},U.filename)}),h.map(U=>a.jsxs("div",{className:"flex items-center gap-4 p-4 border rounded-lg bg-muted/30",children:[a.jsx("div",{className:"w-12 h-12 bg-muted/50 rounded-md flex items-center justify-center flex-shrink-0",children:U.previewUrl?a.jsx("img",{src:U.previewUrl,alt:U.file.name,className:"max-h-full max-w-full object-contain rounded-md"}):xe(U.file.type)}),a.jsxs("div",{className:"flex-grow min-w-0",children:[a.jsx("p",{className:"font-medium text-sm truncate",children:U.file.name}),a.jsxs("p",{className:"text-xs text-muted-foreground mb-2",children:[(U.file.size/1024/1024).toFixed(2)," MB"]}),U.status==="uploading"&&a.jsxs("div",{className:"space-y-1",children:[a.jsx(Pc,{value:U.progress||0,className:"h-2"}),a.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground",children:[a.jsx("span",{children:"Uploading..."}),a.jsxs("span",{children:[U.progress||0,"%"]})]})]}),U.error&&a.jsx("p",{className:"text-xs text-destructive truncate mt-1",children:U.error})]}),a.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[U.status==="uploading"&&a.jsx("div",{className:"flex items-center gap-2",children:a.jsxs(On,{variant:"outline",className:"text-xs text-blue-600 bg-blue-50 border-blue-200",children:[a.jsx(No,{className:"h-3 w-3 mr-1 animate-spin"}),"Uploading"]})}),U.status==="uploaded"&&a.jsxs(On,{variant:"outline",className:"text-xs text-green-600 bg-green-50 border-green-200",children:[a.jsx(Io,{className:"h-3 w-3 mr-1"}),"Complete"]}),U.status==="failed"&&a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(On,{variant:"outline",className:"text-xs text-destructive bg-destructive/10 border-destructive/20",children:"Failed"}),a.jsxs(se,{size:"sm",variant:"outline",type:"button",onClick:()=>$(U),className:"h-7 text-xs",children:[a.jsx(ru,{className:"h-3 w-3 mr-1"}),"Retry"]})]}),a.jsx(se,{size:"sm",variant:"ghost",type:"button",onClick:()=>R(U.id),className:"h-8 w-8 p-0 text-muted-foreground hover:text-destructive",children:a.jsx(Mi,{className:"h-4 w-4"})})]})]},U.id))]}),f&&v.length>0&&a.jsx("div",{className:"mt-6 p-4 bg-primary/5 border border-primary/20 rounded-lg",children:a.jsxs("p",{className:"text-sm text-foreground",children:[a.jsx("strong",{children:"Asset Names:"})," Click the edit icon to customize how assets will be referenced in the discussion guide. Leave blank to use default numbering."]})})]})]})}var Tce="Label",q6=g.forwardRef((t,e)=>a.jsx(ht.label,{...t,ref:e,onMouseDown:n=>{var i;n.target.closest("button, input, select, textarea")||((i=t.onMouseDown)==null||i.call(t,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));q6.displayName=Tce;var Y6=q6;const kce=YT("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),vo=g.forwardRef(({className:t,...e},n)=>a.jsx(Y6,{ref:n,className:Le(kce(),t),...e}));vo.displayName=Y6.displayName;const Pw=aae,Q6=g.createContext({}),_t=({...t})=>a.jsx(Q6.Provider,{value:{name:t.name},children:a.jsx(dae,{...t})}),Ow=()=>{const t=g.useContext(Q6),e=g.useContext(X6),{getFieldState:n,formState:r}=Ew(),i=n(t.name,r);if(!t)throw new Error("useFormField should be used within ");const{id:o}=e;return{id:o,name:t.name,formItemId:`${o}-form-item`,formDescriptionId:`${o}-form-item-description`,formMessageId:`${o}-form-item-message`,...i}},X6=g.createContext({}),xt=g.forwardRef(({className:t,...e},n)=>{const r=g.useId();return a.jsx(X6.Provider,{value:{id:r},children:a.jsx("div",{ref:n,className:Le("space-y-2",t),...e})})});xt.displayName="FormItem";const bt=g.forwardRef(({className:t,...e},n)=>{const{error:r,formItemId:i}=Ow();return a.jsx(vo,{ref:n,className:Le(r&&"text-destructive",t),htmlFor:i,...e})});bt.displayName="FormLabel";const wt=g.forwardRef(({...t},e)=>{const{error:n,formItemId:r,formDescriptionId:i,formMessageId:o}=Ow();return a.jsx(Ys,{ref:e,id:r,"aria-describedby":n?`${i} ${o}`:`${i}`,"aria-invalid":!!n,...t})});wt.displayName="FormControl";const zn=g.forwardRef(({className:t,...e},n)=>{const{formDescriptionId:r}=Ow();return a.jsx("p",{ref:n,id:r,className:Le("text-sm text-muted-foreground",t),...e})});zn.displayName="FormDescription";const St=g.forwardRef(({className:t,children:e,...n},r)=>{const{error:i,formMessageId:o}=Ow(),s=i?String(i==null?void 0:i.message):e;return s?a.jsx("p",{ref:r,id:o,className:Le("text-sm font-medium text-destructive",t),...n,children:s}):null});St.displayName="FormMessage";const vt=g.forwardRef(({className:t,...e},n)=>a.jsx("textarea",{className:Le("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",t),ref:n,...e}));vt.displayName="Textarea";function Mm(t,[e,n]){return Math.min(n,Math.max(e,t))}function Pce(t,e=[]){let n=[];function r(o,s){const c=g.createContext(s),l=n.length;n=[...n,s];function u(f){const{scope:h,children:p,...v}=f,m=(h==null?void 0:h[t][l])||c,y=g.useMemo(()=>v,Object.values(v));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,v=g.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${f}\` must be used within \`${o}\``)}return u.displayName=o+"Provider",[u,d]}const i=()=>{const o=n.map(s=>g.createContext(s));return function(c){const l=(c==null?void 0:c[t])||o;return g.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,Oce(i,...e)]}function Oce(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(o)[`__scope${u}`];return{...c,...f}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])}};return n.scopeName=e.scopeName,n}function Iw(t){const e=t+"CollectionProvider",[n,r]=Pce(e),[i,o]=n(e,{collectionRef:{current:null},itemMap:new Map}),s=p=>{const{scope:v,children:m}=p,y=T.useRef(null),b=T.useRef(new Map).current;return a.jsx(i,{scope:v,itemMap:b,collectionRef:y,children:m})};s.displayName=e;const c=t+"CollectionSlot",l=T.forwardRef((p,v)=>{const{scope:m,children:y}=p,b=o(c,m),x=It(v,b.collectionRef);return a.jsx(Ys,{ref:x,children:y})});l.displayName=c;const u=t+"CollectionItemSlot",d="data-radix-collection-item",f=T.forwardRef((p,v)=>{const{scope:m,children:y,...b}=p,x=T.useRef(null),w=It(v,x),S=o(u,m);return T.useEffect(()=>(S.itemMap.set(x,{ref:x,...b}),()=>void S.itemMap.delete(x))),a.jsx(Ys,{[d]:"",ref:w,children:y})});f.displayName=u;function h(p){const v=o(t+"CollectionConsumer",p);return T.useCallback(()=>{const y=v.collectionRef.current;if(!y)return[];const b=Array.from(y.querySelectorAll(`[${d}]`));return Array.from(v.itemMap.values()).sort((S,C)=>b.indexOf(S.ref.current)-b.indexOf(C.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:s,Slot:l,ItemSlot:f},h,r]}var Ice=g.createContext(void 0);function Mu(t){const e=g.useContext(Ice);return t||e||"ltr"}var DC=0;function ak(){g.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??S2()),document.body.insertAdjacentElement("beforeend",t[1]??S2()),DC++,()=>{DC===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),DC--}},[])}function S2(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var $C="focusScope.autoFocusOnMount",LC="focusScope.autoFocusOnUnmount",C2={bubbles:!1,cancelable:!0},Rce="FocusScope",Rw=g.forwardRef((t,e)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:o,...s}=t,[c,l]=g.useState(null),u=Ar(i),d=Ar(o),f=g.useRef(null),h=It(e,m=>l(m)),p=g.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;g.useEffect(()=>{if(r){let m=function(w){if(p.paused||!c)return;const S=w.target;c.contains(S)?f.current=S:lc(f.current,{select:!0})},y=function(w){if(p.paused||!c)return;const S=w.relatedTarget;S!==null&&(c.contains(S)||lc(f.current,{select:!0}))},b=function(w){if(document.activeElement===document.body)for(const C of w)C.removedNodes.length>0&&lc(c)};document.addEventListener("focusin",m),document.addEventListener("focusout",y);const x=new MutationObserver(b);return c&&x.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",y),x.disconnect()}}},[r,c,p.paused]),g.useEffect(()=>{if(c){A2.add(p);const m=document.activeElement;if(!c.contains(m)){const b=new CustomEvent($C,C2);c.addEventListener($C,u),c.dispatchEvent(b),b.defaultPrevented||(Mce(Bce(J6(c)),{select:!0}),document.activeElement===m&&lc(c))}return()=>{c.removeEventListener($C,u),setTimeout(()=>{const b=new CustomEvent(LC,C2);c.addEventListener(LC,d),c.dispatchEvent(b),b.defaultPrevented||lc(m??document.body,{select:!0}),c.removeEventListener(LC,d),A2.remove(p)},0)}}},[c,u,d,p]);const v=g.useCallback(m=>{if(!n&&!r||p.paused)return;const y=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,b=document.activeElement;if(y&&b){const x=m.currentTarget,[w,S]=Dce(x);w&&S?!m.shiftKey&&b===S?(m.preventDefault(),n&&lc(w,{select:!0})):m.shiftKey&&b===w&&(m.preventDefault(),n&&lc(S,{select:!0})):b===x&&m.preventDefault()}},[n,r,p.paused]);return a.jsx(ht.div,{tabIndex:-1,...s,ref:h,onKeyDown:v})});Rw.displayName=Rce;function Mce(t,{select:e=!1}={}){const n=document.activeElement;for(const r of t)if(lc(r,{select:e}),document.activeElement!==n)return}function Dce(t){const e=J6(t),n=_2(e,t),r=_2(e.reverse(),t);return[n,r]}function J6(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const i=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||i?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)e.push(n.currentNode);return e}function _2(t,e){for(const n of t)if(!$ce(n,{upTo:e}))return n}function $ce(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function Lce(t){return t instanceof HTMLInputElement&&"select"in t}function lc(t,{select:e=!1}={}){if(t&&t.focus){const n=document.activeElement;t.focus({preventScroll:!0}),t!==n&&Lce(t)&&e&&t.select()}}var A2=Fce();function Fce(){let t=[];return{add(e){const n=t[0];e!==n&&(n==null||n.pause()),t=j2(t,e),t.unshift(e)},remove(e){var n;t=j2(t,e),(n=t[0])==null||n.resume()}}}function j2(t,e){const n=[...t],r=n.indexOf(e);return r!==-1&&n.splice(r,1),n}function Bce(t){return t.filter(e=>e.tagName!=="A")}function Gg(t){const e=g.useRef({value:t,previous:t});return g.useMemo(()=>(e.current.value!==t&&(e.current.previous=e.current.value,e.current.value=t),e.current.previous),[t])}var Uce=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},Ku=new WeakMap,Hv=new WeakMap,Gv={},FC=0,Z6=function(t){return t&&(t.host||Z6(t.parentNode))},zce=function(t,e){return e.map(function(n){if(t.contains(n))return n;var r=Z6(n);return r&&t.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",t,". Doing nothing"),null)}).filter(function(n){return!!n})},Hce=function(t,e,n,r){var i=zce(e,Array.isArray(t)?t:[t]);Gv[n]||(Gv[n]=new WeakMap);var o=Gv[n],s=[],c=new Set,l=new Set(i),u=function(f){!f||c.has(f)||(c.add(f),u(f.parentNode))};i.forEach(u);var d=function(f){!f||l.has(f)||Array.prototype.forEach.call(f.children,function(h){if(c.has(h))d(h);else try{var p=h.getAttribute(r),v=p!==null&&p!=="false",m=(Ku.get(h)||0)+1,y=(o.get(h)||0)+1;Ku.set(h,m),o.set(h,y),s.push(h),m===1&&v&&Hv.set(h,!0),y===1&&h.setAttribute(n,"true"),v||h.setAttribute(r,"true")}catch(b){console.error("aria-hidden: cannot operate on ",h,b)}})};return d(e),c.clear(),FC++,function(){s.forEach(function(f){var h=Ku.get(f)-1,p=o.get(f)-1;Ku.set(f,h),o.set(f,p),h||(Hv.has(f)||f.removeAttribute(r),Hv.delete(f)),p||f.removeAttribute(n)}),FC--,FC||(Ku=new WeakMap,Ku=new WeakMap,Hv=new WeakMap,Gv={})}},ck=function(t,e,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(t)?t:[t]),i=Uce(t);return i?(r.push.apply(r,Array.from(i.querySelectorAll("[aria-live]"))),Hce(r,i,n,"aria-hidden")):function(){return null}},Ls=function(){return Ls=Object.assign||function(e){for(var n,r=1,i=arguments.length;r"u")return sle;var e=ale(t),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,r-n+e[2]-e[0])}},lle=rz(),Id="data-scroll-locked",ule=function(t,e,n,r){var i=t.left,o=t.top,s=t.right,c=t.gap;return n===void 0&&(n="margin"),` + .`.concat(Vce,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(c,"px ").concat(r,`; + } + body[`).concat(Id,`] { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([e&&"position: relative ".concat(r,";"),n==="margin"&&` + padding-left: `.concat(i,`px; + padding-top: `).concat(o,`px; + padding-right: `).concat(s,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(c,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat($y,` { + right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(Ly,` { + margin-right: `).concat(c,"px ").concat(r,`; + } + + .`).concat($y," .").concat($y,` { + right: 0 `).concat(r,`; + } + + .`).concat(Ly," .").concat(Ly,` { + margin-right: 0 `).concat(r,`; + } + + body[`).concat(Id,`] { + `).concat(Kce,": ").concat(c,`px; + } +`)},N2=function(){var t=parseInt(document.body.getAttribute(Id)||"0",10);return isFinite(t)?t:0},dle=function(){g.useEffect(function(){return document.body.setAttribute(Id,(N2()+1).toString()),function(){var t=N2()-1;t<=0?document.body.removeAttribute(Id):document.body.setAttribute(Id,t.toString())}},[])},fle=function(t){var e=t.noRelative,n=t.noImportant,r=t.gapMode,i=r===void 0?"margin":r;dle();var o=g.useMemo(function(){return cle(i)},[i]);return g.createElement(lle,{styles:ule(o,!e,i,n?"":"!important")})},f1=!1;if(typeof window<"u")try{var Vv=Object.defineProperty({},"passive",{get:function(){return f1=!0,!0}});window.addEventListener("test",Vv,Vv),window.removeEventListener("test",Vv,Vv)}catch{f1=!1}var Wu=f1?{passive:!1}:!1,hle=function(t){return t.tagName==="TEXTAREA"},iz=function(t,e){if(!(t instanceof Element))return!1;var n=window.getComputedStyle(t);return n[e]!=="hidden"&&!(n.overflowY===n.overflowX&&!hle(t)&&n[e]==="visible")},ple=function(t){return iz(t,"overflowY")},mle=function(t){return iz(t,"overflowX")},T2=function(t,e){var n=e.ownerDocument,r=e;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var i=oz(t,r);if(i){var o=sz(t,r),s=o[1],c=o[2];if(s>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},gle=function(t){var e=t.scrollTop,n=t.scrollHeight,r=t.clientHeight;return[e,n,r]},vle=function(t){var e=t.scrollLeft,n=t.scrollWidth,r=t.clientWidth;return[e,n,r]},oz=function(t,e){return t==="v"?ple(e):mle(e)},sz=function(t,e){return t==="v"?gle(e):vle(e)},yle=function(t,e){return t==="h"&&e==="rtl"?-1:1},xle=function(t,e,n,r,i){var o=yle(t,window.getComputedStyle(e).direction),s=o*r,c=n.target,l=e.contains(c),u=!1,d=s>0,f=0,h=0;do{var p=sz(t,c),v=p[0],m=p[1],y=p[2],b=m-y-o*v;(v||b)&&oz(t,c)&&(f+=b,h+=v),c instanceof ShadowRoot?c=c.host:c=c.parentNode}while(!l&&c!==document.body||l&&(e.contains(c)||e===c));return(d&&(Math.abs(f)<1||!i)||!d&&(Math.abs(h)<1||!i))&&(u=!0),u},Kv=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},k2=function(t){return[t.deltaX,t.deltaY]},P2=function(t){return t&&"current"in t?t.current:t},ble=function(t,e){return t[0]===e[0]&&t[1]===e[1]},wle=function(t){return` + .block-interactivity-`.concat(t,` {pointer-events: none;} + .allow-interactivity-`).concat(t,` {pointer-events: all;} +`)},Sle=0,qu=[];function Cle(t){var e=g.useRef([]),n=g.useRef([0,0]),r=g.useRef(),i=g.useState(Sle++)[0],o=g.useState(rz)[0],s=g.useRef(t);g.useEffect(function(){s.current=t},[t]),g.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(i));var m=Gce([t.lockRef.current],(t.shards||[]).map(P2),!0).filter(Boolean);return m.forEach(function(y){return y.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),m.forEach(function(y){return y.classList.remove("allow-interactivity-".concat(i))})}}},[t.inert,t.lockRef.current,t.shards]);var c=g.useCallback(function(m,y){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!s.current.allowPinchZoom;var b=Kv(m),x=n.current,w="deltaX"in m?m.deltaX:x[0]-b[0],S="deltaY"in m?m.deltaY:x[1]-b[1],C,_=m.target,A=Math.abs(w)>Math.abs(S)?"h":"v";if("touches"in m&&A==="h"&&_.type==="range")return!1;var j=T2(A,_);if(!j)return!0;if(j?C=A:(C=A==="v"?"h":"v",j=T2(A,_)),!j)return!1;if(!r.current&&"changedTouches"in m&&(w||S)&&(r.current=C),!C)return!0;var N=r.current||C;return xle(N,y,m,N==="h"?w:S,!0)},[]),l=g.useCallback(function(m){var y=m;if(!(!qu.length||qu[qu.length-1]!==o)){var b="deltaY"in y?k2(y):Kv(y),x=e.current.filter(function(C){return C.name===y.type&&(C.target===y.target||y.target===C.shadowParent)&&ble(C.delta,b)})[0];if(x&&x.should){y.cancelable&&y.preventDefault();return}if(!x){var w=(s.current.shards||[]).map(P2).filter(Boolean).filter(function(C){return C.contains(y.target)}),S=w.length>0?c(y,w[0]):!s.current.noIsolation;S&&y.cancelable&&y.preventDefault()}}},[]),u=g.useCallback(function(m,y,b,x){var w={name:m,delta:y,target:b,should:x,shadowParent:_le(b)};e.current.push(w),setTimeout(function(){e.current=e.current.filter(function(S){return S!==w})},1)},[]),d=g.useCallback(function(m){n.current=Kv(m),r.current=void 0},[]),f=g.useCallback(function(m){u(m.type,k2(m),m.target,c(m,t.lockRef.current))},[]),h=g.useCallback(function(m){u(m.type,Kv(m),m.target,c(m,t.lockRef.current))},[]);g.useEffect(function(){return qu.push(o),t.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:h}),document.addEventListener("wheel",l,Wu),document.addEventListener("touchmove",l,Wu),document.addEventListener("touchstart",d,Wu),function(){qu=qu.filter(function(m){return m!==o}),document.removeEventListener("wheel",l,Wu),document.removeEventListener("touchmove",l,Wu),document.removeEventListener("touchstart",d,Wu)}},[]);var p=t.removeScrollBar,v=t.inert;return g.createElement(g.Fragment,null,v?g.createElement(o,{styles:wle(i)}):null,p?g.createElement(fle,{gapMode:t.gapMode}):null)}function _le(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const Ale=Zce(nz,Cle);var Dw=g.forwardRef(function(t,e){return g.createElement(Mw,Ls({},t,{ref:e,sideCar:Ale}))});Dw.classNames=Mw.classNames;var jle=[" ","Enter","ArrowUp","ArrowDown"],Ele=[" ","Enter"],Vg="Select",[$w,Lw,Nle]=Iw(Vg),[th,qBe]=Bi(Vg,[Nle,Gf]),Fw=Gf(),[Tle,xl]=th(Vg),[kle,Ple]=th(Vg),az=t=>{const{__scopeSelect:e,children:n,open:r,defaultOpen:i,onOpenChange:o,value:s,defaultValue:c,onValueChange:l,dir:u,name:d,autoComplete:f,disabled:h,required:p,form:v}=t,m=Fw(e),[y,b]=g.useState(null),[x,w]=g.useState(null),[S,C]=g.useState(!1),_=Mu(u),[A=!1,j]=ps({prop:r,defaultProp:i,onChange:o}),[N,k]=ps({prop:s,defaultProp:c,onChange:l}),O=g.useRef(null),E=y?v||!!y.closest("form"):!0,[R,D]=g.useState(new Set),G=Array.from(R).map(L=>L.props.value).join(";");return a.jsx(J5,{...m,children:a.jsxs(Tle,{required:p,scope:e,trigger:y,onTriggerChange:b,valueNode:x,onValueNodeChange:w,valueNodeHasChildren:S,onValueNodeHasChildrenChange:C,contentId:os(),value:N,onValueChange:k,open:A,onOpenChange:j,dir:_,triggerPointerDownPosRef:O,disabled:h,children:[a.jsx($w.Provider,{scope:e,children:a.jsx(kle,{scope:t.__scopeSelect,onNativeOptionAdd:g.useCallback(L=>{D(z=>new Set(z).add(L))},[]),onNativeOptionRemove:g.useCallback(L=>{D(z=>{const M=new Set(z);return M.delete(L),M})},[]),children:n})}),E?a.jsxs(Oz,{"aria-hidden":!0,required:p,tabIndex:-1,name:d,autoComplete:f,value:N,onChange:L=>k(L.target.value),disabled:h,form:v,children:[N===void 0?a.jsx("option",{value:""}):null,Array.from(R)]},G):null]})})};az.displayName=Vg;var cz="SelectTrigger",lz=g.forwardRef((t,e)=>{const{__scopeSelect:n,disabled:r=!1,...i}=t,o=Fw(n),s=xl(cz,n),c=s.disabled||r,l=It(e,s.onTriggerChange),u=Lw(n),d=g.useRef("touch"),[f,h,p]=Iz(m=>{const y=u().filter(w=>!w.disabled),b=y.find(w=>w.value===s.value),x=Rz(y,m,b);x!==void 0&&s.onValueChange(x.value)}),v=m=>{c||(s.onOpenChange(!0),p()),m&&(s.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return a.jsx(xN,{asChild:!0,...o,children:a.jsx(ht.button,{type:"button",role:"combobox","aria-controls":s.contentId,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":"none",dir:s.dir,"data-state":s.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":Pz(s.value)?"":void 0,...i,ref:l,onClick:$e(i.onClick,m=>{m.currentTarget.focus(),d.current!=="mouse"&&v(m)}),onPointerDown:$e(i.onPointerDown,m=>{d.current=m.pointerType;const y=m.target;y.hasPointerCapture(m.pointerId)&&y.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(v(m),m.preventDefault())}),onKeyDown:$e(i.onKeyDown,m=>{const y=f.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&h(m.key),!(y&&m.key===" ")&&jle.includes(m.key)&&(v(),m.preventDefault())})})})});lz.displayName=cz;var uz="SelectValue",dz=g.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:i,children:o,placeholder:s="",...c}=t,l=xl(uz,n),{onValueNodeHasChildrenChange:u}=l,d=o!==void 0,f=It(e,l.onValueNodeChange);return qr(()=>{u(d)},[u,d]),a.jsx(ht.span,{...c,ref:f,style:{pointerEvents:"none"},children:Pz(l.value)?a.jsx(a.Fragment,{children:s}):o})});dz.displayName=uz;var Ole="SelectIcon",fz=g.forwardRef((t,e)=>{const{__scopeSelect:n,children:r,...i}=t;return a.jsx(ht.span,{"aria-hidden":!0,...i,ref:e,children:r||"▼"})});fz.displayName=Ole;var Ile="SelectPortal",hz=t=>a.jsx(Q0,{asChild:!0,...t});hz.displayName=Ile;var _u="SelectContent",pz=g.forwardRef((t,e)=>{const n=xl(_u,t.__scopeSelect),[r,i]=g.useState();if(qr(()=>{i(new DocumentFragment)},[]),!n.open){const o=r;return o?es.createPortal(a.jsx(mz,{scope:t.__scopeSelect,children:a.jsx($w.Slot,{scope:t.__scopeSelect,children:a.jsx("div",{children:t.children})})}),o):null}return a.jsx(gz,{...t,ref:e})});pz.displayName=_u;var Ho=10,[mz,bl]=th(_u),Rle="SelectContentImpl",gz=g.forwardRef((t,e)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:s,side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:p,sticky:v,hideWhenDetached:m,avoidCollisions:y,...b}=t,x=xl(_u,n),[w,S]=g.useState(null),[C,_]=g.useState(null),A=It(e,U=>S(U)),[j,N]=g.useState(null),[k,O]=g.useState(null),E=Lw(n),[R,D]=g.useState(!1),G=g.useRef(!1);g.useEffect(()=>{if(w)return ck(w)},[w]),ak();const L=g.useCallback(U=>{const[ue,...oe]=E().map(K=>K.ref.current),[ne]=oe.slice(-1),je=document.activeElement;for(const K of U)if(K===je||(K==null||K.scrollIntoView({block:"nearest"}),K===ue&&C&&(C.scrollTop=0),K===ne&&C&&(C.scrollTop=C.scrollHeight),K==null||K.focus(),document.activeElement!==je))return},[E,C]),z=g.useCallback(()=>L([j,w]),[L,j,w]);g.useEffect(()=>{R&&z()},[R,z]);const{onOpenChange:M,triggerPointerDownPosRef:$}=x;g.useEffect(()=>{if(w){let U={x:0,y:0};const ue=ne=>{var je,K;U={x:Math.abs(Math.round(ne.pageX)-(((je=$.current)==null?void 0:je.x)??0)),y:Math.abs(Math.round(ne.pageY)-(((K=$.current)==null?void 0:K.y)??0))}},oe=ne=>{U.x<=10&&U.y<=10?ne.preventDefault():w.contains(ne.target)||M(!1),document.removeEventListener("pointermove",ue),$.current=null};return $.current!==null&&(document.addEventListener("pointermove",ue),document.addEventListener("pointerup",oe,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ue),document.removeEventListener("pointerup",oe,{capture:!0})}}},[w,M,$]),g.useEffect(()=>{const U=()=>M(!1);return window.addEventListener("blur",U),window.addEventListener("resize",U),()=>{window.removeEventListener("blur",U),window.removeEventListener("resize",U)}},[M]);const[Q,q]=Iz(U=>{const ue=E().filter(je=>!je.disabled),oe=ue.find(je=>je.ref.current===document.activeElement),ne=Rz(ue,U,oe);ne&&setTimeout(()=>ne.ref.current.focus())}),te=g.useCallback((U,ue,oe)=>{const ne=!G.current&&!oe;(x.value!==void 0&&x.value===ue||ne)&&(N(U),ne&&(G.current=!0))},[x.value]),xe=g.useCallback(()=>w==null?void 0:w.focus(),[w]),B=g.useCallback((U,ue,oe)=>{const ne=!G.current&&!oe;(x.value!==void 0&&x.value===ue||ne)&&O(U)},[x.value]),ce=r==="popper"?h1:vz,fe=ce===h1?{side:c,sideOffset:l,align:u,alignOffset:d,arrowPadding:f,collisionBoundary:h,collisionPadding:p,sticky:v,hideWhenDetached:m,avoidCollisions:y}:{};return a.jsx(mz,{scope:n,content:w,viewport:C,onViewportChange:_,itemRefCallback:te,selectedItem:j,onItemLeave:xe,itemTextRefCallback:B,focusSelectedItem:z,selectedItemText:k,position:r,isPositioned:R,searchRef:Q,children:a.jsx(Dw,{as:Ys,allowPinchZoom:!0,children:a.jsx(Rw,{asChild:!0,trapped:x.open,onMountAutoFocus:U=>{U.preventDefault()},onUnmountAutoFocus:$e(i,U=>{var ue;(ue=x.trigger)==null||ue.focus({preventScroll:!0}),U.preventDefault()}),children:a.jsx(Rg,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:U=>U.preventDefault(),onDismiss:()=>x.onOpenChange(!1),children:a.jsx(ce,{role:"listbox",id:x.contentId,"data-state":x.open?"open":"closed",dir:x.dir,onContextMenu:U=>U.preventDefault(),...b,...fe,onPlaced:()=>D(!0),ref:A,style:{display:"flex",flexDirection:"column",outline:"none",...b.style},onKeyDown:$e(b.onKeyDown,U=>{const ue=U.ctrlKey||U.altKey||U.metaKey;if(U.key==="Tab"&&U.preventDefault(),!ue&&U.key.length===1&&q(U.key),["ArrowUp","ArrowDown","Home","End"].includes(U.key)){let ne=E().filter(je=>!je.disabled).map(je=>je.ref.current);if(["ArrowUp","End"].includes(U.key)&&(ne=ne.slice().reverse()),["ArrowUp","ArrowDown"].includes(U.key)){const je=U.target,K=ne.indexOf(je);ne=ne.slice(K+1)}setTimeout(()=>L(ne)),U.preventDefault()}})})})})})})});gz.displayName=Rle;var Mle="SelectItemAlignedPosition",vz=g.forwardRef((t,e)=>{const{__scopeSelect:n,onPlaced:r,...i}=t,o=xl(_u,n),s=bl(_u,n),[c,l]=g.useState(null),[u,d]=g.useState(null),f=It(e,A=>d(A)),h=Lw(n),p=g.useRef(!1),v=g.useRef(!0),{viewport:m,selectedItem:y,selectedItemText:b,focusSelectedItem:x}=s,w=g.useCallback(()=>{if(o.trigger&&o.valueNode&&c&&u&&m&&y&&b){const A=o.trigger.getBoundingClientRect(),j=u.getBoundingClientRect(),N=o.valueNode.getBoundingClientRect(),k=b.getBoundingClientRect();if(o.dir!=="rtl"){const je=k.left-j.left,K=N.left-je,et=A.left-K,Me=A.width+et,ut=Math.max(Me,j.width),qe=window.innerWidth-Ho,Pt=Mm(K,[Ho,Math.max(Ho,qe-ut)]);c.style.minWidth=Me+"px",c.style.left=Pt+"px"}else{const je=j.right-k.right,K=window.innerWidth-N.right-je,et=window.innerWidth-A.right-K,Me=A.width+et,ut=Math.max(Me,j.width),qe=window.innerWidth-Ho,Pt=Mm(K,[Ho,Math.max(Ho,qe-ut)]);c.style.minWidth=Me+"px",c.style.right=Pt+"px"}const O=h(),E=window.innerHeight-Ho*2,R=m.scrollHeight,D=window.getComputedStyle(u),G=parseInt(D.borderTopWidth,10),L=parseInt(D.paddingTop,10),z=parseInt(D.borderBottomWidth,10),M=parseInt(D.paddingBottom,10),$=G+L+R+M+z,Q=Math.min(y.offsetHeight*5,$),q=window.getComputedStyle(m),te=parseInt(q.paddingTop,10),xe=parseInt(q.paddingBottom,10),B=A.top+A.height/2-Ho,ce=E-B,fe=y.offsetHeight/2,U=y.offsetTop+fe,ue=G+L+U,oe=$-ue;if(ue<=B){const je=O.length>0&&y===O[O.length-1].ref.current;c.style.bottom="0px";const K=u.clientHeight-m.offsetTop-m.offsetHeight,et=Math.max(ce,fe+(je?xe:0)+K+z),Me=ue+et;c.style.height=Me+"px"}else{const je=O.length>0&&y===O[0].ref.current;c.style.top="0px";const et=Math.max(B,G+m.offsetTop+(je?te:0)+fe)+oe;c.style.height=et+"px",m.scrollTop=ue-B+m.offsetTop}c.style.margin=`${Ho}px 0`,c.style.minHeight=Q+"px",c.style.maxHeight=E+"px",r==null||r(),requestAnimationFrame(()=>p.current=!0)}},[h,o.trigger,o.valueNode,c,u,m,y,b,o.dir,r]);qr(()=>w(),[w]);const[S,C]=g.useState();qr(()=>{u&&C(window.getComputedStyle(u).zIndex)},[u]);const _=g.useCallback(A=>{A&&v.current===!0&&(w(),x==null||x(),v.current=!1)},[w,x]);return a.jsx($le,{scope:n,contentWrapper:c,shouldExpandOnScrollRef:p,onScrollButtonChange:_,children:a.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:S},children:a.jsx(ht.div,{...i,ref:f,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});vz.displayName=Mle;var Dle="SelectPopperPosition",h1=g.forwardRef((t,e)=>{const{__scopeSelect:n,align:r="start",collisionPadding:i=Ho,...o}=t,s=Fw(n);return a.jsx(bN,{...s,...o,ref:e,align:r,collisionPadding:i,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});h1.displayName=Dle;var[$le,lk]=th(_u,{}),p1="SelectViewport",yz=g.forwardRef((t,e)=>{const{__scopeSelect:n,nonce:r,...i}=t,o=bl(p1,n),s=lk(p1,n),c=It(e,o.onViewportChange),l=g.useRef(0);return a.jsxs(a.Fragment,{children:[a.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),a.jsx($w.Slot,{scope:n,children:a.jsx(ht.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:$e(i.onScroll,u=>{const d=u.currentTarget,{contentWrapper:f,shouldExpandOnScrollRef:h}=s;if(h!=null&&h.current&&f){const p=Math.abs(l.current-d.scrollTop);if(p>0){const v=window.innerHeight-Ho*2,m=parseFloat(f.style.minHeight),y=parseFloat(f.style.height),b=Math.max(m,y);if(b0?S:0,f.style.justifyContent="flex-end")}}}l.current=d.scrollTop})})})]})});yz.displayName=p1;var xz="SelectGroup",[Lle,Fle]=th(xz),Ble=g.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,i=os();return a.jsx(Lle,{scope:n,id:i,children:a.jsx(ht.div,{role:"group","aria-labelledby":i,...r,ref:e})})});Ble.displayName=xz;var bz="SelectLabel",wz=g.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,i=Fle(bz,n);return a.jsx(ht.div,{id:i.id,...r,ref:e})});wz.displayName=bz;var ub="SelectItem",[Ule,Sz]=th(ub),Cz=g.forwardRef((t,e)=>{const{__scopeSelect:n,value:r,disabled:i=!1,textValue:o,...s}=t,c=xl(ub,n),l=bl(ub,n),u=c.value===r,[d,f]=g.useState(o??""),[h,p]=g.useState(!1),v=It(e,x=>{var w;return(w=l.itemRefCallback)==null?void 0:w.call(l,x,r,i)}),m=os(),y=g.useRef("touch"),b=()=>{i||(c.onValueChange(r),c.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return a.jsx(Ule,{scope:n,value:r,disabled:i,textId:m,isSelected:u,onItemTextChange:g.useCallback(x=>{f(w=>w||((x==null?void 0:x.textContent)??"").trim())},[]),children:a.jsx($w.ItemSlot,{scope:n,value:r,disabled:i,textValue:d,children:a.jsx(ht.div,{role:"option","aria-labelledby":m,"data-highlighted":h?"":void 0,"aria-selected":u&&h,"data-state":u?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...s,ref:v,onFocus:$e(s.onFocus,()=>p(!0)),onBlur:$e(s.onBlur,()=>p(!1)),onClick:$e(s.onClick,()=>{y.current!=="mouse"&&b()}),onPointerUp:$e(s.onPointerUp,()=>{y.current==="mouse"&&b()}),onPointerDown:$e(s.onPointerDown,x=>{y.current=x.pointerType}),onPointerMove:$e(s.onPointerMove,x=>{var w;y.current=x.pointerType,i?(w=l.onItemLeave)==null||w.call(l):y.current==="mouse"&&x.currentTarget.focus({preventScroll:!0})}),onPointerLeave:$e(s.onPointerLeave,x=>{var w;x.currentTarget===document.activeElement&&((w=l.onItemLeave)==null||w.call(l))}),onKeyDown:$e(s.onKeyDown,x=>{var S;((S=l.searchRef)==null?void 0:S.current)!==""&&x.key===" "||(Ele.includes(x.key)&&b(),x.key===" "&&x.preventDefault())})})})})});Cz.displayName=ub;var cp="SelectItemText",_z=g.forwardRef((t,e)=>{const{__scopeSelect:n,className:r,style:i,...o}=t,s=xl(cp,n),c=bl(cp,n),l=Sz(cp,n),u=Ple(cp,n),[d,f]=g.useState(null),h=It(e,b=>f(b),l.onItemTextChange,b=>{var x;return(x=c.itemTextRefCallback)==null?void 0:x.call(c,b,l.value,l.disabled)}),p=d==null?void 0:d.textContent,v=g.useMemo(()=>a.jsx("option",{value:l.value,disabled:l.disabled,children:p},l.value),[l.disabled,l.value,p]),{onNativeOptionAdd:m,onNativeOptionRemove:y}=u;return qr(()=>(m(v),()=>y(v)),[m,y,v]),a.jsxs(a.Fragment,{children:[a.jsx(ht.span,{id:l.textId,...o,ref:h}),l.isSelected&&s.valueNode&&!s.valueNodeHasChildren?es.createPortal(o.children,s.valueNode):null]})});_z.displayName=cp;var Az="SelectItemIndicator",jz=g.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return Sz(Az,n).isSelected?a.jsx(ht.span,{"aria-hidden":!0,...r,ref:e}):null});jz.displayName=Az;var m1="SelectScrollUpButton",Ez=g.forwardRef((t,e)=>{const n=bl(m1,t.__scopeSelect),r=lk(m1,t.__scopeSelect),[i,o]=g.useState(!1),s=It(e,r.onScrollButtonChange);return qr(()=>{if(n.viewport&&n.isPositioned){let c=function(){const u=l.scrollTop>0;o(u)};const l=n.viewport;return c(),l.addEventListener("scroll",c),()=>l.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),i?a.jsx(Tz,{...t,ref:s,onAutoScroll:()=>{const{viewport:c,selectedItem:l}=n;c&&l&&(c.scrollTop=c.scrollTop-l.offsetHeight)}}):null});Ez.displayName=m1;var g1="SelectScrollDownButton",Nz=g.forwardRef((t,e)=>{const n=bl(g1,t.__scopeSelect),r=lk(g1,t.__scopeSelect),[i,o]=g.useState(!1),s=It(e,r.onScrollButtonChange);return qr(()=>{if(n.viewport&&n.isPositioned){let c=function(){const u=l.scrollHeight-l.clientHeight,d=Math.ceil(l.scrollTop)l.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),i?a.jsx(Tz,{...t,ref:s,onAutoScroll:()=>{const{viewport:c,selectedItem:l}=n;c&&l&&(c.scrollTop=c.scrollTop+l.offsetHeight)}}):null});Nz.displayName=g1;var Tz=g.forwardRef((t,e)=>{const{__scopeSelect:n,onAutoScroll:r,...i}=t,o=bl("SelectScrollButton",n),s=g.useRef(null),c=Lw(n),l=g.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return g.useEffect(()=>()=>l(),[l]),qr(()=>{var d;const u=c().find(f=>f.ref.current===document.activeElement);(d=u==null?void 0:u.ref.current)==null||d.scrollIntoView({block:"nearest"})},[c]),a.jsx(ht.div,{"aria-hidden":!0,...i,ref:e,style:{flexShrink:0,...i.style},onPointerDown:$e(i.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:$e(i.onPointerMove,()=>{var u;(u=o.onItemLeave)==null||u.call(o),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:$e(i.onPointerLeave,()=>{l()})})}),zle="SelectSeparator",kz=g.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t;return a.jsx(ht.div,{"aria-hidden":!0,...r,ref:e})});kz.displayName=zle;var v1="SelectArrow",Hle=g.forwardRef((t,e)=>{const{__scopeSelect:n,...r}=t,i=Fw(n),o=xl(v1,n),s=bl(v1,n);return o.open&&s.position==="popper"?a.jsx(wN,{...i,...r,ref:e}):null});Hle.displayName=v1;function Pz(t){return t===""||t===void 0}var Oz=g.forwardRef((t,e)=>{const{value:n,...r}=t,i=g.useRef(null),o=It(e,i),s=Gg(n);return g.useEffect(()=>{const c=i.current,l=window.HTMLSelectElement.prototype,d=Object.getOwnPropertyDescriptor(l,"value").set;if(s!==n&&d){const f=new Event("change",{bubbles:!0});d.call(c,n),c.dispatchEvent(f)}},[s,n]),a.jsx(SN,{asChild:!0,children:a.jsx("select",{...r,ref:o,defaultValue:n})})});Oz.displayName="BubbleSelect";function Iz(t){const e=Ar(t),n=g.useRef(""),r=g.useRef(0),i=g.useCallback(s=>{const c=n.current+s;e(c),function l(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(c)},[e]),o=g.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return g.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,o]}function Rz(t,e,n){const i=e.length>1&&Array.from(e).every(u=>u===e[0])?e[0]:e,o=n?t.indexOf(n):-1;let s=Gle(t,Math.max(o,0));i.length===1&&(s=s.filter(u=>u!==n));const l=s.find(u=>u.textValue.toLowerCase().startsWith(i.toLowerCase()));return l!==n?l:void 0}function Gle(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var Vle=az,Mz=lz,Kle=dz,Wle=fz,qle=hz,Dz=pz,Yle=yz,$z=wz,Lz=Cz,Qle=_z,Xle=jz,Fz=Ez,Bz=Nz,Uz=kz;const Hn=Vle,Gn=Kle,Fn=g.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(Mz,{ref:r,className:Le("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t),...n,children:[e,a.jsx(Wle,{asChild:!0,children:a.jsx(yl,{className:"h-4 w-4 opacity-50"})})]}));Fn.displayName=Mz.displayName;const zz=g.forwardRef(({className:t,...e},n)=>a.jsx(Fz,{ref:n,className:Le("flex cursor-default items-center justify-center py-1",t),...e,children:a.jsx(qf,{className:"h-4 w-4"})}));zz.displayName=Fz.displayName;const Hz=g.forwardRef(({className:t,...e},n)=>a.jsx(Bz,{ref:n,className:Le("flex cursor-default items-center justify-center py-1",t),...e,children:a.jsx(yl,{className:"h-4 w-4"})}));Hz.displayName=Bz.displayName;const Bn=g.forwardRef(({className:t,children:e,position:n="popper",...r},i)=>a.jsx(qle,{children:a.jsxs(Dz,{ref:i,className:Le("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...r,children:[a.jsx(zz,{}),a.jsx(Yle,{className:Le("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:e}),a.jsx(Hz,{})]})}));Bn.displayName=Dz.displayName;const Jle=g.forwardRef(({className:t,...e},n)=>a.jsx($z,{ref:n,className:Le("py-1.5 pl-8 pr-2 text-sm font-semibold",t),...e}));Jle.displayName=$z.displayName;const he=g.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(Lz,{ref:r,className:Le("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...n,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(Xle,{children:a.jsx(Io,{className:"h-4 w-4"})})}),a.jsx(Qle,{children:e})]}));he.displayName=Lz.displayName;const Zle=g.forwardRef(({className:t,...e},n)=>a.jsx(Uz,{ref:n,className:Le("-mx-1 my-1 h-px bg-muted",t),...e}));Zle.displayName=Uz.displayName;const eue=Ue.object({audienceBrief:Ue.string().min(10,{message:"Audience brief must be at least 10 characters."}),researchObjective:Ue.string().optional(),personaCount:Ue.string().min(1,{message:"Number of personas is required."}),dataFile:Ue.instanceof(FileList).optional(),llm_model:Ue.string().optional()});function tue({onSubmit:t,isGenerating:e}){const[n,r]=g.useState(!1),[i,o]=g.useState(!1),[s,c]=g.useState({audience_brief:[],research_objective:[]}),[l,u]=g.useState(!1),[d,f]=g.useState(null),[h,p]=g.useState(null),[v,m]=g.useState([]),y=_=>{const A=new DataTransfer;return _.forEach(j=>A.items.add(j)),A.files},b=Nw({resolver:Tw(eue),defaultValues:{audienceBrief:"",researchObjective:"",personaCount:"5",llm_model:"gemini-2.5-pro"}}),x=b.watch("audienceBrief"),w=b.watch("researchObjective"),S=async()=>{var j,N,k,O,E,R,D,G,L,z,M;const _=x==null?void 0:x.trim(),A=w==null?void 0:w.trim();if(!_||_.length<10){ae.error("Audience brief too short",{description:"Please enter at least 10 characters in the audience brief"});return}if(!A||A.length<10){ae.error("Research objective too short",{description:"Please enter at least 10 characters in the research objective"});return}u(!0),f(null);try{const $=await ma.enhanceAudienceBrief(_,A);c($.data.suggestions||{audience_brief:[],research_objective:[]}),r(!0),o(!1);const Q=(((N=(j=$.data.suggestions)==null?void 0:j.audience_brief)==null?void 0:N.length)||0)+(((O=(k=$.data.suggestions)==null?void 0:k.research_objective)==null?void 0:O.length)||0);ae.success("Enhancement suggestions generated",{description:`Generated ${Q} suggestions to improve your research inputs`})}catch($){console.error("Error enhancing audience brief:",$);let Q="Please try again or modify your brief",q="Failed to generate suggestions";if($&&typeof $=="object"){const te=$;te.code==="ECONNABORTED"||(E=te.message)!=null&&E.includes("timeout")?(q="Request timeout",Q="The AI took too long to analyze your brief. Please try again."):((R=te.response)==null?void 0:R.status)===500?(q="Server error",Q=((G=(D=te.response)==null?void 0:D.data)==null?void 0:G.message)||"The server encountered an error. Please try again later."):((L=te.response)==null?void 0:L.status)===400?(q="Invalid brief",Q=((M=(z=te.response)==null?void 0:z.data)==null?void 0:M.message)||"Please check your audience brief and try again."):te.message&&(Q=te.message)}else $ instanceof Error&&(Q=$.message);f(Q),ae.error(q,{description:Q,duration:5e3})}finally{u(!1)}},C=()=>{o(!i)};return a.jsx(Pw,{...b,children:a.jsxs("form",{onSubmit:b.handleSubmit(t),className:"space-y-6",children:[a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-6",children:[a.jsx(_t,{control:b.control,name:"audienceBrief",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Audience Brief"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Describe your target audience and research goals...",className:"h-40",..._})}),a.jsx(zn,{children:"Provide details about the demographics, behaviors, and attitudes you want to explore"}),a.jsx(St,{})]})}),a.jsx(_t,{control:b.control,name:"researchObjective",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Research Objective"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"What is the main research topic or objective you want to explore?",className:"h-32",..._})}),a.jsx(zn,{children:"Specify your research focus to generate more targeted persona goals, frustrations, and scenarios"}),a.jsx(St,{})]})}),a.jsx("div",{className:"space-y-3",children:a.jsx(se,{type:"button",variant:"outline",size:"sm",onClick:S,disabled:!x||x.trim().length<10||!w||w.trim().length<10||l||e,className:"flex items-center gap-2 hover-transition",children:l?a.jsxs(a.Fragment,{children:[a.jsx(ru,{className:"h-4 w-4 animate-spin"}),"Analyzing Research Inputs..."]}):a.jsxs(a.Fragment,{children:[a.jsx(gu,{className:"h-4 w-4"}),"Enhance Brief"]})})})]}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsx(W6,{focusGroupId:void 0,disabled:e,maxAssets:5,maxFileSize:10,allowedTypes:["application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","text/*","image/*"],label:"Customer Data Upload",description:"Upload existing customer data to create more realistic and accurate synthetic personas. This helps the AI understand your target audience better.",enableRenaming:!1,onFilesChange:_=>{m(_),p(_.length>0?y(_):null)}}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Supports PDF, Word docs, Excel files, text files, and images"})]}),a.jsxs("div",{className:"bg-muted/30 p-4 rounded-lg border border-border",children:[a.jsxs("div",{className:"flex items-center mb-2",children:[a.jsx(sf,{className:"h-5 w-5 text-muted-foreground mr-2"}),a.jsx("h3",{className:"font-sf font-medium",children:"What's included?"})]}),a.jsxs("ul",{className:"space-y-2 text-sm text-muted-foreground",children:[a.jsxs("li",{className:"flex items-center",children:[a.jsx(rp,{className:"h-4 w-4 text-green-500 mr-2"}),"Demographic profiles based on your brief"]}),a.jsxs("li",{className:"flex items-center",children:[a.jsx(rp,{className:"h-4 w-4 text-green-500 mr-2"}),"Personality traits and behavioral patterns"]}),a.jsxs("li",{className:"flex items-center",children:[a.jsx(rp,{className:"h-4 w-4 text-green-500 mr-2"}),"Consumer preferences and interests"]}),a.jsxs("li",{className:"flex items-center",children:[a.jsx(rp,{className:"h-4 w-4 text-green-500 mr-2"}),"Review and refine capabilities"]})]})]})]})]}),n&&a.jsxs("div",{className:"glass-panel rounded-lg p-4 border border-border bg-muted/30",children:[a.jsxs("div",{className:"flex items-center justify-between mb-3",children:[a.jsxs("h3",{className:"font-sf font-medium text-sm flex items-center gap-2",children:[a.jsx(gu,{className:"h-4 w-4 text-primary"}),"Enhancement Suggestions:"]}),a.jsx(se,{type:"button",variant:"ghost",size:"sm",onClick:C,className:"h-6 w-6 p-0 hover:bg-slate-200",title:i?"Expand suggestions":"Collapse suggestions",children:i?a.jsx(yl,{className:"h-4 w-4"}):a.jsx(qf,{className:"h-4 w-4"})})]}),!i&&a.jsx(a.Fragment,{children:d?a.jsx("div",{className:"text-sm text-red-600 bg-red-50 p-3 rounded-md",children:d}):a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx("div",{children:s.audience_brief.length>0?a.jsxs("div",{children:[a.jsxs("h4",{className:"font-sf font-medium text-sm text-slate-800 mb-2 flex items-center gap-2",children:[a.jsx(Fr,{className:"h-4 w-4 text-blue-600"}),"Suggestions for your Audience Brief:"]}),a.jsx("ul",{className:"space-y-2 text-sm text-slate-700",children:s.audience_brief.map((_,A)=>a.jsxs("li",{className:"flex items-start gap-2",children:[a.jsx("span",{className:"text-blue-600 mt-1.5 text-xs",children:"•"}),a.jsx("span",{className:"flex-1",children:_})]},A))})]}):a.jsx("div",{className:"text-sm text-muted-foreground",children:"No audience brief suggestions available"})}),a.jsx("div",{children:s.research_objective.length>0?a.jsxs("div",{children:[a.jsxs("h4",{className:"font-sf font-medium text-sm text-slate-800 mb-2 flex items-center gap-2",children:[a.jsx(sf,{className:"h-4 w-4 text-green-600"}),"Suggestions for your Research Objective:"]}),a.jsx("ul",{className:"space-y-2 text-sm text-slate-700",children:s.research_objective.map((_,A)=>a.jsxs("li",{className:"flex items-start gap-2",children:[a.jsx("span",{className:"text-green-600 mt-1.5 text-xs",children:"•"}),a.jsx("span",{className:"flex-1",children:_})]},A))})]}):a.jsx("div",{className:"text-sm text-muted-foreground",children:"No research objective suggestions available"})}),s.audience_brief.length===0&&s.research_objective.length===0&&a.jsx("div",{className:"col-span-full text-sm text-muted-foreground text-center",children:"No suggestions available"})]})})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx(_t,{control:b.control,name:"llm_model",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"AI Model"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select AI model"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"gemini-2.5-pro",children:"Gemini 2.5 Pro"}),a.jsx(he,{value:"gpt-4.1",children:"GPT-4.1"}),a.jsx(he,{value:"gpt-5",children:"GPT-5"})]})]}),a.jsx(zn,{children:"Choose which AI model to use for generating personas"}),a.jsx(St,{})]})}),a.jsx(_t,{control:b.control,name:"personaCount",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Number of Personas to Generate"}),a.jsx(wt,{children:a.jsx(Kt,{type:"number",min:"1",max:"20",..._})}),a.jsx(zn,{children:"How many synthetic users do you need for your research?"}),a.jsx(St,{})]})})]}),a.jsxs("div",{className:"flex flex-col items-end",children:[a.jsx(se,{type:"button",disabled:e,className:"min-w-36",onClick:()=>{const _=b.getValues();t({..._,dataFile:h})},children:e?a.jsxs(a.Fragment,{children:[a.jsx(ru,{className:"mr-2 h-4 w-4 animate-spin"}),"AI Generating..."]}):a.jsxs(a.Fragment,{children:[a.jsx(Fr,{className:"mr-2 h-4 w-4"}),"Generate Personas"]})}),e&&a.jsx("div",{className:"text-xs text-muted-foreground mt-2",children:"Generating multiple personas in parallel. This may take 1-2 minutes..."})]})]})})}const nue=t=>{const e=t==null?void 0:t.toLowerCase(),n="/semblance/";switch(e){case"male":return`${n}male_avatar.png`;case"female":return`${n}female_avatar.png`;case"non-binary":case"nonbinary":case"non binary":return`${n}nonbinary_avatar.png`;default:return`${n}male_avatar.png`}},Kg=t=>t.avatar||nue(t.gender);function uk({user:t,selected:e=!1,onClick:n,showDetailedDialog:r=!1,onSelectionToggle:i,showAddToFolderButton:o=!1,onAddToFolder:s,onViewDetails:c,folders:l=[]}){const u=ur();g.useState(!1);const[d,f]=g.useState(t),h=t._id||t.id,p=y=>{y.stopPropagation(),u(`/synthetic-users/${h}`)};d.oceanTraits&&(d.oceanTraits.openness,d.oceanTraits.conscientiousness,d.oceanTraits.extraversion,d.oceanTraits.agreeableness,d.oceanTraits.neuroticism);const v=y=>{var w,S;const b=y.target;b.closest("button")&&((S=(w=b.closest("button"))==null?void 0:w.textContent)!=null&&S.includes("View Details"))||(i?i(y):n&&n(y))},m=y=>{y.stopPropagation(),c?c(d):p(y)};return a.jsxs("div",{className:Le("persona-card glass-card rounded-xl p-4 cursor-pointer hover:shadow-md button-transition",e&&"selected ring-2 ring-primary"),onClick:v,children:[a.jsx("div",{className:"persona-card-overlay"}),a.jsx("div",{className:"persona-card-checkmark",children:a.jsx(Io,{className:"h-4 w-4 text-primary"})}),a.jsx("div",{className:"relative z-10",children:a.jsxs("div",{className:"flex items-start space-x-4",children:[a.jsx("div",{className:"h-12 w-12 rounded-full bg-muted flex items-center justify-center",children:a.jsx("img",{src:Kg(d),alt:`${d.name} avatar`,className:"h-12 w-12 rounded-full object-cover"})}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("div",{className:"flex items-center justify-between gap-2",children:a.jsx("h3",{className:"text-sm font-medium truncate flex-1",children:d.name})}),a.jsxs("p",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[d.age," • ",d.gender]}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:d.occupation}),a.jsx("p",{className:"text-xs text-muted-foreground",children:d.location}),a.jsx("div",{className:"mt-2",children:d.aiSynthesizedBio?a.jsxs("p",{className:"text-xs text-slate-700 line-clamp-3 leading-relaxed",children:[d.aiSynthesizedBio,d.aiSynthesizedBio.length>150&&"..."]}):a.jsxs("p",{className:"text-xs text-muted-foreground italic line-clamp-3",children:['"',d.personality,'"']})}),d.qualitativeAttributes&&d.qualitativeAttributes.length>0&&a.jsx("div",{className:"mt-3",children:a.jsx("div",{className:"flex flex-wrap gap-1",children:d.qualitativeAttributes.slice(0,3).map((y,b)=>a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-blue-50 text-blue-700 text-xs rounded-full",children:[a.jsx(ste,{className:"h-3 w-3"}),y]},b))})}),d.folder_ids&&d.folder_ids.length>0&&a.jsx("div",{className:"mt-2",children:a.jsxs("div",{className:"flex flex-wrap gap-1",children:[d.folder_ids.slice(0,2).map(y=>{const b=l.find(x=>x._id===y);return b?a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded-full",title:`In folder: ${b.name}`,children:[a.jsx(mo,{className:"h-3 w-3"}),b.name]},y):null}),d.folder_ids.length>2&&a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded-full",children:[a.jsx(Gr,{className:"h-3 w-3"}),d.folder_ids.length-2," more"]})]})}),d.topPersonalityTraits&&d.topPersonalityTraits.length>0&&a.jsx("div",{className:"mt-2",children:a.jsx("div",{className:"flex flex-wrap gap-1",children:d.topPersonalityTraits.slice(0,3).map((y,b)=>a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-purple-50 text-purple-700 text-xs rounded-full",children:[a.jsx(mu,{className:"h-3 w-3"}),y]},b))})}),a.jsx("div",{className:"mt-3 flex justify-end",children:a.jsx(se,{variant:"ghost",size:"sm",onClick:m,children:"View Details"})})]})]})})]})}var dk="Collapsible",[rue,YBe]=Bi(dk),[iue,fk]=rue(dk),Gz=g.forwardRef((t,e)=>{const{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:o,onOpenChange:s,...c}=t,[l=!1,u]=ps({prop:r,defaultProp:i,onChange:s});return a.jsx(iue,{scope:n,disabled:o,contentId:os(),open:l,onOpenToggle:g.useCallback(()=>u(d=>!d),[u]),children:a.jsx(ht.div,{"data-state":pk(l),"data-disabled":o?"":void 0,...c,ref:e})})});Gz.displayName=dk;var Vz="CollapsibleTrigger",Kz=g.forwardRef((t,e)=>{const{__scopeCollapsible:n,...r}=t,i=fk(Vz,n);return a.jsx(ht.button,{type:"button","aria-controls":i.contentId,"aria-expanded":i.open||!1,"data-state":pk(i.open),"data-disabled":i.disabled?"":void 0,disabled:i.disabled,...r,ref:e,onClick:$e(t.onClick,i.onOpenToggle)})});Kz.displayName=Vz;var hk="CollapsibleContent",Wz=g.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=fk(hk,t.__scopeCollapsible);return a.jsx(Yr,{present:n||i.open,children:({present:o})=>a.jsx(oue,{...r,ref:e,present:o})})});Wz.displayName=hk;var oue=g.forwardRef((t,e)=>{const{__scopeCollapsible:n,present:r,children:i,...o}=t,s=fk(hk,n),[c,l]=g.useState(r),u=g.useRef(null),d=It(e,u),f=g.useRef(0),h=f.current,p=g.useRef(0),v=p.current,m=s.open||c,y=g.useRef(m),b=g.useRef();return g.useEffect(()=>{const x=requestAnimationFrame(()=>y.current=!1);return()=>cancelAnimationFrame(x)},[]),qr(()=>{const x=u.current;if(x){b.current=b.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const w=x.getBoundingClientRect();f.current=w.height,p.current=w.width,y.current||(x.style.transitionDuration=b.current.transitionDuration,x.style.animationName=b.current.animationName),l(r)}},[s.open,r]),a.jsx(ht.div,{"data-state":pk(s.open),"data-disabled":s.disabled?"":void 0,id:s.contentId,hidden:!m,...o,ref:d,style:{"--radix-collapsible-content-height":h?`${h}px`:void 0,"--radix-collapsible-content-width":v?`${v}px`:void 0,...t.style},children:m&&i})});function pk(t){return t?"open":"closed"}var sue=Gz;const Wg=sue,qg=Kz,Yg=Wz;function aue({generatedPersonas:t,selectedPersonas:e,isGenerating:n,onPersonaSelection:r,onRefinePersonas:i,onApprovePersonas:o,onBackToGenerator:s}){const c=ur(),[l,u]=g.useState(""),[d,f]=g.useState(!1),h=p=>{c(`/synthetic-users/${p}?fromReview=true`)};return a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Review Generated Personas"}),a.jsxs("div",{className:"text-sm text-muted-foreground",children:[e.length," of ",t.length," selected"]})]}),a.jsx("div",{className:"space-y-4",children:t.map(p=>a.jsx(pt,{className:`border ${e.includes(p.id)?"border-primary/50 bg-primary/5":""} cursor-pointer`,onClick:()=>h(p.id),children:a.jsx(Rt,{className:"p-4",children:a.jsxs("div",{className:"flex items-start justify-between",children:[a.jsx("div",{className:"flex-1",children:a.jsxs("div",{className:"flex items-center",children:[a.jsx("input",{type:"checkbox",id:`persona-${p.id}`,checked:e.includes(p.id),onChange:v=>{v.stopPropagation(),r(p.id)},className:"mr-3 h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary"}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium",children:p.name}),a.jsxs("p",{className:"text-sm text-muted-foreground",children:[p.age," • ",p.gender," • ",p.occupation]})]})]})}),a.jsx(uk,{user:p,showDetailedDialog:!1,onClick:v=>{v.stopPropagation(),h(p.id)}})]})})},p.id))}),a.jsx("div",{className:"space-y-4 pt-4 border-t",children:a.jsxs("div",{children:[a.jsx("div",{className:"flex justify-between items-start mb-4",children:a.jsxs(se,{variant:"outline",onClick:s,children:[a.jsx(um,{className:"mr-2 h-4 w-4"}),"Back to Generator"]})}),a.jsxs(Wg,{open:d,onOpenChange:f,className:"w-full space-y-4",children:[a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx(qg,{asChild:!0,children:a.jsxs(se,{variant:"outline",className:"flex items-center gap-2",children:[a.jsx(ru,{className:"h-4 w-4"}),"Refine Personas",a.jsx(yl,{className:"h-4 w-4 ml-1 transition-transform duration-200",style:{transform:d?"rotate(180deg)":"rotate(0deg)"}})]})}),a.jsxs(se,{onClick:o,disabled:e.length===0,children:[a.jsx(rp,{className:"mr-2 h-4 w-4"}),"Approve Selected (",e.length,")"]})]}),a.jsx(Yg,{children:a.jsx(pt,{className:"border shadow-sm w-full mt-4",children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{htmlFor:"refinement-prompt",className:"text-sm font-medium block mb-2",children:"Refinement Instructions"}),a.jsx(vt,{id:"refinement-prompt",placeholder:"Example: Make all personas 5 years younger, or ensure everyone is from different locations...",value:l,onChange:p=>u(p.target.value),className:"min-h-[100px] w-full resize-y"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"Use natural language to describe how you'd like to refine the selected personas."})]}),a.jsxs(se,{onClick:()=>i(l),disabled:n||l.trim()==="",className:"w-full",children:[n?a.jsx(ru,{className:"mr-2 h-4 w-4 animate-spin"}):a.jsx(ru,{className:"mr-2 h-4 w-4"}),"Apply Refinements"]})]})})})})]})]})})]})}async function cue(t,e,n,r,i,o){console.log(`generateSyntheticPersonas called with targetFolderId: ${i||"none"}`),console.log(`🔄 generateSyntheticPersonas using model: ${o||"gemini-2.5-pro"}`);try{if(console.log(`Generating ${n} synthetic personas using two-stage approach...`),t.trim().length<10)throw new Error("Audience brief is too short. Please provide more context for better persona generation.");let s;if(r&&r.length>0){console.log(`Uploading ${r.length} customer data files...`);try{s=(await ma.uploadCustomerData(r)).data.session_id,console.log(`Customer data uploaded with session ID: ${s}`)}catch(l){throw console.error("Failed to upload customer data:",l),new Error("Failed to upload customer data files. Please try again.")}}const c=await ma.batchGenerateWithStages(t,e,n,.8,s,o);if(c.data){const l=c.data.partial_success===!0,u=c.data.personas&&c.data.personas.length>0,d=c.data.errors&&c.data.errors.length>0;if(u){if(console.log(`Generated ${c.data.personas.length} personas with two-stage process${d?` (${c.data.errors.length} failed)`:""}`),i){const f=c.data.personas,h=f.map(p=>p._id||p.id).filter(Boolean);console.log(`Adding ${h.length} newly generated personas to folder: ${i}`);try{await Rs.addPersonasBatch(i,h),console.log(`Added ${h.length} newly generated personas to folder: ${i}`)}catch(p){console.error("Error adding personas to folder:",p)}if(s)try{await ma.cleanupCustomerData(s),console.log(`Cleaned up customer data for session: ${s}`)}catch(p){console.warn("Failed to cleanup customer data:",p)}return l||d?{...c.data,length:f.length}:{...c.data,personas:f}}if(s)try{await ma.cleanupCustomerData(s),console.log(`Cleaned up customer data for session: ${s}`)}catch(f){console.warn("Failed to cleanup customer data:",f)}if(l||d)return{...c.data.personas,length:c.data.personas.length,partial_success:l,errors:c.data.errors};if(s)try{await ma.cleanupCustomerData(s),console.log(`Cleaned up customer data for session: ${s}`)}catch(f){console.warn("Failed to cleanup customer data:",f)}return c.data.personas}else if(d){if(s)try{await ma.cleanupCustomerData(s),console.log(`Cleaned up customer data for session: ${s}`)}catch(f){console.warn("Failed to cleanup customer data:",f)}throw new Error(`Failed to generate personas: ${c.data.errors.length} generation attempts failed.`)}else throw new Error("No personas returned from API")}else throw new Error("Invalid response format from API")}catch(s){if(customerDataSessionId)try{await ma.cleanupCustomerData(customerDataSessionId),console.log(`Cleaned up customer data for session: ${customerDataSessionId}`)}catch(c){console.warn("Failed to cleanup customer data:",c)}throw console.error("Error generating AI personas:",s),s}}function qz(){const[t,e]=g.useState([]),n=async o=>{const s=[];for(const c of o){const l={...c};l._id&&typeof l._id=="string"&&l._id.startsWith("local-")&&delete l._id;const u=await $r.create(l);console.log("Persona saved to database:",u.data),s.push({...c,id:u.data._id||u.data.id,_id:u.data._id||u.data.id,isDbPersona:!0})}e(s)},r=async()=>{const o=await $r.getAll();return o&&o.data&&Array.isArray(o.data)?(console.log("Personas loaded from database:",o.data.length),o.data.map(s=>({...s,id:s._id||s.id,isDbPersona:!0}))):[]};return g.useEffect(()=>{(async()=>{const s=await r();e(s)})()},[]),{storedPersonas:t,savePersonas:n,loadPersonas:r,clearPersonas:async()=>{const o=await r();for(const s of o)s._id&&await $r.delete(s._id);e([])}}}function lue({targetFolderId:t,targetFolderName:e}){const n=Ui(),r=ur(),{loadPersonas:i,savePersonas:o}=qz(),[s,c]=g.useState(!1),[l,u]=g.useState([]),[d,f]=g.useState([]),[h,p]=g.useState(!1),[v,m]=g.useState(0);g.useEffect(()=>{const C=new URLSearchParams(n.search),_=C.get("mode"),A=C.get("tab"),j=C.get("step");if(_==="create"&&A==="ai"&&j==="review"){const N=i();N.length>0&&(u(N),f(N.map(k=>k.id)),p(!0))}},[n,i]);async function y(C){var _,A,j,N,k,O,E,R,D,G;try{c(!0),m(0);const L=parseInt(C.personaCount);if(isNaN(L)||L<1||L>10){ae.error("Invalid number of personas",{description:"Please enter a number between 1 and 10"}),c(!1);return}m(5);const z=setInterval(()=>{m(q=>q<90?q+Math.random()*5:q)},500),M=L<=2?"30-60 seconds":L<=4?"1-2 minutes":L<=6?"2-3 minutes":"3-5 minutes";L>4&&ae.info("Generation may take longer",{description:`Generating ${L} personas at once may result in some timeouts. If this happens, the successfully created personas will still be saved.`,duration:8e3}),ae.info("Generating AI personas in parallel",{description:`Creating ${L} synthetic personas based on your brief. This may take ${M}. Please be patient.`,duration:1e4}),t&&e?(console.log(`Target folder for new personas: ID=${t}, Name=${e}`),ae.info(`Creating personas in "${e}" folder`,{duration:3e3})):console.log("No target folder specified for new personas"),console.log(`🤖 Starting persona generation with model: ${C.llm_model||"gemini-2.5-pro"}`);const $=await cue(C.audienceBrief,C.researchObjective,L,C.dataFile,t,C.llm_model),Q=$.personas||$;if(clearInterval(z),m(100),Q&&Q.length>0)console.log(`✅ Successfully generated ${Q.length} personas using model: ${C.llm_model||"gemini-2.5-pro"}`),$.partial_success||$.errors&&$.errors.length>0?(ae.success("Some personas generated successfully",{description:`${Q.length} synthetic personas were created using ${C.llm_model||"Gemini 2.5 Pro"}. ${((_=$.errors)==null?void 0:_.length)||0} failed due to timeout or other errors.`,duration:8e3}),$.errors&&$.errors.length>0&&setTimeout(()=>{ae.error("Some personas failed to generate",{description:`${$.errors.length} personas timed out. The server took too long to generate them. The successfully generated personas have been saved${t?" in the selected folder":""}.`,duration:1e4})},1e3)):ae.success("Personas generated and saved successfully",{description:`${Q.length} synthetic personas have been created using ${C.llm_model||"Gemini 2.5 Pro"} and saved ${t?`to the "${e}" folder`:"to the database"}.`}),r("/synthetic-users?mode=view");else throw new Error("No personas were generated")}catch(L){console.error(`❌ Error generating personas using model: ${C.llm_model||"gemini-2.5-pro"}:`,L);let z="Please try again or adjust your parameters",M="Failed to generate personas";L.code==="ECONNABORTED"||(A=L.message)!=null&&A.includes("timeout")||((j=L.response)==null?void 0:j.status)===504?(M="Generation timeout",z="AI persona generation timed out. This often happens when generating multiple complex personas. Try generating fewer personas (2-3) or try again later."):((N=L.response)==null?void 0:N.status)===500?(M="Server error",(O=(k=L.response)==null?void 0:k.data)!=null&&O.message?z=L.response.data.message:(R=(E=L.response)==null?void 0:E.data)!=null&&R.error?z=L.response.data.error:z="The server encountered an error processing your request. Please try again later."):((D=L.response)==null?void 0:D.status)===401?(M="Authentication required",z="Please log in to generate personas."):(G=L.message)!=null&&G.includes("504 Deadline Exceeded")?(M="Generation timeout",z="The AI model took too long to generate personas. Try generating fewer personas or simplify your brief."):L instanceof Error&&(z=L.message),ae.error(M,{description:z,duration:6e3})}finally{setTimeout(()=>{c(!1),m(0)},500)}}const b=C=>{f(_=>_.includes(C)?_.filter(A=>A!==C):[..._,C])},x=(C,_)=>{const A=_.toLowerCase();return C.map(j=>{const N={...j};if(A.includes("younger")){const k=parseInt(N.age);N.age=(k-5).toString()}else if(A.includes("older")){const k=parseInt(N.age);N.age=(k+5).toString()}if(A.includes("different locations")&&(N.location=`${N.location} (Diversified)`),A.includes("more extroverted")?N.personality=`Extroverted, ${N.personality.toLowerCase()}`:A.includes("more introverted")&&(N.personality=`Introverted, ${N.personality.toLowerCase()}`),A.includes("diverse")){const k=["tech-savvy","traditional","innovative","conservative","creative"],O=k[Math.floor(Math.random()*k.length)];N.personality=`${O}, ${N.personality}`}return N})},w=C=>{if(!C.trim()){ae.error("Please provide refinement instructions");return}c(!0),setTimeout(()=>{try{const _=l.filter(N=>d.includes(N.id)),A=x(_,C),j=l.map(N=>A.find(O=>O.id===N.id)||N);u(j),c(!1),o(j),ae.success("Personas refined based on your instructions",{description:"Review the updated profiles"})}catch(_){console.error("Error refining personas:",_),ae.error("Failed to refine personas",{description:"Please try different instructions"}),c(!1)}},1500)},S=()=>{const C=l.filter(_=>d.includes(_.id));ae.success(`${C.length} personas approved`,{description:"Added to your synthetic persona library"}),o(C),r("/synthetic-users?mode=view")};return a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-6",children:[a.jsx(Fr,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"AI Persona Recruiter"})]}),s&&a.jsxs("div",{className:"mb-6",children:[a.jsxs("div",{className:"flex justify-between items-center mb-2",children:[a.jsx("span",{className:"text-sm font-medium",children:"Generating personas in parallel..."}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[Math.round(v),"%"]})]}),a.jsx(Pc,{value:v,className:"h-2"})]}),h?a.jsx(aue,{generatedPersonas:l,selectedPersonas:d,isGenerating:s,onPersonaSelection:b,onRefinePersonas:w,onApprovePersonas:S,onBackToGenerator:()=>p(!1)}):a.jsx(tue,{onSubmit:y,isGenerating:s})]})}const dl=new Map;function Yz(t){const{id:e,title:n,description:r,type:i="default",duration:o}=t;let s;switch(i){case"success":s=ae.success(n,{description:r,duration:o});break;case"error":s=ae.error(n,{description:r,duration:o});break;case"warning":s=ae.warning(n,{description:r,duration:o});break;case"info":s=ae.info(n,{description:r,duration:o});break;default:s=ae(n,{description:r,duration:o});break}return dl.set(e,s.toString()),e}function uue(t,e){const n=dl.get(t);if(!n)return console.warn(`Toast with ID "${t}" not found. Creating new toast instead.`),Yz({id:t,...e,title:e.title||"Updated"}),!1;const{title:r,description:i,type:o="default",duration:s}=e;ae.dismiss(n);let c;switch(o){case"success":c=ae.success(r,{description:i,duration:s});break;case"error":c=ae.error(r,{description:i,duration:s});break;case"warning":c=ae.warning(r,{description:i,duration:s});break;case"info":c=ae.info(r,{description:i,duration:s});break;default:c=ae(r,{description:i,duration:s});break}return dl.set(t,c.toString()),!0}function due(t){const e=dl.get(t);return e?(ae.dismiss(e),dl.delete(t),!0):(console.warn(`Toast with ID "${t}" not found.`),!1)}function fue(t){return dl.has(t)}function hue(){dl.forEach(t=>{ae.dismiss(t)}),dl.clear()}const Ye={success:ae.success,error:ae.error,warning:ae.warning,info:ae.info,loading:ae.loading,dismiss:ae.dismiss,createPersistent:Yz,updatePersistent:uue,dismissPersistent:due,hasPersistent:fue,dismissAllPersistent:hue};var Qz=["PageUp","PageDown"],Xz=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Jz={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},nh="Slider",[y1,pue,mue]=Iw(nh),[Zz,QBe]=Bi(nh,[mue]),[gue,Bw]=Zz(nh),eH=g.forwardRef((t,e)=>{const{name:n,min:r=0,max:i=100,step:o=1,orientation:s="horizontal",disabled:c=!1,minStepsBetweenThumbs:l=0,defaultValue:u=[r],value:d,onValueChange:f=()=>{},onValueCommit:h=()=>{},inverted:p=!1,form:v,...m}=t,y=g.useRef(new Set),b=g.useRef(0),w=s==="horizontal"?vue:yue,[S=[],C]=ps({prop:d,defaultProp:u,onChange:O=>{var R;(R=[...y.current][b.current])==null||R.focus(),f(O)}}),_=g.useRef(S);function A(O){const E=Cue(S,O);k(O,E)}function j(O){k(O,b.current)}function N(){const O=_.current[b.current];S[b.current]!==O&&h(S)}function k(O,E,{commit:R}={commit:!1}){const D=Eue(o),G=Nue(Math.round((O-r)/o)*o+r,D),L=Mm(G,[r,i]);C((z=[])=>{const M=wue(z,L,E);if(jue(M,l*o)){b.current=M.indexOf(L);const $=String(M)!==String(z);return $&&R&&h(M),$?M:z}else return z})}return a.jsx(gue,{scope:t.__scopeSlider,name:n,disabled:c,min:r,max:i,valueIndexToChangeRef:b,thumbs:y.current,values:S,orientation:s,form:v,children:a.jsx(y1.Provider,{scope:t.__scopeSlider,children:a.jsx(y1.Slot,{scope:t.__scopeSlider,children:a.jsx(w,{"aria-disabled":c,"data-disabled":c?"":void 0,...m,ref:e,onPointerDown:$e(m.onPointerDown,()=>{c||(_.current=S)}),min:r,max:i,inverted:p,onSlideStart:c?void 0:A,onSlideMove:c?void 0:j,onSlideEnd:c?void 0:N,onHomeKeyDown:()=>!c&&k(r,0,{commit:!0}),onEndKeyDown:()=>!c&&k(i,S.length-1,{commit:!0}),onStepKeyDown:({event:O,direction:E})=>{if(!c){const G=Qz.includes(O.key)||O.shiftKey&&Xz.includes(O.key)?10:1,L=b.current,z=S[L],M=o*G*E;k(z+M,L,{commit:!0})}}})})})})});eH.displayName=nh;var[tH,nH]=Zz(nh,{startEdge:"left",endEdge:"right",size:"width",direction:1}),vue=g.forwardRef((t,e)=>{const{min:n,max:r,dir:i,inverted:o,onSlideStart:s,onSlideMove:c,onSlideEnd:l,onStepKeyDown:u,...d}=t,[f,h]=g.useState(null),p=It(e,w=>h(w)),v=g.useRef(),m=Mu(i),y=m==="ltr",b=y&&!o||!y&&o;function x(w){const S=v.current||f.getBoundingClientRect(),C=[0,S.width],A=mk(C,b?[n,r]:[r,n]);return v.current=S,A(w-S.left)}return a.jsx(tH,{scope:t.__scopeSlider,startEdge:b?"left":"right",endEdge:b?"right":"left",direction:b?1:-1,size:"width",children:a.jsx(rH,{dir:m,"data-orientation":"horizontal",...d,ref:p,style:{...d.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:w=>{const S=x(w.clientX);s==null||s(S)},onSlideMove:w=>{const S=x(w.clientX);c==null||c(S)},onSlideEnd:()=>{v.current=void 0,l==null||l()},onStepKeyDown:w=>{const C=Jz[b?"from-left":"from-right"].includes(w.key);u==null||u({event:w,direction:C?-1:1})}})})}),yue=g.forwardRef((t,e)=>{const{min:n,max:r,inverted:i,onSlideStart:o,onSlideMove:s,onSlideEnd:c,onStepKeyDown:l,...u}=t,d=g.useRef(null),f=It(e,d),h=g.useRef(),p=!i;function v(m){const y=h.current||d.current.getBoundingClientRect(),b=[0,y.height],w=mk(b,p?[r,n]:[n,r]);return h.current=y,w(m-y.top)}return a.jsx(tH,{scope:t.__scopeSlider,startEdge:p?"bottom":"top",endEdge:p?"top":"bottom",size:"height",direction:p?1:-1,children:a.jsx(rH,{"data-orientation":"vertical",...u,ref:f,style:{...u.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:m=>{const y=v(m.clientY);o==null||o(y)},onSlideMove:m=>{const y=v(m.clientY);s==null||s(y)},onSlideEnd:()=>{h.current=void 0,c==null||c()},onStepKeyDown:m=>{const b=Jz[p?"from-bottom":"from-top"].includes(m.key);l==null||l({event:m,direction:b?-1:1})}})})}),rH=g.forwardRef((t,e)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:i,onSlideEnd:o,onHomeKeyDown:s,onEndKeyDown:c,onStepKeyDown:l,...u}=t,d=Bw(nh,n);return a.jsx(ht.span,{...u,ref:e,onKeyDown:$e(t.onKeyDown,f=>{f.key==="Home"?(s(f),f.preventDefault()):f.key==="End"?(c(f),f.preventDefault()):Qz.concat(Xz).includes(f.key)&&(l(f),f.preventDefault())}),onPointerDown:$e(t.onPointerDown,f=>{const h=f.target;h.setPointerCapture(f.pointerId),f.preventDefault(),d.thumbs.has(h)?h.focus():r(f)}),onPointerMove:$e(t.onPointerMove,f=>{f.target.hasPointerCapture(f.pointerId)&&i(f)}),onPointerUp:$e(t.onPointerUp,f=>{const h=f.target;h.hasPointerCapture(f.pointerId)&&(h.releasePointerCapture(f.pointerId),o(f))})})}),iH="SliderTrack",oH=g.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,i=Bw(iH,n);return a.jsx(ht.span,{"data-disabled":i.disabled?"":void 0,"data-orientation":i.orientation,...r,ref:e})});oH.displayName=iH;var x1="SliderRange",sH=g.forwardRef((t,e)=>{const{__scopeSlider:n,...r}=t,i=Bw(x1,n),o=nH(x1,n),s=g.useRef(null),c=It(e,s),l=i.values.length,u=i.values.map(h=>cH(h,i.min,i.max)),d=l>1?Math.min(...u):0,f=100-Math.max(...u);return a.jsx(ht.span,{"data-orientation":i.orientation,"data-disabled":i.disabled?"":void 0,...r,ref:c,style:{...t.style,[o.startEdge]:d+"%",[o.endEdge]:f+"%"}})});sH.displayName=x1;var b1="SliderThumb",aH=g.forwardRef((t,e)=>{const n=pue(t.__scopeSlider),[r,i]=g.useState(null),o=It(e,c=>i(c)),s=g.useMemo(()=>r?n().findIndex(c=>c.ref.current===r):-1,[n,r]);return a.jsx(xue,{...t,ref:o,index:s})}),xue=g.forwardRef((t,e)=>{const{__scopeSlider:n,index:r,name:i,...o}=t,s=Bw(b1,n),c=nH(b1,n),[l,u]=g.useState(null),d=It(e,x=>u(x)),f=l?s.form||!!l.closest("form"):!0,h=Dg(l),p=s.values[r],v=p===void 0?0:cH(p,s.min,s.max),m=Sue(r,s.values.length),y=h==null?void 0:h[c.size],b=y?_ue(y,v,c.direction):0;return g.useEffect(()=>{if(l)return s.thumbs.add(l),()=>{s.thumbs.delete(l)}},[l,s.thumbs]),a.jsxs("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[c.startEdge]:`calc(${v}% + ${b}px)`},children:[a.jsx(y1.ItemSlot,{scope:t.__scopeSlider,children:a.jsx(ht.span,{role:"slider","aria-label":t["aria-label"]||m,"aria-valuemin":s.min,"aria-valuenow":p,"aria-valuemax":s.max,"aria-orientation":s.orientation,"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,tabIndex:s.disabled?void 0:0,...o,ref:d,style:p===void 0?{display:"none"}:t.style,onFocus:$e(t.onFocus,()=>{s.valueIndexToChangeRef.current=r})})}),f&&a.jsx(bue,{name:i??(s.name?s.name+(s.values.length>1?"[]":""):void 0),form:s.form,value:p},r)]})});aH.displayName=b1;var bue=t=>{const{value:e,...n}=t,r=g.useRef(null),i=Gg(e);return g.useEffect(()=>{const o=r.current,s=window.HTMLInputElement.prototype,l=Object.getOwnPropertyDescriptor(s,"value").set;if(i!==e&&l){const u=new Event("input",{bubbles:!0});l.call(o,e),o.dispatchEvent(u)}},[i,e]),a.jsx("input",{style:{display:"none"},...n,ref:r,defaultValue:e})};function wue(t=[],e,n){const r=[...t];return r[n]=e,r.sort((i,o)=>i-o)}function cH(t,e,n){const o=100/(n-e)*(t-e);return Mm(o,[0,100])}function Sue(t,e){return e>2?`Value ${t+1} of ${e}`:e===2?["Minimum","Maximum"][t]:void 0}function Cue(t,e){if(t.length===1)return 0;const n=t.map(i=>Math.abs(i-e)),r=Math.min(...n);return n.indexOf(r)}function _ue(t,e,n){const r=t/2,o=mk([0,50],[0,r]);return(r-o(e)*n)*n}function Aue(t){return t.slice(0,-1).map((e,n)=>t[n+1]-e)}function jue(t,e){if(e>0){const n=Aue(t);return Math.min(...n)>=e}return!0}function mk(t,e){return n=>{if(t[0]===t[1]||e[0]===e[1])return e[0];const r=(e[1]-e[0])/(t[1]-t[0]);return e[0]+r*(n-t[0])}}function Eue(t){return(String(t).split(".")[1]||"").length}function Nue(t,e){const n=Math.pow(10,e);return Math.round(t*n)/n}var lH=eH,Tue=oH,kue=sH,Pue=aH;const Sr=g.forwardRef(({className:t,...e},n)=>a.jsxs(lH,{ref:n,className:Le("relative flex w-full touch-none select-none items-center",t),...e,children:[a.jsx(Tue,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary",children:a.jsx(kue,{className:"absolute h-full bg-primary"})}),a.jsx(Pue,{className:"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})]}));Sr.displayName=lH.displayName;var gk="Switch",[Oue,XBe]=Bi(gk),[Iue,Rue]=Oue(gk),uH=g.forwardRef((t,e)=>{const{__scopeSwitch:n,name:r,checked:i,defaultChecked:o,required:s,disabled:c,value:l="on",onCheckedChange:u,form:d,...f}=t,[h,p]=g.useState(null),v=It(e,w=>p(w)),m=g.useRef(!1),y=h?d||!!h.closest("form"):!0,[b=!1,x]=ps({prop:i,defaultProp:o,onChange:u});return a.jsxs(Iue,{scope:n,checked:b,disabled:c,children:[a.jsx(ht.button,{type:"button",role:"switch","aria-checked":b,"aria-required":s,"data-state":hH(b),"data-disabled":c?"":void 0,disabled:c,value:l,...f,ref:v,onClick:$e(t.onClick,w=>{x(S=>!S),y&&(m.current=w.isPropagationStopped(),m.current||w.stopPropagation())})}),y&&a.jsx(Mue,{control:h,bubbles:!m.current,name:r,value:l,checked:b,required:s,disabled:c,form:d,style:{transform:"translateX(-100%)"}})]})});uH.displayName=gk;var dH="SwitchThumb",fH=g.forwardRef((t,e)=>{const{__scopeSwitch:n,...r}=t,i=Rue(dH,n);return a.jsx(ht.span,{"data-state":hH(i.checked),"data-disabled":i.disabled?"":void 0,...r,ref:e})});fH.displayName=dH;var Mue=t=>{const{control:e,checked:n,bubbles:r=!0,...i}=t,o=g.useRef(null),s=Gg(n),c=Dg(e);return g.useEffect(()=>{const l=o.current,u=window.HTMLInputElement.prototype,f=Object.getOwnPropertyDescriptor(u,"checked").set;if(s!==n&&f){const h=new Event("click",{bubbles:r});f.call(l,n),l.dispatchEvent(h)}},[s,n,r]),a.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:o,style:{...t.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function hH(t){return t?"checked":"unchecked"}var pH=uH,Due=fH;const Dm=g.forwardRef(({className:t,...e},n)=>a.jsx(pH,{className:Le("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",t),...e,ref:n,children:a.jsx(Due,{className:Le("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));Dm.displayName=pH.displayName;function $ue(t,e=[]){let n=[];function r(o,s){const c=g.createContext(s),l=n.length;n=[...n,s];function u(f){const{scope:h,children:p,...v}=f,m=(h==null?void 0:h[t][l])||c,y=g.useMemo(()=>v,Object.values(v));return a.jsx(m.Provider,{value:y,children:p})}function d(f,h){const p=(h==null?void 0:h[t][l])||c,v=g.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${f}\` must be used within \`${o}\``)}return u.displayName=o+"Provider",[u,d]}const i=()=>{const o=n.map(s=>g.createContext(s));return function(c){const l=(c==null?void 0:c[t])||o;return g.useMemo(()=>({[`__scope${t}`]:{...c,[t]:l}}),[c,l])}};return i.scopeName=t,[r,Lue(i,...e)]}function Lue(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const r=t.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=r.reduce((c,{useScope:l,scopeName:u})=>{const f=l(o)[`__scope${u}`];return{...c,...f}},{});return g.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])}};return n.scopeName=e.scopeName,n}var HC="rovingFocusGroup.onEntryFocus",Fue={bubbles:!1,cancelable:!0},Uw="RovingFocusGroup",[w1,mH,Bue]=Iw(Uw),[Uue,rh]=$ue(Uw,[Bue]),[zue,Hue]=Uue(Uw),gH=g.forwardRef((t,e)=>a.jsx(w1.Provider,{scope:t.__scopeRovingFocusGroup,children:a.jsx(w1.Slot,{scope:t.__scopeRovingFocusGroup,children:a.jsx(Gue,{...t,ref:e})})}));gH.displayName=Uw;var Gue=g.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:o,currentTabStopId:s,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:d=!1,...f}=t,h=g.useRef(null),p=It(e,h),v=Mu(o),[m=null,y]=ps({prop:s,defaultProp:c,onChange:l}),[b,x]=g.useState(!1),w=Ar(u),S=mH(n),C=g.useRef(!1),[_,A]=g.useState(0);return g.useEffect(()=>{const j=h.current;if(j)return j.addEventListener(HC,w),()=>j.removeEventListener(HC,w)},[w]),a.jsx(zue,{scope:n,orientation:r,dir:v,loop:i,currentTabStopId:m,onItemFocus:g.useCallback(j=>y(j),[y]),onItemShiftTab:g.useCallback(()=>x(!0),[]),onFocusableItemAdd:g.useCallback(()=>A(j=>j+1),[]),onFocusableItemRemove:g.useCallback(()=>A(j=>j-1),[]),children:a.jsx(ht.div,{tabIndex:b||_===0?-1:0,"data-orientation":r,...f,ref:p,style:{outline:"none",...t.style},onMouseDown:$e(t.onMouseDown,()=>{C.current=!0}),onFocus:$e(t.onFocus,j=>{const N=!C.current;if(j.target===j.currentTarget&&N&&!b){const k=new CustomEvent(HC,Fue);if(j.currentTarget.dispatchEvent(k),!k.defaultPrevented){const O=S().filter(L=>L.focusable),E=O.find(L=>L.active),R=O.find(L=>L.id===m),G=[E,R,...O].filter(Boolean).map(L=>L.ref.current);xH(G,d)}}C.current=!1}),onBlur:$e(t.onBlur,()=>x(!1))})})}),vH="RovingFocusGroupItem",yH=g.forwardRef((t,e)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:o,...s}=t,c=os(),l=o||c,u=Hue(vH,n),d=u.currentTabStopId===l,f=mH(n),{onFocusableItemAdd:h,onFocusableItemRemove:p}=u;return g.useEffect(()=>{if(r)return h(),()=>p()},[r,h,p]),a.jsx(w1.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:a.jsx(ht.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:e,onMouseDown:$e(t.onMouseDown,v=>{r?u.onItemFocus(l):v.preventDefault()}),onFocus:$e(t.onFocus,()=>u.onItemFocus(l)),onKeyDown:$e(t.onKeyDown,v=>{if(v.key==="Tab"&&v.shiftKey){u.onItemShiftTab();return}if(v.target!==v.currentTarget)return;const m=Wue(v,u.orientation,u.dir);if(m!==void 0){if(v.metaKey||v.ctrlKey||v.altKey||v.shiftKey)return;v.preventDefault();let b=f().filter(x=>x.focusable).map(x=>x.ref.current);if(m==="last")b.reverse();else if(m==="prev"||m==="next"){m==="prev"&&b.reverse();const x=b.indexOf(v.currentTarget);b=u.loop?que(b,x+1):b.slice(x+1)}setTimeout(()=>xH(b))}})})})});yH.displayName=vH;var Vue={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Kue(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function Wue(t,e,n){const r=Kue(t.key,n);if(!(e==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(e==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Vue[r]}function xH(t,e=!1){const n=document.activeElement;for(const r of t)if(r===n||(r.focus({preventScroll:e}),document.activeElement!==n))return}function que(t,e){return t.map((n,r)=>t[(e+r)%t.length])}var vk=gH,yk=yH,xk="Tabs",[Yue,JBe]=Bi(xk,[rh]),bH=rh(),[Que,bk]=Yue(xk),wH=g.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,onValueChange:i,defaultValue:o,orientation:s="horizontal",dir:c,activationMode:l="automatic",...u}=t,d=Mu(c),[f,h]=ps({prop:r,onChange:i,defaultProp:o});return a.jsx(Que,{scope:n,baseId:os(),value:f,onValueChange:h,orientation:s,dir:d,activationMode:l,children:a.jsx(ht.div,{dir:d,"data-orientation":s,...u,ref:e})})});wH.displayName=xk;var SH="TabsList",CH=g.forwardRef((t,e)=>{const{__scopeTabs:n,loop:r=!0,...i}=t,o=bk(SH,n),s=bH(n);return a.jsx(vk,{asChild:!0,...s,orientation:o.orientation,dir:o.dir,loop:r,children:a.jsx(ht.div,{role:"tablist","aria-orientation":o.orientation,...i,ref:e})})});CH.displayName=SH;var _H="TabsTrigger",AH=g.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,disabled:i=!1,...o}=t,s=bk(_H,n),c=bH(n),l=NH(s.baseId,r),u=TH(s.baseId,r),d=r===s.value;return a.jsx(yk,{asChild:!0,...c,focusable:!i,active:d,children:a.jsx(ht.button,{type:"button",role:"tab","aria-selected":d,"aria-controls":u,"data-state":d?"active":"inactive","data-disabled":i?"":void 0,disabled:i,id:l,...o,ref:e,onMouseDown:$e(t.onMouseDown,f=>{!i&&f.button===0&&f.ctrlKey===!1?s.onValueChange(r):f.preventDefault()}),onKeyDown:$e(t.onKeyDown,f=>{[" ","Enter"].includes(f.key)&&s.onValueChange(r)}),onFocus:$e(t.onFocus,()=>{const f=s.activationMode!=="manual";!d&&!i&&f&&s.onValueChange(r)})})})});AH.displayName=_H;var jH="TabsContent",EH=g.forwardRef((t,e)=>{const{__scopeTabs:n,value:r,forceMount:i,children:o,...s}=t,c=bk(jH,n),l=NH(c.baseId,r),u=TH(c.baseId,r),d=r===c.value,f=g.useRef(d);return g.useEffect(()=>{const h=requestAnimationFrame(()=>f.current=!1);return()=>cancelAnimationFrame(h)},[]),a.jsx(Yr,{present:i||d,children:({present:h})=>a.jsx(ht.div,{"data-state":d?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":l,hidden:!h,id:u,tabIndex:0,...s,ref:e,style:{...t.style,animationDuration:f.current?"0s":void 0},children:h&&o})})});EH.displayName=jH;function NH(t,e){return`${t}-trigger-${e}`}function TH(t,e){return`${t}-content-${e}`}var Xue=wH,kH=CH,PH=AH,OH=EH;const wl=Xue,Za=g.forwardRef(({className:t,...e},n)=>a.jsx(kH,{ref:n,className:Le("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",t),...e}));Za.displayName=kH.displayName;const vn=g.forwardRef(({className:t,...e},n)=>a.jsx(PH,{ref:n,className:Le("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",t),...e}));vn.displayName=PH.displayName;const yn=g.forwardRef(({className:t,...e},n)=>a.jsx(OH,{ref:n,className:Le("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",t),...e}));yn.displayName=OH.displayName;const Jue=Ue.object({name:Ue.string().min(2,{message:"Name must be at least 2 characters."}),age:Ue.string().min(1,{message:"Age is required."}),gender:Ue.string().min(1,{message:"Gender is required."}),occupation:Ue.string().min(2,{message:"Occupation is required."}),education:Ue.string().min(1,{message:"Education is required."}),location:Ue.string().min(2,{message:"Location is required."}),ethnicity:Ue.string().optional(),personality:Ue.string(),interests:Ue.string(),hasPurchasingPower:Ue.boolean().optional(),hasChildren:Ue.boolean().optional(),techSavviness:Ue.number().min(0).max(100),brandLoyalty:Ue.number().min(0).max(100),priceConsciousness:Ue.number().min(0).max(100),environmentalConcern:Ue.number().min(0).max(100),socialGrade:Ue.string().optional(),householdIncome:Ue.string().optional(),householdComposition:Ue.string().optional(),livingSituation:Ue.string().optional(),goals:Ue.array(Ue.string()).optional(),frustrations:Ue.array(Ue.string()).optional(),motivations:Ue.array(Ue.string()).optional(),scenarios:Ue.array(Ue.string()).optional(),scenarioType:Ue.string().optional(),oceanTraits:Ue.object({openness:Ue.number().min(0).max(100),conscientiousness:Ue.number().min(0).max(100),extraversion:Ue.number().min(0).max(100),agreeableness:Ue.number().min(0).max(100),neuroticism:Ue.number().min(0).max(100)}).optional(),thinkFeelDo:Ue.object({thinks:Ue.array(Ue.string()),feels:Ue.array(Ue.string()),does:Ue.array(Ue.string())}).optional(),mediaConsumption:Ue.string().optional(),deviceUsage:Ue.string().optional(),shoppingHabits:Ue.string().optional(),brandPreferences:Ue.string().optional(),communicationPreferences:Ue.string().optional(),paymentMethods:Ue.string().optional(),purchaseBehaviour:Ue.string().optional(),coreValues:Ue.string().optional(),lifestyleChoices:Ue.string().optional(),socialActivities:Ue.string().optional(),categoryKnowledge:Ue.string().optional(),decisionInfluences:Ue.string().optional(),painPoints:Ue.string().optional(),journeyContext:Ue.string().optional(),keyTouchpoints:Ue.string().optional(),selfDeterminationNeeds:Ue.object({autonomy:Ue.string(),competence:Ue.string(),relatedness:Ue.string()}).optional(),fears:Ue.array(Ue.string()).optional(),narrative:Ue.string().optional(),additionalInformation:Ue.string().optional()});function Zue({targetFolderId:t,targetFolderName:e}){const[n,r]=g.useState(1),[i,o]=g.useState(!1),[s,c]=g.useState(!1),[l,u]=g.useState(0),d=ur(),{isAuthenticated:f,login:h}=ia();g.useEffect(()=>{u(0)},[]),g.useEffect(()=>{(async()=>{if(!f&&!s){c(!0);try{console.log("Attempting auto login with default credentials"),await h("user","pass"),console.log("Auto login successful");const A=localStorage.getItem("auth_token");A?(console.log("Token successfully stored:",A.substring(0,10)+"..."),Ye.success("Logged in automatically with default account")):(console.error("Token not stored after successful login"),Ye.error("Authentication problem, token not stored"))}catch(A){console.error("Auto login failed:",A)}finally{c(!1)}}})()},[]);const p=Nw({resolver:Tw(Jue),defaultValues:{name:"",age:"",gender:"",occupation:"",education:"",location:"",ethnicity:"",personality:"",interests:"",hasPurchasingPower:!1,hasChildren:!1,techSavviness:50,brandLoyalty:50,priceConsciousness:50,environmentalConcern:50,socialGrade:"",householdIncome:"",householdComposition:"",livingSituation:"",goals:[],frustrations:[],motivations:[],scenarios:[],scenarioType:"",oceanTraits:{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},thinkFeelDo:{thinks:[],feels:[],does:[]},mediaConsumption:"",deviceUsage:"",shoppingHabits:"",brandPreferences:"",communicationPreferences:"",paymentMethods:"",purchaseBehaviour:"",coreValues:"",lifestyleChoices:"",socialActivities:"",categoryKnowledge:"",decisionInfluences:"",painPoints:"",journeyContext:"",keyTouchpoints:"",selfDeterminationNeeds:{autonomy:"",competence:"",relatedness:""},fears:[],narrative:"",additionalInformation:""}}),v=_=>{const A=p.getValues(_)||[];p.setValue(_,[...A,""])},m=(_,A,j)=>{const k=[...p.getValues(_)||[]];k[A]=j,p.setValue(_,k)},y=(_,A)=>{const N=[...p.getValues(_)||[]];N.splice(A,1),p.setValue(_,N)},b=_=>{const A=p.getValues("thinkFeelDo")||{thinks:[],feels:[],does:[]},j={...A,[_]:[...A[_]||[],""]};p.setValue("thinkFeelDo",j)},x=(_,A,j)=>{const N=p.getValues("thinkFeelDo")||{thinks:[],feels:[],does:[]},k=[...N[_]||[]];k[A]=j;const O={...N,[_]:k};p.setValue("thinkFeelDo",O)},w=(_,A)=>{const j=p.getValues("thinkFeelDo")||{thinks:[],feels:[],does:[]},N=[...j[_]||[]];N.splice(A,1);const k={...j,[_]:N};p.setValue("thinkFeelDo",k)},S=(_,A)=>{const N={...p.getValues("oceanTraits")||{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},[_]:A};p.setValue("oceanTraits",N)};async function C(_,A=!1){var j,N,k,O,E;if(A&&l>=1){console.log("Max retry attempts reached, stopping retry loop"),Ye.error("Authentication failed after multiple attempts",{description:"Please try logging in manually (user/pass)"}),d("/login",{state:{from:"/synthetic-users"}}),o(!1);return}A?(u(R=>R+1),console.log(`Retry attempt ${l+1}`)):u(0),o(!0);try{if(!f)try{console.log("Not authenticated, attempting login with default credentials before submission"),await h("user","pass"),console.log("Login successful before persona creation")}catch($){console.error("Login failed before persona creation:",$),Ye.error("Authentication required",{description:"Please log in before creating personas. Default: user/pass"}),d("/login",{state:{from:"/synthetic-users"}}),o(!1);return}const R=`persona-generation-${Date.now()}`,D=t&&e?` in "${e}" folder`:"",G=n>1?`${n} personas`:"persona";console.log(`UserCreator - Creating ${G}${D}`),Ye.createPersistent({id:R,title:`Generating ${G}...`,description:`Creating synthetic user profile${n>1?"s":""}${D}`,type:"info"});const L={..._,oceanTraits:_.oceanTraits||{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},thinkFeelDo:_.thinkFeelDo||{thinks:[],feels:[],does:[]},folderId:t||void 0},z={id:`temp-${Date.now()}`,...L},M=JSON.parse(localStorage.getItem("tempPersonas")||"[]");if(M.push(z),localStorage.setItem("tempPersonas",JSON.stringify(M)),n===1)try{if(!localStorage.getItem("auth_token")){console.error("No authentication token found"),Ye.error("Authentication required",{description:"No valid token found. Please log in again."});try{console.log("No token found, attempting new login"),await h("user","pass"),console.log("Login successful, token:",((j=localStorage.getItem("auth_token"))==null?void 0:j.substring(0,10))+"...")}catch(q){throw console.error("Login retry failed:",q),new Error("Authentication failed after retry")}}console.log("Sending persona creation request to API with auth token");const Q=await $r.create(L);console.log("Persona created successfully:",Q),Ye.updatePersistent(R,{title:"Synthetic user created successfully",description:`Created profile for ${_.name}`,type:"success"})}catch($){throw console.error("Error creating persona via API:",$),$.response&&$.response.status===401&&Ye.error("Authentication error",{description:"Failed to authenticate with server. Please try again."}),$}else{const $=[];$.push(L);for(let Q=1;Q{d("/synthetic-users?mode=view")},300)}catch(R){if(console.error("Error creating personas:",R),R.response&&R.response.status===401||R.message&&R.message.includes("Authentication failed")&&l<1)try{console.log("Got auth error, attempting login retry with default credentials"),localStorage.removeItem("auth_token");const D=await Oy.login("user","pass");if((k=D==null?void 0:D.data)!=null&&k.access_token){localStorage.setItem("auth_token",D.data.access_token),localStorage.setItem("user",JSON.stringify(D.data.user)),console.log("Manual login successful, got new token:",D.data.access_token.substring(0,10)+"..."),Ye.info("Logged in with default account, retrying submission..."),setTimeout(()=>{C(_,!0)},500);return}else throw new Error("No access token received")}catch(D){console.error("Login retry failed:",D),Ye.error("Authentication error",{description:"Cannot authenticate with server. Please contact support."})}else Ye.updatePersistent(generationToastId,{title:"Failed to create synthetic users",description:((E=(O=R.response)==null?void 0:O.data)==null?void 0:E.message)||R.message||"An unexpected error occurred",type:"error"})}finally{o(!1)}}return a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-6",children:[a.jsx("h2",{className:"text-2xl font-sf font-semibold",children:"Create Synthetic Users"}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(se,{variant:"outline",size:"sm",onClick:()=>r(Math.max(1,n-1)),children:"-"}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(Fr,{size:16,className:"text-muted-foreground"}),a.jsx("span",{className:"text-sm font-medium",children:n})]}),a.jsx(se,{variant:"outline",size:"sm",onClick:()=>r(n+1),children:"+"})]})]}),a.jsx(Pw,{...p,children:a.jsxs("form",{onSubmit:p.handleSubmit(C),className:"space-y-6",children:[a.jsxs(wl,{defaultValue:"basic",children:[a.jsxs(Za,{className:"grid w-full grid-cols-6",children:[a.jsx(vn,{value:"basic",children:"Basic"}),a.jsx(vn,{value:"cooper",children:"Cooper"}),a.jsx(vn,{value:"personality",children:"Personality"}),a.jsx(vn,{value:"demographics",children:"Demographics"}),a.jsx(vn,{value:"lifestyle",children:"Lifestyle"}),a.jsx(vn,{value:"extended",children:"Extended"})]}),a.jsx(yn,{value:"basic",className:"mt-6",children:a.jsx(pt,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"name",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Name"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"Jane Smith",..._})}),a.jsx(St,{})]})}),a.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[a.jsx(_t,{control:p.control,name:"age",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Age Range"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select age range"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"18-24",children:"18-24"}),a.jsx(he,{value:"25-34",children:"25-34"}),a.jsx(he,{value:"35-44",children:"35-44"}),a.jsx(he,{value:"45-54",children:"45-54"}),a.jsx(he,{value:"55-64",children:"55-64"}),a.jsx(he,{value:"65+",children:"65+"})]})]}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"gender",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Gender"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select gender"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Male",children:"Male"}),a.jsx(he,{value:"Female",children:"Female"}),a.jsx(he,{value:"Non-binary",children:"Non-binary"}),a.jsx(he,{value:"Other",children:"Other"})]})]}),a.jsx(St,{})]})})]}),a.jsx(_t,{control:p.control,name:"occupation",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Occupation"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"Software Engineer",..._})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"education",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Education"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select education level"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"High School",children:"High School"}),a.jsx(he,{value:"Some College",children:"Some College"}),a.jsx(he,{value:"Associate's Degree",children:"Associate's Degree"}),a.jsx(he,{value:"Bachelor's Degree",children:"Bachelor's Degree"}),a.jsx(he,{value:"Master's Degree",children:"Master's Degree"}),a.jsx(he,{value:"PhD",children:"PhD"})]})]}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"location",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Location"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"New York, USA",..._})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"ethnicity",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Ethnicity (Optional)"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select ethnicity"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"white",children:"White"}),a.jsx(he,{value:"black",children:"Black"}),a.jsx(he,{value:"asian",children:"Asian"}),a.jsx(he,{value:"hispanic",children:"Hispanic/Latino"}),a.jsx(he,{value:"native-american",children:"Native American"}),a.jsx(he,{value:"middle-eastern",children:"Middle Eastern"}),a.jsx(he,{value:"mixed",children:"Mixed"}),a.jsx(he,{value:"other",children:"Other"}),a.jsx(he,{value:"prefer-not-to-say",children:"Prefer not to say"})]})]}),a.jsx(St,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"personality",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Personality Traits"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Curious, analytical, detail-oriented",..._,rows:3})}),a.jsx(zn,{children:"Describe key personality traits that define this user"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"interests",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Interests"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Technology, fitness, cooking, travel",..._,rows:3})}),a.jsx(zn,{children:"List interests, hobbies and activities this user enjoys"}),a.jsx(St,{})]})}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("h3",{className:"font-medium text-sm",children:"Behavioral Attributes"}),a.jsx(_t,{control:p.control,name:"techSavviness",render:({field:_})=>a.jsxs(xt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(bt,{children:"Tech Savviness"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(wt,{children:a.jsx(Sr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"brandLoyalty",render:({field:_})=>a.jsxs(xt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(bt,{children:"Brand Loyalty"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(wt,{children:a.jsx(Sr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"priceConsciousness",render:({field:_})=>a.jsxs(xt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(bt,{children:"Price Consciousness"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(wt,{children:a.jsx(Sr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"environmentalConcern",render:({field:_})=>a.jsxs(xt,{children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsx(bt,{children:"Environmental Concern"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:[_.value,"%"]})]}),a.jsx(wt,{children:a.jsx(Sr,{min:0,max:100,step:1,value:[_.value],onValueChange:A=>_.onChange(A[0])})}),a.jsx(St,{})]})}),a.jsxs("div",{className:"grid grid-cols-2 gap-4 pt-2",children:[a.jsx(_t,{control:p.control,name:"hasPurchasingPower",render:({field:_})=>a.jsxs(xt,{className:"flex items-center justify-between",children:[a.jsx(bt,{children:"Purchasing Power"}),a.jsx(wt,{children:a.jsx(Dm,{checked:_.value,onCheckedChange:_.onChange})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"hasChildren",render:({field:_})=>a.jsxs(xt,{className:"flex items-center justify-between",children:[a.jsx(bt,{children:"Has Children"}),a.jsx(wt,{children:a.jsx(Dm,{checked:_.value,onCheckedChange:_.onChange})}),a.jsx(St,{})]})})]})]})]})]})})})}),a.jsxs(yn,{value:"cooper",className:"mt-6 space-y-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"mb-4",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Goals"}),(p.watch("goals")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>m("goals",A,j.target.value),placeholder:"Enter a goal"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("goals",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>v("goals"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Goal"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Frustrations"}),(p.watch("frustrations")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>m("frustrations",A,j.target.value),placeholder:"Enter a frustration"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("frustrations",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>v("frustrations"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Frustration"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Motivations"}),(p.watch("motivations")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>m("motivations",A,j.target.value),placeholder:"Enter a motivation"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("motivations",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>v("motivations"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Motivation"]})]})]})}),a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Think, Feel, Do"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Thinks"}),((p.watch("thinkFeelDo")||{thinks:[],feels:[],does:[]}).thinks||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>x("thinks",A,j.target.value),placeholder:"What they think"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>w("thinks",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>b("thinks"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Thought"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Feels"}),((p.watch("thinkFeelDo")||{thinks:[],feels:[],does:[]}).feels||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>x("feels",A,j.target.value),placeholder:"What they feel"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>w("feels",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>b("feels"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Feeling"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Does"}),((p.watch("thinkFeelDo")||{thinks:[],feels:[],does:[]}).does||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>x("does",A,j.target.value),placeholder:"What they do"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>w("does",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>b("does"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Action"]})]})]})]})}),a.jsx(pt,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"scenarioType",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Scenario Section Title"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"Life Scenarios",..._})}),a.jsx(zn,{children:'Custom title for the scenarios section (e.g., "Customer Journey", "Use Cases")'}),a.jsx(St,{})]})}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Usage Scenarios"}),(p.watch("scenarios")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-start gap-2 mb-2",children:[a.jsx(vt,{value:_,onChange:j=>m("scenarios",A,j.target.value),rows:2,placeholder:"Describe a usage scenario"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("scenarios",A),className:"mt-2",children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>v("scenarios"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Scenario"]})]})]})})})]}),a.jsx(yn,{value:"personality",className:"mt-6",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"OCEAN Personality Traits"}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Openness to Experience"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{openness:50}).openness||50,"%"]})]}),a.jsx(Sr,{value:[(p.watch("oceanTraits")||{openness:50}).openness||50],onValueChange:_=>S("openness",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Creativity, curiosity, and openness to new ideas"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Conscientiousness"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{conscientiousness:50}).conscientiousness||50,"%"]})]}),a.jsx(Sr,{value:[(p.watch("oceanTraits")||{conscientiousness:50}).conscientiousness||50],onValueChange:_=>S("conscientiousness",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Organization, responsibility, and self-discipline"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Extraversion"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{extraversion:50}).extraversion||50,"%"]})]}),a.jsx(Sr,{value:[(p.watch("oceanTraits")||{extraversion:50}).extraversion||50],onValueChange:_=>S("extraversion",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Sociability, assertiveness, and talkativeness"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Agreeableness"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{agreeableness:50}).agreeableness||50,"%"]})]}),a.jsx(Sr,{value:[(p.watch("oceanTraits")||{agreeableness:50}).agreeableness||50],onValueChange:_=>S("agreeableness",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Compassion, cooperation, and concern for others"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Neuroticism"}),a.jsxs("span",{className:"text-sm",children:[(p.watch("oceanTraits")||{neuroticism:50}).neuroticism||50,"%"]})]}),a.jsx(Sr,{value:[(p.watch("oceanTraits")||{neuroticism:50}).neuroticism||50],onValueChange:_=>S("neuroticism",_[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Emotional reactivity, anxiety, and sensitivity to stress"})]})]})]})})}),a.jsx(yn,{value:"demographics",className:"mt-6",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Demographic Information"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"socialGrade",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Social Grade"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select social grade"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"A",children:"A - Higher managerial"}),a.jsx(he,{value:"B",children:"B - Intermediate managerial"}),a.jsx(he,{value:"C1",children:"C1 - Supervisory or clerical"}),a.jsx(he,{value:"C2",children:"C2 - Skilled manual workers"}),a.jsx(he,{value:"D",children:"D - Semi and unskilled manual workers"}),a.jsx(he,{value:"E",children:"E - State pensioners, unemployed"})]})]}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"householdIncome",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Household Income"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select income range"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Under $25k",children:"Under $25,000"}),a.jsx(he,{value:"$25k-$50k",children:"$25,000 - $50,000"}),a.jsx(he,{value:"$50k-$75k",children:"$50,000 - $75,000"}),a.jsx(he,{value:"$75k-$100k",children:"$75,000 - $100,000"}),a.jsx(he,{value:"$100k-$150k",children:"$100,000 - $150,000"}),a.jsx(he,{value:"$150k-$250k",children:"$150,000 - $250,000"}),a.jsx(he,{value:"Over $250k",children:"Over $250,000"}),a.jsx(he,{value:"Prefer not to say",children:"Prefer not to say"})]})]}),a.jsx(St,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"householdComposition",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Household Composition"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select household type"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Single person",children:"Single person"}),a.jsx(he,{value:"Couple without children",children:"Couple without children"}),a.jsx(he,{value:"Couple with children",children:"Couple with children"}),a.jsx(he,{value:"Single parent",children:"Single parent"}),a.jsx(he,{value:"Multi-generational",children:"Multi-generational"}),a.jsx(he,{value:"Shared housing",children:"Shared housing"}),a.jsx(he,{value:"Other",children:"Other"})]})]}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"livingSituation",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Living Situation"}),a.jsxs(Hn,{onValueChange:_.onChange,defaultValue:_.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select living situation"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Own home",children:"Own home"}),a.jsx(he,{value:"Rent apartment",children:"Rent apartment"}),a.jsx(he,{value:"Rent house",children:"Rent house"}),a.jsx(he,{value:"Live with family",children:"Live with family"}),a.jsx(he,{value:"Student housing",children:"Student housing"}),a.jsx(he,{value:"Assisted living",children:"Assisted living"}),a.jsx(he,{value:"Other",children:"Other"})]})]}),a.jsx(St,{})]})})]})]})]})})}),a.jsx(yn,{value:"lifestyle",className:"mt-6",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Lifestyle & Behavior"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"mediaConsumption",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Media Consumption"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"TV shows, podcasts, news sources, social media platforms",..._,rows:3})}),a.jsx(zn,{children:"Describe media consumption habits and preferences"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"deviceUsage",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Device Usage"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Smartphone, laptop, tablet, smart TV, gaming console",..._,rows:3})}),a.jsx(zn,{children:"Primary devices and usage patterns"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"shoppingHabits",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Shopping Habits"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Online vs in-store, frequency, preferred retailers",..._,rows:3})}),a.jsx(zn,{children:"Shopping behavior and preferences"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"brandPreferences",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Brand Preferences"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Favorite brands, brand values alignment",..._,rows:3})}),a.jsx(zn,{children:"Preferred brands and reasoning"}),a.jsx(St,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"communicationPreferences",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Communication Preferences"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Email, phone, text, video calls, in-person",..._,rows:3})}),a.jsx(zn,{children:"Preferred communication methods and channels"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"paymentMethods",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Payment Methods"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Credit cards, digital wallets, cash, BNPL",..._,rows:3})}),a.jsx(zn,{children:"Preferred payment methods and financial tools"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"purchaseBehaviour",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Purchase Behavior"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Research habits, decision factors, impulse vs planned buying",..._,rows:3})}),a.jsx(zn,{children:"How they approach making purchase decisions"}),a.jsx(St,{})]})})]})]})]})})}),a.jsxs(yn,{value:"extended",className:"mt-6 space-y-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Extended Profile"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"coreValues",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Core Values"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Key principles and values that guide decisions",..._,rows:3})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"lifestyleChoices",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Lifestyle Choices"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Health, fitness, diet, work-life balance preferences",..._,rows:3})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"socialActivities",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Social Activities"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Social hobbies, community involvement, networking",..._,rows:3})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"categoryKnowledge",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Category Knowledge"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Expertise in specific product/service categories",..._,rows:3})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"decisionInfluences",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Decision Influences"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"What factors most influence their decisions",..._,rows:3})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"painPoints",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Pain Points"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Common challenges and friction points",..._,rows:3})}),a.jsx(St,{})]})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx(_t,{control:p.control,name:"journeyContext",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Journey Context"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Current life stage and contextual factors",..._,rows:3})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"keyTouchpoints",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Key Touchpoints"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Important interaction points and channels",..._,rows:3})}),a.jsx(St,{})]})}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("h4",{className:"font-medium text-sm",children:"Self-Determination Needs"}),a.jsx(_t,{control:p.control,name:"selfDeterminationNeeds.autonomy",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Autonomy"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Need for independence and self-direction",..._,rows:2})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"selfDeterminationNeeds.competence",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Competence"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Need to feel capable and effective",..._,rows:2})}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"selfDeterminationNeeds.relatedness",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Relatedness"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Need for connection and belonging",..._,rows:2})}),a.jsx(St,{})]})})]})]})]})]})}),a.jsx(pt,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Fears & Concerns"}),(p.watch("fears")||[]).map((_,A)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:_,onChange:j=>m("fears",A,j.target.value),placeholder:"Enter a fear or concern"}),a.jsx(se,{variant:"ghost",size:"icon",type:"button",onClick:()=>y("fears",A),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},A)),a.jsxs(se,{variant:"outline",size:"sm",type:"button",onClick:()=>v("fears"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Fear/Concern"]})]}),a.jsx(_t,{control:p.control,name:"narrative",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Personal Narrative"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Personal story, background, key life experiences",..._,rows:4})}),a.jsx(zn,{children:"A brief narrative that captures their personal story"}),a.jsx(St,{})]})}),a.jsx(_t,{control:p.control,name:"additionalInformation",render:({field:_})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Additional Information"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Any other relevant details or context",..._,rows:4})}),a.jsx(zn,{children:"Additional context or details not covered elsewhere"}),a.jsx(St,{})]})})]})})})]})]}),a.jsxs("div",{className:"flex justify-end space-x-2",children:[a.jsx(se,{variant:"outline",type:"button",onClick:()=>p.reset(),children:"Reset"}),a.jsxs(se,{type:"submit",disabled:i,children:[i?a.jsx(qee,{className:"mr-2 h-4 w-4 animate-spin"}):a.jsx(MN,{className:"mr-2 h-4 w-4"}),i?"Creating...":`Create ${n>1?`${n} Users`:"User"}`]})]})]})})]})}var S1=["Enter"," "],ede=["ArrowDown","PageUp","Home"],IH=["ArrowUp","PageDown","End"],tde=[...ede,...IH],nde={ltr:[...S1,"ArrowRight"],rtl:[...S1,"ArrowLeft"]},rde={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Qg="Menu",[$m,ide,ode]=Iw(Qg),[Du,RH]=Bi(Qg,[ode,Gf,rh]),zw=Gf(),MH=rh(),[sde,$u]=Du(Qg),[ade,Xg]=Du(Qg),DH=t=>{const{__scopeMenu:e,open:n=!1,children:r,dir:i,onOpenChange:o,modal:s=!0}=t,c=zw(e),[l,u]=g.useState(null),d=g.useRef(!1),f=Ar(o),h=Mu(i);return g.useEffect(()=>{const p=()=>{d.current=!0,document.addEventListener("pointerdown",v,{capture:!0,once:!0}),document.addEventListener("pointermove",v,{capture:!0,once:!0})},v=()=>d.current=!1;return document.addEventListener("keydown",p,{capture:!0}),()=>{document.removeEventListener("keydown",p,{capture:!0}),document.removeEventListener("pointerdown",v,{capture:!0}),document.removeEventListener("pointermove",v,{capture:!0})}},[]),a.jsx(J5,{...c,children:a.jsx(sde,{scope:e,open:n,onOpenChange:f,content:l,onContentChange:u,children:a.jsx(ade,{scope:e,onClose:g.useCallback(()=>f(!1),[f]),isUsingKeyboardRef:d,dir:h,modal:s,children:r})})})};DH.displayName=Qg;var cde="MenuAnchor",wk=g.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t,i=zw(n);return a.jsx(xN,{...i,...r,ref:e})});wk.displayName=cde;var Sk="MenuPortal",[lde,$H]=Du(Sk,{forceMount:void 0}),LH=t=>{const{__scopeMenu:e,forceMount:n,children:r,container:i}=t,o=$u(Sk,e);return a.jsx(lde,{scope:e,forceMount:n,children:a.jsx(Yr,{present:n||o.open,children:a.jsx(Q0,{asChild:!0,container:i,children:r})})})};LH.displayName=Sk;var To="MenuContent",[ude,Ck]=Du(To),FH=g.forwardRef((t,e)=>{const n=$H(To,t.__scopeMenu),{forceMount:r=n.forceMount,...i}=t,o=$u(To,t.__scopeMenu),s=Xg(To,t.__scopeMenu);return a.jsx($m.Provider,{scope:t.__scopeMenu,children:a.jsx(Yr,{present:r||o.open,children:a.jsx($m.Slot,{scope:t.__scopeMenu,children:s.modal?a.jsx(dde,{...i,ref:e}):a.jsx(fde,{...i,ref:e})})})})}),dde=g.forwardRef((t,e)=>{const n=$u(To,t.__scopeMenu),r=g.useRef(null),i=It(e,r);return g.useEffect(()=>{const o=r.current;if(o)return ck(o)},[]),a.jsx(_k,{...t,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:$e(t.onFocusOutside,o=>o.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),fde=g.forwardRef((t,e)=>{const n=$u(To,t.__scopeMenu);return a.jsx(_k,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),_k=g.forwardRef((t,e)=>{const{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEntryFocus:l,onEscapeKeyDown:u,onPointerDownOutside:d,onFocusOutside:f,onInteractOutside:h,onDismiss:p,disableOutsideScroll:v,...m}=t,y=$u(To,n),b=Xg(To,n),x=zw(n),w=MH(n),S=ide(n),[C,_]=g.useState(null),A=g.useRef(null),j=It(e,A,y.onContentChange),N=g.useRef(0),k=g.useRef(""),O=g.useRef(0),E=g.useRef(null),R=g.useRef("right"),D=g.useRef(0),G=v?Dw:g.Fragment,L=v?{as:Ys,allowPinchZoom:!0}:void 0,z=$=>{var U,ue;const Q=k.current+$,q=S().filter(oe=>!oe.disabled),te=document.activeElement,xe=(U=q.find(oe=>oe.ref.current===te))==null?void 0:U.textValue,B=q.map(oe=>oe.textValue),ce=_de(B,Q,xe),fe=(ue=q.find(oe=>oe.textValue===ce))==null?void 0:ue.ref.current;(function oe(ne){k.current=ne,window.clearTimeout(N.current),ne!==""&&(N.current=window.setTimeout(()=>oe(""),1e3))})(Q),fe&&setTimeout(()=>fe.focus())};g.useEffect(()=>()=>window.clearTimeout(N.current),[]),ak();const M=g.useCallback($=>{var q,te;return R.current===((q=E.current)==null?void 0:q.side)&&jde($,(te=E.current)==null?void 0:te.area)},[]);return a.jsx(ude,{scope:n,searchRef:k,onItemEnter:g.useCallback($=>{M($)&&$.preventDefault()},[M]),onItemLeave:g.useCallback($=>{var Q;M($)||((Q=A.current)==null||Q.focus(),_(null))},[M]),onTriggerLeave:g.useCallback($=>{M($)&&$.preventDefault()},[M]),pointerGraceTimerRef:O,onPointerGraceIntentChange:g.useCallback($=>{E.current=$},[]),children:a.jsx(G,{...L,children:a.jsx(Rw,{asChild:!0,trapped:i,onMountAutoFocus:$e(o,$=>{var Q;$.preventDefault(),(Q=A.current)==null||Q.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:a.jsx(Rg,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:u,onPointerDownOutside:d,onFocusOutside:f,onInteractOutside:h,onDismiss:p,children:a.jsx(vk,{asChild:!0,...w,dir:b.dir,orientation:"vertical",loop:r,currentTabStopId:C,onCurrentTabStopIdChange:_,onEntryFocus:$e(l,$=>{b.isUsingKeyboardRef.current||$.preventDefault()}),preventScrollOnEntryFocus:!0,children:a.jsx(bN,{role:"menu","aria-orientation":"vertical","data-state":tG(y.open),"data-radix-menu-content":"",dir:b.dir,...x,...m,ref:j,style:{outline:"none",...m.style},onKeyDown:$e(m.onKeyDown,$=>{const q=$.target.closest("[data-radix-menu-content]")===$.currentTarget,te=$.ctrlKey||$.altKey||$.metaKey,xe=$.key.length===1;q&&($.key==="Tab"&&$.preventDefault(),!te&&xe&&z($.key));const B=A.current;if($.target!==B||!tde.includes($.key))return;$.preventDefault();const fe=S().filter(U=>!U.disabled).map(U=>U.ref.current);IH.includes($.key)&&fe.reverse(),Sde(fe)}),onBlur:$e(t.onBlur,$=>{$.currentTarget.contains($.target)||(window.clearTimeout(N.current),k.current="")}),onPointerMove:$e(t.onPointerMove,Lm($=>{const Q=$.target,q=D.current!==$.clientX;if($.currentTarget.contains(Q)&&q){const te=$.clientX>D.current?"right":"left";R.current=te,D.current=$.clientX}}))})})})})})})});FH.displayName=To;var hde="MenuGroup",Ak=g.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t;return a.jsx(ht.div,{role:"group",...r,ref:e})});Ak.displayName=hde;var pde="MenuLabel",BH=g.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t;return a.jsx(ht.div,{...r,ref:e})});BH.displayName=pde;var db="MenuItem",O2="menu.itemSelect",Hw=g.forwardRef((t,e)=>{const{disabled:n=!1,onSelect:r,...i}=t,o=g.useRef(null),s=Xg(db,t.__scopeMenu),c=Ck(db,t.__scopeMenu),l=It(e,o),u=g.useRef(!1),d=()=>{const f=o.current;if(!n&&f){const h=new CustomEvent(O2,{bubbles:!0,cancelable:!0});f.addEventListener(O2,p=>r==null?void 0:r(p),{once:!0}),P5(f,h),h.defaultPrevented?u.current=!1:s.onClose()}};return a.jsx(UH,{...i,ref:l,disabled:n,onClick:$e(t.onClick,d),onPointerDown:f=>{var h;(h=t.onPointerDown)==null||h.call(t,f),u.current=!0},onPointerUp:$e(t.onPointerUp,f=>{var h;u.current||(h=f.currentTarget)==null||h.click()}),onKeyDown:$e(t.onKeyDown,f=>{const h=c.searchRef.current!=="";n||h&&f.key===" "||S1.includes(f.key)&&(f.currentTarget.click(),f.preventDefault())})})});Hw.displayName=db;var UH=g.forwardRef((t,e)=>{const{__scopeMenu:n,disabled:r=!1,textValue:i,...o}=t,s=Ck(db,n),c=MH(n),l=g.useRef(null),u=It(e,l),[d,f]=g.useState(!1),[h,p]=g.useState("");return g.useEffect(()=>{const v=l.current;v&&p((v.textContent??"").trim())},[o.children]),a.jsx($m.ItemSlot,{scope:n,disabled:r,textValue:i??h,children:a.jsx(yk,{asChild:!0,...c,focusable:!r,children:a.jsx(ht.div,{role:"menuitem","data-highlighted":d?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...o,ref:u,onPointerMove:$e(t.onPointerMove,Lm(v=>{r?s.onItemLeave(v):(s.onItemEnter(v),v.defaultPrevented||v.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:$e(t.onPointerLeave,Lm(v=>s.onItemLeave(v))),onFocus:$e(t.onFocus,()=>f(!0)),onBlur:$e(t.onBlur,()=>f(!1))})})})}),mde="MenuCheckboxItem",zH=g.forwardRef((t,e)=>{const{checked:n=!1,onCheckedChange:r,...i}=t;return a.jsx(WH,{scope:t.__scopeMenu,checked:n,children:a.jsx(Hw,{role:"menuitemcheckbox","aria-checked":fb(n)?"mixed":n,...i,ref:e,"data-state":Ek(n),onSelect:$e(i.onSelect,()=>r==null?void 0:r(fb(n)?!0:!n),{checkForDefaultPrevented:!1})})})});zH.displayName=mde;var HH="MenuRadioGroup",[gde,vde]=Du(HH,{value:void 0,onValueChange:()=>{}}),GH=g.forwardRef((t,e)=>{const{value:n,onValueChange:r,...i}=t,o=Ar(r);return a.jsx(gde,{scope:t.__scopeMenu,value:n,onValueChange:o,children:a.jsx(Ak,{...i,ref:e})})});GH.displayName=HH;var VH="MenuRadioItem",KH=g.forwardRef((t,e)=>{const{value:n,...r}=t,i=vde(VH,t.__scopeMenu),o=n===i.value;return a.jsx(WH,{scope:t.__scopeMenu,checked:o,children:a.jsx(Hw,{role:"menuitemradio","aria-checked":o,...r,ref:e,"data-state":Ek(o),onSelect:$e(r.onSelect,()=>{var s;return(s=i.onValueChange)==null?void 0:s.call(i,n)},{checkForDefaultPrevented:!1})})})});KH.displayName=VH;var jk="MenuItemIndicator",[WH,yde]=Du(jk,{checked:!1}),qH=g.forwardRef((t,e)=>{const{__scopeMenu:n,forceMount:r,...i}=t,o=yde(jk,n);return a.jsx(Yr,{present:r||fb(o.checked)||o.checked===!0,children:a.jsx(ht.span,{...i,ref:e,"data-state":Ek(o.checked)})})});qH.displayName=jk;var xde="MenuSeparator",YH=g.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t;return a.jsx(ht.div,{role:"separator","aria-orientation":"horizontal",...r,ref:e})});YH.displayName=xde;var bde="MenuArrow",QH=g.forwardRef((t,e)=>{const{__scopeMenu:n,...r}=t,i=zw(n);return a.jsx(wN,{...i,...r,ref:e})});QH.displayName=bde;var wde="MenuSub",[ZBe,XH]=Du(wde),lp="MenuSubTrigger",JH=g.forwardRef((t,e)=>{const n=$u(lp,t.__scopeMenu),r=Xg(lp,t.__scopeMenu),i=XH(lp,t.__scopeMenu),o=Ck(lp,t.__scopeMenu),s=g.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:l}=o,u={__scopeMenu:t.__scopeMenu},d=g.useCallback(()=>{s.current&&window.clearTimeout(s.current),s.current=null},[]);return g.useEffect(()=>d,[d]),g.useEffect(()=>{const f=c.current;return()=>{window.clearTimeout(f),l(null)}},[c,l]),a.jsx(wk,{asChild:!0,...u,children:a.jsx(UH,{id:i.triggerId,"aria-haspopup":"menu","aria-expanded":n.open,"aria-controls":i.contentId,"data-state":tG(n.open),...t,ref:K0(e,i.onTriggerChange),onClick:f=>{var h;(h=t.onClick)==null||h.call(t,f),!(t.disabled||f.defaultPrevented)&&(f.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:$e(t.onPointerMove,Lm(f=>{o.onItemEnter(f),!f.defaultPrevented&&!t.disabled&&!n.open&&!s.current&&(o.onPointerGraceIntentChange(null),s.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:$e(t.onPointerLeave,Lm(f=>{var p,v;d();const h=(p=n.content)==null?void 0:p.getBoundingClientRect();if(h){const m=(v=n.content)==null?void 0:v.dataset.side,y=m==="right",b=y?-5:5,x=h[y?"left":"right"],w=h[y?"right":"left"];o.onPointerGraceIntentChange({area:[{x:f.clientX+b,y:f.clientY},{x,y:h.top},{x:w,y:h.top},{x:w,y:h.bottom},{x,y:h.bottom}],side:m}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.onPointerGraceIntentChange(null),300)}else{if(o.onTriggerLeave(f),f.defaultPrevented)return;o.onPointerGraceIntentChange(null)}})),onKeyDown:$e(t.onKeyDown,f=>{var p;const h=o.searchRef.current!=="";t.disabled||h&&f.key===" "||nde[r.dir].includes(f.key)&&(n.onOpenChange(!0),(p=n.content)==null||p.focus(),f.preventDefault())})})})});JH.displayName=lp;var ZH="MenuSubContent",eG=g.forwardRef((t,e)=>{const n=$H(To,t.__scopeMenu),{forceMount:r=n.forceMount,...i}=t,o=$u(To,t.__scopeMenu),s=Xg(To,t.__scopeMenu),c=XH(ZH,t.__scopeMenu),l=g.useRef(null),u=It(e,l);return a.jsx($m.Provider,{scope:t.__scopeMenu,children:a.jsx(Yr,{present:r||o.open,children:a.jsx($m.Slot,{scope:t.__scopeMenu,children:a.jsx(_k,{id:c.contentId,"aria-labelledby":c.triggerId,...i,ref:u,align:"start",side:s.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:d=>{var f;s.isUsingKeyboardRef.current&&((f=l.current)==null||f.focus()),d.preventDefault()},onCloseAutoFocus:d=>d.preventDefault(),onFocusOutside:$e(t.onFocusOutside,d=>{d.target!==c.trigger&&o.onOpenChange(!1)}),onEscapeKeyDown:$e(t.onEscapeKeyDown,d=>{s.onClose(),d.preventDefault()}),onKeyDown:$e(t.onKeyDown,d=>{var p;const f=d.currentTarget.contains(d.target),h=rde[s.dir].includes(d.key);f&&h&&(o.onOpenChange(!1),(p=c.trigger)==null||p.focus(),d.preventDefault())})})})})})});eG.displayName=ZH;function tG(t){return t?"open":"closed"}function fb(t){return t==="indeterminate"}function Ek(t){return fb(t)?"indeterminate":t?"checked":"unchecked"}function Sde(t){const e=document.activeElement;for(const n of t)if(n===e||(n.focus(),document.activeElement!==e))return}function Cde(t,e){return t.map((n,r)=>t[(e+r)%t.length])}function _de(t,e,n){const i=e.length>1&&Array.from(e).every(u=>u===e[0])?e[0]:e,o=n?t.indexOf(n):-1;let s=Cde(t,Math.max(o,0));i.length===1&&(s=s.filter(u=>u!==n));const l=s.find(u=>u.toLowerCase().startsWith(i.toLowerCase()));return l!==n?l:void 0}function Ade(t,e){const{x:n,y:r}=t;let i=!1;for(let o=0,s=e.length-1;or!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function jde(t,e){if(!e)return!1;const n={x:t.clientX,y:t.clientY};return Ade(n,e)}function Lm(t){return e=>e.pointerType==="mouse"?t(e):void 0}var Ede=DH,Nde=wk,Tde=LH,kde=FH,Pde=Ak,Ode=BH,Ide=Hw,Rde=zH,Mde=GH,Dde=KH,$de=qH,Lde=YH,Fde=QH,Bde=JH,Ude=eG,Nk="DropdownMenu",[zde,eUe]=Bi(Nk,[RH]),_i=RH(),[Hde,nG]=zde(Nk),rG=t=>{const{__scopeDropdownMenu:e,children:n,dir:r,open:i,defaultOpen:o,onOpenChange:s,modal:c=!0}=t,l=_i(e),u=g.useRef(null),[d=!1,f]=ps({prop:i,defaultProp:o,onChange:s});return a.jsx(Hde,{scope:e,triggerId:os(),triggerRef:u,contentId:os(),open:d,onOpenChange:f,onOpenToggle:g.useCallback(()=>f(h=>!h),[f]),modal:c,children:a.jsx(Ede,{...l,open:d,onOpenChange:f,dir:r,modal:c,children:n})})};rG.displayName=Nk;var iG="DropdownMenuTrigger",oG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,disabled:r=!1,...i}=t,o=nG(iG,n),s=_i(n);return a.jsx(Nde,{asChild:!0,...s,children:a.jsx(ht.button,{type:"button",id:o.triggerId,"aria-haspopup":"menu","aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...i,ref:K0(e,o.triggerRef),onPointerDown:$e(t.onPointerDown,c=>{!r&&c.button===0&&c.ctrlKey===!1&&(o.onOpenToggle(),o.open||c.preventDefault())}),onKeyDown:$e(t.onKeyDown,c=>{r||(["Enter"," "].includes(c.key)&&o.onOpenToggle(),c.key==="ArrowDown"&&o.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(c.key)&&c.preventDefault())})})})});oG.displayName=iG;var Gde="DropdownMenuPortal",sG=t=>{const{__scopeDropdownMenu:e,...n}=t,r=_i(e);return a.jsx(Tde,{...r,...n})};sG.displayName=Gde;var aG="DropdownMenuContent",cG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=nG(aG,n),o=_i(n),s=g.useRef(!1);return a.jsx(kde,{id:i.contentId,"aria-labelledby":i.triggerId,...o,...r,ref:e,onCloseAutoFocus:$e(t.onCloseAutoFocus,c=>{var l;s.current||(l=i.triggerRef.current)==null||l.focus(),s.current=!1,c.preventDefault()}),onInteractOutside:$e(t.onInteractOutside,c=>{const l=c.detail.originalEvent,u=l.button===0&&l.ctrlKey===!0,d=l.button===2||u;(!i.modal||d)&&(s.current=!0)}),style:{...t.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});cG.displayName=aG;var Vde="DropdownMenuGroup",Kde=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Pde,{...i,...r,ref:e})});Kde.displayName=Vde;var Wde="DropdownMenuLabel",lG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Ode,{...i,...r,ref:e})});lG.displayName=Wde;var qde="DropdownMenuItem",uG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Ide,{...i,...r,ref:e})});uG.displayName=qde;var Yde="DropdownMenuCheckboxItem",dG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Rde,{...i,...r,ref:e})});dG.displayName=Yde;var Qde="DropdownMenuRadioGroup",Xde=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Mde,{...i,...r,ref:e})});Xde.displayName=Qde;var Jde="DropdownMenuRadioItem",fG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Dde,{...i,...r,ref:e})});fG.displayName=Jde;var Zde="DropdownMenuItemIndicator",hG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx($de,{...i,...r,ref:e})});hG.displayName=Zde;var efe="DropdownMenuSeparator",pG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Lde,{...i,...r,ref:e})});pG.displayName=efe;var tfe="DropdownMenuArrow",nfe=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Fde,{...i,...r,ref:e})});nfe.displayName=tfe;var rfe="DropdownMenuSubTrigger",mG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Bde,{...i,...r,ref:e})});mG.displayName=rfe;var ife="DropdownMenuSubContent",gG=g.forwardRef((t,e)=>{const{__scopeDropdownMenu:n,...r}=t,i=_i(n);return a.jsx(Ude,{...i,...r,ref:e,style:{...t.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});gG.displayName=ife;var ofe=rG,sfe=oG,afe=sG,vG=cG,yG=lG,xG=uG,bG=dG,wG=fG,SG=hG,CG=pG,_G=mG,AG=gG;const C1=ofe,_1=sfe,cfe=g.forwardRef(({className:t,inset:e,children:n,...r},i)=>a.jsxs(_G,{ref:i,className:Le("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",e&&"pl-8",t),...r,children:[n,a.jsx(po,{className:"ml-auto h-4 w-4"})]}));cfe.displayName=_G.displayName;const lfe=g.forwardRef(({className:t,...e},n)=>a.jsx(AG,{ref:n,className:Le("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...e}));lfe.displayName=AG.displayName;const hb=g.forwardRef(({className:t,sideOffset:e=4,...n},r)=>a.jsx(afe,{children:a.jsx(vG,{ref:r,sideOffset:e,className:Le("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...n})}));hb.displayName=vG.displayName;const hc=g.forwardRef(({className:t,inset:e,...n},r)=>a.jsx(xG,{ref:r,className:Le("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e&&"pl-8",t),...n}));hc.displayName=xG.displayName;const ufe=g.forwardRef(({className:t,children:e,checked:n,...r},i)=>a.jsxs(bG,{ref:i,className:Le("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),checked:n,...r,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(SG,{children:a.jsx(Io,{className:"h-4 w-4"})})}),e]}));ufe.displayName=bG.displayName;const dfe=g.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(wG,{ref:r,className:Le("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...n,children:[a.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:a.jsx(SG,{children:a.jsx(IN,{className:"h-2 w-2 fill-current"})})}),e]}));dfe.displayName=wG.displayName;const ffe=g.forwardRef(({className:t,inset:e,...n},r)=>a.jsx(yG,{ref:r,className:Le("px-2 py-1.5 text-sm font-semibold",e&&"pl-8",t),...n}));ffe.displayName=yG.displayName;const hfe=g.forwardRef(({className:t,...e},n)=>a.jsx(CG,{ref:n,className:Le("-mx-1 my-1 h-px bg-muted",t),...e}));hfe.displayName=CG.displayName;var Tk="Dialog",[jG,EG]=Bi(Tk),[pfe,Ss]=jG(Tk),NG=t=>{const{__scopeDialog:e,children:n,open:r,defaultOpen:i,onOpenChange:o,modal:s=!0}=t,c=g.useRef(null),l=g.useRef(null),[u=!1,d]=ps({prop:r,defaultProp:i,onChange:o});return a.jsx(pfe,{scope:e,triggerRef:c,contentRef:l,contentId:os(),titleId:os(),descriptionId:os(),open:u,onOpenChange:d,onOpenToggle:g.useCallback(()=>d(f=>!f),[d]),modal:s,children:n})};NG.displayName=Tk;var TG="DialogTrigger",kG=g.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=Ss(TG,n),o=It(e,i.triggerRef);return a.jsx(ht.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":Ok(i.open),...r,ref:o,onClick:$e(t.onClick,i.onOpenToggle)})});kG.displayName=TG;var kk="DialogPortal",[mfe,PG]=jG(kk,{forceMount:void 0}),OG=t=>{const{__scopeDialog:e,forceMount:n,children:r,container:i}=t,o=Ss(kk,e);return a.jsx(mfe,{scope:e,forceMount:n,children:g.Children.map(r,s=>a.jsx(Yr,{present:n||o.open,children:a.jsx(Q0,{asChild:!0,container:i,children:s})}))})};OG.displayName=kk;var pb="DialogOverlay",IG=g.forwardRef((t,e)=>{const n=PG(pb,t.__scopeDialog),{forceMount:r=n.forceMount,...i}=t,o=Ss(pb,t.__scopeDialog);return o.modal?a.jsx(Yr,{present:r||o.open,children:a.jsx(gfe,{...i,ref:e})}):null});IG.displayName=pb;var gfe=g.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=Ss(pb,n);return a.jsx(Dw,{as:Ys,allowPinchZoom:!0,shards:[i.contentRef],children:a.jsx(ht.div,{"data-state":Ok(i.open),...r,ref:e,style:{pointerEvents:"auto",...r.style}})})}),Au="DialogContent",RG=g.forwardRef((t,e)=>{const n=PG(Au,t.__scopeDialog),{forceMount:r=n.forceMount,...i}=t,o=Ss(Au,t.__scopeDialog);return a.jsx(Yr,{present:r||o.open,children:o.modal?a.jsx(vfe,{...i,ref:e}):a.jsx(yfe,{...i,ref:e})})});RG.displayName=Au;var vfe=g.forwardRef((t,e)=>{const n=Ss(Au,t.__scopeDialog),r=g.useRef(null),i=It(e,n.contentRef,r);return g.useEffect(()=>{const o=r.current;if(o)return ck(o)},[]),a.jsx(MG,{...t,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:$e(t.onCloseAutoFocus,o=>{var s;o.preventDefault(),(s=n.triggerRef.current)==null||s.focus()}),onPointerDownOutside:$e(t.onPointerDownOutside,o=>{const s=o.detail.originalEvent,c=s.button===0&&s.ctrlKey===!0;(s.button===2||c)&&o.preventDefault()}),onFocusOutside:$e(t.onFocusOutside,o=>o.preventDefault())})}),yfe=g.forwardRef((t,e)=>{const n=Ss(Au,t.__scopeDialog),r=g.useRef(!1),i=g.useRef(!1);return a.jsx(MG,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var s,c;(s=t.onCloseAutoFocus)==null||s.call(t,o),o.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),o.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:o=>{var l,u;(l=t.onInteractOutside)==null||l.call(t,o),o.defaultPrevented||(r.current=!0,o.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const s=o.target;((u=n.triggerRef.current)==null?void 0:u.contains(s))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&i.current&&o.preventDefault()}})}),MG=g.forwardRef((t,e)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=t,c=Ss(Au,n),l=g.useRef(null),u=It(e,l);return ak(),a.jsxs(a.Fragment,{children:[a.jsx(Rw,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:o,children:a.jsx(Rg,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Ok(c.open),...s,ref:u,onDismiss:()=>c.onOpenChange(!1)})}),a.jsxs(a.Fragment,{children:[a.jsx(bfe,{titleId:c.titleId}),a.jsx(Sfe,{contentRef:l,descriptionId:c.descriptionId})]})]})}),Pk="DialogTitle",DG=g.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=Ss(Pk,n);return a.jsx(ht.h2,{id:i.titleId,...r,ref:e})});DG.displayName=Pk;var $G="DialogDescription",LG=g.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=Ss($G,n);return a.jsx(ht.p,{id:i.descriptionId,...r,ref:e})});LG.displayName=$G;var FG="DialogClose",BG=g.forwardRef((t,e)=>{const{__scopeDialog:n,...r}=t,i=Ss(FG,n);return a.jsx(ht.button,{type:"button",...r,ref:e,onClick:$e(t.onClick,()=>i.onOpenChange(!1))})});BG.displayName=FG;function Ok(t){return t?"open":"closed"}var UG="DialogTitleWarning",[xfe,zG]=IQ(UG,{contentName:Au,titleName:Pk,docsSlug:"dialog"}),bfe=({titleId:t})=>{const e=zG(UG),n=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return g.useEffect(()=>{t&&(document.getElementById(t)||console.error(n))},[n,t]),null},wfe="DialogDescriptionWarning",Sfe=({contentRef:t,descriptionId:e})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${zG(wfe).contentName}}.`;return g.useEffect(()=>{var o;const i=(o=t.current)==null?void 0:o.getAttribute("aria-describedby");e&&i&&(document.getElementById(e)||console.warn(r))},[r,t,e]),null},HG=NG,Cfe=kG,GG=OG,Ik=IG,Rk=RG,Mk=DG,Dk=LG,$k=BG,VG="AlertDialog",[_fe,tUe]=Bi(VG,[EG]),ec=EG(),KG=t=>{const{__scopeAlertDialog:e,...n}=t,r=ec(e);return a.jsx(HG,{...r,...n,modal:!0})};KG.displayName=VG;var Afe="AlertDialogTrigger",jfe=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=ec(n);return a.jsx(Cfe,{...i,...r,ref:e})});jfe.displayName=Afe;var Efe="AlertDialogPortal",WG=t=>{const{__scopeAlertDialog:e,...n}=t,r=ec(e);return a.jsx(GG,{...r,...n})};WG.displayName=Efe;var Nfe="AlertDialogOverlay",qG=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=ec(n);return a.jsx(Ik,{...i,...r,ref:e})});qG.displayName=Nfe;var Rd="AlertDialogContent",[Tfe,kfe]=_fe(Rd),YG=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,children:r,...i}=t,o=ec(n),s=g.useRef(null),c=It(e,s),l=g.useRef(null);return a.jsx(xfe,{contentName:Rd,titleName:QG,docsSlug:"alert-dialog",children:a.jsx(Tfe,{scope:n,cancelRef:l,children:a.jsxs(Rk,{role:"alertdialog",...o,...i,ref:c,onOpenAutoFocus:$e(i.onOpenAutoFocus,u=>{var d;u.preventDefault(),(d=l.current)==null||d.focus({preventScroll:!0})}),onPointerDownOutside:u=>u.preventDefault(),onInteractOutside:u=>u.preventDefault(),children:[a.jsx(uN,{children:r}),a.jsx(Ofe,{contentRef:s})]})})})});YG.displayName=Rd;var QG="AlertDialogTitle",XG=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=ec(n);return a.jsx(Mk,{...i,...r,ref:e})});XG.displayName=QG;var JG="AlertDialogDescription",ZG=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=ec(n);return a.jsx(Dk,{...i,...r,ref:e})});ZG.displayName=JG;var Pfe="AlertDialogAction",eV=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,i=ec(n);return a.jsx($k,{...i,...r,ref:e})});eV.displayName=Pfe;var tV="AlertDialogCancel",nV=g.forwardRef((t,e)=>{const{__scopeAlertDialog:n,...r}=t,{cancelRef:i}=kfe(tV,n),o=ec(n),s=It(e,i);return a.jsx($k,{...o,...r,ref:s})});nV.displayName=tV;var Ofe=({contentRef:t})=>{const e=`\`${Rd}\` requires a description for the component to be accessible for screen reader users. + +You can add a description to the \`${Rd}\` by passing a \`${JG}\` component as a child, which also benefits sighted users by adding visible context to the dialog. + +Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${Rd}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. + +For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;return g.useEffect(()=>{var r;document.getElementById((r=t.current)==null?void 0:r.getAttribute("aria-describedby"))||console.warn(e)},[e,t]),null},Ife=KG,Rfe=WG,rV=qG,iV=YG,oV=eV,sV=nV,aV=XG,cV=ZG;const A1=Ife,Mfe=Rfe,lV=g.forwardRef(({className:t,...e},n)=>a.jsx(rV,{className:Le("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...e,ref:n}));lV.displayName=rV.displayName;const mb=g.forwardRef(({className:t,...e},n)=>a.jsxs(Mfe,{children:[a.jsx(lV,{}),a.jsx(iV,{ref:n,className:Le("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...e})]}));mb.displayName=iV.displayName;const gb=({className:t,...e})=>a.jsx("div",{className:Le("flex flex-col space-y-2 text-center sm:text-left",t),...e});gb.displayName="AlertDialogHeader";const vb=({className:t,...e})=>a.jsx("div",{className:Le("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...e});vb.displayName="AlertDialogFooter";const yb=g.forwardRef(({className:t,...e},n)=>a.jsx(aV,{ref:n,className:Le("text-lg font-semibold",t),...e}));yb.displayName=aV.displayName;const xb=g.forwardRef(({className:t,...e},n)=>a.jsx(cV,{ref:n,className:Le("text-sm text-muted-foreground",t),...e}));xb.displayName=cV.displayName;const bb=g.forwardRef(({className:t,...e},n)=>a.jsx(oV,{ref:n,className:Le(QT(),t),...e}));bb.displayName=oV.displayName;const wb=g.forwardRef(({className:t,...e},n)=>a.jsx(sV,{ref:n,className:Le(QT({variant:"outline"}),"mt-2 sm:mt-0",t),...e}));wb.displayName=sV.displayName;const Wc=HG,Dfe=GG,uV=g.forwardRef(({className:t,...e},n)=>a.jsx(Ik,{ref:n,className:Le("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...e}));uV.displayName=Ik.displayName;const Pa=g.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(Dfe,{children:[a.jsx(uV,{}),a.jsxs(Rk,{ref:r,className:Le("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...n,children:[e,a.jsxs($k,{className:"absolute right-4 top-4 z-[100] rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[a.jsx(Mi,{className:"h-4 w-4"}),a.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));Pa.displayName=Rk.displayName;const Oa=({className:t,...e})=>a.jsx("div",{className:Le("flex flex-col space-y-1.5 text-center sm:text-left",t),...e});Oa.displayName="DialogHeader";const Ia=({className:t,...e})=>a.jsx("div",{className:Le("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...e});Ia.displayName="DialogFooter";const Ra=g.forwardRef(({className:t,...e},n)=>a.jsx(Mk,{ref:n,className:Le("text-lg font-semibold leading-none tracking-tight",t),...e}));Ra.displayName=Mk.displayName;const qc=g.forwardRef(({className:t,...e},n)=>a.jsx(Dk,{ref:n,className:Le("text-sm text-muted-foreground",t),...e}));qc.displayName=Dk.displayName;var Lk="Radio",[$fe,dV]=Bi(Lk),[Lfe,Ffe]=$fe(Lk),fV=g.forwardRef((t,e)=>{const{__scopeRadio:n,name:r,checked:i=!1,required:o,disabled:s,value:c="on",onCheck:l,form:u,...d}=t,[f,h]=g.useState(null),p=It(e,y=>h(y)),v=g.useRef(!1),m=f?u||!!f.closest("form"):!0;return a.jsxs(Lfe,{scope:n,checked:i,disabled:s,children:[a.jsx(ht.button,{type:"button",role:"radio","aria-checked":i,"data-state":mV(i),"data-disabled":s?"":void 0,disabled:s,value:c,...d,ref:p,onClick:$e(t.onClick,y=>{i||l==null||l(),m&&(v.current=y.isPropagationStopped(),v.current||y.stopPropagation())})}),m&&a.jsx(Bfe,{control:f,bubbles:!v.current,name:r,value:c,checked:i,required:o,disabled:s,form:u,style:{transform:"translateX(-100%)"}})]})});fV.displayName=Lk;var hV="RadioIndicator",pV=g.forwardRef((t,e)=>{const{__scopeRadio:n,forceMount:r,...i}=t,o=Ffe(hV,n);return a.jsx(Yr,{present:r||o.checked,children:a.jsx(ht.span,{"data-state":mV(o.checked),"data-disabled":o.disabled?"":void 0,...i,ref:e})})});pV.displayName=hV;var Bfe=t=>{const{control:e,checked:n,bubbles:r=!0,...i}=t,o=g.useRef(null),s=Gg(n),c=Dg(e);return g.useEffect(()=>{const l=o.current,u=window.HTMLInputElement.prototype,f=Object.getOwnPropertyDescriptor(u,"checked").set;if(s!==n&&f){const h=new Event("click",{bubbles:r});f.call(l,n),l.dispatchEvent(h)}},[s,n,r]),a.jsx("input",{type:"radio","aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:o,style:{...t.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function mV(t){return t?"checked":"unchecked"}var Ufe=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Fk="RadioGroup",[zfe,nUe]=Bi(Fk,[rh,dV]),gV=rh(),vV=dV(),[Hfe,Gfe]=zfe(Fk),yV=g.forwardRef((t,e)=>{const{__scopeRadioGroup:n,name:r,defaultValue:i,value:o,required:s=!1,disabled:c=!1,orientation:l,dir:u,loop:d=!0,onValueChange:f,...h}=t,p=gV(n),v=Mu(u),[m,y]=ps({prop:o,defaultProp:i,onChange:f});return a.jsx(Hfe,{scope:n,name:r,required:s,disabled:c,value:m,onValueChange:y,children:a.jsx(vk,{asChild:!0,...p,orientation:l,dir:v,loop:d,children:a.jsx(ht.div,{role:"radiogroup","aria-required":s,"aria-orientation":l,"data-disabled":c?"":void 0,dir:v,...h,ref:e})})})});yV.displayName=Fk;var xV="RadioGroupItem",bV=g.forwardRef((t,e)=>{const{__scopeRadioGroup:n,disabled:r,...i}=t,o=Gfe(xV,n),s=o.disabled||r,c=gV(n),l=vV(n),u=g.useRef(null),d=It(e,u),f=o.value===i.value,h=g.useRef(!1);return g.useEffect(()=>{const p=m=>{Ufe.includes(m.key)&&(h.current=!0)},v=()=>h.current=!1;return document.addEventListener("keydown",p),document.addEventListener("keyup",v),()=>{document.removeEventListener("keydown",p),document.removeEventListener("keyup",v)}},[]),a.jsx(yk,{asChild:!0,...c,focusable:!s,active:f,children:a.jsx(fV,{disabled:s,required:o.required,checked:f,...l,...i,name:o.name,ref:d,onCheck:()=>o.onValueChange(i.value),onKeyDown:$e(p=>{p.key==="Enter"&&p.preventDefault()}),onFocus:$e(i.onFocus,()=>{var p;h.current&&((p=u.current)==null||p.click())})})})});bV.displayName=xV;var Vfe="RadioGroupIndicator",wV=g.forwardRef((t,e)=>{const{__scopeRadioGroup:n,...r}=t,i=vV(n);return a.jsx(pV,{...i,...r,ref:e})});wV.displayName=Vfe;var SV=yV,CV=bV,Kfe=wV;const j1=g.forwardRef(({className:t,...e},n)=>a.jsx(SV,{className:Le("grid gap-2",t),...e,ref:n}));j1.displayName=SV.displayName;const up=g.forwardRef(({className:t,...e},n)=>a.jsx(CV,{ref:n,className:Le("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",t),...e,children:a.jsx(Kfe,{className:"flex items-center justify-center",children:a.jsx(IN,{className:"h-2.5 w-2.5 fill-current text-current"})})}));up.displayName=CV.displayName;var Bk="Checkbox",[Wfe,rUe]=Bi(Bk),[qfe,Yfe]=Wfe(Bk),_V=g.forwardRef((t,e)=>{const{__scopeCheckbox:n,name:r,checked:i,defaultChecked:o,required:s,disabled:c,value:l="on",onCheckedChange:u,form:d,...f}=t,[h,p]=g.useState(null),v=It(e,S=>p(S)),m=g.useRef(!1),y=h?d||!!h.closest("form"):!0,[b=!1,x]=ps({prop:i,defaultProp:o,onChange:u}),w=g.useRef(b);return g.useEffect(()=>{const S=h==null?void 0:h.form;if(S){const C=()=>x(w.current);return S.addEventListener("reset",C),()=>S.removeEventListener("reset",C)}},[h,x]),a.jsxs(qfe,{scope:n,state:b,disabled:c,children:[a.jsx(ht.button,{type:"button",role:"checkbox","aria-checked":Yc(b)?"mixed":b,"aria-required":s,"data-state":EV(b),"data-disabled":c?"":void 0,disabled:c,value:l,...f,ref:v,onKeyDown:$e(t.onKeyDown,S=>{S.key==="Enter"&&S.preventDefault()}),onClick:$e(t.onClick,S=>{x(C=>Yc(C)?!0:!C),y&&(m.current=S.isPropagationStopped(),m.current||S.stopPropagation())})}),y&&a.jsx(Qfe,{control:h,bubbles:!m.current,name:r,value:l,checked:b,required:s,disabled:c,form:d,style:{transform:"translateX(-100%)"},defaultChecked:Yc(o)?!1:o})]})});_V.displayName=Bk;var AV="CheckboxIndicator",jV=g.forwardRef((t,e)=>{const{__scopeCheckbox:n,forceMount:r,...i}=t,o=Yfe(AV,n);return a.jsx(Yr,{present:r||Yc(o.state)||o.state===!0,children:a.jsx(ht.span,{"data-state":EV(o.state),"data-disabled":o.disabled?"":void 0,...i,ref:e,style:{pointerEvents:"none",...t.style}})})});jV.displayName=AV;var Qfe=t=>{const{control:e,checked:n,bubbles:r=!0,defaultChecked:i,...o}=t,s=g.useRef(null),c=Gg(n),l=Dg(e);g.useEffect(()=>{const d=s.current,f=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(f,"checked").set;if(c!==n&&p){const v=new Event("click",{bubbles:r});d.indeterminate=Yc(n),p.call(d,Yc(n)?!1:n),d.dispatchEvent(v)}},[c,n,r]);const u=g.useRef(Yc(n)?!1:n);return a.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:i??u.current,...o,tabIndex:-1,ref:s,style:{...t.style,...l,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function Yc(t){return t==="indeterminate"}function EV(t){return Yc(t)?"indeterminate":t?"checked":"unchecked"}var NV=_V,Xfe=jV;const Vl=g.forwardRef(({className:t,...e},n)=>a.jsx(NV,{ref:n,className:Le("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",t),...e,children:a.jsx(Xfe,{className:Le("flex items-center justify-center text-current"),children:a.jsx(Io,{className:"h-4 w-4"})})}));Vl.displayName=NV.displayName;const Uk=({isActive:t,isComplete:e,hasError:n,label:r,onComplete:i,className:o})=>{const[s,c]=g.useState(0),[l,u]=g.useState("progressing"),[d,f]=g.useState(!1),h=g.useRef(null),p=g.useRef(null),v=()=>{h.current&&(clearInterval(h.current),h.current=null),p.current&&(clearTimeout(p.current),p.current=null)},m=()=>{v(),c(0),u("progressing"),f(!1)},y=S=>{v(),u("completing");const C=100-S,_=50,A=500/_,j=C/A;let N=0;h.current=setInterval(()=>{N++;const k=S+j*N;k>=100||N>=A?(c(100),u("completed"),v(),p.current=setTimeout(()=>{u("hiding"),setTimeout(()=>{m(),i==null||i()},300)},2e3)):c(k)},_)},b=()=>{l==="progressing"&&y(s)},x=()=>{l==="waiting"&&y(90)},w=()=>{v()};return g.useEffect(()=>{if(t&&!d){f(!0),c(0),u("progressing");const S=90/540;let C=0;h.current=setInterval(()=>{C+=S,C>=90?(c(90),u("waiting"),v()):c(C)},100)}return e&&l==="progressing"&&b(),e&&l==="waiting"&&x(),n&&(l==="progressing"||l==="waiting")&&w(),!t&&d&&m(),()=>{t||v()}},[t,e,n,l,d]),g.useEffect(()=>()=>{v()},[]),d?a.jsxs("div",{className:Le("w-full space-y-2",o),children:[r&&a.jsxs("div",{className:"flex justify-between items-center text-sm text-muted-foreground",children:[a.jsx("span",{children:l==="waiting"?`${r} - finalizing...`:r}),a.jsxs("span",{children:[Math.round(s),"%"]})]}),a.jsx(Pc,{value:s,className:Le("w-full transition-all duration-200",n&&"opacity-75",l==="completed"&&"bg-green-100")}),n&&a.jsx("div",{className:"text-sm text-red-600",children:"Generation failed. Please try again."}),l==="completed"&&!n&&a.jsx("div",{className:"text-sm text-green-600",children:"Generation completed successfully!"})]}):null},Wn="all",Jfe=()=>{var Jt,en,Nn,cn;const t=g.useCallback(()=>{document.body.style.pointerEvents==="none"&&(console.log("ensureBodyInteractive: Fixing body pointer-events..."),document.body.style.pointerEvents="auto")},[]),e=ur(),[n]=Nee(),{loadPersonas:r}=qz(),{clearNavigationState:i}=Ug(),[o,s]=g.useState("view"),[c,l]=g.useState("ai"),[u,d]=g.useState("");g.useState(null);const[f,h]=g.useState(Wn),[p,v]=g.useState(!1),[m,y]=g.useState("");g.useEffect(()=>{const V=n.get("mode");(V==="view"||V==="create")&&s(V)},[n]);const[b,x]=g.useState([]),[w,S]=g.useState([]),[C,_]=g.useState(!0);g.useState(null);const[A,j]=g.useState(new Set),[N,k]=g.useState(!1),[O,E]=g.useState(null),[R,D]=g.useState(""),[G,L]=g.useState(!1),[z,M]=g.useState(null),[$,Q]=g.useState(!1),[q,te]=g.useState(null),[xe,B]=g.useState(!1),[ce,fe]=g.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[],folderStatus:[]}),[U,ue]=g.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[],folderStatus:[]}),[oe,ne]=g.useState(!1),[je,K]=g.useState(!1),[et,Me]=g.useState(!1),[ut,qe]=g.useState(!1),[Pt,F]=g.useState("gemini-2.5-pro"),J=()=>{ne(!1),K(!1),Me(!1)},ie=V=>{i(),e(`/synthetic-users/${V._id||V.id}`)},ye=V=>{const ke={age:new Set,gender:new Set,occupation:new Set,location:new Set,techSavviness:new Set,ethnicity:new Set};return V.forEach(Ce=>{if(Ce.age&&ke.age.add(Ce.age),Ce.gender&&ke.gender.add(Ce.gender),Ce.occupation&&ke.occupation.add(Ce.occupation),Ce.location&&ke.location.add(Ce.location),Ce.techSavviness!==void 0){const Ke=Ce.techSavviness<30?"Low (0-30)":Ce.techSavviness<70?"Medium (31-70)":"High (71-100)";ke.techSavviness.add(Ke)}Ce.ethnicity&&ke.ethnicity.add(Ce.ethnicity)}),{age:Array.from(ke.age).sort(),gender:Array.from(ke.gender).sort(),occupation:Array.from(ke.occupation).sort(),location:Array.from(ke.location).sort(),techSavviness:Array.from(ke.techSavviness).sort((Ce,Ke)=>{const Qe=["Low (0-30)","Medium (31-70)","High (71-100)"];return Qe.indexOf(Ce)-Qe.indexOf(Ke)}),ethnicity:Array.from(ke.ethnicity).sort()}},Ee=()=>{B(!1),setTimeout(()=>{fe({...U})},0)},P=()=>{ue({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[],folderStatus:[]})},H=(V,ke)=>{ue(Ce=>{const Ke={...Ce};return Ke[V].includes(ke)?Ke[V]=Ke[V].filter(Qe=>Qe!==ke):Ke[V]=[...Ke[V],ke],Ke})},ee=async()=>{try{const Ce=(await Rs.getAll()).data.map(Ke=>({...Ke,id:Ke._id}));return S(Ce),Ce}catch(V){return console.error("Error fetching folders:",V),Ye.error("Failed to load folders"),S([]),[]}},re=async()=>{_(!0);try{const Ce=(await $r.getAll()).data;{const Qe=[...Ce.map(ot=>({...ot,id:ot.id||ot._id}))];try{(async()=>{const Ft=await r();console.log("Loaded stored personas (for debugging only):",Ft?Ft.length:0)})()}catch(ot){console.warn("Error loading stored personas:",ot)}x(Qe)}}catch(ke){console.error("Error fetching personas:",ke),Ye.error("Failed to load personas"),x([])}finally{_(!1)}};g.useEffect(()=>((async()=>{try{const[,]=await Promise.all([ee(),re()])}catch(ke){console.error("Error loading data:",ke)}})(),()=>{}),[t]),g.useEffect(()=>{var V;if(o==="view")re();else if(o==="create"&&(console.log(`Switching to create mode with folder: ${f}, ${f!==Wn?"NOT default":"IS default"}`),f!==Wn)){const ke=(V=w.find(Ce=>Ce.id===f))==null?void 0:V.name;console.log(`Selected folder for creation: ${f} (${ke})`)}},[o]),g.useEffect(()=>{re();const V=()=>{window.location.pathname.includes("/synthetic-users")&&!window.location.pathname.includes("/synthetic-users/")&&(console.log("Navigation to synthetic users page detected, refreshing data"),re())},ke=()=>{console.log("Synthetic users navigation event detected, refreshing data"),re()};console.log("Setting up MutationObserver for body style");const Ce=new MutationObserver(Ke=>{Ke.forEach(Qe=>{Qe.type==="attributes"&&Qe.attributeName==="style"&&document.body.style.pointerEvents==="none"&&(console.log("MutationObserver detected pointer-events: none, fixing..."),t())})});return Ce.observe(document.body,{attributes:!0,attributeFilter:["style"]}),t(),window.addEventListener("popstate",V),window.addEventListener("syntheticUsersNavigation",ke),()=>{window.removeEventListener("popstate",V),window.removeEventListener("syntheticUsersNavigation",ke),console.log("Disconnecting MutationObserver"),Ce.disconnect()}},[]);const Z=async()=>{if(!m.trim()){Ye.error("Please enter a folder name");return}try{const V=await Rs.create({name:m.trim(),persona_ids:[]});await ee(),y(""),v(!1),Ye.success(`Folder "${m}" created`)}catch(V){console.error("Error creating folder:",V),Ye.error("Failed to create folder")}},Se=()=>{y(""),v(!1)},Ae=V=>{E(V),D(V.name)},Ie=async()=>{if(!O||!R.trim()){E(null);return}try{await Rs.update(O._id,{name:R.trim()}),await ee(),E(null),Ye.success(`Folder renamed to "${R}"`)}catch(V){console.error("Error renaming folder:",V),Ye.error("Failed to rename folder"),E(null)}},Ve=()=>{E(null),D("")},Be=V=>{M(V),L(!0)},Fe=async()=>{if(z)try{await Rs.delete(z._id),await ee(),(f===z._id||f===z.id)&&h(Wn),L(!1),M(null),Ye.success(`Folder "${z.name}" deleted`)}catch(V){console.error("Error deleting folder:",V),Ye.error("Failed to delete folder")}},nt=async(V,ke)=>{var Ft;const Ce=V||A,Ke=ke||q;if(!Ke||Ce.size===0)return;const Qe=Array.from(Ce),ot=Qe.map(tt=>{const Zt=b.find($t=>$t.id===tt);return(Zt==null?void 0:Zt._id)||(Zt==null?void 0:Zt.id)||tt}).filter(Boolean);try{const tt=[],Zt=[];if(Ke!==Wn)try{await Rs.addPersonasBatch(Ke,ot),tt.push(...Qe)}catch(Xt){console.error("Error adding personas to folder:",Xt),Zt.push(...Qe)}else tt.push(...Qe);await Promise.all([ee(),re()]);const $t=Ke===Wn?"All Personas":((Ft=w.find(Xt=>Xt._id===Ke||Xt.id===Ke))==null?void 0:Ft.name)||"folder";return tt.length>0&&Ye.success(`Added ${tt.length} persona${tt.length!==1?"s":""} to ${$t}`),Zt.length>0&&Ye.error(`Failed to add ${Zt.length} persona${Zt.length!==1?"s":""} to ${$t}.`),V||j(new Set),{success:tt.length>0,successCount:tt.length,failureCount:Zt.length}}catch(tt){return console.error("Error moving personas to folder:",tt),Ye.error("An unexpected error occurred while adding personas to folder."),{success:!1,error:tt}}},Ne=async()=>{var Ce,Ke,Qe;if(A.size===0||f===Wn)return;const V=Array.from(A),ke=V.map(ot=>{const Ft=b.find(tt=>tt.id===ot);return(Ft==null?void 0:Ft._id)||(Ft==null?void 0:Ft.id)||ot}).filter(Boolean);console.log("Removing personas from folder:",{selectedFolder:f,selectedIds:V,mongoIds:ke,folderName:(Ce=w.find(ot=>ot._id===f))==null?void 0:Ce.name});try{await Rs.removePersonasBatch(f,ke),await Promise.all([ee(),re()]);const ot=((Ke=w.find(Ft=>Ft._id===f))==null?void 0:Ke.name)||"folder";Ye.success(`Removed ${V.length} persona${V.length!==1?"s":""} from ${ot}`),j(new Set)}catch(ot){console.error("Error removing personas from folder:",ot),console.error("Error details:",((Qe=ot.response)==null?void 0:Qe.data)||ot.message),Ye.error("Failed to remove personas from folder")}},Nt=V=>{j(ke=>{const Ce=new Set(ke);return Ce.has(V)?Ce.delete(V):Ce.add(V),Ce})},pn=()=>{A.size===rt.length?j(new Set):j(new Set(rt.map(V=>V.id)))},Je=async()=>{if(A.size===0)return;const V=Array.from(A);j(new Set),k(!1),_(!0);const ke=[],Ce=[];for(const Ke of V)try{const Qe=b.find(Ft=>Ft.id===Ke);if(!Qe){console.error(`Could not find persona with id: ${Ke}`),Ce.push(Ke);continue}let ot=Ke;Qe._id&&(ot=Qe._id.toString()),console.log(`Attempting to delete persona: ${ot}`),await $r.delete(ot),ke.push(Ke)}catch(Qe){console.error(`Failed to delete persona ${Ke}:`,Qe),Ce.push(Ke)}x(Ke=>Ke.filter(Qe=>!ke.includes(Qe.id))),await ee(),_(!1),setTimeout(()=>{ke.length>0&&Ye.success(`Successfully deleted ${ke.length} persona${ke.length!==1?"s":""}`),Ce.length>0&&Ye.error(`Failed to delete ${Ce.length} persona${Ce.length!==1?"s":""}`),(ke.length>0||Ce.length>0)&&re()},50)},rt=b.filter(V=>{const ke=V.name.toLowerCase().includes(u.toLowerCase())||V.occupation.toLowerCase().includes(u.toLowerCase())||V.location.toLowerCase().includes(u.toLowerCase()),Ce=(ce.age.length===0||ce.age.includes(V.age))&&(ce.gender.length===0||ce.gender.includes(V.gender))&&(ce.occupation.length===0||ce.occupation.includes(V.occupation))&&(ce.location.length===0||ce.location.includes(V.location))&&(ce.ethnicity.length===0||V.ethnicity&&ce.ethnicity.includes(V.ethnicity))&&(ce.techSavviness.length===0||V.techSavviness!==void 0&&ce.techSavviness.includes(V.techSavviness<30?"Low (0-30)":V.techSavviness<70?"Medium (31-70)":"High (71-100)"))&&(ce.folderStatus.length===0||ce.folderStatus.includes("hasFolder")&&ce.folderStatus.includes("noFolder")||ce.folderStatus.includes("hasFolder")&&!ce.folderStatus.includes("noFolder")&&(V.folder_ids&&V.folder_ids.length>0||V.folder_id&&V.folder_id!==Wn||V.folderId&&V.folderId!==Wn)||ce.folderStatus.includes("noFolder")&&!ce.folderStatus.includes("hasFolder")&&(!V.folder_ids||V.folder_ids.length===0)&&(!V.folder_id||V.folder_id===Wn)&&(!V.folderId||V.folderId===Wn));return f===Wn||V.folder_ids&&Array.isArray(V.folder_ids)&&V.folder_ids.includes(f)||V.folder_id===f||V.folderId===f?ke&&Ce:!1}),jt=(V,ke)=>{const Ce=new Date().toISOString().split("T")[0],Ke=V.length;let Qe=`# Persona Summary Report + +`;return Qe+=`**Folder:** ${ke} +`,Qe+=`**Date:** ${Ce} +`,Qe+=`**Total Personas:** ${Ke} + +`,Ke===0?(Qe+=`No personas found in this folder. +`,Qe):(V.forEach((ot,Ft)=>{Qe+=`## ${ot.name} + +`,Qe+=`### Demographics +`,Qe+=`- **Age:** ${ot.age} +`,Qe+=`- **Gender:** ${ot.gender} +`,Qe+=`- **Occupation:** ${ot.occupation} +`,Qe+=`- **Location:** ${ot.location} + +`,ot.aiSynthesizedBio&&(Qe+=`### AI-Synthesized Bio +`,Qe+=`${ot.aiSynthesizedBio} + +`),ot.qualitativeAttributes&&ot.qualitativeAttributes.length>0&&(Qe+=`### Key Attributes +`,ot.qualitativeAttributes.forEach(tt=>{Qe+=`- 🏷️ ${tt} +`}),Qe+=` +`),ot.topPersonalityTraits&&ot.topPersonalityTraits.length>0&&(Qe+=`### Top Personality Traits +`,ot.topPersonalityTraits.forEach(tt=>{Qe+=`- 🧠 ${tt} +`}),Qe+=` +`),Ft{if(rt.length===0){Ye.error("No personas to download");return}qe(!0)},Dt=async()=>{var Ce,Ke,Qe,ot,Ft;const V=f===Wn?"All Personas":((Ce=w.find(tt=>tt.id===f))==null?void 0:Ce.name)||"Unknown Folder",ke=rt.map(tt=>tt._id||tt.id);console.log(`🤖 Frontend: User selected ${Pt} for persona summary download`),qe(!1),ne(!0),K(!1),Me(!1),_(!0);try{Ye.info("Generating persona summaries...",{description:`Processing ${rt.length} persona${rt.length!==1?"s":""} with AI`});const tt=await ma.batchGenerateSummaries(ke,.7,Pt),{summaries:Zt,summary_stats:$t,errors:Xt}=tt.data,Tn=new Date().toISOString().split("T")[0],Lo=`persona-summary-${V.toLowerCase().replace(/\s+/g,"-")}-${Tn}.md`;let Zn=`# Persona Summary Report + +`;Zn+=`**Folder:** ${V} +`,Zn+=`**Date:** ${Tn} +`,Zn+=`**Total Personas:** ${$t.total_requested} +`,Zn+=`**Successfully Processed:** ${$t.total_successful} +`,$t.total_failed>0&&(Zn+=`**Failed to Process:** ${$t.total_failed} +`),Zn+=` +--- + +`,Zt.length===0?Zn+=`No persona summaries could be generated. +`:Zt.forEach((co,jh)=>{Zn+=`# ${co.persona_name} + +`,Zn+=`${co.summary} + +`,jh0||((Qe=Xt.missing_personas)==null?void 0:Qe.length)>0)&&(Zn+=` +--- + +## Processing Errors + +`,((ot=Xt.failed_summaries)==null?void 0:ot.length)>0&&(Zn+=`### Failed to Generate Summaries +`,Xt.failed_summaries.forEach(co=>{Zn+=`- **${co.persona_name}** (ID: ${co.persona_id}): ${co.error} +`}),Zn+=` +`),((Ft=Xt.missing_personas)==null?void 0:Ft.length)>0&&(Zn+=`### Missing Personas +`,Xt.missing_personas.forEach(co=>{Zn+=`- ID: ${co} +`})));const Fo=document.createElement("a"),Ah=new Blob([Zn],{type:"text/markdown"});Fo.href=URL.createObjectURL(Ah),Fo.download=Lo,document.body.appendChild(Fo),Fo.click(),document.body.removeChild(Fo),K(!0);const Uu=Pt==="gpt-4.1"?"GPT-4.1":"Gemini 2.5 Pro";$t.total_successful===$t.total_requested?Ye.success("Persona summary downloaded",{description:`Successfully processed all ${$t.total_successful} persona${$t.total_successful!==1?"s":""} from "${V}" using ${Uu}`}):Ye.success("Persona summary downloaded with warnings",{description:`Processed ${$t.total_successful} of ${$t.total_requested} personas from "${V}" using ${Uu}`})}catch(tt){console.error("Error generating persona summaries:",tt),tt.response?(console.error("Error response data:",tt.response.data),console.error("Error response status:",tt.response.status),console.error("Error response headers:",tt.response.headers)):tt.request?console.error("Error request:",tt.request):console.error("Error message:",tt.message),Me(!0),Ye.error("AI summary generation failed, creating basic summary",{description:"Using simplified format due to processing error"});try{const Zt=new Date().toISOString().split("T")[0],$t=`persona-summary-basic-${V.toLowerCase().replace(/\s+/g,"-")}-${Zt}.md`,Xt=jt(rt,V),Tn=document.createElement("a"),Lo=new Blob([Xt],{type:"text/markdown"});Tn.href=URL.createObjectURL(Lo),Tn.download=$t,document.body.appendChild(Tn),Tn.click(),document.body.removeChild(Tn)}catch{Ye.error("Failed to create persona summary",{description:"Unable to generate summary in any format"})}}finally{_(!1)}};return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(ka,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900",children:"Synthetic Personas"}),a.jsx("p",{className:"text-slate-600 mt-1",children:"Create and manage AI-generated research participants"})]}),a.jsx("div",{className:"mt-4 sm:mt-0 flex flex-col items-end gap-3",children:a.jsxs("div",{className:"flex items-center gap-3",children:[o==="view"&&rt.length>0&&a.jsxs(se,{variant:"outline",onClick:Bt,disabled:oe,className:"flex items-center gap-2 hover-transition",children:[a.jsx(ol,{className:"h-4 w-4"}),oe?"Generating Summary...":"Download Persona Summary"]}),a.jsx(se,{onClick:()=>s(o==="view"?"create":"view"),className:"hover-transition",children:o==="view"?"Create New Personas":"View All Personas"})]})})]}),o==="view"&&rt.length>0&&oe&&a.jsx("div",{className:"mb-6",children:a.jsx(Uk,{isActive:oe,isComplete:je,hasError:et,label:"Generating comprehensive persona summaries",onComplete:J,className:"max-w-4xl mx-auto"})}),o==="view"?a.jsx(a.Fragment,{children:a.jsxs("div",{className:"flex flex-col md:flex-row gap-6 mb-6",children:[a.jsxs("div",{className:"w-full md:w-64 space-y-4",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"text-sm font-medium",children:"Folders"}),a.jsx(se,{variant:"ghost",size:"sm",onClick:()=>v(!0),className:"h-7 w-7 p-0",children:a.jsx(OB,{className:"h-4 w-4"})})]}),a.jsxs("div",{className:"space-y-1",children:[a.jsxs("button",{onClick:()=>h(Wn),className:`w-full flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${f===Wn?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx("span",{children:"All Personas"})]}),w.map(V=>a.jsx("div",{className:"flex items-center justify-between group",children:O&&O._id===V._id?a.jsxs("div",{className:"flex-1 flex items-center px-3 py-2 space-x-2",children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx(Kt,{value:R,onChange:ke=>D(ke.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:ke=>{ke.key==="Enter"?Ie():ke.key==="Escape"&&Ve()}}),a.jsx(se,{size:"sm",variant:"ghost",onClick:Ie,className:"h-7 w-7 p-0",children:a.jsx(Io,{className:"h-4 w-4"})}),a.jsx(se,{size:"sm",variant:"ghost",onClick:Ve,className:"h-7 w-7 p-0",children:a.jsx(Mi,{className:"h-4 w-4"})})]}):a.jsxs(a.Fragment,{children:[a.jsxs("button",{onClick:()=>h(V._id),className:`flex-1 flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${f===V._id?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx("span",{children:V.name}),a.jsx("span",{className:"text-muted-foreground text-xs ml-auto",children:b.filter(ke=>ke.folder_ids&&ke.folder_ids.includes(V._id)).length})]}),a.jsxs(C1,{children:[a.jsx(_1,{asChild:!0,children:a.jsx(se,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 opacity-0 group-hover:opacity-100",children:a.jsx(RA,{className:"h-4 w-4"})})}),a.jsxs(hb,{align:"end",children:[a.jsx(hc,{onClick:()=>Ae(V),children:"Rename"}),a.jsx(hc,{className:"text-red-600",onClick:()=>Be(V),children:"Delete"})]})]})]})},V._id)),p&&a.jsxs("div",{className:"flex items-center px-3 py-2 space-x-2",children:[a.jsxs("div",{className:"flex-1 flex items-center space-x-2",children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx(Kt,{value:m,onChange:V=>y(V.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:V=>{V.key==="Enter"?Z():V.key==="Escape"&&Se()}})]}),a.jsx(se,{size:"sm",variant:"ghost",onClick:Z,className:"h-7 w-7 p-0",children:a.jsx(Io,{className:"h-4 w-4"})}),a.jsx(se,{size:"sm",variant:"ghost",onClick:Se,className:"h-7 w-7 p-0",children:a.jsx(Mi,{className:"h-4 w-4"})})]})]})]}),a.jsxs("div",{className:"flex-1",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 mb-6",children:[a.jsxs("div",{className:"relative flex-1",children:[a.jsx(jx,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Kt,{placeholder:"Search personas by name, occupation, or location...",className:"pl-10 bg-white",value:u,onChange:V=>d(V.target.value)})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[A.size>0&&a.jsxs(C1,{children:[a.jsx(_1,{asChild:!0,children:a.jsxs(se,{variant:"outline",size:"sm",className:"flex items-center gap-2",onClick:V=>{V.stopPropagation()},children:[a.jsxs("span",{children:["Actions (",A.size,")"]}),a.jsx(RA,{className:"h-4 w-4"})]})}),a.jsxs(hb,{align:"end",onCloseAutoFocus:V=>{V.preventDefault()},children:[a.jsxs(hc,{className:"flex items-center gap-2 cursor-pointer",onClick:V=>{V.preventDefault(),V.stopPropagation();const ke=Array.from(A);e("/focus-groups",{state:{mode:"create",preSelectedParticipants:ke}})},children:[a.jsx(Xs,{className:"h-4 w-4"}),"Create Focus Group with selected Personas"]}),a.jsxs(hc,{className:"flex items-center gap-2 cursor-pointer",onClick:V=>{V.preventDefault(),V.stopPropagation(),k(!0)},children:[a.jsx(Qn,{className:"h-4 w-4"}),"Delete"]}),a.jsxs(hc,{className:"flex items-center gap-2 cursor-pointer",onClick:V=>{V.preventDefault(),V.stopPropagation(),Q(!0)},children:[a.jsx(mo,{className:"h-4 w-4"}),"Move to folder"]}),f!==Wn&&a.jsxs(hc,{className:"flex items-center gap-2 cursor-pointer",onClick:V=>{V.preventDefault(),V.stopPropagation(),Ne()},children:[a.jsx(Mi,{className:"h-4 w-4"}),"Remove from ",((Jt=w.find(V=>V._id===f))==null?void 0:Jt.name)||"folder"]})]})]}),a.jsxs(se,{variant:"outline",className:"flex items-center gap-2",onClick:()=>B(!0),children:[a.jsx(RN,{className:"h-4 w-4"}),a.jsxs("span",{children:["Filter",Object.values(ce).some(V=>V.length>0)?` (${Object.values(ce).reduce((V,ke)=>V+ke.length,0)})`:""]})]})]})]}),a.jsxs("div",{className:"glass-panel rounded-xl p-6 mb-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Fr,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:f===Wn?"Your Synthetic Persona Library":((en=w.find(V=>V._id===f))==null?void 0:en.name)||"Personas"}),a.jsxs("span",{className:"text-sm text-muted-foreground",children:["(",rt.length,")"]})]}),rt.length>0&&a.jsxs("div",{className:"flex items-center",children:[a.jsx(Vl,{id:"select-all",checked:rt.length>0&&A.size===rt.length,onCheckedChange:pn,className:"mr-2"}),a.jsx("label",{htmlFor:"select-all",className:"text-sm cursor-pointer",children:"Select All"})]})]}),rt.length>0?a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-1 lg:grid-cols-2 xl:grid-cols-2 gap-4",children:rt.map(V=>a.jsx("div",{className:"relative group",children:a.jsx(uk,{user:V,selected:A.has(V.id),onClick:()=>ie(V),onSelectionToggle:ke=>{ke.stopPropagation(),Nt(V.id)},showAddToFolderButton:!1,folders:w})},V.id))}):a.jsx("div",{className:"text-center py-12",children:a.jsx("p",{className:"text-muted-foreground",children:"No personas found matching your criteria."})})]}),a.jsx(A1,{open:N,onOpenChange:V=>{k(V||!1)},children:a.jsxs(mb,{onInteractOutside:V=>{V.preventDefault()},children:[a.jsxs(gb,{children:[a.jsx(yb,{children:"Delete Personas"}),a.jsxs(xb,{children:["Are you sure you want to delete ",A.size," selected persona",A.size!==1?"s":"","? This action cannot be undone."]})]}),a.jsxs(vb,{children:[a.jsx(wb,{onClick:()=>{setTimeout(()=>j(new Set),50)},children:"Cancel"}),a.jsx(bb,{onClick:Je,className:"bg-red-600 hover:bg-red-700",children:"Delete"})]})]})}),a.jsx(A1,{open:G,onOpenChange:V=>{L(V||!1)},children:a.jsxs(mb,{children:[a.jsxs(gb,{children:[a.jsx(yb,{children:"Delete Folder"}),a.jsxs(xb,{children:['Are you sure you want to delete the folder "',z==null?void 0:z.name,'"?',a.jsx("br",{}),a.jsx("br",{}),a.jsx("strong",{children:"Note:"})," Any personas in this folder will not be deleted - they will still be available under 'All Personas' after folder deletion."]})]}),a.jsxs(vb,{children:[a.jsx(wb,{children:"Cancel"}),a.jsx(bb,{onClick:Fe,className:"bg-red-600 hover:bg-red-700",children:"Delete"})]})]})}),a.jsx(Wc,{open:$,onOpenChange:V=>{Q(V||!1)},children:a.jsxs(Pa,{className:"z-50",children:[a.jsxs(Oa,{children:[a.jsx(Ra,{children:"Move to Folder"}),a.jsxs(qc,{children:["Choose a folder to move ",A.size," selected persona",A.size!==1?"s":""," to."]})]}),a.jsx("div",{className:"py-4",children:a.jsxs(j1,{value:q||"",onValueChange:te,className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(up,{value:Wn,id:"folder-all"}),a.jsxs(vo,{htmlFor:"folder-all",className:"flex items-center gap-2",children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx("span",{children:"All Personas (Remove from folders)"})]})]}),w.map(V=>a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(up,{value:V._id,id:`folder-${V._id}`}),a.jsxs(vo,{htmlFor:`folder-${V._id}`,className:"flex items-center gap-2",children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx("span",{children:V.name})]})]},V._id))]})}),a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",onClick:V=>{V.preventDefault(),V.stopPropagation(),Q(!1),te(null)},children:"Cancel"}),a.jsx(se,{onClick:async V=>{if(V.preventDefault(),V.stopPropagation(),!q)return;const ke=new Set(A),Ce=q;if(Q(!1),te(null),Ce&&ke.size>0){_(!0);try{await nt(ke,Ce)}finally{_(!1),j(new Set)}}},disabled:!q,children:"Move"})]})]})}),a.jsx(Wc,{open:xe,onOpenChange:V=>{V?(B(V),ue({...ce})):(A.size>0&&j(new Set),B(!1))},children:a.jsxs(Pa,{className:"max-w-4xl max-h-[80vh] flex flex-col",onInteractOutside:V=>{V.preventDefault()},children:[a.jsx("div",{className:"sticky top-0 bg-background border-b shadow-sm pb-4 z-10",children:a.jsxs(Oa,{children:[a.jsx(Ra,{children:"Filter Personas"}),a.jsx(qc,{children:"Select attributes to filter personas by. Multiple selections within a category use OR logic, different categories use AND logic. Filter options dynamically update to show only relevant values."})]})}),a.jsxs("div",{className:"flex-1 overflow-y-auto px-1 py-4 space-y-6",children:[Object.values(U).some(V=>V.length>0)&&a.jsx("div",{className:"bg-muted/30 p-3 rounded-md",children:a.jsxs("p",{className:"text-sm text-muted-foreground",children:[Object.values(U).reduce((V,ke)=>V+ke.length,0)," active filters"]})}),a.jsx("div",{className:"space-y-4",children:(()=>{const V=Qe=>{const ot={...U};ot[Qe]=[];const Ft=b.filter(tt=>Object.entries(ot).every(([Zt,$t])=>{if($t.length===0)return!0;const Xt=Zt;if(Xt==="techSavviness"&&tt.techSavviness!==void 0){const Tn=tt.techSavviness<30?"Low (0-30)":tt.techSavviness<70?"Medium (31-70)":"High (71-100)";return $t.includes(Tn)}else{if(Xt==="age"&&tt.age)return $t.includes(tt.age);if(Xt==="gender"&&tt.gender)return $t.includes(tt.gender);if(Xt==="occupation"&&tt.occupation)return $t.includes(tt.occupation);if(Xt==="location"&&tt.location)return $t.includes(tt.location);if(Xt==="ethnicity"&&tt.ethnicity)return $t.includes(tt.ethnicity)}return!0}));return ye(Ft)},ke=Object.values(U).every(Qe=>Qe.length===0),Ce=ye(b),Ke=(Qe,ot,Ft,tt=1)=>{const Zt=U[ot],$t=[...new Set([...Ft,...Zt])].sort();return $t.length===0?null:a.jsxs("div",{className:"mb-6",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:Qe}),a.jsx("div",{className:`grid grid-cols-1 ${tt===2?"sm:grid-cols-2":tt===3?"sm:grid-cols-2 md:grid-cols-3":""} gap-2`,children:$t.map(Xt=>{const Tn=U[ot].includes(Xt),Lo=Ft.includes(Xt);return a.jsxs("div",{className:`flex items-center space-x-2 ${!Lo&&!Tn?"opacity-50":""}`,children:[a.jsx(Vl,{id:`${ot}-${Xt}`,checked:Tn,onCheckedChange:()=>H(ot,Xt),disabled:!Lo&&!Tn}),a.jsxs(vo,{htmlFor:`${ot}-${Xt}`,className:"truncate overflow-hidden",children:[Xt,Tn&&!Lo&&a.jsx("span",{className:"ml-1 text-xs text-muted-foreground",children:"(no matches)"})]})]},Xt)})})]})};return a.jsxs(a.Fragment,{children:[Ke("Gender","gender",ke?Ce.gender:V("gender").gender,3),Ke("Age","age",ke?Ce.age:V("age").age,3),Ke("Ethnicity","ethnicity",ke?Ce.ethnicity:V("ethnicity").ethnicity,2),Ke("Location","location",ke?Ce.location:V("location").location,2),Ke("Occupation","occupation",ke?Ce.occupation:V("occupation").occupation,2),Ke("Tech Savviness","techSavviness",ke?Ce.techSavviness:V("techSavviness").techSavviness,3),a.jsxs("div",{className:"mb-6",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:"Folder Assignment"}),a.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(Vl,{id:"folderStatus-hasFolder",checked:U.folderStatus.includes("hasFolder"),onCheckedChange:()=>H("folderStatus","hasFolder")}),a.jsx(vo,{htmlFor:"folderStatus-hasFolder",className:"truncate overflow-hidden",children:"Has folder assignment"})]}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(Vl,{id:"folderStatus-noFolder",checked:U.folderStatus.includes("noFolder"),onCheckedChange:()=>H("folderStatus","noFolder")}),a.jsx(vo,{htmlFor:"folderStatus-noFolder",className:"truncate overflow-hidden",children:"No folder assignment"})]})]})]}),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-6"})]})})()})]}),a.jsx("div",{className:"sticky bottom-0 bg-background border-t shadow-[0_-2px_4px_rgba(0,0,0,0.05)] pt-4 z-10",children:a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",onClick:P,children:"Reset"}),a.jsx(se,{onClick:Ee,children:"Apply Filters"})]})})]})}),a.jsx(Wc,{open:ut,onOpenChange:qe,children:a.jsxs(Pa,{children:[a.jsxs(Oa,{children:[a.jsx(Ra,{children:"Select AI Model for Summary Generation"}),a.jsx(qc,{children:"Choose which AI model to use for generating persona summaries"})]}),a.jsx("div",{className:"py-4",children:a.jsxs(j1,{value:Pt,onValueChange:F,className:"space-y-3",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(up,{value:"gemini-2.5-pro",id:"download-gemini"}),a.jsx(vo,{htmlFor:"download-gemini",className:"text-sm font-medium",children:"Gemini 2.5 Pro"})]}),a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(up,{value:"gpt-4.1",id:"download-gpt"}),a.jsx(vo,{htmlFor:"download-gpt",className:"text-sm font-medium",children:"GPT-4.1"})]})]})}),a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",onClick:()=>qe(!1),children:"Cancel"}),a.jsx(se,{onClick:Dt,children:"Generate Summary"})]})]})})]})]})}):a.jsxs(wl,{defaultValue:"ai",onValueChange:V=>l(V),children:[a.jsxs(Za,{className:"grid w-full grid-cols-2 mb-6",children:[a.jsx(vn,{value:"ai",children:"AI Recruiter"}),a.jsx(vn,{value:"manual",children:"Manual Creation"})]}),a.jsxs(yn,{value:"ai",children:[console.log(`Rendering AIRecruiter with targetFolderId: ${f!==Wn?f:"null"}`),console.log("Current folders:",w.map(V=>({id:V.id,name:V.name}))),a.jsx(lue,{targetFolderId:f!==Wn?f:null,targetFolderName:f!==Wn?(Nn=w.find(V=>V.id===f))==null?void 0:Nn.name:null})]}),a.jsx(yn,{value:"manual",children:a.jsx(Zue,{targetFolderId:f!==Wn?f:null,targetFolderName:f!==Wn?(cn=w.find(V=>V.id===f))==null?void 0:cn.name:null})})]})]})]})};function Zfe(){for(var t=arguments.length,e=new Array(t),n=0;nr=>{e.forEach(i=>i(r))},e)}const Gw=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function ih(t){const e=Object.prototype.toString.call(t);return e==="[object Window]"||e==="[object global]"}function zk(t){return"nodeType"in t}function zi(t){var e,n;return t?ih(t)?t:zk(t)&&(e=(n=t.ownerDocument)==null?void 0:n.defaultView)!=null?e:window:window}function Hk(t){const{Document:e}=zi(t);return t instanceof e}function Jg(t){return ih(t)?!1:t instanceof zi(t).HTMLElement}function TV(t){return t instanceof zi(t).SVGElement}function oh(t){return t?ih(t)?t.document:zk(t)?Hk(t)?t:Jg(t)||TV(t)?t.ownerDocument:document:document:document}const ea=Gw?g.useLayoutEffect:g.useEffect;function Gk(t){const e=g.useRef(t);return ea(()=>{e.current=t}),g.useCallback(function(){for(var n=arguments.length,r=new Array(n),i=0;i{t.current=setInterval(r,i)},[]),n=g.useCallback(()=>{t.current!==null&&(clearInterval(t.current),t.current=null)},[]);return[e,n]}function Fm(t,e){e===void 0&&(e=[t]);const n=g.useRef(t);return ea(()=>{n.current!==t&&(n.current=t)},e),n}function Zg(t,e){const n=g.useRef();return g.useMemo(()=>{const r=t(n.current);return n.current=r,r},[...e])}function Sb(t){const e=Gk(t),n=g.useRef(null),r=g.useCallback(i=>{i!==n.current&&(e==null||e(i,n.current)),n.current=i},[]);return[n,r]}function E1(t){const e=g.useRef();return g.useEffect(()=>{e.current=t},[t]),e.current}let GC={};function ev(t,e){return g.useMemo(()=>{if(e)return e;const n=GC[t]==null?0:GC[t]+1;return GC[t]=n,t+"-"+n},[t,e])}function kV(t){return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{const c=Object.entries(s);for(const[l,u]of c){const d=o[l];d!=null&&(o[l]=d+t*u)}return o},{...e})}}const Md=kV(1),Bm=kV(-1);function the(t){return"clientX"in t&&"clientY"in t}function Vk(t){if(!t)return!1;const{KeyboardEvent:e}=zi(t.target);return e&&t instanceof e}function nhe(t){if(!t)return!1;const{TouchEvent:e}=zi(t.target);return e&&t instanceof e}function N1(t){if(nhe(t)){if(t.touches&&t.touches.length){const{clientX:e,clientY:n}=t.touches[0];return{x:e,y:n}}else if(t.changedTouches&&t.changedTouches.length){const{clientX:e,clientY:n}=t.changedTouches[0];return{x:e,y:n}}}return the(t)?{x:t.clientX,y:t.clientY}:null}const Um=Object.freeze({Translate:{toString(t){if(!t)return;const{x:e,y:n}=t;return"translate3d("+(e?Math.round(e):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(t){if(!t)return;const{scaleX:e,scaleY:n}=t;return"scaleX("+e+") scaleY("+n+")"}},Transform:{toString(t){if(t)return[Um.Translate.toString(t),Um.Scale.toString(t)].join(" ")}},Transition:{toString(t){let{property:e,duration:n,easing:r}=t;return e+" "+n+"ms "+r}}}),I2="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function rhe(t){return t.matches(I2)?t:t.querySelector(I2)}const ihe={display:"none"};function ohe(t){let{id:e,value:n}=t;return T.createElement("div",{id:e,style:ihe},n)}function she(t){let{id:e,announcement:n,ariaLiveType:r="assertive"}=t;const i={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return T.createElement("div",{id:e,style:i,role:"status","aria-live":r,"aria-atomic":!0},n)}function ahe(){const[t,e]=g.useState("");return{announce:g.useCallback(r=>{r!=null&&e(r)},[]),announcement:t}}const PV=g.createContext(null);function che(t){const e=g.useContext(PV);g.useEffect(()=>{if(!e)throw new Error("useDndMonitor must be used within a children of ");return e(t)},[t,e])}function lhe(){const[t]=g.useState(()=>new Set),e=g.useCallback(r=>(t.add(r),()=>t.delete(r)),[t]);return[g.useCallback(r=>{let{type:i,event:o}=r;t.forEach(s=>{var c;return(c=s[i])==null?void 0:c.call(s,o)})},[t]),e]}const uhe={draggable:` + To pick up a draggable item, press the space bar. + While dragging, use the arrow keys to move the item. + Press space again to drop the item in its new position, or press escape to cancel. + `},dhe={onDragStart(t){let{active:e}=t;return"Picked up draggable item "+e.id+"."},onDragOver(t){let{active:e,over:n}=t;return n?"Draggable item "+e.id+" was moved over droppable area "+n.id+".":"Draggable item "+e.id+" is no longer over a droppable area."},onDragEnd(t){let{active:e,over:n}=t;return n?"Draggable item "+e.id+" was dropped over droppable area "+n.id:"Draggable item "+e.id+" was dropped."},onDragCancel(t){let{active:e}=t;return"Dragging was cancelled. Draggable item "+e.id+" was dropped."}};function fhe(t){let{announcements:e=dhe,container:n,hiddenTextDescribedById:r,screenReaderInstructions:i=uhe}=t;const{announce:o,announcement:s}=ahe(),c=ev("DndLiveRegion"),[l,u]=g.useState(!1);if(g.useEffect(()=>{u(!0)},[]),che(g.useMemo(()=>({onDragStart(f){let{active:h}=f;o(e.onDragStart({active:h}))},onDragMove(f){let{active:h,over:p}=f;e.onDragMove&&o(e.onDragMove({active:h,over:p}))},onDragOver(f){let{active:h,over:p}=f;o(e.onDragOver({active:h,over:p}))},onDragEnd(f){let{active:h,over:p}=f;o(e.onDragEnd({active:h,over:p}))},onDragCancel(f){let{active:h,over:p}=f;o(e.onDragCancel({active:h,over:p}))}}),[o,e])),!l)return null;const d=T.createElement(T.Fragment,null,T.createElement(ohe,{id:r,value:i.draggable}),T.createElement(she,{id:c,announcement:s}));return n?es.createPortal(d,n):d}var _r;(function(t){t.DragStart="dragStart",t.DragMove="dragMove",t.DragEnd="dragEnd",t.DragCancel="dragCancel",t.DragOver="dragOver",t.RegisterDroppable="registerDroppable",t.SetDroppableDisabled="setDroppableDisabled",t.UnregisterDroppable="unregisterDroppable"})(_r||(_r={}));function Cb(){}function R2(t,e){return g.useMemo(()=>({sensor:t,options:e??{}}),[t,e])}function hhe(){for(var t=arguments.length,e=new Array(t),n=0;n[...e].filter(r=>r!=null),[...e])}const xs=Object.freeze({x:0,y:0});function Kk(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function Wk(t,e){let{data:{value:n}}=t,{data:{value:r}}=e;return n-r}function phe(t,e){let{data:{value:n}}=t,{data:{value:r}}=e;return r-n}function T1(t){let{left:e,top:n,height:r,width:i}=t;return[{x:e,y:n},{x:e+i,y:n},{x:e,y:n+r},{x:e+i,y:n+r}]}function OV(t,e){if(!t||t.length===0)return null;const[n]=t;return n[e]}function M2(t,e,n){return e===void 0&&(e=t.left),n===void 0&&(n=t.top),{x:e+t.width*.5,y:n+t.height*.5}}const D2=t=>{let{collisionRect:e,droppableRects:n,droppableContainers:r}=t;const i=M2(e,e.left,e.top),o=[];for(const s of r){const{id:c}=s,l=n.get(c);if(l){const u=Kk(M2(l),i);o.push({id:c,data:{droppableContainer:s,value:u}})}}return o.sort(Wk)},mhe=t=>{let{collisionRect:e,droppableRects:n,droppableContainers:r}=t;const i=T1(e),o=[];for(const s of r){const{id:c}=s,l=n.get(c);if(l){const u=T1(l),d=i.reduce((h,p,v)=>h+Kk(u[v],p),0),f=Number((d/4).toFixed(4));o.push({id:c,data:{droppableContainer:s,value:f}})}}return o.sort(Wk)};function ghe(t,e){const n=Math.max(e.top,t.top),r=Math.max(e.left,t.left),i=Math.min(e.left+e.width,t.left+t.width),o=Math.min(e.top+e.height,t.top+t.height),s=i-r,c=o-n;if(r{let{collisionRect:e,droppableRects:n,droppableContainers:r}=t;const i=[];for(const o of r){const{id:s}=o,c=n.get(s);if(c){const l=ghe(c,e);l>0&&i.push({id:s,data:{droppableContainer:o,value:l}})}}return i.sort(phe)};function yhe(t,e){const{top:n,left:r,bottom:i,right:o}=e;return n<=t.y&&t.y<=i&&r<=t.x&&t.x<=o}const xhe=t=>{let{droppableContainers:e,droppableRects:n,pointerCoordinates:r}=t;if(!r)return[];const i=[];for(const o of e){const{id:s}=o,c=n.get(s);if(c&&yhe(r,c)){const u=T1(c).reduce((f,h)=>f+Kk(r,h),0),d=Number((u/4).toFixed(4));i.push({id:s,data:{droppableContainer:o,value:d}})}}return i.sort(Wk)};function bhe(t,e,n){return{...t,scaleX:e&&n?e.width/n.width:1,scaleY:e&&n?e.height/n.height:1}}function IV(t,e){return t&&e?{x:t.left-e.left,y:t.top-e.top}:xs}function whe(t){return function(n){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;o({...s,top:s.top+t*c.y,bottom:s.bottom+t*c.y,left:s.left+t*c.x,right:s.right+t*c.x}),{...n})}}const She=whe(1);function Che(t){if(t.startsWith("matrix3d(")){const e=t.slice(9,-1).split(/, /);return{x:+e[12],y:+e[13],scaleX:+e[0],scaleY:+e[5]}}else if(t.startsWith("matrix(")){const e=t.slice(7,-1).split(/, /);return{x:+e[4],y:+e[5],scaleX:+e[0],scaleY:+e[3]}}return null}function _he(t,e,n){const r=Che(e);if(!r)return t;const{scaleX:i,scaleY:o,x:s,y:c}=r,l=t.left-s-(1-i)*parseFloat(n),u=t.top-c-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),d=i?t.width/i:t.width,f=o?t.height/o:t.height;return{width:d,height:f,top:u,right:l+d,bottom:u+f,left:l}}const Ahe={ignoreTransform:!1};function sh(t,e){e===void 0&&(e=Ahe);let n=t.getBoundingClientRect();if(e.ignoreTransform){const{transform:u,transformOrigin:d}=zi(t).getComputedStyle(t);u&&(n=_he(n,u,d))}const{top:r,left:i,width:o,height:s,bottom:c,right:l}=n;return{top:r,left:i,width:o,height:s,bottom:c,right:l}}function $2(t){return sh(t,{ignoreTransform:!0})}function jhe(t){const e=t.innerWidth,n=t.innerHeight;return{top:0,left:0,right:e,bottom:n,width:e,height:n}}function Ehe(t,e){return e===void 0&&(e=zi(t).getComputedStyle(t)),e.position==="fixed"}function Nhe(t,e){e===void 0&&(e=zi(t).getComputedStyle(t));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some(i=>{const o=e[i];return typeof o=="string"?n.test(o):!1})}function Vw(t,e){const n=[];function r(i){if(e!=null&&n.length>=e||!i)return n;if(Hk(i)&&i.scrollingElement!=null&&!n.includes(i.scrollingElement))return n.push(i.scrollingElement),n;if(!Jg(i)||TV(i)||n.includes(i))return n;const o=zi(t).getComputedStyle(i);return i!==t&&Nhe(i,o)&&n.push(i),Ehe(i,o)?n:r(i.parentNode)}return t?r(t):n}function RV(t){const[e]=Vw(t,1);return e??null}function VC(t){return!Gw||!t?null:ih(t)?t:zk(t)?Hk(t)||t===oh(t).scrollingElement?window:Jg(t)?t:null:null}function MV(t){return ih(t)?t.scrollX:t.scrollLeft}function DV(t){return ih(t)?t.scrollY:t.scrollTop}function k1(t){return{x:MV(t),y:DV(t)}}var Rr;(function(t){t[t.Forward=1]="Forward",t[t.Backward=-1]="Backward"})(Rr||(Rr={}));function $V(t){return!Gw||!t?!1:t===document.scrollingElement}function LV(t){const e={x:0,y:0},n=$V(t)?{height:window.innerHeight,width:window.innerWidth}:{height:t.clientHeight,width:t.clientWidth},r={x:t.scrollWidth-n.width,y:t.scrollHeight-n.height},i=t.scrollTop<=e.y,o=t.scrollLeft<=e.x,s=t.scrollTop>=r.y,c=t.scrollLeft>=r.x;return{isTop:i,isLeft:o,isBottom:s,isRight:c,maxScroll:r,minScroll:e}}const The={x:.2,y:.2};function khe(t,e,n,r,i){let{top:o,left:s,right:c,bottom:l}=n;r===void 0&&(r=10),i===void 0&&(i=The);const{isTop:u,isBottom:d,isLeft:f,isRight:h}=LV(t),p={x:0,y:0},v={x:0,y:0},m={height:e.height*i.y,width:e.width*i.x};return!u&&o<=e.top+m.height?(p.y=Rr.Backward,v.y=r*Math.abs((e.top+m.height-o)/m.height)):!d&&l>=e.bottom-m.height&&(p.y=Rr.Forward,v.y=r*Math.abs((e.bottom-m.height-l)/m.height)),!h&&c>=e.right-m.width?(p.x=Rr.Forward,v.x=r*Math.abs((e.right-m.width-c)/m.width)):!f&&s<=e.left+m.width&&(p.x=Rr.Backward,v.x=r*Math.abs((e.left+m.width-s)/m.width)),{direction:p,speed:v}}function Phe(t){if(t===document.scrollingElement){const{innerWidth:o,innerHeight:s}=window;return{top:0,left:0,right:o,bottom:s,width:o,height:s}}const{top:e,left:n,right:r,bottom:i}=t.getBoundingClientRect();return{top:e,left:n,right:r,bottom:i,width:t.clientWidth,height:t.clientHeight}}function FV(t){return t.reduce((e,n)=>Md(e,k1(n)),xs)}function Ohe(t){return t.reduce((e,n)=>e+MV(n),0)}function Ihe(t){return t.reduce((e,n)=>e+DV(n),0)}function Rhe(t,e){if(e===void 0&&(e=sh),!t)return;const{top:n,left:r,bottom:i,right:o}=e(t);RV(t)&&(i<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&t.scrollIntoView({block:"center",inline:"center"})}const Mhe=[["x",["left","right"],Ohe],["y",["top","bottom"],Ihe]];class qk{constructor(e,n){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const r=Vw(n),i=FV(r);this.rect={...e},this.width=e.width,this.height=e.height;for(const[o,s,c]of Mhe)for(const l of s)Object.defineProperty(this,l,{get:()=>{const u=c(r),d=i[o]-u;return this.rect[l]+d},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Pp{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach(n=>{var r;return(r=this.target)==null?void 0:r.removeEventListener(...n)})},this.target=e}add(e,n,r){var i;(i=this.target)==null||i.addEventListener(e,n,r),this.listeners.push([e,n,r])}}function Dhe(t){const{EventTarget:e}=zi(t);return t instanceof e?t:oh(t)}function KC(t,e){const n=Math.abs(t.x),r=Math.abs(t.y);return typeof e=="number"?Math.sqrt(n**2+r**2)>e:"x"in e&&"y"in e?n>e.x&&r>e.y:"x"in e?n>e.x:"y"in e?r>e.y:!1}var yo;(function(t){t.Click="click",t.DragStart="dragstart",t.Keydown="keydown",t.ContextMenu="contextmenu",t.Resize="resize",t.SelectionChange="selectionchange",t.VisibilityChange="visibilitychange"})(yo||(yo={}));function L2(t){t.preventDefault()}function $he(t){t.stopPropagation()}var rn;(function(t){t.Space="Space",t.Down="ArrowDown",t.Right="ArrowRight",t.Left="ArrowLeft",t.Up="ArrowUp",t.Esc="Escape",t.Enter="Enter",t.Tab="Tab"})(rn||(rn={}));const BV={start:[rn.Space,rn.Enter],cancel:[rn.Esc],end:[rn.Space,rn.Enter,rn.Tab]},Lhe=(t,e)=>{let{currentCoordinates:n}=e;switch(t.code){case rn.Right:return{...n,x:n.x+25};case rn.Left:return{...n,x:n.x-25};case rn.Down:return{...n,y:n.y+25};case rn.Up:return{...n,y:n.y-25}}};class Yk{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;const{event:{target:n}}=e;this.props=e,this.listeners=new Pp(oh(n)),this.windowListeners=new Pp(zi(n)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(yo.Resize,this.handleCancel),this.windowListeners.add(yo.VisibilityChange,this.handleCancel),setTimeout(()=>this.listeners.add(yo.Keydown,this.handleKeyDown))}handleStart(){const{activeNode:e,onStart:n}=this.props,r=e.node.current;r&&Rhe(r),n(xs)}handleKeyDown(e){if(Vk(e)){const{active:n,context:r,options:i}=this.props,{keyboardCodes:o=BV,coordinateGetter:s=Lhe,scrollBehavior:c="smooth"}=i,{code:l}=e;if(o.end.includes(l)){this.handleEnd(e);return}if(o.cancel.includes(l)){this.handleCancel(e);return}const{collisionRect:u}=r.current,d=u?{x:u.left,y:u.top}:xs;this.referenceCoordinates||(this.referenceCoordinates=d);const f=s(e,{active:n,context:r.current,currentCoordinates:d});if(f){const h=Bm(f,d),p={x:0,y:0},{scrollableAncestors:v}=r.current;for(const m of v){const y=e.code,{isTop:b,isRight:x,isLeft:w,isBottom:S,maxScroll:C,minScroll:_}=LV(m),A=Phe(m),j={x:Math.min(y===rn.Right?A.right-A.width/2:A.right,Math.max(y===rn.Right?A.left:A.left+A.width/2,f.x)),y:Math.min(y===rn.Down?A.bottom-A.height/2:A.bottom,Math.max(y===rn.Down?A.top:A.top+A.height/2,f.y))},N=y===rn.Right&&!x||y===rn.Left&&!w,k=y===rn.Down&&!S||y===rn.Up&&!b;if(N&&j.x!==f.x){const O=m.scrollLeft+h.x,E=y===rn.Right&&O<=C.x||y===rn.Left&&O>=_.x;if(E&&!h.y){m.scrollTo({left:O,behavior:c});return}E?p.x=m.scrollLeft-O:p.x=y===rn.Right?m.scrollLeft-C.x:m.scrollLeft-_.x,p.x&&m.scrollBy({left:-p.x,behavior:c});break}else if(k&&j.y!==f.y){const O=m.scrollTop+h.y,E=y===rn.Down&&O<=C.y||y===rn.Up&&O>=_.y;if(E&&!h.x){m.scrollTo({top:O,behavior:c});return}E?p.y=m.scrollTop-O:p.y=y===rn.Down?m.scrollTop-C.y:m.scrollTop-_.y,p.y&&m.scrollBy({top:-p.y,behavior:c});break}}this.handleMove(e,Md(Bm(f,this.referenceCoordinates),p))}}}handleMove(e,n){const{onMove:r}=this.props;e.preventDefault(),r(n)}handleEnd(e){const{onEnd:n}=this.props;e.preventDefault(),this.detach(),n()}handleCancel(e){const{onCancel:n}=this.props;e.preventDefault(),this.detach(),n()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}Yk.activators=[{eventName:"onKeyDown",handler:(t,e,n)=>{let{keyboardCodes:r=BV,onActivation:i}=e,{active:o}=n;const{code:s}=t.nativeEvent;if(r.start.includes(s)){const c=o.activatorNode.current;return c&&t.target!==c?!1:(t.preventDefault(),i==null||i({event:t.nativeEvent}),!0)}return!1}}];function F2(t){return!!(t&&"distance"in t)}function B2(t){return!!(t&&"delay"in t)}class Qk{constructor(e,n,r){var i;r===void 0&&(r=Dhe(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=n;const{event:o}=e,{target:s}=o;this.props=e,this.events=n,this.document=oh(s),this.documentListeners=new Pp(this.document),this.listeners=new Pp(r),this.windowListeners=new Pp(zi(s)),this.initialCoordinates=(i=N1(o))!=null?i:xs,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:n,bypassActivationConstraint:r}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),e.cancel&&this.listeners.add(e.cancel.name,this.handleCancel),this.windowListeners.add(yo.Resize,this.handleCancel),this.windowListeners.add(yo.DragStart,L2),this.windowListeners.add(yo.VisibilityChange,this.handleCancel),this.windowListeners.add(yo.ContextMenu,L2),this.documentListeners.add(yo.Keydown,this.handleKeydown),n){if(r!=null&&r({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(B2(n)){this.timeoutId=setTimeout(this.handleStart,n.delay),this.handlePending(n);return}if(F2(n)){this.handlePending(n);return}}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(e,n){const{active:r,onPending:i}=this.props;i(r,e,this.initialCoordinates,n)}handleStart(){const{initialCoordinates:e}=this,{onStart:n}=this.props;e&&(this.activated=!0,this.documentListeners.add(yo.Click,$he,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(yo.SelectionChange,this.removeTextSelection),n(e))}handleMove(e){var n;const{activated:r,initialCoordinates:i,props:o}=this,{onMove:s,options:{activationConstraint:c}}=o;if(!i)return;const l=(n=N1(e))!=null?n:xs,u=Bm(i,l);if(!r&&c){if(F2(c)){if(c.tolerance!=null&&KC(u,c.tolerance))return this.handleCancel();if(KC(u,c.distance))return this.handleStart()}if(B2(c)&&KC(u,c.tolerance))return this.handleCancel();this.handlePending(c,u);return}e.cancelable&&e.preventDefault(),s(l)}handleEnd(){const{onAbort:e,onEnd:n}=this.props;this.detach(),this.activated||e(this.props.active),n()}handleCancel(){const{onAbort:e,onCancel:n}=this.props;this.detach(),this.activated||e(this.props.active),n()}handleKeydown(e){e.code===rn.Esc&&this.handleCancel()}removeTextSelection(){var e;(e=this.document.getSelection())==null||e.removeAllRanges()}}const Fhe={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class Xk extends Qk{constructor(e){const{event:n}=e,r=oh(n.target);super(e,Fhe,r)}}Xk.activators=[{eventName:"onPointerDown",handler:(t,e)=>{let{nativeEvent:n}=t,{onActivation:r}=e;return!n.isPrimary||n.button!==0?!1:(r==null||r({event:n}),!0)}}];const Bhe={move:{name:"mousemove"},end:{name:"mouseup"}};var P1;(function(t){t[t.RightClick=2]="RightClick"})(P1||(P1={}));class Uhe extends Qk{constructor(e){super(e,Bhe,oh(e.event.target))}}Uhe.activators=[{eventName:"onMouseDown",handler:(t,e)=>{let{nativeEvent:n}=t,{onActivation:r}=e;return n.button===P1.RightClick?!1:(r==null||r({event:n}),!0)}}];const WC={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};class zhe extends Qk{constructor(e){super(e,WC)}static setup(){return window.addEventListener(WC.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(WC.move.name,e)};function e(){}}}zhe.activators=[{eventName:"onTouchStart",handler:(t,e)=>{let{nativeEvent:n}=t,{onActivation:r}=e;const{touches:i}=n;return i.length>1?!1:(r==null||r({event:n}),!0)}}];var Op;(function(t){t[t.Pointer=0]="Pointer",t[t.DraggableRect=1]="DraggableRect"})(Op||(Op={}));var _b;(function(t){t[t.TreeOrder=0]="TreeOrder",t[t.ReversedTreeOrder=1]="ReversedTreeOrder"})(_b||(_b={}));function Hhe(t){let{acceleration:e,activator:n=Op.Pointer,canScroll:r,draggingRect:i,enabled:o,interval:s=5,order:c=_b.TreeOrder,pointerCoordinates:l,scrollableAncestors:u,scrollableAncestorRects:d,delta:f,threshold:h}=t;const p=Vhe({delta:f,disabled:!o}),[v,m]=ehe(),y=g.useRef({x:0,y:0}),b=g.useRef({x:0,y:0}),x=g.useMemo(()=>{switch(n){case Op.Pointer:return l?{top:l.y,bottom:l.y,left:l.x,right:l.x}:null;case Op.DraggableRect:return i}},[n,i,l]),w=g.useRef(null),S=g.useCallback(()=>{const _=w.current;if(!_)return;const A=y.current.x*b.current.x,j=y.current.y*b.current.y;_.scrollBy(A,j)},[]),C=g.useMemo(()=>c===_b.TreeOrder?[...u].reverse():u,[c,u]);g.useEffect(()=>{if(!o||!u.length||!x){m();return}for(const _ of C){if((r==null?void 0:r(_))===!1)continue;const A=u.indexOf(_),j=d[A];if(!j)continue;const{direction:N,speed:k}=khe(_,j,x,e,h);for(const O of["x","y"])p[O][N[O]]||(k[O]=0,N[O]=0);if(k.x>0||k.y>0){m(),w.current=_,v(S,s),y.current=k,b.current=N;return}}y.current={x:0,y:0},b.current={x:0,y:0},m()},[e,S,r,m,o,s,JSON.stringify(x),JSON.stringify(p),v,u,C,d,JSON.stringify(h)])}const Ghe={x:{[Rr.Backward]:!1,[Rr.Forward]:!1},y:{[Rr.Backward]:!1,[Rr.Forward]:!1}};function Vhe(t){let{delta:e,disabled:n}=t;const r=E1(e);return Zg(i=>{if(n||!r||!i)return Ghe;const o={x:Math.sign(e.x-r.x),y:Math.sign(e.y-r.y)};return{x:{[Rr.Backward]:i.x[Rr.Backward]||o.x===-1,[Rr.Forward]:i.x[Rr.Forward]||o.x===1},y:{[Rr.Backward]:i.y[Rr.Backward]||o.y===-1,[Rr.Forward]:i.y[Rr.Forward]||o.y===1}}},[n,e,r])}function Khe(t,e){const n=e!=null?t.get(e):void 0,r=n?n.node.current:null;return Zg(i=>{var o;return e==null?null:(o=r??i)!=null?o:null},[r,e])}function Whe(t,e){return g.useMemo(()=>t.reduce((n,r)=>{const{sensor:i}=r,o=i.activators.map(s=>({eventName:s.eventName,handler:e(s.handler,r)}));return[...n,...o]},[]),[t,e])}var zm;(function(t){t[t.Always=0]="Always",t[t.BeforeDragging=1]="BeforeDragging",t[t.WhileDragging=2]="WhileDragging"})(zm||(zm={}));var O1;(function(t){t.Optimized="optimized"})(O1||(O1={}));const U2=new Map;function qhe(t,e){let{dragging:n,dependencies:r,config:i}=e;const[o,s]=g.useState(null),{frequency:c,measure:l,strategy:u}=i,d=g.useRef(t),f=y(),h=Fm(f),p=g.useCallback(function(b){b===void 0&&(b=[]),!h.current&&s(x=>x===null?b:x.concat(b.filter(w=>!x.includes(w))))},[h]),v=g.useRef(null),m=Zg(b=>{if(f&&!n)return U2;if(!b||b===U2||d.current!==t||o!=null){const x=new Map;for(let w of t){if(!w)continue;if(o&&o.length>0&&!o.includes(w.id)&&w.rect.current){x.set(w.id,w.rect.current);continue}const S=w.node.current,C=S?new qk(l(S),S):null;w.rect.current=C,C&&x.set(w.id,C)}return x}return b},[t,o,n,f,l]);return g.useEffect(()=>{d.current=t},[t]),g.useEffect(()=>{f||p()},[n,f]),g.useEffect(()=>{o&&o.length>0&&s(null)},[JSON.stringify(o)]),g.useEffect(()=>{f||typeof c!="number"||v.current!==null||(v.current=setTimeout(()=>{p(),v.current=null},c))},[c,f,p,...r]),{droppableRects:m,measureDroppableContainers:p,measuringScheduled:o!=null};function y(){switch(u){case zm.Always:return!1;case zm.BeforeDragging:return n;default:return!n}}}function UV(t,e){return Zg(n=>t?n||(typeof e=="function"?e(t):t):null,[e,t])}function Yhe(t,e){return UV(t,e)}function Qhe(t){let{callback:e,disabled:n}=t;const r=Gk(e),i=g.useMemo(()=>{if(n||typeof window>"u"||typeof window.MutationObserver>"u")return;const{MutationObserver:o}=window;return new o(r)},[r,n]);return g.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function Kw(t){let{callback:e,disabled:n}=t;const r=Gk(e),i=g.useMemo(()=>{if(n||typeof window>"u"||typeof window.ResizeObserver>"u")return;const{ResizeObserver:o}=window;return new o(r)},[n]);return g.useEffect(()=>()=>i==null?void 0:i.disconnect(),[i]),i}function Xhe(t){return new qk(sh(t),t)}function z2(t,e,n){e===void 0&&(e=Xhe);const[r,i]=g.useState(null);function o(){i(l=>{if(!t)return null;if(t.isConnected===!1){var u;return(u=l??n)!=null?u:null}const d=e(t);return JSON.stringify(l)===JSON.stringify(d)?l:d})}const s=Qhe({callback(l){if(t)for(const u of l){const{type:d,target:f}=u;if(d==="childList"&&f instanceof HTMLElement&&f.contains(t)){o();break}}}}),c=Kw({callback:o});return ea(()=>{o(),t?(c==null||c.observe(t),s==null||s.observe(document.body,{childList:!0,subtree:!0})):(c==null||c.disconnect(),s==null||s.disconnect())},[t]),r}function Jhe(t){const e=UV(t);return IV(t,e)}const H2=[];function Zhe(t){const e=g.useRef(t),n=Zg(r=>t?r&&r!==H2&&t&&e.current&&t.parentNode===e.current.parentNode?r:Vw(t):H2,[t]);return g.useEffect(()=>{e.current=t},[t]),n}function epe(t){const[e,n]=g.useState(null),r=g.useRef(t),i=g.useCallback(o=>{const s=VC(o.target);s&&n(c=>c?(c.set(s,k1(s)),new Map(c)):null)},[]);return g.useEffect(()=>{const o=r.current;if(t!==o){s(o);const c=t.map(l=>{const u=VC(l);return u?(u.addEventListener("scroll",i,{passive:!0}),[u,k1(u)]):null}).filter(l=>l!=null);n(c.length?new Map(c):null),r.current=t}return()=>{s(t),s(o)};function s(c){c.forEach(l=>{const u=VC(l);u==null||u.removeEventListener("scroll",i)})}},[i,t]),g.useMemo(()=>t.length?e?Array.from(e.values()).reduce((o,s)=>Md(o,s),xs):FV(t):xs,[t,e])}function G2(t,e){e===void 0&&(e=[]);const n=g.useRef(null);return g.useEffect(()=>{n.current=null},e),g.useEffect(()=>{const r=t!==xs;r&&!n.current&&(n.current=t),!r&&n.current&&(n.current=null)},[t]),n.current?Bm(t,n.current):xs}function tpe(t){g.useEffect(()=>{if(!Gw)return;const e=t.map(n=>{let{sensor:r}=n;return r.setup==null?void 0:r.setup()});return()=>{for(const n of e)n==null||n()}},t.map(e=>{let{sensor:n}=e;return n}))}function npe(t,e){return g.useMemo(()=>t.reduce((n,r)=>{let{eventName:i,handler:o}=r;return n[i]=s=>{o(s,e)},n},{}),[t,e])}function zV(t){return g.useMemo(()=>t?jhe(t):null,[t])}const V2=[];function rpe(t,e){e===void 0&&(e=sh);const[n]=t,r=zV(n?zi(n):null),[i,o]=g.useState(V2);function s(){o(()=>t.length?t.map(l=>$V(l)?r:new qk(e(l),l)):V2)}const c=Kw({callback:s});return ea(()=>{c==null||c.disconnect(),s(),t.forEach(l=>c==null?void 0:c.observe(l))},[t]),i}function ipe(t){if(!t)return null;if(t.children.length>1)return t;const e=t.children[0];return Jg(e)?e:t}function ope(t){let{measure:e}=t;const[n,r]=g.useState(null),i=g.useCallback(u=>{for(const{target:d}of u)if(Jg(d)){r(f=>{const h=e(d);return f?{...f,width:h.width,height:h.height}:h});break}},[e]),o=Kw({callback:i}),s=g.useCallback(u=>{const d=ipe(u);o==null||o.disconnect(),d&&(o==null||o.observe(d)),r(d?e(d):null)},[e,o]),[c,l]=Sb(s);return g.useMemo(()=>({nodeRef:c,rect:n,setRef:l}),[n,c,l])}const spe=[{sensor:Xk,options:{}},{sensor:Yk,options:{}}],ape={current:{}},Fy={draggable:{measure:$2},droppable:{measure:$2,strategy:zm.WhileDragging,frequency:O1.Optimized},dragOverlay:{measure:sh}};class Ip extends Map{get(e){var n;return e!=null&&(n=super.get(e))!=null?n:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter(e=>{let{disabled:n}=e;return!n})}getNodeFor(e){var n,r;return(n=(r=this.get(e))==null?void 0:r.node.current)!=null?n:void 0}}const cpe={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new Ip,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:Cb},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:Fy,measureDroppableContainers:Cb,windowRect:null,measuringScheduled:!1},lpe={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:Cb,draggableNodes:new Map,over:null,measureDroppableContainers:Cb},Ww=g.createContext(lpe),HV=g.createContext(cpe);function upe(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new Ip}}}function dpe(t,e){switch(e.type){case _r.DragStart:return{...t,draggable:{...t.draggable,initialCoordinates:e.initialCoordinates,active:e.active}};case _r.DragMove:return t.draggable.active==null?t:{...t,draggable:{...t.draggable,translate:{x:e.coordinates.x-t.draggable.initialCoordinates.x,y:e.coordinates.y-t.draggable.initialCoordinates.y}}};case _r.DragEnd:case _r.DragCancel:return{...t,draggable:{...t.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case _r.RegisterDroppable:{const{element:n}=e,{id:r}=n,i=new Ip(t.droppable.containers);return i.set(r,n),{...t,droppable:{...t.droppable,containers:i}}}case _r.SetDroppableDisabled:{const{id:n,key:r,disabled:i}=e,o=t.droppable.containers.get(n);if(!o||r!==o.key)return t;const s=new Ip(t.droppable.containers);return s.set(n,{...o,disabled:i}),{...t,droppable:{...t.droppable,containers:s}}}case _r.UnregisterDroppable:{const{id:n,key:r}=e,i=t.droppable.containers.get(n);if(!i||r!==i.key)return t;const o=new Ip(t.droppable.containers);return o.delete(n),{...t,droppable:{...t.droppable,containers:o}}}default:return t}}function fpe(t){let{disabled:e}=t;const{active:n,activatorEvent:r,draggableNodes:i}=g.useContext(Ww),o=E1(r),s=E1(n==null?void 0:n.id);return g.useEffect(()=>{if(!e&&!r&&o&&s!=null){if(!Vk(o)||document.activeElement===o.target)return;const c=i.get(s);if(!c)return;const{activatorNode:l,node:u}=c;if(!l.current&&!u.current)return;requestAnimationFrame(()=>{for(const d of[l.current,u.current]){if(!d)continue;const f=rhe(d);if(f){f.focus();break}}})}},[r,e,i,s,o]),null}function hpe(t,e){let{transform:n,...r}=e;return t!=null&&t.length?t.reduce((i,o)=>o({transform:i,...r}),n):n}function ppe(t){return g.useMemo(()=>({draggable:{...Fy.draggable,...t==null?void 0:t.draggable},droppable:{...Fy.droppable,...t==null?void 0:t.droppable},dragOverlay:{...Fy.dragOverlay,...t==null?void 0:t.dragOverlay}}),[t==null?void 0:t.draggable,t==null?void 0:t.droppable,t==null?void 0:t.dragOverlay])}function mpe(t){let{activeNode:e,measure:n,initialRect:r,config:i=!0}=t;const o=g.useRef(!1),{x:s,y:c}=typeof i=="boolean"?{x:i,y:i}:i;ea(()=>{if(!s&&!c||!e){o.current=!1;return}if(o.current||!r)return;const u=e==null?void 0:e.node.current;if(!u||u.isConnected===!1)return;const d=n(u),f=IV(d,r);if(s||(f.x=0),c||(f.y=0),o.current=!0,Math.abs(f.x)>0||Math.abs(f.y)>0){const h=RV(u);h&&h.scrollBy({top:f.y,left:f.x})}},[e,s,c,r,n])}const GV=g.createContext({...xs,scaleX:1,scaleY:1});var pc;(function(t){t[t.Uninitialized=0]="Uninitialized",t[t.Initializing=1]="Initializing",t[t.Initialized=2]="Initialized"})(pc||(pc={}));const gpe=g.memo(function(e){var n,r,i,o;let{id:s,accessibility:c,autoScroll:l=!0,children:u,sensors:d=spe,collisionDetection:f=vhe,measuring:h,modifiers:p,...v}=e;const m=g.useReducer(dpe,void 0,upe),[y,b]=m,[x,w]=lhe(),[S,C]=g.useState(pc.Uninitialized),_=S===pc.Initialized,{draggable:{active:A,nodes:j,translate:N},droppable:{containers:k}}=y,O=A!=null?j.get(A):null,E=g.useRef({initial:null,translated:null}),R=g.useMemo(()=>{var Dt;return A!=null?{id:A,data:(Dt=O==null?void 0:O.data)!=null?Dt:ape,rect:E}:null},[A,O]),D=g.useRef(null),[G,L]=g.useState(null),[z,M]=g.useState(null),$=Fm(v,Object.values(v)),Q=ev("DndDescribedBy",s),q=g.useMemo(()=>k.getEnabled(),[k]),te=ppe(h),{droppableRects:xe,measureDroppableContainers:B,measuringScheduled:ce}=qhe(q,{dragging:_,dependencies:[N.x,N.y],config:te.droppable}),fe=Khe(j,A),U=g.useMemo(()=>z?N1(z):null,[z]),ue=Bt(),oe=Yhe(fe,te.draggable.measure);mpe({activeNode:A!=null?j.get(A):null,config:ue.layoutShiftCompensation,initialRect:oe,measure:te.draggable.measure});const ne=z2(fe,te.draggable.measure,oe),je=z2(fe?fe.parentElement:null),K=g.useRef({activatorEvent:null,active:null,activeNode:fe,collisionRect:null,collisions:null,droppableRects:xe,draggableNodes:j,draggingNode:null,draggingNodeRect:null,droppableContainers:k,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),et=k.getNodeFor((n=K.current.over)==null?void 0:n.id),Me=ope({measure:te.dragOverlay.measure}),ut=(r=Me.nodeRef.current)!=null?r:fe,qe=_?(i=Me.rect)!=null?i:ne:null,Pt=!!(Me.nodeRef.current&&Me.rect),F=Jhe(Pt?null:ne),J=zV(ut?zi(ut):null),ie=Zhe(_?et??fe:null),ye=rpe(ie),Ee=hpe(p,{transform:{x:N.x-F.x,y:N.y-F.y,scaleX:1,scaleY:1},activatorEvent:z,active:R,activeNodeRect:ne,containerNodeRect:je,draggingNodeRect:qe,over:K.current.over,overlayNodeRect:Me.rect,scrollableAncestors:ie,scrollableAncestorRects:ye,windowRect:J}),P=U?Md(U,N):null,H=epe(ie),ee=G2(H),re=G2(H,[ne]),Z=Md(Ee,ee),Se=qe?She(qe,Ee):null,Ae=R&&Se?f({active:R,collisionRect:Se,droppableRects:xe,droppableContainers:q,pointerCoordinates:P}):null,Ie=OV(Ae,"id"),[Ve,Be]=g.useState(null),Fe=Pt?Ee:Md(Ee,re),nt=bhe(Fe,(o=Ve==null?void 0:Ve.rect)!=null?o:null,ne),Ne=g.useRef(null),Nt=g.useCallback((Dt,Jt)=>{let{sensor:en,options:Nn}=Jt;if(D.current==null)return;const cn=j.get(D.current);if(!cn)return;const V=Dt.nativeEvent,ke=new en({active:D.current,activeNode:cn,event:V,options:Nn,context:K,onAbort(Ke){if(!j.get(Ke))return;const{onDragAbort:ot}=$.current,Ft={id:Ke};ot==null||ot(Ft),x({type:"onDragAbort",event:Ft})},onPending(Ke,Qe,ot,Ft){if(!j.get(Ke))return;const{onDragPending:Zt}=$.current,$t={id:Ke,constraint:Qe,initialCoordinates:ot,offset:Ft};Zt==null||Zt($t),x({type:"onDragPending",event:$t})},onStart(Ke){const Qe=D.current;if(Qe==null)return;const ot=j.get(Qe);if(!ot)return;const{onDragStart:Ft}=$.current,tt={activatorEvent:V,active:{id:Qe,data:ot.data,rect:E}};es.unstable_batchedUpdates(()=>{Ft==null||Ft(tt),C(pc.Initializing),b({type:_r.DragStart,initialCoordinates:Ke,active:Qe}),x({type:"onDragStart",event:tt}),L(Ne.current),M(V)})},onMove(Ke){b({type:_r.DragMove,coordinates:Ke})},onEnd:Ce(_r.DragEnd),onCancel:Ce(_r.DragCancel)});Ne.current=ke;function Ce(Ke){return async function(){const{active:ot,collisions:Ft,over:tt,scrollAdjustedTranslate:Zt}=K.current;let $t=null;if(ot&&Zt){const{cancelDrop:Xt}=$.current;$t={activatorEvent:V,active:ot,collisions:Ft,delta:Zt,over:tt},Ke===_r.DragEnd&&typeof Xt=="function"&&await Promise.resolve(Xt($t))&&(Ke=_r.DragCancel)}D.current=null,es.unstable_batchedUpdates(()=>{b({type:Ke}),C(pc.Uninitialized),Be(null),L(null),M(null),Ne.current=null;const Xt=Ke===_r.DragEnd?"onDragEnd":"onDragCancel";if($t){const Tn=$.current[Xt];Tn==null||Tn($t),x({type:Xt,event:$t})}})}}},[j]),pn=g.useCallback((Dt,Jt)=>(en,Nn)=>{const cn=en.nativeEvent,V=j.get(Nn);if(D.current!==null||!V||cn.dndKit||cn.defaultPrevented)return;const ke={active:V};Dt(en,Jt.options,ke)===!0&&(cn.dndKit={capturedBy:Jt.sensor},D.current=Nn,Nt(en,Jt))},[j,Nt]),Je=Whe(d,pn);tpe(d),ea(()=>{ne&&S===pc.Initializing&&C(pc.Initialized)},[ne,S]),g.useEffect(()=>{const{onDragMove:Dt}=$.current,{active:Jt,activatorEvent:en,collisions:Nn,over:cn}=K.current;if(!Jt||!en)return;const V={active:Jt,activatorEvent:en,collisions:Nn,delta:{x:Z.x,y:Z.y},over:cn};es.unstable_batchedUpdates(()=>{Dt==null||Dt(V),x({type:"onDragMove",event:V})})},[Z.x,Z.y]),g.useEffect(()=>{const{active:Dt,activatorEvent:Jt,collisions:en,droppableContainers:Nn,scrollAdjustedTranslate:cn}=K.current;if(!Dt||D.current==null||!Jt||!cn)return;const{onDragOver:V}=$.current,ke=Nn.get(Ie),Ce=ke&&ke.rect.current?{id:ke.id,rect:ke.rect.current,data:ke.data,disabled:ke.disabled}:null,Ke={active:Dt,activatorEvent:Jt,collisions:en,delta:{x:cn.x,y:cn.y},over:Ce};es.unstable_batchedUpdates(()=>{Be(Ce),V==null||V(Ke),x({type:"onDragOver",event:Ke})})},[Ie]),ea(()=>{K.current={activatorEvent:z,active:R,activeNode:fe,collisionRect:Se,collisions:Ae,droppableRects:xe,draggableNodes:j,draggingNode:ut,draggingNodeRect:qe,droppableContainers:k,over:Ve,scrollableAncestors:ie,scrollAdjustedTranslate:Z},E.current={initial:qe,translated:Se}},[R,fe,Ae,Se,j,ut,qe,xe,k,Ve,ie,Z]),Hhe({...ue,delta:N,draggingRect:Se,pointerCoordinates:P,scrollableAncestors:ie,scrollableAncestorRects:ye});const rt=g.useMemo(()=>({active:R,activeNode:fe,activeNodeRect:ne,activatorEvent:z,collisions:Ae,containerNodeRect:je,dragOverlay:Me,draggableNodes:j,droppableContainers:k,droppableRects:xe,over:Ve,measureDroppableContainers:B,scrollableAncestors:ie,scrollableAncestorRects:ye,measuringConfiguration:te,measuringScheduled:ce,windowRect:J}),[R,fe,ne,z,Ae,je,Me,j,k,xe,Ve,B,ie,ye,te,ce,J]),jt=g.useMemo(()=>({activatorEvent:z,activators:Je,active:R,activeNodeRect:ne,ariaDescribedById:{draggable:Q},dispatch:b,draggableNodes:j,over:Ve,measureDroppableContainers:B}),[z,Je,R,ne,b,Q,j,Ve,B]);return T.createElement(PV.Provider,{value:w},T.createElement(Ww.Provider,{value:jt},T.createElement(HV.Provider,{value:rt},T.createElement(GV.Provider,{value:nt},u)),T.createElement(fpe,{disabled:(c==null?void 0:c.restoreFocus)===!1})),T.createElement(fhe,{...c,hiddenTextDescribedById:Q}));function Bt(){const Dt=(G==null?void 0:G.autoScrollEnabled)===!1,Jt=typeof l=="object"?l.enabled===!1:l===!1,en=_&&!Dt&&!Jt;return typeof l=="object"?{...l,enabled:en}:{enabled:en}}}),vpe=g.createContext(null),K2="button",ype="Draggable";function xpe(t){let{id:e,data:n,disabled:r=!1,attributes:i}=t;const o=ev(ype),{activators:s,activatorEvent:c,active:l,activeNodeRect:u,ariaDescribedById:d,draggableNodes:f,over:h}=g.useContext(Ww),{role:p=K2,roleDescription:v="draggable",tabIndex:m=0}=i??{},y=(l==null?void 0:l.id)===e,b=g.useContext(y?GV:vpe),[x,w]=Sb(),[S,C]=Sb(),_=npe(s,e),A=Fm(n);ea(()=>(f.set(e,{id:e,key:o,node:x,activatorNode:S,data:A}),()=>{const N=f.get(e);N&&N.key===o&&f.delete(e)}),[f,e]);const j=g.useMemo(()=>({role:p,tabIndex:m,"aria-disabled":r,"aria-pressed":y&&p===K2?!0:void 0,"aria-roledescription":v,"aria-describedby":d.draggable}),[r,p,m,y,v,d.draggable]);return{active:l,activatorEvent:c,activeNodeRect:u,attributes:j,isDragging:y,listeners:r?void 0:_,node:x,over:h,setNodeRef:w,setActivatorNodeRef:C,transform:b}}function bpe(){return g.useContext(HV)}const wpe="Droppable",Spe={timeout:25};function VV(t){let{data:e,disabled:n=!1,id:r,resizeObserverConfig:i}=t;const o=ev(wpe),{active:s,dispatch:c,over:l,measureDroppableContainers:u}=g.useContext(Ww),d=g.useRef({disabled:n}),f=g.useRef(!1),h=g.useRef(null),p=g.useRef(null),{disabled:v,updateMeasurementsFor:m,timeout:y}={...Spe,...i},b=Fm(m??r),x=g.useCallback(()=>{if(!f.current){f.current=!0;return}p.current!=null&&clearTimeout(p.current),p.current=setTimeout(()=>{u(Array.isArray(b.current)?b.current:[b.current]),p.current=null},y)},[y]),w=Kw({callback:x,disabled:v||!s}),S=g.useCallback((j,N)=>{w&&(N&&(w.unobserve(N),f.current=!1),j&&w.observe(j))},[w]),[C,_]=Sb(S),A=Fm(e);return g.useEffect(()=>{!w||!C.current||(w.disconnect(),f.current=!1,w.observe(C.current))},[C,w]),g.useEffect(()=>(c({type:_r.RegisterDroppable,element:{id:r,key:o,disabled:n,node:C,rect:h,data:A}}),()=>c({type:_r.UnregisterDroppable,key:o,id:r})),[r]),g.useEffect(()=>{n!==d.current.disabled&&(c({type:_r.SetDroppableDisabled,id:r,key:o,disabled:n}),d.current.disabled=n)},[r,o,n,c]),{active:s,rect:h,isOver:(l==null?void 0:l.id)===r,node:C,over:l,setNodeRef:_}}function KV(t,e,n){const r=t.slice();return r.splice(n<0?r.length+n:n,0,r.splice(e,1)[0]),r}function Cpe(t,e){return t.reduce((n,r,i)=>{const o=e.get(r);return o&&(n[i]=o),n},Array(t.length))}function Wv(t){return t!==null&&t>=0}function _pe(t,e){if(t===e)return!0;if(t.length!==e.length)return!1;for(let n=0;n{let{rects:e,activeIndex:n,overIndex:r,index:i}=t;const o=KV(e,r,n),s=e[i],c=o[i];return!c||!s?null:{x:c.left-s.left,y:c.top-s.top,scaleX:c.width/s.width,scaleY:c.height/s.height}},qv={scaleX:1,scaleY:1},Yv=t=>{var e;let{activeIndex:n,activeNodeRect:r,index:i,rects:o,overIndex:s}=t;const c=(e=o[n])!=null?e:r;if(!c)return null;if(i===n){const u=o[s];return u?{x:0,y:nn&&i<=s?{x:0,y:-c.height-l,...qv}:i=s?{x:0,y:c.height+l,...qv}:{x:0,y:0,...qv}};function jpe(t,e,n){const r=t[e],i=t[e-1],o=t[e+1];return r?nr.map(_=>typeof _=="object"&&"id"in _?_.id:_),[r]),v=s!=null,m=s?p.indexOf(s.id):-1,y=u?p.indexOf(u.id):-1,b=g.useRef(p),x=!_pe(p,b.current),w=y!==-1&&m===-1||x,S=Ape(o);ea(()=>{x&&v&&d(p)},[x,p,v,d]),g.useEffect(()=>{b.current=p},[p]);const C=g.useMemo(()=>({activeIndex:m,containerId:f,disabled:S,disableTransforms:w,items:p,overIndex:y,useDragOverlay:h,sortedRects:Cpe(p,l),strategy:i}),[m,f,S.draggable,S.droppable,w,p,y,l,h,i]);return T.createElement(YV.Provider,{value:C},e)}const Epe=t=>{let{id:e,items:n,activeIndex:r,overIndex:i}=t;return KV(n,r,i).indexOf(e)},Npe=t=>{let{containerId:e,isSorting:n,wasDragging:r,index:i,items:o,newIndex:s,previousItems:c,previousContainerId:l,transition:u}=t;return!u||!r||c!==o&&i===s?!1:n?!0:s!==i&&e===l},Tpe={duration:200,easing:"ease"},QV="transform",kpe=Um.Transition.toString({property:QV,duration:0,easing:"linear"}),Ppe={roleDescription:"sortable"};function Ope(t){let{disabled:e,index:n,node:r,rect:i}=t;const[o,s]=g.useState(null),c=g.useRef(n);return ea(()=>{if(!e&&n!==c.current&&r.current){const l=i.current;if(l){const u=sh(r.current,{ignoreTransform:!0}),d={x:l.left-u.left,y:l.top-u.top,scaleX:l.width/u.width,scaleY:l.height/u.height};(d.x||d.y)&&s(d)}}n!==c.current&&(c.current=n)},[e,n,r,i]),g.useEffect(()=>{o&&s(null)},[o]),o}function Ipe(t){let{animateLayoutChanges:e=Npe,attributes:n,disabled:r,data:i,getNewIndex:o=Epe,id:s,strategy:c,resizeObserverConfig:l,transition:u=Tpe}=t;const{items:d,containerId:f,activeIndex:h,disabled:p,disableTransforms:v,sortedRects:m,overIndex:y,useDragOverlay:b,strategy:x}=g.useContext(YV),w=Rpe(r,p),S=d.indexOf(s),C=g.useMemo(()=>({sortable:{containerId:f,index:S,items:d},...i}),[f,i,S,d]),_=g.useMemo(()=>d.slice(d.indexOf(s)),[d,s]),{rect:A,node:j,isOver:N,setNodeRef:k}=VV({id:s,data:C,disabled:w.droppable,resizeObserverConfig:{updateMeasurementsFor:_,...l}}),{active:O,activatorEvent:E,activeNodeRect:R,attributes:D,setNodeRef:G,listeners:L,isDragging:z,over:M,setActivatorNodeRef:$,transform:Q}=xpe({id:s,data:C,attributes:{...Ppe,...n},disabled:w.draggable}),q=Zfe(k,G),te=!!O,xe=te&&!v&&Wv(h)&&Wv(y),B=!b&&z,ce=B&&xe?Q:null,U=xe?ce??(c??x)({rects:m,activeNodeRect:R,activeIndex:h,overIndex:y,index:S}):null,ue=Wv(h)&&Wv(y)?o({id:s,items:d,activeIndex:h,overIndex:y}):S,oe=O==null?void 0:O.id,ne=g.useRef({activeId:oe,items:d,newIndex:ue,containerId:f}),je=d!==ne.current.items,K=e({active:O,containerId:f,isDragging:z,isSorting:te,id:s,index:S,items:d,newIndex:ne.current.newIndex,previousItems:ne.current.items,previousContainerId:ne.current.containerId,transition:u,wasDragging:ne.current.activeId!=null}),et=Ope({disabled:!K,index:S,node:j,rect:A});return g.useEffect(()=>{te&&ne.current.newIndex!==ue&&(ne.current.newIndex=ue),f!==ne.current.containerId&&(ne.current.containerId=f),d!==ne.current.items&&(ne.current.items=d)},[te,ue,f,d]),g.useEffect(()=>{if(oe===ne.current.activeId)return;if(oe!=null&&ne.current.activeId==null){ne.current.activeId=oe;return}const ut=setTimeout(()=>{ne.current.activeId=oe},50);return()=>clearTimeout(ut)},[oe]),{active:O,activeIndex:h,attributes:D,data:C,rect:A,index:S,newIndex:ue,items:d,isOver:N,isSorting:te,isDragging:z,listeners:L,node:j,overIndex:y,over:M,setNodeRef:q,setActivatorNodeRef:$,setDroppableNodeRef:k,setDraggableNodeRef:G,transform:et??U,transition:Me()};function Me(){if(et||je&&ne.current.newIndex===S)return kpe;if(!(B&&!Vk(E)||!u)&&(te||K))return Um.Transition.toString({...u,property:QV})}}function Rpe(t,e){var n,r;return typeof t=="boolean"?{draggable:t,droppable:!1}:{draggable:(n=t==null?void 0:t.draggable)!=null?n:e.draggable,droppable:(r=t==null?void 0:t.droppable)!=null?r:e.droppable}}function Ab(t){if(!t)return!1;const e=t.data.current;return!!(e&&"sortable"in e&&typeof e.sortable=="object"&&"containerId"in e.sortable&&"items"in e.sortable&&"index"in e.sortable)}const Mpe=[rn.Down,rn.Right,rn.Up,rn.Left],Dpe=(t,e)=>{let{context:{active:n,collisionRect:r,droppableRects:i,droppableContainers:o,over:s,scrollableAncestors:c}}=e;if(Mpe.includes(t.code)){if(t.preventDefault(),!n||!r)return;const l=[];o.getEnabled().forEach(f=>{if(!f||f!=null&&f.disabled)return;const h=i.get(f.id);if(h)switch(t.code){case rn.Down:r.toph.top&&l.push(f);break;case rn.Left:r.left>h.left&&l.push(f);break;case rn.Right:r.left1&&(d=u[1].id),d!=null){const f=o.get(n.id),h=o.get(d),p=h?i.get(h.id):null,v=h==null?void 0:h.node.current;if(v&&p&&f&&h){const y=Vw(v).some((_,A)=>c[A]!==_),b=XV(f,h),x=$pe(f,h),w=y||!b?{x:0,y:0}:{x:x?r.width-p.width:0,y:x?r.height-p.height:0},S={x:p.left,y:p.top};return w.x&&w.y?S:Bm(S,w)}}}};function XV(t,e){return!Ab(t)||!Ab(e)?!1:t.data.current.sortable.containerId===e.data.current.sortable.containerId}function $pe(t,e){return!Ab(t)||!Ab(e)||!XV(t,e)?!1:t.data.current.sortable.index=n.top+n.height&&(r.y=n.top+n.height-e.bottom),e.left+t.x<=n.left?r.x=n.left-e.left:e.right+t.x>=n.left+n.width&&(r.x=n.left+n.width-e.right),r}const Fpe=t=>{let{containerNodeRect:e,draggingNodeRect:n,transform:r}=t;return!n||!e?r:Lpe(r,n,e)},Bpe=t=>{let{transform:e}=t;return{...e,x:0}},Yu=(t,e)=>`sec:${t}:${e}`,Qu=(t,e,n)=>`sub:${t}:${e}:${n}`,Uh=(t,e)=>`${t}::${e}`,By=t=>{const[e,n,r,i]=t.split(":");return e==="sec"?{scope:"sec",sectionId:n,subsectionId:null,kind:r}:{scope:"sub",sectionId:n,subsectionId:r,kind:i}},Upe=(t,e)=>!e||e.type!=="item"&&e.type!=="container"?!1:t.sectionId===e.sectionId&&t.kind===e.kind,qC=(t,e)=>{var c;const{sectionId:n,subsectionId:r,kind:i}=By(e);if(n!==t.id)throw new Error("Mismatched section");const o=i==="q"?"questions":"activities";if(!r)return t[o]??[];const s=(c=t.subsections)==null?void 0:c.find(l=>l.id===r);if(!s)throw new Error("Subsection not found");return s[o]??[]},zpe=(t,e,n)=>{const r=t.slice(),[i]=r.splice(e,1);return r.splice(n,0,i),r},Xv={current:null},Hpe=t=>{const{active:e,droppableContainers:n}=t,r=e.data.current;if(!r)return D2(t);const i=n.filter(c=>{const l=c.data.current;return Upe(r,l)}),o=xhe({...t,droppableContainers:i});if(o.length>0)return Xv.current=o[0].id,o;const s=D2({...t,droppableContainers:i});return s.length>0?(Xv.current=s[0].id,s):Xv.current?[{id:Xv.current}]:[]},Jv=({containerId:t,sectionId:e,subsectionId:n,kind:r,className:i,children:o})=>{const{setNodeRef:s,isOver:c,active:l}=VV({id:t,data:{type:"container",kind:r,sectionId:e,subsectionId:n}}),u=l==null?void 0:l.data.current,d=!!u&&u.kind===r&&u.sectionId===e;return a.jsx("div",{ref:s,className:Le(i,c&&d&&"ring-2 ring-blue-500 bg-blue-50/50",c&&!d&&"ring-2 ring-red-400 opacity-50"),children:o})},Gpe=({id:t,disabled:e,className:n,data:r,children:i})=>{const{attributes:o,listeners:s,setNodeRef:c,setActivatorNodeRef:l,transform:u,transition:d,isDragging:f}=Ipe({id:t,disabled:e,data:r}),h={transform:Um.Transform.toString(u),transition:d,opacity:f?.6:void 0};return a.jsx("div",{ref:c,style:h,className:n,children:i({setActivatorNodeRef:l,attributes:o,listeners:s,isDragging:f})})},Jk=T.memo(t=>{const{discussionGuide:e,moderatorStatus:n,onSectionSelect:r,onSetPosition:i,onSave:o,showProgress:s=!0,collapsible:c=!0,defaultExpanded:l=!1,className:u,onDownload:d,isDownloading:f=!1,focusGroupId:h,onEditingChange:p}=t,v=typeof e=="string",m=g.useMemo(()=>v?null:e,[e,v]),[y,b]=g.useState(new Set),[x,w]=g.useState(null),[S,C]=g.useState(null),[_,A]=g.useState(!1),[j,N]=g.useState(null),[k,O]=g.useState(""),[E,R]=g.useState(null),D=hhe(R2(Xk,{activationConstraint:{distance:6}}),R2(Yk,{coordinateGetter:Dpe}));g.useEffect(()=>{p&&p(!!x)},[x,p]),g.useEffect(()=>{if(x&&m){const P=m.sections.find(H=>H.id===x);P&&!S&&C({...P})}},[m,x,S]);const G=P=>{w(P.id),C({...P}),b(H=>new Set(H).add(P.id))},L=()=>{w(null),C(null)},z=g.useCallback(P=>{C(H=>H&&{...H,...P})},[]),M=g.useCallback((P,H,ee)=>{C(re=>{if(!re)return re;const Z={...re};if(ee==="question"&&Z.questions){if(Z.questions.findIndex(Ae=>Ae.id===P)!==-1)return Z.questions=Z.questions.map(Ae=>Ae.id===P?{...Ae,...H}:Ae),Z}else if(ee==="activity"&&Z.activities&&Z.activities.findIndex(Ae=>Ae.id===P)!==-1)return Z.activities=Z.activities.map(Ae=>Ae.id===P?{...Ae,...H}:Ae),Z;return Z.subsections&&(Z.subsections=Z.subsections.map(Se=>{const Ae={...Se};return ee==="question"&&Ae.questions?Ae.questions.findIndex(Ve=>Ve.id===P)!==-1&&(Ae.questions=Ae.questions.map(Ve=>Ve.id===P?{...Ve,...H}:Ve)):ee==="activity"&&Ae.activities&&Ae.activities.findIndex(Ve=>Ve.id===P)!==-1&&(Ae.activities=Ae.activities.map(Ve=>Ve.id===P?{...Ve,...H}:Ve)),Ae})),Z})},[]),$=P=>{if(!S)return;const H={id:`${P}-${Date.now()}`,content:`New ${P}`,type:P==="question"?"open_ended":"discussion",time_limit:void 0},ee={...S};P==="question"?ee.questions=[...ee.questions||[],H]:ee.activities=[...ee.activities||[],H],C(ee)},Q=(P,H)=>{if(!S||!S.subsections)return;const ee={id:`${H}-${Date.now()}`,content:`New ${H}`,type:H==="question"?"open_ended":"discussion",time_limit:void 0},re=[...S.subsections],Z={...re[P]};H==="question"?Z.questions=[...Z.questions||[],ee]:Z.activities=[...Z.activities||[],ee],re[P]=Z,C(Se=>Se&&{...Se,subsections:re})},q=()=>{if(!S)return;const P={id:`subsection-${Date.now()}`,title:"New Subsection",questions:[],activities:[]},H=[...S.subsections||[],P];C(ee=>ee&&{...ee,subsections:H})},te=P=>{if(!S||!S.subsections)return;const H=S.subsections.filter((ee,re)=>re!==P);C(ee=>ee&&{...ee,subsections:H})},xe=(P,H)=>{var re,Z;if(!S)return;const ee={...S};H==="question"?ee.questions=(re=ee.questions)==null?void 0:re.filter(Se=>Se.id!==P):ee.activities=(Z=ee.activities)==null?void 0:Z.filter(Se=>Se.id!==P),C(ee)},B=async()=>{if(!(!S||!m||!o)){A(!0);try{const P={...m,sections:m.sections.map(H=>H.id===x?S:H)};await o(P),L(),ae.success("Section updated successfully")}catch(P){console.error("Error saving section:",P),ae.error("Failed to save section")}finally{A(!1)}}},ce=P=>{b(H=>{const ee=new Set(H);return ee.has(P)?ee.delete(P):ee.add(P),ee})};g.useEffect(()=>{m&&m.sections.length>0&&b(l?new Set(m.sections.map(P=>P.id)):new Set)},[l,m]);const fe=(P,H,ee,re)=>{if(!n||n.legacy_format)return null;const Z=n.moderator_position;if(Z.section_index!==P)return Z.section_index>P?"completed":null;if(re!==void 0){if(Z.subsection_index===void 0)return null;if(Z.subsection_index!==re)return Z.subsection_index>re?"completed":null}else if(Z.subsection_index!==void 0)return"completed";return Z.item_type!==ee?ee==="activity"&&Z.item_type==="question"?"completed":null:Z.item_index===H?"current":Z.item_index>H?"completed":null},U=(P,H)=>P===`New ${H}`,ue=g.useCallback((P,H,ee)=>{if(H<0||H>=P.length||ee<0||ee>=P.length)return P;const re=[...P],[Z]=re.splice(H,1);return re.splice(ee,0,Z),re},[]),oe=g.useCallback((P,H)=>H>0,[]),ne=g.useCallback((P,H)=>H{if(!S||!S.subsections)return;const H=S.subsections;if(oe(H,P)){const ee=ue(H,P,P-1);C(re=>re&&{...re,subsections:ee})}},[S,oe,ue]),K=g.useCallback(P=>{if(!S||!S.subsections)return;const H=S.subsections;if(ne(H,P)){const ee=ue(H,P,P+1);C(re=>re&&{...re,subsections:ee})}},[S,ne,ue]),et=g.useCallback((P,H)=>{N(P),O(H)},[]),Me=g.useCallback(()=>{N(null),O("")},[]),ut=g.useCallback(()=>{if(!j||!S||!S.subsections)return;const P=S.subsections.map(H=>H.id===j?{...H,title:k.trim()}:H);C(H=>H&&{...H,subsections:P}),Me()},[j,S,k,Me]);g.useCallback((P,H,ee,re)=>{if(!S)return;const Z=H==="question"?"questions":"activities";if(re!==void 0){const Se=S.subsections||[];if(re>=0&&reFe&&{...Fe,subsections:Be})}}}else{const Se=S[Z]||[];if(oe(Se,ee)){const Ae=ue(Se,ee,ee-1);C(Ie=>Ie&&{...Ie,[Z]:Ae})}}},[S,oe,ue]),g.useCallback((P,H,ee,re)=>{if(!S)return;const Z=H==="question"?"questions":"activities";if(re!==void 0){const Se=S.subsections||[];if(re>=0&&reFe&&{...Fe,subsections:Be})}}}else{const Se=S[Z]||[];if(ne(Se,ee)){const Ae=ue(Se,ee,ee+1);C(Ie=>Ie&&{...Ie,[Z]:Ae})}}},[S,ne,ue]);const qe=g.useCallback(({active:P})=>{R(String(P.id))},[]),Pt=g.useCallback(P=>{if(!S)return;const{active:H,over:ee}=P;if(!ee)return;const re=H.data.current,Z=ee.data.current;if(!re||!Z)return;const Se=re.containerId,Ae=Z.type==="container"?String(ee.id):Z.containerId;Se!==Ae&&(re.kind!==Z.kind||re.sectionId!==Z.sectionId||C(Ie=>{var Ve,Be;if(!Ie)return Ie;try{const Fe=qC(Ie,Se),nt=qC(Ie,Ae),Ne=Fe.findIndex(cn=>cn.id===re.itemId);if(Ne===-1)return Ie;const Nt=Z.type==="item"?nt.findIndex(cn=>cn.id===Z.itemId):nt.length,pn=Fe[Ne],Je=Fe.slice();Je.splice(Ne,1);const rt=nt.slice(),jt=Math.max(0,Math.min(Nt,rt.length));rt.splice(jt,0,pn);const Bt={...Ie},Dt=By(Se),Jt=Dt.kind==="q"?"questions":"activities";Dt.subsectionId?Bt.subsections=(Ve=Bt.subsections)==null?void 0:Ve.map(cn=>cn.id===Dt.subsectionId?{...cn,[Jt]:Je}:cn):Bt[Jt]=Je;const en=By(Ae),Nn=en.kind==="q"?"questions":"activities";return en.subsectionId?Bt.subsections=(Be=Bt.subsections)==null?void 0:Be.map(cn=>cn.id===en.subsectionId?{...cn,[Nn]:rt}:cn):Bt[Nn]=rt,Bt}catch(Fe){return console.error("Error in drag over:",Fe),Ie}}))},[S]),F=g.useCallback(P=>{R(null);const{active:H,over:ee}=P;if(!ee||!S)return;const re=H.data.current,Z=ee.data.current;if(!re||!Z)return;const Se=re.containerId,Ae=Z.type==="container"?String(ee.id):Z.containerId;Se===Ae&&Z.type==="item"&&C(Ie=>{var Ve;if(!Ie)return Ie;try{const Be=qC(Ie,Se),Fe=Be.findIndex(rt=>rt.id===re.itemId),nt=Be.findIndex(rt=>rt.id===Z.itemId);if(Fe===-1||nt===-1||Fe===nt)return Ie;const Ne=zpe(Be,Fe,nt),Nt={...Ie},pn=By(Se),Je=pn.kind==="q"?"questions":"activities";return pn.subsectionId?Nt.subsections=(Ve=Nt.subsections)==null?void 0:Ve.map(rt=>rt.id===pn.subsectionId?{...rt,[Je]:Ne}:rt):Nt[Je]=Ne,Nt}catch(Be){return console.error("Error in drag end:",Be),Ie}})},[S]),J=g.useCallback(()=>{R(null)},[]),ie=(P,H,ee,re,Z,Se)=>{var pn,Je,rt,jt,Bt,Dt;const Ae=m==null?void 0:m.sections[H],Ie=x===(Ae==null?void 0:Ae.id),Ve=fe(H,ee,re,Z),Be=Ve==="current",Fe=Ve==="completed",Ne=(Jt=>{var en,Nn;return((Nn=(en=Jt.metadata)==null?void 0:en.visual_asset)==null?void 0:Nn.filename)||null})(P),Nt=U(P.content,re);if(Ie){const Jt=Se?Uh(Se,P.id):`item-${P.id}`,en=Se?{type:"item",containerId:Se,kind:re==="question"?"q":"a",sectionId:(Ae==null?void 0:Ae.id)||"",subsectionId:Z!==void 0&&((Je=(pn=Ae==null?void 0:Ae.subsections)==null?void 0:pn[Z])==null?void 0:Je.id)||null,itemId:P.id,index:ee}:void 0;return a.jsx(Gpe,{id:Jt,disabled:!Se,className:"mb-2",data:en,children:({setActivatorNodeRef:Nn,attributes:cn,listeners:V,isDragging:ke})=>{var Ce,Ke,Qe,ot,Ft;return a.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg border bg-white border-blue-200",children:[a.jsx("button",{ref:Nn,...cn,...V,className:"flex-shrink-0 h-8 w-8 inline-flex items-center justify-center rounded-md hover:bg-gray-50 cursor-grab active:cursor-grabbing","aria-label":"Drag to reorder",children:a.jsx(Gee,{className:"h-4 w-4 text-gray-500"})}),a.jsxs("div",{className:"flex-1 min-w-0 space-y-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(On,{variant:"outline",className:"text-xs",children:re==="activity"?a.jsxs(a.Fragment,{children:[a.jsx(xa,{className:"h-3 w-3 mr-1"}),typeof P.type=="string"?P.type.replace("_"," "):String(P.type||"unknown")]}):a.jsxs(a.Fragment,{children:[a.jsx(Is,{className:"h-3 w-3 mr-1"}),typeof P.type=="string"?P.type.replace("_"," "):String(P.type||"unknown")]})}),P.time_limit&&a.jsxs("div",{className:"flex items-center gap-1 text-xs text-slate-500",children:[a.jsx(dm,{className:"h-3 w-3"}),a.jsx(Kt,{type:"number",value:P.time_limit,onChange:tt=>M(P.id,{time_limit:parseInt(tt.target.value)||void 0},re),className:"w-16 h-6 text-xs",placeholder:"min"}),"min"]})]}),a.jsx(vt,{value:Nt?"":P.content,onChange:tt=>M(P.id,{content:tt.target.value},re),placeholder:Nt?P.content:"Enter content...",className:"min-h-[60px]"}),re==="question"&&a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium text-slate-700 mb-1 block",children:"Probe Questions (one per line)"}),a.jsx(vt,{value:((Ce=P.probes)==null?void 0:Ce.join(` +`))||"",onChange:tt=>{const Zt=tt.target.value.trim()?tt.target.value.split(` +`).filter($t=>$t.trim()):[];M(P.id,{probes:Zt},re)},placeholder:"Enter probe questions, one per line...",className:"min-h-[40px]"})]}),(((Ke=P.metadata)==null?void 0:Ke.image_url)||((Qe=P.metadata)==null?void 0:Qe.image_id)||Ne)&&a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Sp,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Visual Aid"})]}),(ot=P.metadata)!=null&&ot.image_url?a.jsx("img",{src:P.metadata.image_url,alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):(Ft=P.metadata)!=null&&Ft.image_id&&h?a.jsx("img",{src:gt.getAssetUrl(h,P.metadata.image_id),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):Ne&&h?a.jsx("img",{src:gt.getAssetUrl(h,Ne),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):null]})]}),a.jsx("div",{className:"flex-shrink-0",children:a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>xe(P.id,re),className:"h-8 w-8 p-0 text-red-600 hover:text-red-700",children:a.jsx(Qn,{className:"h-3 w-3"})})})]})}},`edit-item-${P.id}`)}return a.jsxs("div",{className:Le("flex items-start gap-3 p-3 rounded-lg border transition-colors",Be&&"bg-blue-50 border-blue-200",Fe&&"bg-green-50 border-green-200",!Be&&!Fe&&"bg-slate-50 border-slate-200",r&&"cursor-pointer hover:bg-slate-100"),onClick:()=>r==null?void 0:r(m.sections[H].id,P.id),children:[a.jsx("div",{className:"flex-shrink-0 mt-1",children:Fe?a.jsx(ON,{className:"h-4 w-4 text-green-600"}):Be?a.jsx(PB,{className:"h-4 w-4 text-blue-600"}):a.jsx(IN,{className:"h-4 w-4 text-slate-400"})}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[a.jsx(On,{variant:"outline",className:"text-xs whitespace-nowrap",children:re==="activity"?a.jsxs(a.Fragment,{children:[a.jsx(xa,{className:"h-3 w-3 mr-1"}),typeof P.type=="string"?P.type.replace("_"," "):String(P.type||"unknown")]}):a.jsxs(a.Fragment,{children:[a.jsx(Is,{className:"h-3 w-3 mr-1"}),typeof P.type=="string"?P.type.replace("_"," "):String(P.type||"unknown")]})}),P.time_limit&&a.jsxs("div",{className:"flex items-center gap-1 text-xs text-slate-500 whitespace-nowrap",children:[a.jsx(dm,{className:"h-3 w-3"}),P.time_limit," min"]}),i&&a.jsxs(se,{size:"sm",variant:"ghost",onClick:Jt=>{Jt.stopPropagation();const en=m.sections[H],Nn=re==="activity"?`Activity ${ee+1}`:`Question ${ee+1}`;i(en.id,P.id,P.content,en.title,Nn,re,P.metadata)},className:"h-6 px-2 ml-auto",children:[a.jsx(Ny,{className:"h-3 w-3 mr-1"}),"Set Position"]})]}),a.jsx("p",{className:"text-sm text-slate-700 whitespace-pre-wrap",children:P.content}),P.probes&&P.probes.length>0&&a.jsxs("div",{className:"mt-2 pl-4 border-l-2 border-slate-200",children:[a.jsx("p",{className:"text-xs font-medium text-slate-600 mb-1",children:"Probe Questions:"}),a.jsx("ul",{className:"space-y-1",children:P.probes.map((Jt,en)=>a.jsxs("li",{className:"text-xs text-slate-600",children:["• ",Jt]},en))})]}),(((rt=P.metadata)==null?void 0:rt.image_url)||((jt=P.metadata)==null?void 0:jt.image_id)||Ne)&&a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Sp,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Visual Aid"})]}),(Bt=P.metadata)!=null&&Bt.image_url?a.jsx("img",{src:P.metadata.image_url,alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):(Dt=P.metadata)!=null&&Dt.image_id&&h?a.jsx("img",{src:gt.getAssetUrl(h,P.metadata.image_id),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):Ne&&h?a.jsx("img",{src:gt.getAssetUrl(h,Ne),alt:"Visual aid for item",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):null]})]})]},P.id)},ye=(P,H)=>{var Ae,Ie,Ve,Be,Fe,nt;const ee=y.has(P.id),re=x===P.id,Z=re?S:P,Se=(n==null?void 0:n.moderator_position.section_index)===H;return a.jsxs("div",{className:Le("border rounded-lg overflow-hidden transition-colors",Se&&"border-blue-500 shadow-md",!Se&&"border-slate-200"),children:[a.jsxs("div",{className:Le("px-4 py-3 flex items-center justify-between cursor-pointer hover:bg-slate-50 transition-colors",Se&&"bg-blue-50"),onClick:()=>!re&&ce(P.id),children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("div",{className:"transition-transform",style:{transform:ee?"rotate(90deg)":"rotate(0deg)"},children:a.jsx(po,{className:"h-5 w-5 text-slate-500"})}),a.jsx("h3",{className:"font-semibold text-slate-800",children:re?a.jsx(Kt,{value:Z.title,onChange:Ne=>z({title:Ne.target.value}),onClick:Ne=>Ne.stopPropagation(),className:"font-semibold"}):Z.title}),Se&&a.jsx(On,{variant:"default",className:"text-xs",children:"Current"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[o&&!re&&a.jsx(se,{size:"sm",variant:"ghost",onClick:Ne=>{Ne.stopPropagation(),G(P)},className:"h-8 px-2",children:a.jsx($A,{className:"h-3 w-3"})}),re&&a.jsxs("div",{className:"flex items-center gap-2",onClick:Ne=>Ne.stopPropagation(),children:[a.jsxs(se,{size:"sm",variant:"default",onClick:B,disabled:_,className:"h-8",children:[_?a.jsx(No,{className:"h-3 w-3 animate-spin"}):a.jsx(MN,{className:"h-3 w-3"}),a.jsx("span",{className:"ml-1",children:"Save"})]}),a.jsxs(se,{size:"sm",variant:"ghost",onClick:L,disabled:_,className:"h-8",children:[a.jsx(Mi,{className:"h-3 w-3"}),a.jsx("span",{className:"ml-1",children:"Cancel"})]})]})]})]}),ee&&a.jsxs("div",{className:"px-4 py-3 border-t border-slate-200 space-y-4",children:[Z.content&&a.jsx("div",{className:"prose prose-sm max-w-none",children:re?a.jsx(vt,{value:Z.content,onChange:Ne=>z({content:Ne.target.value}),placeholder:"Section introduction or context...",className:"min-h-[80px] w-full"}):a.jsx("p",{className:"text-slate-700",children:Z.content})}),Z.activities&&Z.activities.length>0||re?a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h5",{className:"font-medium text-slate-700 flex items-center gap-2",children:[a.jsx(xa,{className:"h-4 w-4"}),"Activities"]}),re&&a.jsxs(se,{size:"sm",variant:"outline",onClick:()=>$("activity"),className:"h-7",children:[a.jsx(xa,{className:"h-3 w-3 mr-1"}),"Add Activity"]})]}),a.jsx(Jv,{containerId:Yu(Z.id,"a"),sectionId:Z.id,subsectionId:null,kind:"a",className:"min-h-[2rem]",children:a.jsx(Qv,{items:((Ae=Z.activities)==null?void 0:Ae.map(Ne=>Uh(Yu(Z.id,"a"),Ne.id)))||[],strategy:Yv,children:a.jsx("div",{className:"space-y-2",children:(Ie=Z.activities)==null?void 0:Ie.map((Ne,Nt)=>ie(Ne,H,Nt,"activity",void 0,Yu(Z.id,"a")))})})})]}):null,Z.questions&&Z.questions.length>0||re?a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h5",{className:"font-medium text-slate-700 flex items-center gap-2",children:[a.jsx(Is,{className:"h-4 w-4"}),"Questions"]}),re&&a.jsxs(se,{size:"sm",variant:"outline",onClick:()=>$("question"),className:"h-7",children:[a.jsx(Is,{className:"h-3 w-3 mr-1"}),"Add Question"]})]}),a.jsx(Jv,{containerId:Yu(Z.id,"q"),sectionId:Z.id,subsectionId:null,kind:"q",className:"min-h-[2rem]",children:a.jsx(Qv,{items:((Ve=Z.questions)==null?void 0:Ve.map(Ne=>Uh(Yu(Z.id,"q"),Ne.id)))||[],strategy:Yv,children:a.jsx("div",{className:"space-y-2",children:(Be=Z.questions)==null?void 0:Be.map((Ne,Nt)=>ie(Ne,H,Nt,"question",void 0,Yu(Z.id,"q")))})})})]}):null,re&&a.jsx("div",{className:"space-y-2",children:a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h5",{className:"font-medium text-slate-700 flex items-center gap-2",children:[a.jsx(Ny,{className:"h-4 w-4"}),"Subsections"]}),a.jsxs(se,{size:"sm",variant:"outline",onClick:q,className:"h-7",children:[a.jsx(Ny,{className:"h-3 w-3 mr-1"}),"Add Subsection"]})]})}),Z.subsections&&Z.subsections.length>0&&a.jsx("div",{className:"space-y-3 ml-4",children:Z.subsections.map((Ne,Nt)=>{var pn,Je,rt,jt;return a.jsxs("div",{className:"border-l-2 border-slate-200 pl-4",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[re&&a.jsxs("div",{className:"flex flex-col gap-1",children:[a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>je(Nt),disabled:!oe(Z.subsections||[],Nt),className:"h-7 w-7 p-0",title:"Move subsection up",children:a.jsx(qf,{className:"h-4 w-4"})}),a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>K(Nt),disabled:!ne(Z.subsections||[],Nt),className:"h-7 w-7 p-0",title:"Move subsection down",children:a.jsx(yl,{className:"h-4 w-4"})})]}),re&&j===Ne.id?a.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[a.jsx(Kt,{value:k,onChange:Bt=>O(Bt.target.value),className:"flex-1",onKeyDown:Bt=>{Bt.key==="Enter"?ut():Bt.key==="Escape"&&Me()},autoFocus:!0}),a.jsx(se,{size:"sm",onClick:ut,children:a.jsx(Io,{className:"h-3 w-3"})}),a.jsx(se,{size:"sm",variant:"outline",onClick:Me,children:a.jsx(Mi,{className:"h-3 w-3"})})]}):a.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[a.jsx("h5",{className:Le("font-medium text-slate-700",re&&"cursor-pointer hover:text-blue-600"),onClick:()=>re&&et(Ne.id,Ne.title),children:Ne.title}),re&&a.jsxs(a.Fragment,{children:[a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>et(Ne.id,Ne.title),className:"h-6 w-6 p-0 opacity-60 hover:opacity-100",children:a.jsx($A,{className:"h-3 w-3"})}),a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>te(Nt),className:"h-6 w-6 p-0 opacity-60 hover:opacity-100 text-red-600 hover:text-red-700",title:"Delete subsection",children:a.jsx(Qn,{className:"h-3 w-3"})})]})]})]}),Ne.questions&&Ne.questions.length>0||re?a.jsxs("div",{className:"space-y-2 mb-3",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h6",{className:"text-sm font-medium text-slate-600 flex items-center gap-1",children:[a.jsx(Is,{className:"h-3 w-3"}),"Questions"]}),re&&a.jsxs(se,{size:"sm",variant:"outline",onClick:()=>Q(Nt,"question"),className:"h-6",children:[a.jsx(Is,{className:"h-3 w-3 mr-1"}),"Add Question"]})]}),a.jsx(Jv,{containerId:Qu(Z.id,Ne.id,"q"),sectionId:Z.id,subsectionId:Ne.id,kind:"q",className:"min-h-[2rem]",children:a.jsx(Qv,{items:((pn=Ne.questions)==null?void 0:pn.map(Bt=>Uh(Qu(Z.id,Ne.id,"q"),Bt.id)))||[],strategy:Yv,children:a.jsx("div",{className:"space-y-2",children:(Je=Ne.questions)==null?void 0:Je.map((Bt,Dt)=>ie(Bt,H,Dt,"question",Nt,Qu(Z.id,Ne.id,"q")))})})})]}):null,Ne.activities&&Ne.activities.length>0||re?a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("h6",{className:"text-sm font-medium text-slate-600 flex items-center gap-1",children:[a.jsx(xa,{className:"h-3 w-3"}),"Activities"]}),re&&a.jsxs(se,{size:"sm",variant:"outline",onClick:()=>Q(Nt,"activity"),className:"h-6",children:[a.jsx(xa,{className:"h-3 w-3 mr-1"}),"Add Activity"]})]}),a.jsx(Jv,{containerId:Qu(Z.id,Ne.id,"a"),sectionId:Z.id,subsectionId:Ne.id,kind:"a",className:"min-h-[2rem]",children:a.jsx(Qv,{items:((rt=Ne.activities)==null?void 0:rt.map(Bt=>Uh(Qu(Z.id,Ne.id,"a"),Bt.id)))||[],strategy:Yv,children:a.jsx("div",{className:"space-y-2",children:(jt=Ne.activities)==null?void 0:jt.map((Bt,Dt)=>ie(Bt,H,Dt,"activity",Nt,Qu(Z.id,Ne.id,"a")))})})})]}):null]},Ne.id)})}),(((Fe=P.metadata)==null?void 0:Fe.image_url)||((nt=P.metadata)==null?void 0:nt.image_id))&&a.jsxs("div",{className:"mt-4",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Sp,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Visual Aid"})]}),P.metadata.image_url?a.jsx("img",{src:P.metadata.image_url,alt:"Visual aid for section",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):P.metadata.image_id&&h?a.jsx("img",{src:gt.getAssetUrl(h,P.metadata.image_id),alt:"Visual aid for section",className:"max-w-[400px] max-h-[400px] object-contain rounded-lg border border-slate-200"}):null]})]})]},P.id)};if(v)return a.jsxs("div",{className:Le("space-y-4",u),children:[s&&n&&a.jsxs("div",{className:"mb-4",children:[a.jsxs("div",{className:"flex items-center justify-between text-sm text-slate-600 mb-2",children:[a.jsx("span",{children:"Progress"}),a.jsxs("span",{children:[Math.round(n.progress),"%"]})]}),a.jsx("div",{className:"w-full bg-slate-200 rounded-full h-2",children:a.jsx("div",{className:"bg-blue-600 h-2 rounded-full transition-all",style:{width:`${n.progress}%`}})})]}),a.jsxs("div",{className:"bg-white rounded-lg border border-slate-200 p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsx("h2",{className:"text-xl font-semibold text-slate-800",children:"Discussion Guide"}),d&&a.jsxs(se,{size:"sm",variant:"outline",onClick:d,disabled:f,children:[f?a.jsx(No,{className:"h-4 w-4 animate-spin mr-2"}):a.jsx(ol,{className:"h-4 w-4 mr-2"}),"Download"]})]}),a.jsx("div",{className:"prose prose-sm max-w-none",children:a.jsx("pre",{className:"whitespace-pre-wrap text-sm text-slate-700 font-sans",children:e})}),n&&a.jsxs("div",{className:"mt-6 p-4 bg-blue-50 rounded-lg border border-blue-200",children:[a.jsx("h3",{className:"font-medium text-blue-900 mb-2",children:"Current Position"}),a.jsx("p",{className:"text-sm text-blue-800",children:n.current_section}),n.current_item&&a.jsx("p",{className:"text-sm text-blue-700 mt-1",children:n.current_item})]})]})]});if(!m)return a.jsx("div",{className:Le("bg-slate-50 rounded-lg p-8 text-center",u),children:a.jsx("p",{className:"text-slate-600",children:"No discussion guide available"})});const Ee=a.jsx(gpe,{sensors:D,collisionDetection:Hpe,modifiers:[Bpe,Fpe],onDragStart:qe,onDragOver:Pt,onDragEnd:F,onDragCancel:J,autoScroll:!0,children:a.jsxs("div",{className:"space-y-4",children:[s&&n&&a.jsxs("div",{className:"mb-4",children:[a.jsxs("div",{className:"flex items-center justify-between text-sm text-slate-600 mb-2",children:[a.jsx("span",{children:"Overall Progress"}),a.jsxs("span",{children:[Math.round(n.progress),"%"]})]}),a.jsx("div",{className:"w-full bg-slate-200 rounded-full h-2",children:a.jsx("div",{className:"bg-blue-600 h-2 rounded-full transition-all",style:{width:`${n.progress}%`}})}),a.jsxs("div",{className:"flex items-center justify-between text-xs text-slate-500 mt-2",children:[a.jsxs("span",{children:["Section ",n.moderator_position.section_index+1," of ",n.total_sections]}),a.jsxs("span",{children:[Math.round(n.section_progress),"% of current section"]})]})]}),a.jsx("div",{className:"space-y-3",children:m.sections.map((P,H)=>ye(P,H))})]})});return c?a.jsxs(Wg,{defaultOpen:l,className:u,children:[a.jsx(qg,{asChild:!0,children:a.jsxs("div",{className:"flex items-center justify-between p-4 bg-white rounded-lg border border-slate-200 cursor-pointer hover:bg-slate-50 transition-colors",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(po,{className:"h-5 w-5 text-slate-500 transition-transform data-[state=open]:rotate-90"}),a.jsx("h2",{className:"text-lg font-semibold text-slate-800",children:m.title||"Discussion Guide"}),a.jsxs(On,{variant:"outline",className:"text-xs",children:[m.total_duration," min"]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[n&&a.jsxs(On,{variant:n.progress===100?"success":"default",className:"text-xs",children:[Math.round(n.progress),"% Complete"]}),d&&a.jsx(se,{size:"sm",variant:"outline",onClick:P=>{P.stopPropagation(),d()},disabled:f,children:f?a.jsx(No,{className:"h-4 w-4 animate-spin"}):a.jsx(ol,{className:"h-4 w-4"})})]})]})}),a.jsx(Yg,{className:"mt-4",children:Ee})]}):a.jsx("div",{className:u,children:Ee})});Jk.displayName="DiscussionGuideViewer";const El="all",Vpe=Ue.object({researchBrief:Ue.string().min(10,{message:"Research brief must be at least 10 characters."}),focusGroupName:Ue.string().min(3,{message:"Focus group name must be at least 3 characters."}),discussionTopics:Ue.string().min(10,{message:"Discussion topics are required."}),duration:Ue.string().min(1,{message:"Duration is required."}),llm_model:Ue.string().optional(),reasoning_effort:Ue.string().optional(),verbosity:Ue.string().optional()});function Kpe({draftToEdit:t,onDraftSaved:e,preSelectedParticipants:n=[]}={}){console.log("FocusGroupModerator component rendering, draftToEdit:",t);const r=ur();Ui();const{setPreviousRoute:i,navigationState:o,clearNavigationState:s}=Ug(),[c,l]=g.useState("setup"),[u,d]=g.useState(!1),[f,h]=g.useState(!1),[p,v]=g.useState(!1),[m,y]=g.useState(null),[b,x]=g.useState(null),[w,S]=g.useState(!1),C=g.useRef(m);C.current=m;const _=g.useRef(!1),A=I=>I&&typeof I=="object"&&I.title&&I.sections,[j,N]=g.useState([]),[k,O]=g.useState([]),[E,R]=g.useState(!1),[D,G]=g.useState([]),[L,z]=g.useState(!1),[M,$]=g.useState(!1),[Q,q]=g.useState(!1),[te,xe]=g.useState([]),[B,ce]=g.useState(!1),[fe,U]=g.useState("");T.useEffect(()=>{console.log("isCopyGuideModalOpen state changed to:",Q)},[Q]),T.useEffect(()=>{console.log("FocusGroupModerator rendered - Modal state:",Q,"Available focus groups:",te.length)});const[ue,oe]=g.useState([]),[ne,je]=g.useState(El),[K,et]=g.useState(!1),[Me,ut]=g.useState(""),[qe,Pt]=g.useState(null),[F,J]=g.useState(""),[ie,ye]=g.useState(""),[Ee,P]=g.useState(!1),[H,ee]=g.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[]}),[re,Z]=g.useState({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[]}),[Se,Ae]=g.useState("idle"),[Ie,Ve]=g.useState(null),[Be,Fe]=g.useState(0),nt=g.useRef(null),Ne=g.useRef(!1),Nt=g.useRef(!1),pn=I=>{i("/focus-groups",{focusGroupId:b,focusGroupTab:"participants",isNewFocusGroup:!t,focusGroupData:{name:Ce.getValues("name"),description:Ce.getValues("description"),selectedParticipants:j,discussionGuide:m}}),r(`/synthetic-users/${I.id}`)},Je=I=>{const X={age:new Set,gender:new Set,occupation:new Set,location:new Set,techSavviness:new Set,ethnicity:new Set};return I.forEach(Y=>{if(Y.age&&X.age.add(Y.age),Y.gender&&X.gender.add(Y.gender),Y.occupation&&X.occupation.add(Y.occupation),Y.location&&X.location.add(Y.location),Y.techSavviness!==void 0){const pe=Y.techSavviness<30?"Low (0-30)":Y.techSavviness<70?"Medium (31-70)":"High (71-100)";X.techSavviness.add(pe)}Y.ethnicity&&X.ethnicity.add(Y.ethnicity)}),{age:Array.from(X.age).sort(),gender:Array.from(X.gender).sort(),occupation:Array.from(X.occupation).sort(),location:Array.from(X.location).sort(),techSavviness:Array.from(X.techSavviness).sort((Y,pe)=>{const Pe=["Low (0-30)","Medium (31-70)","High (71-100)"];return Pe.indexOf(Y)-Pe.indexOf(pe)}),ethnicity:Array.from(X.ethnicity).sort()}},rt=I=>{const X={...re};X[I]=[];const Y=D.filter(pe=>{let Pe=!0;return ne!==El&&(Pe=!1,pe.folder_ids&&Array.isArray(pe.folder_ids)&&(Pe=pe.folder_ids.includes(ne)),!Pe&&(pe.folder_id===ne||pe.folderId===ne)&&(Pe=!0)),Pe?Object.entries(X).every(([me,dt])=>{if(dt.length===0)return!0;const st=me;if(st==="techSavviness"&&pe.techSavviness!==void 0){const Wt=pe.techSavviness<30?"Low (0-30)":pe.techSavviness<70?"Medium (31-70)":"High (71-100)";return dt.includes(Wt)}else{if(st==="age"&&pe.age)return dt.includes(pe.age);if(st==="gender"&&pe.gender)return dt.includes(pe.gender);if(st==="occupation"&&pe.occupation)return dt.includes(pe.occupation);if(st==="location"&&pe.location)return dt.includes(pe.location);if(st==="ethnicity"&&pe.ethnicity)return dt.includes(pe.ethnicity)}return!0}):!1});return Je(Y)},jt=()=>{P(!1),setTimeout(()=>{ee({...re})},0)},Bt=()=>{Z({age:[],gender:[],occupation:[],location:[],techSavviness:[],ethnicity:[]})},Dt=(I,X)=>{Z(Y=>{const pe={...Y};return pe[I].includes(X)?pe[I]=pe[I].filter(Pe=>Pe!==X):pe[I]=[...pe[I],X],pe})},Jt=async()=>{try{const Y=(await Rs.getAll()).data.map(pe=>({...pe,id:pe._id}));return oe(Y),Y}catch(I){return console.error("Error fetching folders:",I),ae.error("Failed to load folders"),oe([]),[]}},en=async()=>{if(!Me.trim()){ae.error("Please enter a folder name");return}try{const I=await Rs.create({name:Me.trim()});await Jt(),ut(""),et(!1),ae.success(`Folder "${Me}" created`)}catch(I){console.error("Error creating folder:",I),ae.error("Failed to create folder")}},Nn=()=>{ut(""),et(!1)},cn=I=>{Pt(I),J(I.name)},V=async()=>{if(!qe||!F.trim()){Pt(null);return}try{await Rs.update(qe._id,{name:F.trim()}),await Jt(),Pt(null),ae.success(`Folder renamed to "${F}"`)}catch(I){console.error("Error renaming folder:",I),ae.error("Failed to rename folder"),Pt(null)}},ke=()=>{Pt(null),J("")};g.useEffect(()=>{const I=async()=>{z(!0);try{const Y=await $r.getAll();console.log("Fetched personas for FocusGroupModerator:",Y.data),Array.isArray(Y.data)&&Y.data.length>0?G(Y.data):(console.warn("No personas returned from API or invalid format",Y.data),ae.warning("No participants available"))}catch(Y){console.error("Error fetching personas:",Y),ae.error("Failed to load participants")}finally{z(!1)}};(async()=>{await Promise.all([Jt(),I()])})()},[]),console.log("About to initialize form with useForm hook");const Ce=Nw({resolver:Tw(Vpe),defaultValues:{researchBrief:"",focusGroupName:"",discussionTopics:"",duration:"60",llm_model:"gemini-2.5-pro",reasoning_effort:"medium",verbosity:"medium"}});console.log("Form initialized successfully");const Ke=()=>{c!=="setup"||Nt.current||(nt.current&&clearTimeout(nt.current),nt.current=setTimeout(async()=>{if(Ne.current)return;const I=Ce.getValues(),X={name:I.focusGroupName||"",description:I.researchBrief||"",objective:I.researchBrief||"",topic:I.discussionTopics||"",duration:I.duration?parseInt(I.duration):60,llm_model:I.llm_model||"gemini-2.5-pro",reasoning_effort:I.reasoning_effort||"medium",verbosity:I.verbosity||"medium",participants:j,participants_count:j.length,status:"draft",date:new Date().toISOString(),uploadedAssets:k.map(Y=>Y.filename||Y.original_name||"unknown")};if(!(Ie&&JSON.stringify(X)===JSON.stringify(Ie))&&!(!X.name&&!X.description&&!X.topic)){Ne.current=!0,Ae("saving");try{let Y=b||(t==null?void 0:t.id)||(t==null?void 0:t._id);if(console.log("Auto-save: draftFocusGroupId =",b),console.log("Auto-save: draftToEdit ID =",(t==null?void 0:t.id)||(t==null?void 0:t._id)),console.log("Auto-save: using focusGroupId =",Y),console.log("Auto-save: llm_model in currentData =",X.llm_model),console.log("Auto-save: duration in currentData =",X.duration),Y)console.log("Auto-save: Updating existing focus group:",Y),await gt.update(Y,X),console.log("Auto-save: Updated existing draft:",Y);else{console.log("Auto-save: Creating NEW focus group (no existing ID)");const pe=await gt.create(X);Y=pe.data.focus_group_id||pe.data.id||pe.data._id,x(Y),console.log("Auto-save: Created new draft with ID:",Y)}Ve(X),Ae("saved"),Fe(0),setTimeout(()=>{Ae("idle")},2e3)}catch(Y){if(console.error("Auto-save failed:",Y),Ae("error"),Fe(pe=>pe+1),Be<3){const pe=Math.pow(2,Be)*2e3;setTimeout(()=>{Ke()},pe)}else ae.error("Auto-save failed",{description:"Your changes may not be saved. Please check your connection."})}finally{Ne.current=!1}}},2e3))},Qe=async I=>{try{R(!0);const X=await gt.getAssets(I);O(X.data.assets||[])}catch(X){console.error("Error fetching backend assets:",X),ae.error("Failed to load asset information")}finally{R(!1)}},ot=async()=>{console.log("fetchAvailableFocusGroups called");try{ce(!0);const I=await gt.getAll();console.log("Fetched focus groups:",I.data);const X=I.data.filter(Y=>Y.discussionGuide&&Y.discussionGuide!==null&&Y.discussionGuide!==""&&Y._id!==b);console.log("Focus groups with guides:",X),xe(X)}catch(I){console.error("Error fetching focus groups:",I),ae.error("Failed to load available focus groups")}finally{ce(!1)}},Ft=async I=>{try{const X=te.find(Y=>Y._id===I);if(!X||!X.discussionGuide){ae.error("Selected focus group does not have a discussion guide");return}if(y(X.discussionGuide),b)try{const Y=Ce.getValues(),pe={name:Y.focusGroupName,status:"draft",participants:j,participants_count:j.length,duration:parseInt(Y.duration||"60"),topic:Y.discussionTopics||"",description:Y.researchBrief||"",objective:Y.researchBrief||"",llm_model:Y.llm_model||"gemini-2.5-pro",reasoning_effort:Y.reasoning_effort||"medium",verbosity:Y.verbosity||"medium",discussionGuide:X.discussionGuide};await gt.update(b,pe),console.log("Draft focus group updated with copied discussion guide")}catch(Y){console.error("Failed to update focus group with copied discussion guide:",Y),ae.error("Failed to save copied discussion guide",{description:"Discussion guide copied, but draft save failed"})}q(!1),l("review"),ae.success("Discussion guide copied successfully",{description:`Copied from "${X.name}"`})}catch(X){console.error("Error copying discussion guide:",X),ae.error("Failed to copy discussion guide",{description:"An error occurred while copying the discussion guide"})}},tt=Ce.watch(),Zt=g.useRef(""),$t=g.useRef("");g.useEffect(()=>{const I=JSON.stringify(tt);c==="setup"&&I!==Zt.current&&(Zt.current=I,Ke())},[tt,c]),g.useEffect(()=>{const I=JSON.stringify(j);c==="setup"&&I!==$t.current&&($t.current=I,Ke())},[j,c]),g.useEffect(()=>(c!=="setup"&&nt.current&&clearTimeout(nt.current),()=>{nt.current&&clearTimeout(nt.current)}),[c]),g.useEffect(()=>{if(console.log("Draft loading effect - draftToEdit:",t,"draftLoadedRef.current:",_.current),!t){_.current=!1;return}if(t&&!_.current){console.log("Loading draft focus group:",t),Nt.current=!0,_.current=!0;const I=t.id||t._id;x(I),console.log("Setting draft ID from draftToEdit:",I),I&&Qe(I),t.name&&Ce.setValue("focusGroupName",t.name),(t.description||t.objective)&&Ce.setValue("researchBrief",t.description||t.objective||""),t.topic&&Ce.setValue("discussionTopics",t.topic),t.duration&&Ce.setValue("duration",t.duration.toString()),t.llm_model&&Ce.setValue("llm_model",t.llm_model),t.reasoning_effort&&Ce.setValue("reasoning_effort",t.reasoning_effort),t.verbosity&&Ce.setValue("verbosity",t.verbosity),t.discussionGuide&&(y(t.discussionGuide),(!o.focusGroupTab||o.previousRoute!=="/focus-groups")&&l("review")),t.participants&&Array.isArray(t.participants)&&N(t.participants);const X={name:t.name||"",description:t.description||t.objective||"",objective:t.description||t.objective||"",topic:t.topic||"",duration:t.duration||60,llm_model:t.llm_model||"gemini-2.5-pro",reasoning_effort:t.reasoning_effort||"medium",verbosity:t.verbosity||"medium",participants:t.participants||[],participants_count:(t.participants||[]).length,status:"draft",date:t.date||new Date().toISOString(),uploadedAssets:k.map(Y=>Y.filename||Y.original_name||"unknown")};Ve(X),console.log("Set lastSavedData to current draft:",X),ae.success("Draft focus group loaded",{description:"Continue editing your focus group setup"}),setTimeout(()=>{Nt.current=!1;const Y=JSON.stringify(Ce.getValues());Zt.current=Y},1e3)}},[t,Ce]),g.useEffect(()=>{n.length>0&&(console.log("Pre-selected participants received:",n),N(n),l("participants"))},[n]),g.useEffect(()=>{o.focusGroupTab&&o.previousRoute==="/focus-groups"&&setTimeout(()=>{l(o.focusGroupTab),s()},0)},[o.focusGroupTab,t,s]),g.useEffect(()=>{t||setTimeout(()=>{Nt.current=!1;const I=JSON.stringify(Ce.getValues());Zt.current=I},500)},[t,Ce]);const Xt=()=>{if(Se==="idle")return null;const X={saving:{text:"Saving...",className:"text-blue-600 bg-blue-50"},saved:{text:"All changes saved",className:"text-green-600 bg-green-50"},error:{text:"Save failed - retrying...",className:"text-red-600 bg-red-50"}}[Se];return a.jsx("div",{className:`fixed top-16 left-1/2 transform -translate-x-1/2 z-50 px-3 py-1 rounded-md text-sm font-medium border shadow-sm ${X.className}`,children:X.text})},Tn=async(I,X)=>{var Y,pe;d(!0),h(!1),v(!1);try{const Pe={name:I.focusGroupName,description:I.researchBrief,objective:I.researchBrief,topic:I.discussionTopics,duration:parseInt(I.duration),llm_model:I.llm_model,reasoning_effort:I.reasoning_effort,verbosity:I.verbosity},me=X?await gt.generateDiscussionGuideForGroup(X,Pe):await gt.generateDiscussionGuide(Pe);if(me.data&&me.data.discussionGuide)return h(!0),me.data.discussionGuide;throw new Error("Failed to generate discussion guide")}catch(Pe){console.error("Error generating discussion guide:",Pe),v(!0);let me="Unknown error occurred";throw(pe=(Y=Pe==null?void 0:Pe.response)==null?void 0:Y.data)!=null&&pe.error?me=Pe.response.data.error:Pe!=null&&Pe.message&&(me=Pe.message),me.includes("500")||me.includes("internal error")||me.includes("Internal Server Error")?ae.error("AI service temporarily unavailable",{description:"The discussion guide generator is experiencing issues. Please try again in a few minutes.",action:{label:"Retry",onClick:()=>Tn(I)}}):ae.error("Failed to generate discussion guide",{description:me,action:{label:"Retry",onClick:()=>Tn(I)}}),Pe}},Lo=()=>{d(!1),h(!1),v(!1)};async function Zn(I){try{let X=b;if(!X){const Y={name:I.focusGroupName,status:"draft",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(I.duration),topic:I.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:I.researchBrief,objective:I.researchBrief,llm_model:I.llm_model,reasoning_effort:I.reasoning_effort,verbosity:I.verbosity},pe=await gt.create(Y);X=pe.data.focus_group_id||pe.data.id||pe.data._id,x(X),console.log("Draft focus group created for discussion guide generation:",pe,"with ID:",X)}if(X)try{const Y={name:I.focusGroupName,participants:j,participants_count:j.length,duration:parseInt(I.duration),topic:I.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:I.researchBrief,objective:I.researchBrief,llm_model:I.llm_model,reasoning_effort:I.reasoning_effort,verbosity:I.verbosity};await gt.update(X,Y),console.log("Focus group updated with latest form values before guide generation"),console.log(`🔄 Updated focus group ${X} with model: ${I.llm_model}`)}catch(Y){console.error("Failed to update focus group before guide generation:",Y)}try{const Y=await Tn(I,X);y(Y);try{const pe={name:I.focusGroupName,status:"draft",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(I.duration),topic:I.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:I.researchBrief,objective:I.researchBrief,llm_model:I.llm_model,reasoning_effort:I.reasoning_effort,verbosity:I.verbosity,discussionGuide:Y};await gt.update(X,pe),console.log("Focus group updated with discussion guide"),ae.success("Progress saved as draft",{description:"Your focus group setup has been automatically saved"})}catch(pe){console.error("Failed to update focus group with discussion guide:",pe),ae.error("Failed to save draft",{description:"Discussion guide generated, but draft save failed"})}l("review"),ae.success("Discussion guide generated",{description:"Review and edit before proceeding"})}catch(Y){console.error("Discussion guide generation failed:",Y),ae.error("Discussion guide generation failed",{description:"Please go back to the setup tab and try generating again. Check your inputs and try a different AI model if the issue persists.",duration:8e3});return}}catch(X){console.error("Error in focus group creation flow:",X),ae.error("Focus group creation failed",{description:X.message||"An unexpected error occurred"})}}const Fo=(()=>{var X;const I=D.filter(Y=>{const pe=Y.name.toLowerCase().includes(ie.toLowerCase())||Y.occupation&&Y.occupation.toLowerCase().includes(ie.toLowerCase())||Y.location&&Y.location.toLowerCase().includes(ie.toLowerCase()),Pe=(H.age.length===0||H.age.includes(Y.age))&&(H.gender.length===0||H.gender.includes(Y.gender))&&(H.occupation.length===0||H.occupation.includes(Y.occupation))&&(H.location.length===0||H.location.includes(Y.location))&&(H.ethnicity.length===0||Y.ethnicity&&H.ethnicity.includes(Y.ethnicity))&&(H.techSavviness.length===0||Y.techSavviness!==void 0&&H.techSavviness.includes(Y.techSavviness<30?"Low (0-30)":Y.techSavviness<70?"Medium (31-70)":"High (71-100)"))&&!0;let me=!0;return ne!==El&&(me=!1,Y.folder_ids&&Array.isArray(Y.folder_ids)&&(me=Y.folder_ids.includes(ne)),me||(Y.folder_id===ne||Y.folderId===ne)&&(me=!0)),pe&&Pe&&me});if(console.log(`Filtered personas: ${I.length}/${D.length}`),console.log(`Selected folder: ${ne===El?"All Personas":((X=ue.find(Y=>Y._id===ne||Y.id===ne))==null?void 0:X.name)||ne}`),ne!==El){const Y=ue.find(pe=>pe._id===ne||pe.id===ne);if(Y){const pe=D.filter(Pe=>Pe.folder_ids&&Array.isArray(Pe.folder_ids)?Pe.folder_ids.includes(ne):Pe.folder_id===ne||Pe.folderId===ne);console.log(`Folder details: ${Y.name}, ID: ${Y._id}, Contains: ${pe.length} personas`),console.log("Personas in this folder:",pe.map(Pe=>Pe.name))}}return I})(),Ah=I=>{console.log("Toggling selection for participant ID:",I),N(X=>{const Y=X.includes(I);console.log("Current selection:",{id:I,isCurrentlySelected:Y,currentSelections:[...X]});const pe=Y?X.filter(Pe=>Pe!==I):[...X,I];return console.log("New selection:",pe),pe})},Uu=async()=>{try{const I=Ce.getValues(),X={name:I.focusGroupName,status:"in-progress",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(I.duration),topic:I.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),discussionGuide:m},pe=(await gt.create(X)).data;return console.log("Focus group created successfully:",pe),pe.focus_group_id}catch(I){throw console.error("Error saving focus group:",I),I}},co=g.useCallback(async()=>{if(!C.current){ae.error("No discussion guide available",{description:"Please generate a discussion guide first"});return}$(!0);try{const{downloadDiscussionGuideAsMarkdown:I}=await $se(async()=>{const{downloadDiscussionGuideAsMarkdown:Y}=await import("./discussionGuideMarkdown-eMXneipz.js");return{downloadDiscussionGuideAsMarkdown:Y}},[]),X=Ce.getValues();I(C.current,X.focusGroupName),ae.success("Discussion guide downloaded",{description:"The guide has been saved to your downloads folder"})}catch(I){console.error("Error downloading discussion guide:",I),ae.error("Download failed",{description:"Unable to download the discussion guide. Please try again."})}finally{$(!1)}},[Ce]),jh=g.useCallback(async I=>{console.log("📝 handleSaveDiscussionGuide called with:",I),w?(C.current=I,console.log("📝 Skipping discussionGuide state update during editing to preserve focus")):(y(I),ae.success("Discussion guide updated",{description:"Your changes have been saved."}))},[w]),le=g.useCallback(I=>{console.log("📝 Discussion guide editing state changed:",I),S(I),!I&&C.current&&(console.log("📝 Updating discussionGuide state after editing ended"),y(C.current))},[]),ge=g.useCallback(()=>{},[]),Ge=async()=>{if(!Ce.getValues().focusGroupName){ae.error("Missing focus group name",{description:"Please provide a name for the focus group"});return}if(!m){ae.error("Missing discussion guide",{description:"Please generate a discussion guide first"});return}if(j.length<1){ae.error("Not enough participants",{description:"Please select at least one participant for the focus group"});return}console.log("Starting focus group with participants:",j);try{ae.loading("Creating focus group...");let I;if(b){const X=Ce.getValues(),Y={name:X.focusGroupName,status:"in-progress",participants:j,participants_count:j.length,date:new Date().toISOString(),duration:parseInt(X.duration),topic:X.discussionTopics.split(",")[0].trim().toLowerCase().replace(/\s+/g,"-"),description:X.researchBrief,objective:X.researchBrief,discussionGuide:m},pe=await gt.update(b,Y);I=b,console.log("Draft focus group updated to in-progress:",pe),e&&e()}else I=await Uu();ae.dismiss(),ae.success("Focus group created successfully",{description:"The AI moderator is now running the session"}),r(`/focus-groups/${I}`)}catch(I){ae.dismiss(),I!=null&&I.message,console.error("Failed to start focus group:",I),ae.error("Failed to create focus group",{description:"Please try again or check your connection"})}};return a.jsxs(a.Fragment,{children:[a.jsx(Xt,{}),a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-6",children:[a.jsx(Xs,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"AI Focus Group Moderator"})]}),u&&a.jsx("div",{className:"mb-6",children:a.jsx(Uk,{isActive:u,isComplete:f,hasError:p,label:"Generating discussion guide",onComplete:Lo})}),a.jsxs(wl,{value:c,onValueChange:l,children:[a.jsxs(Za,{className:"grid w-full grid-cols-3 mb-6",children:[a.jsx(vn,{value:"setup",children:"Setup"}),a.jsx(vn,{value:"review",children:"Review & Edit"}),a.jsx(vn,{value:"participants",children:"Participants"})]}),a.jsxs(yn,{value:"setup",children:[a.jsx(Pw,{...Ce,children:a.jsxs("form",{onSubmit:Ce.handleSubmit(Zn),className:"space-y-6",children:[a.jsx(_t,{control:Ce.control,name:"focusGroupName",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Focus Group Name"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"e.g., Mobile App UX Evaluation",...I})}),a.jsx(zn,{children:"Give your focus group a descriptive name"}),a.jsx(St,{})]})}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx(_t,{control:Ce.control,name:"researchBrief",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Research Brief"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"Describe your research objectives...",className:"h-36",...I})}),a.jsx(zn,{children:"Provide context about what you want to learn"}),a.jsx(St,{})]})}),a.jsxs("div",{className:"space-y-6",children:[a.jsx(_t,{control:Ce.control,name:"discussionTopics",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Discussion Topics"}),a.jsx(wt,{children:a.jsx(vt,{placeholder:"List main topics to cover, separated by commas",className:"h-24",...I})}),a.jsx(zn,{children:"E.g., User experience, feature preferences, pain points"}),a.jsx(St,{})]})}),a.jsx(_t,{control:Ce.control,name:"duration",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Duration (minutes)"}),a.jsxs(Hn,{onValueChange:I.onChange,value:I.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select duration"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"30",children:"30 minutes"}),a.jsx(he,{value:"45",children:"45 minutes"}),a.jsx(he,{value:"60",children:"60 minutes"}),a.jsx(he,{value:"90",children:"90 minutes"}),a.jsx(he,{value:"120",children:"120 minutes"})]})]}),a.jsx(zn,{children:"How long should the focus group session last?"}),a.jsx(St,{})]})}),a.jsx(_t,{control:Ce.control,name:"llm_model",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"AI Model"}),a.jsxs(Hn,{onValueChange:I.onChange,value:I.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select AI model"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"gemini-2.5-pro",children:"Gemini 2.5 Pro"}),a.jsx(he,{value:"gpt-4.1",children:"GPT-4.1"}),a.jsx(he,{value:"gpt-5",children:"GPT-5"})]})]}),a.jsx(zn,{children:"Choose which AI model to use for generating responses and discussion guides"}),a.jsx(St,{})]})}),Ce.watch("llm_model")==="gpt-5"&&a.jsxs(a.Fragment,{children:[a.jsx(_t,{control:Ce.control,name:"reasoning_effort",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Reasoning Effort"}),a.jsxs(Hn,{onValueChange:I.onChange,value:I.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select reasoning effort"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"minimal",children:"Minimal - Fast responses"}),a.jsx(he,{value:"low",children:"Low - Quick thinking"}),a.jsx(he,{value:"medium",children:"Medium - Balanced (default)"}),a.jsx(he,{value:"high",children:"High - Deep reasoning"})]})]}),a.jsx(zn,{children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx("div",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx(St,{})]})}),a.jsx(_t,{control:Ce.control,name:"verbosity",render:({field:I})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Response Verbosity"}),a.jsxs(Hn,{onValueChange:I.onChange,value:I.value,children:[a.jsx(wt,{children:a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select verbosity level"})})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"low",children:"Low - Concise responses"}),a.jsx(he,{value:"medium",children:"Medium - Balanced length (default)"}),a.jsx(he,{value:"high",children:"High - Detailed responses"})]})]}),a.jsx(zn,{children:"Controls how detailed and lengthy GPT-5's responses will be"}),a.jsx("div",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx(St,{})]})})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 mb-2 block",children:"Creative Assets (Optional)"}),a.jsx(W6,{focusGroupId:b,disabled:!b,onUploadComplete:I=>{O(I)},onUploadError:I=>{console.error("Asset upload error:",I)},onAssetsChange:I=>{O(I)},maxAssets:10,maxFileSize:10,allowedTypes:["image/*","application/pdf","video/*","text/*","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],label:"Asset Upload",description:"Provide any files you wish the moderator to use in the focus group session. This could include mockups, designs, documents, or other materials for discussion.",enableRenaming:!0}),a.jsx("p",{className:"text-sm text-muted-foreground mt-2",children:"Upload visuals that you want feedback on during the session"})]})]})}),a.jsxs("div",{className:"flex justify-end gap-3 mt-6",children:[a.jsxs(se,{type:"button",variant:"outline",onClick:I=>{I.preventDefault(),I.stopPropagation(),console.log("Copy Discussion Guide button clicked"),q(!0),ot()},disabled:u,className:"min-w-32",children:[a.jsx(Bee,{className:"mr-2 h-4 w-4"}),"Copy Discussion Guide"]}),a.jsxs(se,{type:"button",onClick:I=>{I.preventDefault(),console.log("Generate Discussion Guide button clicked"),Ce.getValues(),Ce.handleSubmit(Zn)(I)},disabled:u,className:"min-w-32",children:[a.jsx(Xs,{className:"mr-2 h-4 w-4"}),u?"Generating...":"Generate Discussion Guide"]})]})]}),a.jsx(yn,{value:"review",children:a.jsxs("div",{className:"space-y-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("div",{className:"flex items-center justify-between mb-4",children:a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("h3",{className:"font-sf text-lg font-medium",children:"AI-Generated Discussion Guide"}),m&&a.jsx(On,{variant:"outline",className:"text-xs",children:A(m)?"Structured JSON":"Legacy Text"})]})}),a.jsx("div",{className:"prose max-w-none",children:m?a.jsx(Jk,{discussionGuide:m,showProgress:!1,collapsible:!0,defaultExpanded:!0,className:"border-0",onSave:jh,onDownload:co,onSectionSelect:ge,isDownloading:M,focusGroupId:b,onEditingChange:le}):a.jsx("div",{className:"bg-slate-50 p-4 rounded border text-center text-slate-600",children:p?a.jsxs("div",{children:[a.jsx("p",{className:"mb-2",children:"Discussion guide generation failed."}),a.jsxs("p",{className:"text-sm",children:["Go back to the ",a.jsx("strong",{children:"Setup"})," tab and try generating again. Check your inputs and try a different AI model if the issue persists."]})]}):a.jsx("p",{children:'No discussion guide generated yet. Complete the setup and click "Generate Discussion Guide" to create one.'})})})]})}),k.length>0&&a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:"Creative Assets"}),a.jsxs("div",{className:"space-y-3",children:[a.jsx("p",{className:"text-sm text-slate-600",children:"Assets that will be referenced in the discussion guide:"}),a.jsx("div",{className:"space-y-2",children:k.map((I,X)=>{var pe;const Y=I.user_assigned_name||`Asset ${X+1}`;return a.jsxs("div",{className:"flex items-center gap-3 p-3 border rounded-lg bg-slate-50",children:[a.jsx("div",{className:"w-10 h-10 bg-slate-200 rounded flex items-center justify-center flex-shrink-0",children:(pe=I.mime_type)!=null&&pe.startsWith("image/")?a.jsx("img",{src:gt.getAssetUrl(b,I.filename),alt:Y,className:"max-h-full max-w-full object-contain rounded"}):a.jsx(sf,{className:"h-6 w-6 text-slate-600"})}),a.jsxs("div",{className:"flex-grow",children:[a.jsxs("p",{className:"font-medium text-sm",children:['"',Y,'"']}),a.jsx("p",{className:"text-xs text-slate-500",children:"Will appear in discussion guide"})]})]},I.filename)})}),a.jsx("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:a.jsxs("p",{className:"text-sm text-blue-700",children:[a.jsx("strong",{children:"Note:"})," To rename assets, go back to the Setup tab and click the edit icon next to each asset."]})})]})]})}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx(se,{variant:"outline",onClick:()=>l("setup"),children:"Back to Setup"}),a.jsxs(se,{onClick:()=>l("participants"),children:["Select Participants",a.jsx(Fr,{className:"ml-2 h-4 w-4"})]})]})]})}),a.jsxs(yn,{value:"participants",children:[a.jsxs("div",{className:"flex flex-col md:flex-row gap-6",children:[a.jsxs("div",{className:"w-full md:w-64 space-y-4",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"text-sm font-medium",children:"Folders"}),a.jsx(se,{variant:"ghost",size:"sm",onClick:()=>{console.log("Clicked 'Create new folder' button"),et(!0)},className:"h-7 w-7 p-0",children:a.jsx(OB,{className:"h-4 w-4"})})]}),a.jsxs("div",{className:"space-y-1",children:[a.jsxs("button",{onClick:()=>{console.log("Clicked 'All Personas' folder"),console.log("All personas count:",D.length),je(El),setTimeout(()=>{console.log(`Will show all ${D.length} personas`)},0)},className:`w-full flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${ne===El?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx("span",{children:"All Personas"})]}),ue.map(I=>a.jsx("div",{className:"flex items-center justify-between group",children:qe&&qe._id===I._id?a.jsxs("div",{className:"flex-1 flex items-center px-3 py-2 space-x-2",children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx(Kt,{value:F,onChange:X=>J(X.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:X=>{X.key==="Enter"?V():X.key==="Escape"&&ke()}}),a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>{console.log(`Confirming folder rename: "${qe==null?void 0:qe.name}" to "${F}"`),V()},className:"h-7 w-7 p-0",children:a.jsx(Io,{className:"h-4 w-4"})}),a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>{console.log(`Cancelling rename of folder: "${qe==null?void 0:qe.name}"`),ke()},className:"h-7 w-7 p-0",children:a.jsx(Mi,{className:"h-4 w-4"})})]}):a.jsxs(a.Fragment,{children:[a.jsxs("button",{onClick:()=>{console.log(`Clicked folder: ${I.name} (ID: ${I._id})`);const X=D.filter(Y=>Y.folder_ids&&Array.isArray(Y.folder_ids)?Y.folder_ids.includes(I._id):Y.folder_id===I._id||Y.folderId===I._id);console.log(`Current persona count in folder: ${X.length}`),console.log("All personas count:",D.length),je(I._id),setTimeout(()=>{console.log(`Will show ${X.length} personas after filtering`),console.log("Filtered personas:",X.map(Y=>Y.name))},0)},className:`flex-1 flex items-center space-x-2 px-3 py-2 text-sm rounded-md text-left transition-colors ${ne===I._id?"bg-primary/10 text-primary font-medium":"hover:bg-slate-100"}`,children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx("span",{children:I.name}),a.jsx("span",{className:"text-muted-foreground text-xs ml-auto",children:D.filter(X=>X.folder_ids&&Array.isArray(X.folder_ids)?X.folder_ids.includes(I._id):X.folder_id===I._id||X.folderId===I._id).length})]}),a.jsxs(C1,{children:[a.jsx(_1,{asChild:!0,children:a.jsx(se,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0 opacity-0 group-hover:opacity-100",children:a.jsx(RA,{className:"h-4 w-4"})})}),a.jsx(hb,{align:"end",children:a.jsx(hc,{onClick:()=>{console.log(`Initiating rename for folder: ${I.name} (ID: ${I.id})`),cn(I)},children:"Rename"})})]})]})},I._id)),K&&a.jsxs("div",{className:"flex items-center px-3 py-2 space-x-2",children:[a.jsxs("div",{className:"flex-1 flex items-center space-x-2",children:[a.jsx(mo,{className:"h-4 w-4"}),a.jsx(Kt,{value:Me,onChange:I=>ut(I.target.value),placeholder:"Folder name",className:"h-7 text-sm",autoFocus:!0,onKeyDown:I=>{I.key==="Enter"?en():I.key==="Escape"&&Nn()}})]}),a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>{console.log(`Confirming creation of new folder: "${Me}"`),en()},className:"h-7 w-7 p-0",children:a.jsx(Io,{className:"h-4 w-4"})}),a.jsx(se,{size:"sm",variant:"ghost",onClick:()=>{console.log("Cancelling folder creation"),Nn()},className:"h-7 w-7 p-0",children:a.jsx(Mi,{className:"h-4 w-4"})})]})]})]}),a.jsxs("div",{className:"flex-1",children:[a.jsx(pt,{className:"mb-4",children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"flex flex-col space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Select Participants"}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(Fr,{className:"h-5 w-5 mr-2 text-muted-foreground"}),a.jsxs("span",{className:"text-sm font-medium",children:[j.length," of ",Fo.length," selected"]})]})]}),a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4",children:[a.jsxs("div",{className:"relative flex-1",children:[a.jsx(jx,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Kt,{placeholder:"Search personas by name, occupation, or location...",className:"pl-10 bg-white",value:ie,onChange:I=>ye(I.target.value)})]}),a.jsxs(se,{variant:"outline",className:"flex items-center gap-2",onClick:()=>P(!0),children:[a.jsx(RN,{className:"h-4 w-4"}),a.jsxs("span",{children:["Filter",Object.values(H).some(I=>I.length>0)?` (${Object.values(H).reduce((I,X)=>I+X.length,0)})`:""]})]})]}),L?a.jsx("div",{className:"flex justify-center items-center py-12",children:a.jsx(No,{className:"h-8 w-8 animate-spin text-primary"})}):Fo.length>0?a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:Fo.map(I=>{const X=I._id||I.id;return a.jsx(uk,{user:{id:X,_id:I._id,name:I.name,age:I.age,gender:I.gender,occupation:I.occupation,location:I.location||"Unknown",techSavviness:I.techSavviness||50,personality:I.personality||"No description available",oceanTraits:I.oceanTraits,qualitativeAttributes:I.qualitativeAttributes,topPersonalityTraits:I.topPersonalityTraits,aiSynthesizedBio:I.aiSynthesizedBio},selected:j.includes(X),onSelectionToggle:()=>Ah(X),onViewDetails:pn},X)})}):a.jsx("div",{className:"text-center py-12",children:a.jsx("p",{className:"text-muted-foreground",children:"No personas available matching your criteria."})})]})})}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx(se,{variant:"outline",onClick:()=>l("review"),children:"Back to Review"}),a.jsxs(se,{onClick:Ge,disabled:j.length<1||!m,children:[a.jsx(Zee,{className:"mr-2 h-4 w-4"}),"Start Focus Group Session"]})]})]})]}),a.jsx(Wc,{open:Ee,onOpenChange:I=>{I?(P(I),Z({...H})):P(!1)},children:a.jsxs(Pa,{className:"max-w-4xl max-h-[80vh] overflow-y-auto",children:[a.jsxs(Oa,{children:[a.jsx(Ra,{children:"Filter Personas"}),a.jsx(qc,{children:"Select attributes to filter personas by. Multiple selections within a category use OR logic, different categories use AND logic."})]}),a.jsxs("div",{className:"py-4 space-y-6",children:[Object.values(re).some(I=>I.length>0)&&a.jsx("div",{className:"bg-muted/30 p-3 rounded-md",children:a.jsxs("p",{className:"text-sm text-muted-foreground",children:[Object.values(re).reduce((I,X)=>I+X.length,0)," active filters"]})}),(()=>{const I=Je(D),X=Object.values(re).every(pe=>pe.length===0),Y=(pe,Pe,me=1)=>{const dt=X?I[Pe]:rt(Pe)[Pe],st=re[Pe],Wt=[...new Set([...dt,...st])].sort();return Wt.length===0?null:a.jsxs("div",{className:"mb-6",children:[a.jsx("h3",{className:"text-sm font-medium mb-3",children:pe}),a.jsx("div",{className:`grid grid-cols-1 ${me===2?"sm:grid-cols-2":me===3?"sm:grid-cols-2 md:grid-cols-3":""} gap-2`,children:Wt.map(yt=>{const er=re[Pe].includes(yt),ln=dt.includes(yt);return a.jsxs("div",{className:`flex items-center space-x-2 ${!ln&&!er?"opacity-50":""}`,children:[a.jsx(Vl,{id:`${Pe}-${yt}`,checked:er,onCheckedChange:()=>Dt(Pe,yt),disabled:!ln&&!er}),a.jsxs(vo,{htmlFor:`${Pe}-${yt}`,className:"truncate overflow-hidden",children:[yt,er&&!ln&&a.jsx("span",{className:"ml-1 text-xs text-muted-foreground",children:"(no matches)"})]})]},yt)})})]})};return a.jsxs(a.Fragment,{children:[Y("Gender","gender",3),Y("Age","age",3),Y("Ethnicity","ethnicity",2),Y("Location","location",2),Y("Occupation","occupation",2),Y("Tech Savviness","techSavviness",3),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-6"})]})})()]}),a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",onClick:Bt,children:"Reset"}),a.jsx(se,{onClick:jt,children:"Apply Filters"})]})]})})]})]}),console.log("About to render Dialog OUTSIDE tabs - isCopyGuideModalOpen:",Q),a.jsx(Wc,{open:Q,onOpenChange:I=>{console.log("Dialog onOpenChange called with:",I),q(I)},children:a.jsxs(Pa,{className:"max-w-4xl max-h-[80vh] overflow-y-auto",children:[a.jsxs(Oa,{children:[a.jsx(Ra,{children:"Copy Discussion Guide"}),a.jsx(qc,{children:"Select a focus group to copy its discussion guide from. Only focus groups with existing discussion guides are shown."})]}),a.jsxs("div",{className:"py-4 space-y-4",children:[a.jsxs("div",{className:"relative",children:[a.jsx(jx,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Kt,{placeholder:"Search focus groups by name...",className:"pl-10",value:fe,onChange:I=>U(I.target.value)})]}),B&&a.jsxs("div",{className:"flex justify-center items-center py-8",children:[a.jsx(No,{className:"h-8 w-8 animate-spin text-primary"}),a.jsx("span",{className:"ml-2 text-muted-foreground",children:"Loading focus groups..."})]}),!B&&a.jsx("div",{className:"space-y-3 max-h-96 overflow-y-auto",children:te.filter(I=>!fe||I.name.toLowerCase().includes(fe.toLowerCase())).length>0?te.filter(I=>!fe||I.name.toLowerCase().includes(fe.toLowerCase())).map(I=>{var X;return a.jsx(pt,{className:"p-4 cursor-pointer hover:bg-muted/50 transition-colors",onClick:()=>Ft(I._id),children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("h3",{className:"font-medium text-sm",children:I.name}),a.jsxs(On,{variant:"outline",className:"text-xs",children:[I.participants_count||((X=I.participants)==null?void 0:X.length)||0," participants"]})]}),I.description&&a.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2",children:I.description}),a.jsxs("div",{className:"flex items-center gap-4 text-xs text-muted-foreground",children:[I.created_at&&a.jsxs("span",{children:["Created ",new Date(I.created_at).toLocaleDateString()]}),I.duration&&a.jsxs("span",{children:[I.duration," minutes"]}),I.status&&a.jsx(On,{variant:"secondary",className:"text-xs",children:I.status})]})]})},I._id)}):a.jsxs("div",{className:"text-center py-8",children:[a.jsx(sf,{className:"h-12 w-12 text-muted-foreground mx-auto mb-4"}),a.jsx("p",{className:"text-muted-foreground",children:fe?"No focus groups match your search criteria.":"No focus groups with discussion guides found."}),fe&&a.jsx(se,{variant:"link",size:"sm",onClick:()=>U(""),className:"mt-2",children:"Clear search"})]})})]}),a.jsx(Ia,{children:a.jsx(se,{variant:"outline",onClick:()=>q(!1),children:"Cancel"})})]})})]})]})}const Wpe=[{id:"1",name:"Mobile App UX Evaluation",status:"completed",participants:6,date:"2023-06-10T14:00:00Z",duration:60,topic:"user-experience"},{id:"2",name:"Product Feature Feedback",status:"scheduled",participants:8,date:"2023-06-15T10:00:00Z",duration:90,topic:"product-feedback"},{id:"3",name:"Marketing Campaign Testing",status:"in-progress",participants:5,date:"2023-06-12T15:30:00Z",duration:45,topic:"creative-testing"},{id:"4",name:"Website Navigation Study",status:"scheduled",participants:7,date:"2023-06-18T13:00:00Z",duration:60,topic:"user-experience"}],qpe={completed:"bg-green-100 text-green-800 border-green-200",scheduled:"bg-blue-100 text-blue-800 border-blue-200","in-progress":"bg-amber-100 text-amber-800 border-amber-200",active:"bg-amber-100 text-amber-800 border-amber-200",paused:"bg-purple-100 text-purple-800 border-purple-200",new:"bg-slate-100 text-slate-800 border-slate-200",ai_mode:"bg-amber-100 text-amber-800 border-amber-200",draft:"bg-gray-100 text-gray-800 border-gray-200"},Ype=()=>{console.log("FocusGroups component rendering");const[t,e]=g.useState("view"),[n,r]=g.useState(""),[i,o]=g.useState([]),[s,c]=g.useState(!0),[l,u]=g.useState([]),[d,f]=g.useState(!1),[h,p]=g.useState(!1),[v,m]=g.useState(null),y=ur(),b=Ui(),[x,w]=g.useState([]),S=g.useRef(!0),C=async(E=!0)=>{if(console.log("fetchFocusGroups called with isMountedCheck:",E),console.log("isMounted.current:",S.current),E&&!S.current){console.log("Exiting early: component not mounted");return}console.log("Setting loading to true and making API call"),c(!0);try{console.log("Calling focusGroupsApi.getAll()");const R=await gt.getAll();if(console.log("API response received:",R),!E||S.current){const D=R.data.map(G=>({...G,id:G.id||G._id,participants_count:Array.isArray(G.participants)?G.participants.length:typeof G.participants=="number"?G.participants:0}));o(D)}}catch(R){console.error("Error fetching focus groups:",R),(!E||S.current)&&(Ye.error("Failed to load focus groups"),o(Wpe))}finally{(!E||S.current)&&c(!1)}},_=async E=>{try{const R=await gt.getById(E);R&&R.data&&(m(R.data),e("create"))}catch(R){console.error("Error fetching focus group for edit:",R),Ye.error("Failed to load focus group for editing")}};g.useEffect(()=>(console.log("useEffect running - about to fetch focus groups"),C(),()=>{console.log("useEffect cleanup - setting isMounted to false"),S.current=!1}),[]),g.useEffect(()=>{console.log("Mode change useEffect running, mode:",t),t==="view"&&(console.log("Mode is view, calling fetchFocusGroups"),C())},[t]),g.useEffect(()=>{const E=b.state;(E==null?void 0:E.mode)==="create"&&(E!=null&&E.preSelectedParticipants)&&(w(E.preSelectedParticipants),e("create"),y(b.pathname,{replace:!0,state:null}))},[b.state,b.pathname,y]),g.useEffect(()=>{const E=new URLSearchParams(b.search),R=E.get("mode"),D=E.get("id"),G=E.get("tab");if(R==="create")e("create"),m(null);else if(R==="edit"&&D){const L=i.find(z=>(z._id||z.id)===D);L?(m(L),e("create")):_(D)}if(R||D||G){const L=b.pathname;y(L,{replace:!0})}},[b.search,i,y,b.pathname]);const A=i.filter(E=>E.name.toLowerCase().includes(n.toLowerCase())||E.topic.toLowerCase().includes(n.toLowerCase())),j=E=>new Date(E).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),N=E=>new Date(E).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}),k=E=>{u(R=>R.includes(E)?R.filter(D=>D!==E):[...R,E])},O=async()=>{if(l.length!==0){p(!0);try{const E=l.map(R=>gt.delete(R));await Promise.all(E),o(R=>R.filter(D=>!l.includes(D.id||D._id||""))),u([]),Ye.success(`${l.length} focus group${l.length>1?"s":""} deleted successfully`)}catch(E){console.error("Error deleting focus groups:",E),Ye.error("Failed to delete focus groups")}finally{p(!1),f(!1)}}};return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(ka,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900",children:"Focus Groups"}),a.jsx("p",{className:"text-slate-600 mt-1",children:"Set up and manage AI-moderated research sessions"})]}),a.jsx("div",{className:"mt-4 sm:mt-0",children:a.jsx(se,{onClick:()=>{console.log("Create New Focus Group button clicked, current mode:",t);try{t==="view"?(console.log("Setting draft to null and switching to create mode"),m(null),e("create")):(console.log("Switching back to view mode"),e("view"))}catch(E){console.error("Error in Create New Focus Group onClick:",E)}},className:"hover-transition",children:t==="view"?"Create New Focus Group":"View All Focus Groups"})})]}),t==="view"?a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"flex flex-col sm:flex-row gap-4 mb-6",children:[a.jsxs("div",{className:"relative flex-1",children:[a.jsx(jx,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),a.jsx(Kt,{placeholder:"Search focus groups by name or topic...",className:"pl-10 bg-white",value:n,onChange:E=>r(E.target.value)})]}),a.jsxs(se,{variant:"outline",className:"flex items-center gap-2",children:[a.jsx(RN,{className:"h-4 w-4"}),a.jsx("span",{children:"Filter"})]})]}),a.jsxs("div",{className:"glass-panel rounded-xl p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-6",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Xs,{className:"h-5 w-5 text-primary"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"Your Focus Groups"})]}),l.length>0&&a.jsxs(se,{variant:"destructive",size:"sm",onClick:()=>f(!0),disabled:h,className:"flex items-center gap-2",children:[a.jsx(Qn,{className:"h-4 w-4"}),"Delete Selected (",l.length,")"]})]}),s?a.jsx("div",{className:"flex justify-center items-center py-12",children:a.jsx(No,{className:"h-8 w-8 animate-spin text-primary"})}):A.length>0?a.jsx("div",{className:"space-y-4",children:A.map(E=>a.jsx("div",{className:"glass-card rounded-xl overflow-hidden hover:shadow-md button-transition",children:a.jsxs("div",{className:"flex flex-col md:flex-row",children:[a.jsxs("div",{className:"flex-1 p-6",children:[a.jsxs("div",{className:"flex items-start justify-between",children:[a.jsxs("div",{className:"flex items-start gap-3",children:[a.jsx(Vl,{id:`select-${E.id||E._id}`,checked:l.includes(E.id||E._id||""),onCheckedChange:()=>k(E.id||E._id||""),className:"mt-1"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-2",children:E.name}),a.jsxs("div",{className:"flex flex-wrap items-center gap-3 text-sm text-muted-foreground",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(Oee,{className:"h-4 w-4 mr-1"}),j(E.date)]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(dm,{className:"h-4 w-4 mr-1"}),N(E.date)]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(Fr,{className:"h-4 w-4 mr-1"}),E.participants_count||(Array.isArray(E.participants)?E.participants.length:0)," participant",E.participants_count>1||Array.isArray(E.participants)&&E.participants.length>1?"s":""]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx(dm,{className:"h-4 w-4 mr-1"}),E.duration," min"]})]})]})]}),a.jsxs("div",{className:Le("px-3 py-1 rounded-full text-xs font-medium border",qpe[E.status]||"bg-gray-100 text-gray-800 border-gray-200"),children:[E.status==="completed"&&"Completed",E.status==="scheduled"&&"Scheduled",E.status==="in-progress"&&"In Progress",E.status==="active"&&"In Progress",E.status==="ai_mode"&&"In Progress",E.status==="paused"&&"Paused",E.status==="new"&&"Not Started",E.status==="draft"&&"Draft",!["completed","scheduled","in-progress","active","ai_mode","paused","new","draft"].includes(E.status)&&E.status]})]}),a.jsxs("div",{className:"mt-4 flex flex-wrap gap-2",children:[a.jsxs("div",{className:"px-3 py-1 bg-slate-100 rounded-full text-xs font-medium text-slate-800",children:[E.topic==="user-experience"&&"User Experience",E.topic==="product-feedback"&&"Product Feedback",E.topic==="creative-testing"&&"Creative Testing",E.topic==="messaging-evaluation"&&"Messaging Evaluation",E.topic&&!["user-experience","product-feedback","creative-testing","messaging-evaluation"].includes(E.topic)&&E.topic.charAt(0).toUpperCase()+E.topic.slice(1).replace(/-/g," ")]}),a.jsx("div",{className:"px-3 py-1 bg-slate-100 rounded-full text-xs font-medium text-slate-800",children:"AI Moderated"})]})]}),a.jsx("div",{className:"bg-slate-50 p-6 flex flex-col justify-center items-center md:border-l border-slate-100",children:a.jsx(se,{variant:E.status==="in-progress"||E.status==="active"||E.status==="ai_mode"?"default":E.status==="new"||E.status==="draft"?"outline":"default",className:Le("w-full hover-transition",E.status==="new"?"bg-slate-200 text-slate-700 hover:bg-slate-300 border-slate-300":"",E.status==="draft"?"bg-gray-200 text-gray-700 hover:bg-gray-300 border-gray-300":""),onClick:()=>{if(E.status==="draft")m(E),e("create");else{const R=E.id||E._id;console.log("Navigating to focus group:",R),y(`/focus-groups/${R}`)}},children:E.status==="completed"?a.jsxs(a.Fragment,{children:["View Session",a.jsx(po,{className:"ml-2 h-4 w-4"})]}):E.status==="in-progress"||E.status==="active"||E.status==="ai_mode"?a.jsxs(a.Fragment,{children:["Join Session",a.jsx(po,{className:"ml-2 h-4 w-4"})]}):E.status==="paused"?a.jsxs(a.Fragment,{children:["Session Details",a.jsx(po,{className:"ml-2 h-4 w-4"})]}):E.status==="scheduled"?a.jsxs(a.Fragment,{children:["View Details",a.jsx(po,{className:"ml-2 h-4 w-4"})]}):E.status==="new"?a.jsxs(a.Fragment,{children:["View Session",a.jsx(po,{className:"ml-2 h-4 w-4"})]}):E.status==="draft"?a.jsxs(a.Fragment,{children:["Edit",a.jsx(po,{className:"ml-2 h-4 w-4"})]}):a.jsxs(a.Fragment,{children:["View Session",a.jsx(po,{className:"ml-2 h-4 w-4"})]})})})]})},E.id))}):a.jsx("div",{className:"text-center py-12",children:a.jsx("p",{className:"text-muted-foreground",children:"No focus groups found matching your search criteria."})})]})]}):a.jsx(Kpe,{draftToEdit:v,preSelectedParticipants:x,onDraftSaved:()=>{m(null),e("view"),w([]),C()}})]}),a.jsx(A1,{open:d,onOpenChange:f,children:a.jsxs(mb,{children:[a.jsxs(gb,{children:[a.jsxs(yb,{children:["Delete ",l.length," Focus Group",l.length!==1?"s":"","?"]}),a.jsxs(xb,{children:["This action cannot be undone. This will permanently delete the selected focus group",l.length!==1?"s":""," and remove all data associated with ",l.length!==1?"them":"it","."]})]}),a.jsxs(vb,{children:[a.jsx(wb,{disabled:h,children:"Cancel"}),a.jsx(bb,{onClick:E=>{E.preventDefault(),O()},disabled:h,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:h?a.jsxs(a.Fragment,{children:[a.jsx(No,{className:"mr-2 h-4 w-4 animate-spin"}),"Deleting..."]}):a.jsx(a.Fragment,{children:"Delete"})})]})]})})]})},Qpe=({participants:t,selectedParticipantIds:e,onToggleParticipantFilter:n})=>{const r=ur(),{id:i}=PN(),{setPreviousRoute:o}=Ug(),s=l=>{const u=l.id||l._id;u&&i&&(o(`/focus-groups/${i}`,{focusGroupId:i}),r(`/personas/${u}`))},c=l=>{const u=l.id||l._id;u&&n(u)};return a.jsx("div",{className:"w-full lg:w-64 shrink-0",children:a.jsxs("div",{className:"glass-panel rounded-xl p-4",children:[a.jsxs("h2",{className:"font-sf text-lg font-semibold flex items-center mb-3",children:[a.jsx(Fr,{className:"h-5 w-5 text-primary mr-2"})," Participants"]}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex items-center p-2 bg-primary/5 rounded-lg",children:[a.jsx(Ca,{className:"h-8 w-8 text-primary mr-3"}),a.jsxs("div",{children:[a.jsx("p",{className:"font-medium text-primary",children:"AI Moderator"}),a.jsx("p",{className:"text-xs text-slate-500",children:"Session facilitator"})]})]}),t.map(l=>{const u=l.id||l._id,d=e.includes(u);return a.jsxs("div",{className:`flex items-center p-2 rounded-lg transition-colors ${d?"bg-blue-50 border border-blue-200":"hover:bg-slate-100"}`,children:[a.jsx("div",{className:"cursor-pointer mr-3",onClick:()=>s(l),title:`View ${l.name}'s profile`,children:a.jsx("img",{src:Kg(l),alt:l.name,className:"h-8 w-8 rounded-full object-cover"})}),a.jsxs("div",{className:"flex-1",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx("p",{className:"font-medium cursor-pointer hover:text-blue-600 transition-colors",onClick:()=>c(l),title:`Filter to show only ${l.name}'s messages`,children:l.name}),d&&a.jsx(Io,{className:"h-4 w-4 text-blue-600 ml-2"})]}),a.jsx("p",{className:"text-xs text-slate-500",children:l.occupation})]})]},l.id)})]})]})})};function Xpe(t,e){return g.useReducer((n,r)=>e[n][r]??n,t)}var Zk="ScrollArea",[JV,iUe]=Bi(Zk),[Jpe,Mo]=JV(Zk),ZV=g.forwardRef((t,e)=>{const{__scopeScrollArea:n,type:r="hover",dir:i,scrollHideDelay:o=600,...s}=t,[c,l]=g.useState(null),[u,d]=g.useState(null),[f,h]=g.useState(null),[p,v]=g.useState(null),[m,y]=g.useState(null),[b,x]=g.useState(0),[w,S]=g.useState(0),[C,_]=g.useState(!1),[A,j]=g.useState(!1),N=It(e,O=>l(O)),k=Mu(i);return a.jsx(Jpe,{scope:n,type:r,dir:k,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:h,scrollbarX:p,onScrollbarXChange:v,scrollbarXEnabled:C,onScrollbarXEnabledChange:_,scrollbarY:m,onScrollbarYChange:y,scrollbarYEnabled:A,onScrollbarYEnabledChange:j,onCornerWidthChange:x,onCornerHeightChange:S,children:a.jsx(ht.div,{dir:k,...s,ref:N,style:{position:"relative","--radix-scroll-area-corner-width":b+"px","--radix-scroll-area-corner-height":w+"px",...t.style}})})});ZV.displayName=Zk;var e8="ScrollAreaViewport",t8=g.forwardRef((t,e)=>{const{__scopeScrollArea:n,children:r,asChild:i,nonce:o,...s}=t,c=Mo(e8,n),l=g.useRef(null),u=It(e,l,c.onViewportChange);return a.jsxs(a.Fragment,{children:[a.jsx("style",{dangerouslySetInnerHTML:{__html:` +[data-radix-scroll-area-viewport] { + scrollbar-width: none; + -ms-overflow-style: none; + -webkit-overflow-scrolling: touch; +} +[data-radix-scroll-area-viewport]::-webkit-scrollbar { + display: none; +} +:where([data-radix-scroll-area-viewport]) { + display: flex; + flex-direction: column; + align-items: stretch; +} +:where([data-radix-scroll-area-content]) { + flex-grow: 1; +} +`},nonce:o}),a.jsx(ht.div,{"data-radix-scroll-area-viewport":"",...s,asChild:i,ref:u,style:{overflowX:c.scrollbarXEnabled?"scroll":"hidden",overflowY:c.scrollbarYEnabled?"scroll":"hidden",...t.style},children:cme({asChild:i,children:r},d=>a.jsx("div",{"data-radix-scroll-area-content":"",ref:c.onContentChange,style:{minWidth:c.scrollbarXEnabled?"fit-content":void 0},children:d}))})]})});t8.displayName=e8;var oa="ScrollAreaScrollbar",eP=g.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=Mo(oa,t.__scopeScrollArea),{onScrollbarXEnabledChange:o,onScrollbarYEnabledChange:s}=i,c=t.orientation==="horizontal";return g.useEffect(()=>(c?o(!0):s(!0),()=>{c?o(!1):s(!1)}),[c,o,s]),i.type==="hover"?a.jsx(Zpe,{...r,ref:e,forceMount:n}):i.type==="scroll"?a.jsx(eme,{...r,ref:e,forceMount:n}):i.type==="auto"?a.jsx(n8,{...r,ref:e,forceMount:n}):i.type==="always"?a.jsx(tP,{...r,ref:e}):null});eP.displayName=oa;var Zpe=g.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=Mo(oa,t.__scopeScrollArea),[o,s]=g.useState(!1);return g.useEffect(()=>{const c=i.scrollArea;let l=0;if(c){const u=()=>{window.clearTimeout(l),s(!0)},d=()=>{l=window.setTimeout(()=>s(!1),i.scrollHideDelay)};return c.addEventListener("pointerenter",u),c.addEventListener("pointerleave",d),()=>{window.clearTimeout(l),c.removeEventListener("pointerenter",u),c.removeEventListener("pointerleave",d)}}},[i.scrollArea,i.scrollHideDelay]),a.jsx(Yr,{present:n||o,children:a.jsx(n8,{"data-state":o?"visible":"hidden",...r,ref:e})})}),eme=g.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=Mo(oa,t.__scopeScrollArea),o=t.orientation==="horizontal",s=Yw(()=>l("SCROLL_END"),100),[c,l]=Xpe("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return g.useEffect(()=>{if(c==="idle"){const u=window.setTimeout(()=>l("HIDE"),i.scrollHideDelay);return()=>window.clearTimeout(u)}},[c,i.scrollHideDelay,l]),g.useEffect(()=>{const u=i.viewport,d=o?"scrollLeft":"scrollTop";if(u){let f=u[d];const h=()=>{const p=u[d];f!==p&&(l("SCROLL"),s()),f=p};return u.addEventListener("scroll",h),()=>u.removeEventListener("scroll",h)}},[i.viewport,o,l,s]),a.jsx(Yr,{present:n||c!=="hidden",children:a.jsx(tP,{"data-state":c==="hidden"?"hidden":"visible",...r,ref:e,onPointerEnter:$e(t.onPointerEnter,()=>l("POINTER_ENTER")),onPointerLeave:$e(t.onPointerLeave,()=>l("POINTER_LEAVE"))})})}),n8=g.forwardRef((t,e)=>{const n=Mo(oa,t.__scopeScrollArea),{forceMount:r,...i}=t,[o,s]=g.useState(!1),c=t.orientation==="horizontal",l=Yw(()=>{if(n.viewport){const u=n.viewport.offsetWidth{const{orientation:n="vertical",...r}=t,i=Mo(oa,t.__scopeScrollArea),o=g.useRef(null),s=g.useRef(0),[c,l]=g.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),u=a8(c.viewport,c.content),d={...r,sizes:c,onSizesChange:l,hasThumb:u>0&&u<1,onThumbChange:h=>o.current=h,onThumbPointerUp:()=>s.current=0,onThumbPointerDown:h=>s.current=h};function f(h,p){return sme(h,s.current,c,p)}return n==="horizontal"?a.jsx(tme,{...d,ref:e,onThumbPositionChange:()=>{if(i.viewport&&o.current){const h=i.viewport.scrollLeft,p=W2(h,c,i.dir);o.current.style.transform=`translate3d(${p}px, 0, 0)`}},onWheelScroll:h=>{i.viewport&&(i.viewport.scrollLeft=h)},onDragScroll:h=>{i.viewport&&(i.viewport.scrollLeft=f(h,i.dir))}}):n==="vertical"?a.jsx(nme,{...d,ref:e,onThumbPositionChange:()=>{if(i.viewport&&o.current){const h=i.viewport.scrollTop,p=W2(h,c);o.current.style.transform=`translate3d(0, ${p}px, 0)`}},onWheelScroll:h=>{i.viewport&&(i.viewport.scrollTop=h)},onDragScroll:h=>{i.viewport&&(i.viewport.scrollTop=f(h))}}):null}),tme=g.forwardRef((t,e)=>{const{sizes:n,onSizesChange:r,...i}=t,o=Mo(oa,t.__scopeScrollArea),[s,c]=g.useState(),l=g.useRef(null),u=It(e,l,o.onScrollbarXChange);return g.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),a.jsx(i8,{"data-orientation":"horizontal",...i,ref:u,sizes:n,style:{bottom:0,left:o.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:o.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":qw(n)+"px",...t.style},onThumbPointerDown:d=>t.onThumbPointerDown(d.x),onDragScroll:d=>t.onDragScroll(d.x),onWheelScroll:(d,f)=>{if(o.viewport){const h=o.viewport.scrollLeft+d.deltaX;t.onWheelScroll(h),l8(h,f)&&d.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollWidth,viewport:o.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:Eb(s.paddingLeft),paddingEnd:Eb(s.paddingRight)}})}})}),nme=g.forwardRef((t,e)=>{const{sizes:n,onSizesChange:r,...i}=t,o=Mo(oa,t.__scopeScrollArea),[s,c]=g.useState(),l=g.useRef(null),u=It(e,l,o.onScrollbarYChange);return g.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),a.jsx(i8,{"data-orientation":"vertical",...i,ref:u,sizes:n,style:{top:0,right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":qw(n)+"px",...t.style},onThumbPointerDown:d=>t.onThumbPointerDown(d.y),onDragScroll:d=>t.onDragScroll(d.y),onWheelScroll:(d,f)=>{if(o.viewport){const h=o.viewport.scrollTop+d.deltaY;t.onWheelScroll(h),l8(h,f)&&d.preventDefault()}},onResize:()=>{l.current&&o.viewport&&s&&r({content:o.viewport.scrollHeight,viewport:o.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:Eb(s.paddingTop),paddingEnd:Eb(s.paddingBottom)}})}})}),[rme,r8]=JV(oa),i8=g.forwardRef((t,e)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:o,onThumbPointerUp:s,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:u,onWheelScroll:d,onResize:f,...h}=t,p=Mo(oa,n),[v,m]=g.useState(null),y=It(e,N=>m(N)),b=g.useRef(null),x=g.useRef(""),w=p.viewport,S=r.content-r.viewport,C=Ar(d),_=Ar(l),A=Yw(f,10);function j(N){if(b.current){const k=N.clientX-b.current.left,O=N.clientY-b.current.top;u({x:k,y:O})}}return g.useEffect(()=>{const N=k=>{const O=k.target;(v==null?void 0:v.contains(O))&&C(k,S)};return document.addEventListener("wheel",N,{passive:!1}),()=>document.removeEventListener("wheel",N,{passive:!1})},[w,v,S,C]),g.useEffect(_,[r,_]),ff(v,A),ff(p.content,A),a.jsx(rme,{scope:n,scrollbar:v,hasThumb:i,onThumbChange:Ar(o),onThumbPointerUp:Ar(s),onThumbPositionChange:_,onThumbPointerDown:Ar(c),children:a.jsx(ht.div,{...h,ref:y,style:{position:"absolute",...h.style},onPointerDown:$e(t.onPointerDown,N=>{N.button===0&&(N.target.setPointerCapture(N.pointerId),b.current=v.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",p.viewport&&(p.viewport.style.scrollBehavior="auto"),j(N))}),onPointerMove:$e(t.onPointerMove,j),onPointerUp:$e(t.onPointerUp,N=>{const k=N.target;k.hasPointerCapture(N.pointerId)&&k.releasePointerCapture(N.pointerId),document.body.style.webkitUserSelect=x.current,p.viewport&&(p.viewport.style.scrollBehavior=""),b.current=null})})})}),jb="ScrollAreaThumb",o8=g.forwardRef((t,e)=>{const{forceMount:n,...r}=t,i=r8(jb,t.__scopeScrollArea);return a.jsx(Yr,{present:n||i.hasThumb,children:a.jsx(ime,{ref:e,...r})})}),ime=g.forwardRef((t,e)=>{const{__scopeScrollArea:n,style:r,...i}=t,o=Mo(jb,n),s=r8(jb,n),{onThumbPositionChange:c}=s,l=It(e,f=>s.onThumbChange(f)),u=g.useRef(),d=Yw(()=>{u.current&&(u.current(),u.current=void 0)},100);return g.useEffect(()=>{const f=o.viewport;if(f){const h=()=>{if(d(),!u.current){const p=ame(f,c);u.current=p,c()}};return c(),f.addEventListener("scroll",h),()=>f.removeEventListener("scroll",h)}},[o.viewport,d,c]),a.jsx(ht.div,{"data-state":s.hasThumb?"visible":"hidden",...i,ref:l,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:$e(t.onPointerDownCapture,f=>{const p=f.target.getBoundingClientRect(),v=f.clientX-p.left,m=f.clientY-p.top;s.onThumbPointerDown({x:v,y:m})}),onPointerUp:$e(t.onPointerUp,s.onThumbPointerUp)})});o8.displayName=jb;var nP="ScrollAreaCorner",s8=g.forwardRef((t,e)=>{const n=Mo(nP,t.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?a.jsx(ome,{...t,ref:e}):null});s8.displayName=nP;var ome=g.forwardRef((t,e)=>{const{__scopeScrollArea:n,...r}=t,i=Mo(nP,n),[o,s]=g.useState(0),[c,l]=g.useState(0),u=!!(o&&c);return ff(i.scrollbarX,()=>{var f;const d=((f=i.scrollbarX)==null?void 0:f.offsetHeight)||0;i.onCornerHeightChange(d),l(d)}),ff(i.scrollbarY,()=>{var f;const d=((f=i.scrollbarY)==null?void 0:f.offsetWidth)||0;i.onCornerWidthChange(d),s(d)}),u?a.jsx(ht.div,{...r,ref:e,style:{width:o,height:c,position:"absolute",right:i.dir==="ltr"?0:void 0,left:i.dir==="rtl"?0:void 0,bottom:0,...t.style}}):null});function Eb(t){return t?parseInt(t,10):0}function a8(t,e){const n=t/e;return isNaN(n)?0:n}function qw(t){const e=a8(t.viewport,t.content),n=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,r=(t.scrollbar.size-n)*e;return Math.max(r,18)}function sme(t,e,n,r="ltr"){const i=qw(n),o=i/2,s=e||o,c=i-s,l=n.scrollbar.paddingStart+s,u=n.scrollbar.size-n.scrollbar.paddingEnd-c,d=n.content-n.viewport,f=r==="ltr"?[0,d]:[d*-1,0];return c8([l,u],f)(t)}function W2(t,e,n="ltr"){const r=qw(e),i=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,o=e.scrollbar.size-i,s=e.content-e.viewport,c=o-r,l=n==="ltr"?[0,s]:[s*-1,0],u=Mm(t,l);return c8([0,s],[0,c])(u)}function c8(t,e){return n=>{if(t[0]===t[1]||e[0]===e[1])return e[0];const r=(e[1]-e[0])/(t[1]-t[0]);return e[0]+r*(n-t[0])}}function l8(t,e){return t>0&&t{})=>{let n={left:t.scrollLeft,top:t.scrollTop},r=0;return function i(){const o={left:t.scrollLeft,top:t.scrollTop},s=n.left!==o.left,c=n.top!==o.top;(s||c)&&e(),n=o,r=window.requestAnimationFrame(i)}(),()=>window.cancelAnimationFrame(r)};function Yw(t,e){const n=Ar(t),r=g.useRef(0);return g.useEffect(()=>()=>window.clearTimeout(r.current),[]),g.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,e)},[n,e])}function ff(t,e){const n=Ar(e);qr(()=>{let r=0;if(t){const i=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return i.observe(t),()=>{window.cancelAnimationFrame(r),i.unobserve(t)}}},[t,n])}function cme(t,e){const{asChild:n,children:r}=t;if(!n)return typeof e=="function"?e(r):e;const i=g.Children.only(r);return g.cloneElement(i,{children:typeof e=="function"?e(i.props.children):e})}var u8=ZV,lme=t8,ume=s8;const Qw=g.forwardRef(({className:t,children:e,...n},r)=>a.jsxs(u8,{ref:r,className:Le("relative overflow-hidden",t),...n,children:[a.jsx(lme,{className:"h-full w-full rounded-[inherit]",children:e}),a.jsx(d8,{}),a.jsx(ume,{})]}));Qw.displayName=u8.displayName;const d8=g.forwardRef(({className:t,orientation:e="vertical",...n},r)=>a.jsx(eP,{ref:r,orientation:e,className:Le("flex touch-none select-none transition-colors",e==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",e==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",t),...n,children:a.jsx(o8,{className:"relative flex-1 rounded-full bg-border"})}));d8.displayName=eP.displayName;const dme=({participants:t,isVisible:e,selectedIndex:n,onSelect:r,onClose:i,position:o})=>{const s=g.useRef(null);return g.useEffect(()=>{const c=l=>{s.current&&!s.current.contains(l.target)&&i()};if(e)return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[e,i]),g.useEffect(()=>{if(e&&n>=0&&s.current){const c=s.current.children[n];c&&c.scrollIntoView({block:"nearest",behavior:"smooth"})}},[n,e]),!e||t.length===0?null:a.jsxs("div",{ref:s,className:"absolute z-50 w-64 max-h-48 overflow-y-auto bg-white border border-slate-200 rounded-lg shadow-lg",style:{top:o.top,left:o.left},children:[t.map((c,l)=>{const u=c.id||c._id,d=l===n;return a.jsxs("div",{className:`flex items-center p-3 cursor-pointer transition-colors ${d?"bg-blue-50 border-l-4 border-blue-500":"hover:bg-slate-50"}`,onClick:()=>r(c),children:[a.jsx("img",{src:Kg(c),alt:c.name,className:"h-8 w-8 rounded-full object-cover mr-3 flex-shrink-0"}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("p",{className:`font-medium truncate ${d?"text-blue-900":"text-slate-900"}`,children:c.name}),a.jsx("p",{className:`text-sm truncate ${d?"text-blue-600":"text-slate-500"}`,children:c.occupation})]})]},u)}),t.length===0&&a.jsx("div",{className:"p-3 text-center text-slate-500 text-sm",children:"No participants found"})]})};function I1(t,e){const n=[],r=[],i=/@(\w+(?:\s+\w+)*?)(?=\s+and\s|\s+or\s|\s*[^\w\s]|\s*$)/g;let o;for(;(o=i.exec(t))!==null;){const s=o[1],c=o.index,l=o.index+o[0].length,u=e.find(d=>d.name.toLowerCase()===s.toLowerCase());if(u){const d=u.id||u._id;d&&(n.push({id:d,name:u.name,startIndex:c,endIndex:l}),r.includes(d)||r.push(d))}}return{text:t,mentions:n,mentionedParticipantIds:r}}function fme(t,e){if(e.length===0)return[t];const n=[];let r=0;return[...e].sort((o,s)=>o.startIndex-s.startIndex).forEach((o,s)=>{o.startIndex>r&&n.push(t.slice(r,o.startIndex)),n.push(T.createElement("span",{key:`mention-${s}`,className:"text-blue-600 bg-blue-50 px-1 rounded font-medium"},`@${o.name}`)),r=o.endIndex}),r=0;n--){const r=t[n];if(r==="@"){if(n===0||/\s/.test(t[n-1]))return n}else if(/\s/.test(r))break}return null}function mme(t,e,n){return t.slice(e+1,n).toLowerCase()}function gme(t,e){return e?t.filter(n=>n.name.toLowerCase().includes(e)):t}const f8=g.forwardRef(({value:t,onChange:e,participants:n,placeholder:r="Ask a question or provide guidance...",className:i="",disabled:o=!1},s)=>{const[c,l]=g.useState(!1),[u,d]=g.useState(0),[f,h]=g.useState({top:0,left:0}),[p,v]=g.useState(null),[m,y]=g.useState([]),b=g.useRef(null),x=g.useRef(null);g.useEffect(()=>{s&&b.current&&(typeof s=="function"?s(b.current):s.current=b.current)},[s]);const w=()=>{if(b.current&&x.current&&p!==null){const j=b.current,N=x.current,k=document.createElement("div");k.style.position="absolute",k.style.visibility="hidden",k.style.whiteSpace="pre",k.style.font=window.getComputedStyle(j).font,k.textContent=t.slice(0,p),document.body.appendChild(k);const O=k.offsetWidth;document.body.removeChild(k);const E=N.getBoundingClientRect(),R=j.getBoundingClientRect();h({top:R.height+4,left:Math.min(O,E.width-280)})}},S=j=>{const N=j.target.value,k=j.target.selectionStart||0,O=pme(N,k);if(O!==null&&n.length>0){const R=mme(N,O,k),D=gme(n,R);v(O),y(D),d(0),l(!0)}else l(!1),v(null);const E=I1(N,n);e(N,E)},C=j=>{if(c&&m.length>0)switch(j.key){case"ArrowDown":j.preventDefault(),d(N=>NN>0?N-1:m.length-1);break;case"Enter":case"Tab":j.preventDefault(),m[u]&&_(m[u]);break;case"Escape":j.preventDefault(),l(!1);break}},_=j=>{if(p!==null&&b.current){const N=b.current.selectionStart||0,{newText:k,newCursorPosition:O}=hme(t,N,j,p),E=I1(k,n);e(k,E),setTimeout(()=>{b.current&&(b.current.focus(),b.current.setSelectionRange(O,O))},0),l(!1),v(null)}},A=()=>{l(!1),v(null)};return g.useEffect(()=>{c&&p!==null&&w()},[c,p,t]),a.jsxs("div",{ref:x,className:`relative ${i}`,children:[a.jsx("input",{ref:b,type:"text",value:t,onChange:S,onKeyDown:C,placeholder:r,disabled:o,className:"flex h-10 w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-sm ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"}),a.jsx(dme,{participants:m,isVisible:c,selectedIndex:u,onSelect:_,onClose:A,position:f})]})});f8.displayName="MentionInput";const vme=({message:t,persona:e,toggleHighlight:n,participants:r=[],focusGroupId:i})=>{const[o,s]=g.useState(!1),c=t.senderId==="moderator",l=t.senderId==="facilitator",u=I1(t.text,r),d=fme(t.text,u.mentions),f=(c||l)&&(t.visualAsset||v(t.text))&&i,p=(()=>{if(t.visualAsset)return{filename:t.visualAsset.filename,displayReference:t.visualAsset.displayReference};{const y=v(t.text);return y?{filename:y,displayReference:y}:null}})();function v(y){const b=[/titled\s+['"]([^'"]+\.(jpg|jpeg|png))['\"]/i,/asset\s+['"]([^'"]+\.(jpg|jpeg|png))['\"]/i,/(fg-[a-f0-9]+-[a-f0-9]{32}\.(jpg|jpeg|png))/i];for(const x of b){const w=y.match(x);if(w)return w[1]}return null}const m=()=>{n()};return a.jsxs("div",{id:`message-${t.id}`,className:Le("flex items-start p-3 rounded-lg transition-colors",t.highlighted?"bg-amber-50 border border-amber-200":"hover:bg-slate-50",c?"border-l-4 border-l-primary pl-4":"",l?"border-l-4 border-l-green-500 pl-4":""),onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),"data-highlighted":t.highlighted?"true":"false",children:[a.jsx("div",{className:"flex-shrink-0 mr-3",children:c?a.jsx("div",{className:"bg-primary/10 p-2 rounded-full",children:a.jsx(Ca,{className:"h-6 w-6 text-primary"})}):l?a.jsx("div",{className:"bg-green-100 p-2 rounded-full",children:a.jsx(fm,{className:"h-6 w-6 text-green-600"})}):e?a.jsx("div",{className:"bg-slate-100 p-2 rounded-full",children:a.jsx("img",{src:Kg(e),alt:`${e.name} avatar`,className:"h-6 w-6 rounded-full object-cover"})}):a.jsx("div",{className:"bg-slate-100 p-2 rounded-full",children:a.jsx(Dee,{className:"h-6 w-6 text-slate-600"})})}),a.jsxs("div",{className:"flex-1",children:[a.jsxs("div",{className:"flex items-center mb-1",children:[a.jsx("span",{className:"font-medium mr-2",children:c?"AI Moderator":l?"Human Facilitator":(e==null?void 0:e.name)||"Unknown"}),!c&&!l&&e&&a.jsx(On,{variant:"outline",className:"text-xs font-normal",children:e.occupation}),a.jsx("span",{className:"text-xs text-slate-500 ml-auto",children:t.timestamp.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),a.jsx("p",{className:"text-slate-700",children:!t.text||t.text.trim()===""||t.text==="..."?a.jsx("span",{className:"text-red-500 italic",children:"[No response content - AI generation may have failed]"}):d}),f&&p&&a.jsxs("div",{className:"mt-3 p-3 border rounded-lg bg-slate-50",children:[a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Sp,{className:"h-4 w-4 text-slate-600"}),a.jsx("span",{className:"text-sm font-medium text-slate-700",children:"Creative Asset"}),p.displayReference!==p.filename&&a.jsxs("span",{className:"text-xs text-slate-500",children:["(",p.displayReference,")"]})]}),a.jsx("img",{src:gt.getAssetUrl(i,p.filename),alt:"Creative asset for review",className:"max-w-full h-auto rounded border shadow-sm",style:{maxHeight:"300px"},onError:y=>{var x;console.error("Failed to load creative asset:",gt.getAssetUrl(i,p.filename)),y.currentTarget.style.display="none";const b=document.createElement("div");b.className="text-xs text-slate-500 italic p-2 border rounded bg-slate-100",b.textContent=`Creative asset not found: ${p.displayReference}`,(x=y.currentTarget.parentNode)==null||x.appendChild(b)}})]}),a.jsx("div",{className:Le("flex mt-2 space-x-2",!o&&!t.highlighted&&"hidden"),children:a.jsxs(se,{variant:"ghost",size:"sm",onClick:m,className:"h-8 px-2 text-xs",children:[a.jsx(ote,{className:Le("h-3 w-3 mr-1",t.highlighted?"fill-amber-400 text-amber-400":"text-slate-400")}),t.highlighted?"Highlighted":"Highlight"]})})]})]})},yme=({action:t})=>{switch(t){case"moderator_speak":return a.jsx(Xs,{className:"h-4 w-4 text-blue-500"});case"participant_respond":return a.jsx(Fr,{className:"h-4 w-4 text-green-500"});case"participant_interaction":return a.jsx(Fr,{className:"h-4 w-4 text-purple-500"});case"probe_trigger":return a.jsx(IB,{className:"h-4 w-4 text-orange-500"});case"end_session":return a.jsx(cte,{className:"h-4 w-4 text-red-500"});default:return a.jsx(mu,{className:"h-4 w-4 text-gray-500"})}},xme=({status:t})=>{switch(t){case"success":return a.jsx(ON,{className:"h-3 w-3 text-green-500"});case"error":return a.jsx($ee,{className:"h-3 w-3 text-red-500"});case"pending":return a.jsx(dm,{className:"h-3 w-3 text-yellow-500 animate-pulse"});default:return null}},bme=({action:t})=>({moderator_speak:"Moderator",participant_respond:"Participant Response",participant_interaction:"Participant Interaction",probe_trigger:"Probe Question",end_session:"End Session"})[t]||t,wme=t=>{try{return new Date(t).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{return t}},Sme=({entry:t,isLatest:e})=>{const[n,r]=g.useState(e);return a.jsx(pt,{className:`mb-2 ${e?"ring-2 ring-blue-200 bg-blue-50/50":""}`,children:a.jsxs(Wg,{open:n,onOpenChange:r,children:[a.jsx(qg,{asChild:!0,children:a.jsx(Ei,{className:"pb-2 cursor-pointer hover:bg-gray-50/50 transition-colors",children:a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(yme,{action:t.action}),a.jsxs("div",{className:"flex flex-col",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("span",{className:"font-medium text-sm",children:a.jsx(bme,{action:t.action})}),a.jsx(xme,{status:t.execution_status})]}),a.jsx("span",{className:"text-xs text-gray-500",children:wme(t.timestamp)})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[e&&a.jsx(On,{variant:"secondary",className:"text-xs",children:"Latest"}),n?a.jsx(qf,{className:"h-4 w-4 text-gray-400"}):a.jsx(yl,{className:"h-4 w-4 text-gray-400"})]})]})})}),a.jsx(Yg,{children:a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium text-gray-700 mb-1",children:"AI Reasoning:"}),a.jsxs("p",{className:"text-sm text-gray-600 bg-gray-50 p-2 rounded italic",children:['"',t.reasoning,'"']})]}),t.details&&Object.keys(t.details).length>0&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium text-gray-700 mb-1",children:"Details:"}),a.jsx("div",{className:"text-xs text-gray-600 bg-gray-50 p-2 rounded font-mono",children:JSON.stringify(t.details,null,2)})]}),t.execution_result&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium text-gray-700 mb-1",children:"Execution Result:"}),a.jsx("div",{className:"text-xs text-gray-600 bg-gray-50 p-2 rounded",children:t.execution_result.error?a.jsxs("span",{className:"text-red-600",children:["Error: ",t.execution_result.error]}):a.jsx("span",{className:"text-green-600",children:t.execution_result.message||"Success"})})]})]})})})]})})},Cme=({reasoningHistory:t,isVisible:e,onToggle:n,isAiMode:r=!1})=>{const[i,o]=g.useState(!0);return g.useEffect(()=>{if(i&&t.length>0){const s=document.getElementById("reasoning-panel-content");s&&(s.scrollTop=0)}},[t.length,i]),a.jsx("div",{className:"border-t border-gray-200 bg-white",children:a.jsxs(Wg,{open:e,onOpenChange:n,children:[a.jsx(qg,{asChild:!0,children:a.jsxs("div",{className:"flex items-center justify-between p-3 cursor-pointer hover:bg-gray-50 transition-colors",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(mu,{className:"h-4 w-4 text-purple-600"}),a.jsx("span",{className:"font-medium text-sm",children:r?"AI Decision Reasoning":"AI Moderator Logic"}),r&&t.length>0&&a.jsx(On,{variant:"outline",className:"text-xs",children:t.length}),!r&&a.jsx(On,{variant:"secondary",className:"text-xs",children:"Manual Mode"})]}),e?a.jsx(qf,{className:"h-4 w-4 text-gray-400"}):a.jsx(yl,{className:"h-4 w-4 text-gray-400"})]})}),a.jsx(Yg,{children:a.jsx("div",{className:"border-t border-gray-100",children:r?t.length===0?a.jsxs("div",{className:"p-4 text-center text-gray-500",children:[a.jsx(mu,{className:"h-8 w-8 mx-auto mb-2 text-gray-300"}),a.jsx("p",{className:"text-sm",children:"No AI decisions yet"}),a.jsx("p",{className:"text-xs text-gray-400",children:"Reasoning will appear here when the AI makes decisions"})]}):a.jsx(Qw,{id:"reasoning-panel-content",className:"h-[25vh] p-3",children:a.jsx("div",{className:"space-y-2",children:t.map((s,c)=>a.jsx(Sme,{entry:s,isLatest:c===0},`${s.timestamp}-${c}`))})}):a.jsxs("div",{className:"p-4 text-center text-gray-500",children:[a.jsx(DN,{className:"h-8 w-8 mx-auto mb-2 text-gray-400"}),a.jsx("p",{className:"text-sm font-medium text-gray-700",children:"Manual Moderation Mode"}),a.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"You are currently moderating the discussion manually."}),a.jsx("p",{className:"text-xs text-gray-500 mt-2",children:"Switch to AI Mode to see automated reasoning and decisions."})]})})})]})})},_me=({modeEvent:t})=>{const e=i=>i.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),n=i=>{switch(i){case"ai_mode_started":return"AI Mode Started";case"manual_mode_started":return"Manual Moderation Enabled";case"ai_session_concluded":return"AI Discussion Concluded";default:return"Mode Changed"}},r=i=>{switch(i){case"ai_mode_started":return"text-blue-600";case"manual_mode_started":return"text-slate-600";case"ai_session_concluded":return"text-green-600";default:return"text-gray-600"}};return a.jsxs("div",{className:"flex items-center my-6 px-4",children:[a.jsx("div",{className:"flex-1 border-t border-gray-200"}),a.jsx("div",{className:`mx-4 px-3 py-1 bg-white border border-gray-200 rounded-full ${r(t.event_type)}`,children:a.jsxs("div",{className:"flex items-center space-x-2 text-xs font-medium",children:[a.jsx("span",{children:n(t.event_type)}),a.jsx("span",{className:"text-gray-400",children:"at"}),a.jsx("span",{children:e(t.timestamp)})]})}),a.jsx("div",{className:"flex-1 border-t border-gray-200"})]})},Ame=({messages:t,modeEvents:e,personas:n,isSpeaking:r,focusGroupId:i,isAiModeActive:o=!1,selectedParticipantIds:s,onToggleHighlight:c,onAdvanceDiscussion:l,onNewMessage:u,onStatusChange:d,isEditingDiscussionGuide:f=!1})=>{const[h,p]=g.useState(""),[v,m]=g.useState(null),[y,b]=g.useState(!1),[x,w]=g.useState(null),S=g.useRef(null),[C,_]=g.useState(-1),[A,j]=g.useState(!1),N=g.useRef(0),k=g.useRef(null),O=g.useRef(1e4),E=g.useRef(null),[R,D]=g.useState(!1),[G,L]=g.useState(!1),[z,M]=g.useState(!1),[$,Q]=g.useState(null),q=$!==null?$:o,[te,xe]=g.useState([]),[B,ce]=g.useState(!1),fe=B;g.useEffect(()=>{o&&i&&U()},[o,i]);const U=async()=>{if(i)try{o&&ue()}catch(P){console.error("Error checking autonomous status:",P)}},ue=async()=>{if(i)try{const P=await rr.getReasoningHistory(i);xe(P.data.reasoning_history||[])}catch(P){console.error("Error fetching reasoning history:",P)}};g.useEffect(()=>{R&&K()},[t,R]),g.useEffect(()=>{let P;return o&&i&&(P=setInterval(()=>{ue(),U()},5e3)),()=>{P&&clearInterval(P)}},[o,i]),g.useEffect(()=>{N.current=t.length},[]),g.useEffect(()=>{const P=t.length,H=N.current;if(A&&P>H){const ee=Date.now(),re=k.current;if(re&&ee-re>=O.current)b(!1),j(!1),k.current=null;else if(re){const Z=O.current-(ee-re);setTimeout(()=>{b(!1),j(!1),k.current=null},Math.max(0,Z))}else b(!1),j(!1)}N.current=P},[t.length,A]);const oe=P=>n.find(H=>H.id===P||H._id===P),ne=s.length===0?t:t.filter(P=>P.senderId==="moderator"||P.senderId==="facilitator"||s.includes(P.senderId)),je=()=>{const P=[];return ne.forEach(H=>{P.push({type:"message",data:H,timestamp:H.timestamp})}),e.forEach(H=>{P.push({type:"mode_event",data:H,timestamp:H.timestamp})}),P.sort((H,ee)=>H.timestamp.getTime()-ee.timestamp.getTime())},K=()=>{if(!f&&E.current){const P=E.current.closest("[data-radix-scroll-area-viewport]");if(P){const H=E.current.offsetTop-P.clientHeight+50,ee=P.scrollTop,re=H-ee,Z=300;let Se=null;const Ae=Ie=>{Se||(Se=Ie);const Ve=Ie-Se,Be=Math.min(Ve/Z,1),Fe=1-Math.pow(1-Be,3);P.scrollTop=ee+re*Fe,Be<1&&window.requestAnimationFrame(Ae)};window.requestAnimationFrame(Ae)}else E.current.scrollIntoView({behavior:"smooth",block:"end"})}},et=async P=>{var Se,Ae;if(P.preventDefault(),!h.trim())return;let H=h,ee=null,re=null;const Z=v;p(""),m(null),b(!0),j(!0),k.current=Date.now();try{if(x){try{ae.info("Uploading creative asset...",{description:"Please wait while we upload your image."});const Be=new FormData;Be.append("assets",x);const Fe=await gt.uploadAssets(i,Be);console.log("Upload response:",Fe==null?void 0:Fe.data);const nt=Fe==null?void 0:Fe.data;if(nt&&nt.assets&&nt.assets.length>0?(ee=nt.assets[0].filename,console.log("Successfully got filename from upload response:",ee)):console.error("Invalid upload response structure:",nt),ee){try{const Ne=await gt.getAssets(i),Nt=((Se=Ne==null?void 0:Ne.data)==null?void 0:Se.assets)||[],pn=Nt.find(rt=>rt.filename===ee);let Je="the uploaded asset";pn&&(pn.user_assigned_name?Je=pn.user_assigned_name:Je=`Asset ${Nt.findIndex(jt=>jt.filename===ee)+1}`),re={filename:ee,displayReference:Je},H=`Please review ${Je}. ${h}`,console.log("Using display reference in message:",Je)}catch(Ne){console.error("Error fetching asset metadata:",Ne),H=`Please review the uploaded asset. ${h}`,re={filename:ee,displayReference:"the uploaded asset"}}ae.success("Creative asset uploaded successfully",{description:"The image has been attached to your message."})}}catch(Be){console.error("Error uploading file:",Be),console.error("Upload error details:",(Ae=Be.response)==null?void 0:Ae.data),ae.error("Failed to upload creative asset",{description:"Your message will be sent without the attachment."})}ie()}const Ie={text:H,type:"question",senderId:"facilitator"};ee&&(Ie.attached_assets=[ee],Ie.activates_visual_context=!0,re&&(Ie.visualAsset=re));const Ve=await gt.sendMessage(i,Ie);console.log("Message sent to API:",Ve),setTimeout(()=>{K()},100),Z&&Z.mentionedParticipantIds.length>0?setTimeout(()=>{ye(Z.mentionedParticipantIds,H)},500):(b(!1),j(!1),k.current=null)}catch(Ie){console.error("Error sending message:",Ie),b(!1),j(!1),k.current=null;const Ve={id:`msg-${Date.now()}`,senderId:"facilitator",text:h,timestamp:new Date,type:"question"};u(Ve),setTimeout(()=>{K()},100),ae.error("Failed to send message to server",{description:"Message will be shown locally but not saved."})}},Me=()=>{for(let P=t.length-1;P>=0;P--)if(t[P].senderId==="moderator"&&t[P].type==="question")return t[P].text;for(let P=t.length-1;P>=0;P--)if(t[P].senderId==="moderator")return t[P].text;return"What are your thoughts on this topic?"},ut=(P,H)=>{if(!P||!P.sections||!H)return null;const{section_index:ee,subsection_index:re,item_index:Z,item_type:Se}=H,Ae=P.sections,Ie=Be=>{const Fe=[];return Be.questions&&Be.questions.forEach((nt,Ne)=>{Fe.push({...nt,type:"question",index:Ne})}),Be.activities&&Be.activities.forEach((nt,Ne)=>{Fe.push({...nt,type:"activity",index:Ne})}),Fe.sort((nt,Ne)=>nt.type!==Ne.type?nt.type==="question"?-1:1:nt.index-Ne.index)};if(ee>=Ae.length)return{completed:!0};const Ve=Ae[ee];if(re!==void 0&&Ve.subsections){if(re>=Ve.subsections.length)return ut(P,{section_index:ee+1,subsection_index:void 0,item_index:0,item_type:"question"});const Be=Ve.subsections[re],Fe=Ie(Be),nt=Fe.findIndex(Ne=>Ne.type===Se&&Ne.index===Z);if(nt0){const Fe=Be.findIndex(nt=>nt.type===Se&&nt.index===Z);if(Fe0?ut(P,{section_index:ee,subsection_index:0,item_index:0,item_type:"question"}):ut(P,{section_index:ee+1,subsection_index:void 0,item_index:0,item_type:"question"})}},qe=async()=>{var P,H,ee;if(i)try{b(!0),j(!0),k.current=Date.now(),ae.info("Advancing discussion...",{description:"Moving to the next question in the discussion guide."});const[re,Z]=await Promise.all([rr.getModeratorStatus(i),gt.getById(i)]);if(!((P=re==null?void 0:re.data)!=null&&P.status)||!((H=Z==null?void 0:Z.data)!=null&&H.discussionGuide))throw new Error("Could not fetch moderator status or discussion guide");const Se=re.data.status,Ae=Z.data.discussionGuide;if(!Ae.sections)throw new Error("Discussion guide does not have a structured format");const Ie=ut(Ae,Se.moderator_position);if(!Ie)throw new Error("Could not determine next discussion item");if(Ie.completed){ae.success("Discussion guide completed",{description:"All sections of the discussion guide have been covered."});const Be={id:`msg-${Date.now()}`,senderId:"moderator",text:"We have covered all the questions in our discussion guide. Thank you all for your valuable insights and participation in this focus group session.",timestamp:new Date,type:"system"};u(Be),b(!1),j(!1),k.current=null;return}await rr.setModeratorPosition(i,Ie.sectionId,Ie.itemId);const Ve={id:`msg-${Date.now()}`,senderId:"moderator",text:Ie.content,timestamp:new Date,type:"question"};try{const Be=await gt.sendMessage(i,{senderId:"moderator",text:Ve.text,type:"question"});(ee=Be==null?void 0:Be.data)!=null&&ee.message_id&&(Ve.id=Be.data.message_id)}catch(Be){console.warn("Failed to save message to API, showing locally:",Be)}u(Ve),b(!1),j(!1),k.current=null,setTimeout(()=>{K()},100),ae.success("Discussion advanced",{description:`Moved to: ${Ie.section.title}${Ie.subsection?` > ${Ie.subsection.title}`:""}`}),d&&setTimeout(()=>d(),500)}catch(re){console.error("Error advancing discussion:",re),ae.error("Failed to advance discussion",{description:re.message||"There was a problem advancing to the next question."}),b(!1),j(!1),k.current=null}},Pt=async()=>{var P,H,ee,re;if(i){console.log("Starting AI Mode: setting autonomousLoading to true"),M(!0);try{console.log("Starting AI Mode: calling API...");const Se=await Promise.race([rr.startAutonomousConversation(i),new Promise((Ae,Ie)=>setTimeout(()=>Ie(new Error("API call timeout after 30 seconds")),3e4))]);if(console.log("Starting AI Mode: API response received:",Se),Se.data.error){ae.error("Failed to start autonomous conversation",{description:Se.data.error}),M(!1);return}ae.success("Autonomous conversation started",{description:"The AI is now managing the focus group conversation"}),Q(!0);try{console.log("Starting AI Mode: calling onStatusChange..."),d&&(await d(),console.log("Starting AI Mode: onStatusChange completed successfully"))}catch(Ae){console.error("Starting AI Mode: onStatusChange failed:",Ae)}console.log("Starting AI Mode: resetting autonomousLoading to false"),M(!1),ue()}catch(Z){console.error("Error starting autonomous conversation:",Z),Z.response&&Z.response.data&&console.error("Backend error details:",Z.response.data);const Se=((H=(P=Z.response)==null?void 0:P.data)==null?void 0:H.message)||((re=(ee=Z.response)==null?void 0:ee.data)==null?void 0:re.error)||"Please check your connection and try again";ae.error("Failed to start autonomous conversation",{description:Se}),M(!1)}}},F=async()=>{if(i){console.log("Stopping AI Mode: setting autonomousLoading to true"),M(!0);try{const P=await rr.stopAutonomousConversation(i,"manual_stop");if(P.data.error){ae.error("Failed to stop autonomous conversation",{description:P.data.error}),M(!1);return}xe([]),ae.success("Autonomous conversation stopped",{description:"You can now moderate the discussion manually"}),Q(!1);try{console.log("Stopping AI Mode: calling onStatusChange..."),d&&(await d(),console.log("Stopping AI Mode: onStatusChange completed successfully"))}catch(H){console.error("Stopping AI Mode: onStatusChange failed:",H)}console.log("Stopping AI Mode: resetting autonomousLoading to false"),M(!1)}catch(P){console.error("Error stopping autonomous conversation:",P),ae.error("Failed to stop autonomous conversation"),M(!1)}}},J=P=>{var ee;const H=(ee=P.target.files)==null?void 0:ee[0];if(H){if(!H.type.startsWith("image/")){ae.error("Please select an image file",{description:"Only image files (JPG, PNG, etc.) are supported for creative review."});return}if(H.size>10*1024*1024){ae.error("File too large",{description:"Please select an image smaller than 10MB."});return}w(H),ae.success(`Image selected: ${H.name}`,{description:"The image will be attached to your next message."})}},ie=()=>{w(null),S.current&&(S.current.value="")},ye=async(P,H)=>{var ee;if(!(!i||P.length===0))try{b(!0),j(!0),k.current=Date.now(),ae.info("Generating responses from mentioned participants...",{description:`Generating responses from ${P.length} mentioned participant(s).`});for(const re of P){const Z=n.find(Se=>(Se._id||Se.id)===re);if(!Z){console.warn(`Mentioned participant ${re} not found in focus group`);continue}try{const Se=await rr.generateResponse(i,re,H||"Continue the conversation based on the latest moderator message.");if((ee=Se==null?void 0:Se.data)!=null&&ee.response){console.log("Generated response from mentioned participant:",Se.data);const Ae={id:Se.data.message_id||`msg-${Date.now()}-${re}`,senderId:re,text:Se.data.response,timestamp:new Date(Se.data.timestamp||Se.data.created_at||new Date),type:"response"};u(Ae),ae.success(`Response generated from ${Z.name}`,{description:Se.data.response.substring(0,100)+"..."})}}catch(Se){console.error(`Error generating response from ${Z.name}:`,Se),ae.error(`Failed to generate response from ${Z.name}`)}}b(!1),j(!1),k.current=null}catch(re){console.error("Error generating mentioned responses:",re),ae.error("Failed to generate responses from mentioned participants"),b(!1),j(!1),k.current=null}},Ee=async()=>{var P,H,ee,re;if(i){if(n.length===0){ae.error("No participants available",{description:"Add participants to the focus group before generating responses."});return}try{b(!0),j(!0),k.current=Date.now(),ae.info("AI is selecting participant...",{description:"Analyzing the conversation to choose the best respondent."});const Z=await rr.makeConversationDecision(i,.7,"manual");if(!Z||!Z.data||!Z.data.decision)throw new Error("Empty decision response from AI");const Se=Z.data.decision;if(Se.action==="participant_respond"){const Ae=Se.details.participant_id,Ie=Se.details.topic_context,Ve=Se.reasoning,Be=n.find(nt=>(nt._id||nt.id)===Ae);if(!Be)throw new Error(`Selected participant ${Ae} not found in focus group`);ae.info("Generating response...",{description:`AI selected ${Be.name}: ${Ve.substring(0,100)}${Ve.length>100?"...":""}`});const Fe=await rr.generateResponse(i,Ae,Ie);if(!Fe||!Fe.data)throw new Error("Empty response from API");if((P=Fe==null?void 0:Fe.data)!=null&&P.message_id&&((H=Fe==null?void 0:Fe.data)!=null&&H.response)){const nt={id:Fe.data.message_id,senderId:Ae,text:Fe.data.response,timestamp:new Date(Fe.data.timestamp||Fe.data.created_at||new Date),type:"response",highlighted:!1};u(nt),b(!1),j(!1),k.current=null,setTimeout(()=>{K()},100)}else throw new Error("Failed to generate or save AI response")}else{if(console.log("AI suggested different action:",Se.action),Se.action==="moderator_speak"){ae.info("AI suggests moderator intervention",{description:`AI reasoning: ${Se.reasoning.substring(0,100)}${Se.reasoning.length>100?"...":""}`}),b(!1),j(!1),k.current=null;return}ae.warning("Using fallback participant selection",{description:`AI suggested "${Se.action}" but generating participant response anyway.`});const Ae=(C+1)%n.length,Ie=n[Ae],Ve=Me(),Be=Ie._id||Ie.id,Fe=await rr.generateResponse(i,Be,Ve);if((ee=Fe==null?void 0:Fe.data)!=null&&ee.message_id&&((re=Fe==null?void 0:Fe.data)!=null&&re.response)){const nt={id:Fe.data.message_id,senderId:Be,text:Fe.data.response,timestamp:new Date(Fe.data.timestamp||Fe.data.created_at||new Date),type:"response",highlighted:!1};u(nt),b(!1),j(!1),k.current=null,setTimeout(()=>{K()},100),_(Ae)}}}catch(Z){console.error("Error generating AI response:",Z),ae.error("Failed to generate AI response",{description:"There was a problem connecting to the server."}),b(!1),j(!1),k.current=null}}};return a.jsxs("div",{className:"glass-panel rounded-xl p-4 flex flex-col h-full",children:[a.jsx("div",{className:"flex-1 min-h-0 mb-4",children:a.jsxs(Qw,{className:"h-full pr-4",children:[a.jsxs("div",{className:"space-y-4",children:[je().map(P=>P.type==="message"?a.jsx(vme,{message:P.data,persona:P.data.senderId!=="moderator"&&P.data.senderId!=="facilitator"?oe(P.data.senderId):null,toggleHighlight:()=>c(P.data.id),participants:n,focusGroupId:i},P.data.id):a.jsx(_me,{modeEvent:P.data},P.data.id)),(y||o)&&a.jsxs("div",{className:"flex items-center space-x-2 text-sm text-slate-500 animate-pulse",children:[a.jsx("div",{className:"bg-primary/10 p-2 rounded-full",children:o?a.jsx(Ca,{className:"h-4 w-4 text-primary animate-spin"}):a.jsx(Is,{className:"h-4 w-4 text-primary"})}),a.jsx("span",{children:o?"AI is generating next response...":"Generating AI response..."})]}),a.jsx("div",{className:"h-8"}),a.jsx("div",{ref:E,className:"h-1"})]}),!R&&ne.length>6&&a.jsx("div",{className:"sticky bottom-5 ml-auto mr-5 z-10 w-fit",children:a.jsx(se,{size:"sm",className:"rounded-full shadow-md h-10 w-10 p-0",onClick:K,title:"Scroll to bottom",children:a.jsx(nR,{className:"h-4 w-4"})})})]})}),a.jsx(Cme,{reasoningHistory:te,isVisible:fe,onToggle:()=>ce(!B),isAiMode:o}),a.jsxs("div",{className:"pt-4 border-t border-slate-200 w-full",children:[x&&a.jsxs("div",{className:"mb-2 p-2 bg-blue-50 border border-blue-200 rounded-md flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(aR,{className:"h-4 w-4 text-blue-600"}),a.jsx("span",{className:"text-sm text-blue-700",children:x.name}),a.jsxs("span",{className:"text-xs text-blue-500",children:["(",(x.size/1024/1024).toFixed(1)," MB)"]})]}),a.jsx(se,{type:"button",variant:"ghost",size:"sm",onClick:ie,className:"h-6 w-6 p-0 text-blue-600 hover:text-blue-800",children:"×"})]}),a.jsxs("form",{onSubmit:et,className:"flex items-center gap-2 w-full",children:[a.jsx("input",{ref:S,type:"file",accept:"image/*",onChange:J,className:"hidden"}),a.jsx(f8,{value:h,onChange:(P,H)=>{p(P),m(H||null)},participants:n,placeholder:"Ask a question or provide guidance...",className:"flex-1 min-w-0",disabled:!1}),a.jsx(se,{type:"button",variant:"outline",size:"sm",onClick:()=>{var P;return(P=S.current)==null?void 0:P.click()},className:"hover-transition shrink-0 px-3",disabled:!1,title:"Attach image for creative review",children:a.jsx(aR,{className:"h-4 w-4"})}),a.jsxs(se,{type:"submit",variant:"default",className:"hover-transition shrink-0",disabled:!1,children:[a.jsx(Xs,{className:"mr-2 h-4 w-4"}),"Send"]})]}),a.jsxs("div",{className:"flex justify-between items-center mt-3",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx("p",{className:"text-sm text-slate-500",children:r?"Speaking...":o?"AI mode active":"Manual moderation mode"}),a.jsx(se,{variant:"outline",size:"sm",onClick:q?F:Pt,disabled:z,className:`hover-transition ${q?"bg-red-50 text-red-600 hover:bg-red-100":"bg-blue-50 text-blue-600 hover:bg-blue-100"}`,title:q?"Stop AI mode and return to manual":"Start autonomous AI conversation",children:z?a.jsxs(a.Fragment,{children:[a.jsx(Ca,{className:"mr-1 h-3 w-3 animate-spin"}),o?"Stopping...":"Starting..."]}):q?a.jsxs(a.Fragment,{children:[a.jsx(Ca,{className:"mr-1 h-3 w-3"}),"Stop AI Mode"]}):a.jsxs(a.Fragment,{children:[a.jsx(Ca,{className:"mr-1 h-3 w-3"}),"Start AI Mode"]})}),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>{D(!R),R||K()},className:`hover-transition ${R?"bg-blue-50 text-blue-600 hover:bg-blue-100":""}`,title:R?"Disable auto-scroll":"Enable auto-scroll",children:[a.jsx(nR,{className:"h-3 w-3 mr-1"}),"Auto-scroll"]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[!o&&a.jsxs(a.Fragment,{children:[a.jsxs(se,{variant:"outline",onClick:qe,className:`hover-transition ${n.length===0?"bg-red-50":""}`,disabled:y,title:n.length===0?"Add participants to the focus group first":"Advance to the next part of the discussion guide",children:[a.jsx(Xs,{className:"mr-2 h-4 w-4"}),n.length===0?"No Participants":"Advance Discussion"]}),a.jsxs(se,{variant:"ghost",size:"sm",onClick:Ee,className:`hover-transition ${n.length===0?"bg-red-50":""}`,disabled:y||n.length===0,title:"Generate a participant response to the current topic",children:[a.jsx(Is,{className:"mr-1 h-3 w-3"}),"Get Response"]})]}),o&&a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsxs("div",{className:"flex items-center gap-1 text-sm text-slate-600",children:[a.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full animate-pulse"}),a.jsx("span",{children:"AI Active"})]}),a.jsx(se,{variant:"outline",size:"sm",onClick:()=>L(!G),className:"hover-transition",title:"Show autonomous conversation controls",children:a.jsx(DN,{className:"h-3 w-3"})})]})]})]})]})]})},jme=({themes:t,messages:e,personas:n=[],onThemeDelete:r,onQuoteClick:i})=>{const o=(d,f)=>{d.stopPropagation(),r&&(r(f),ae.success("Theme deleted successfully"))},s=d=>n.find(f=>f.id===d||f._id===d),c=d=>{let f=d;const h=d.match(/^\[MSG_ID:[^\]]+\]\s*(.*)$/);h&&(f=h[1]);const p=f.match(/^\[([^\]]+)\]:\s*(.*)$/);if(p)return{persona:p[1],text:p[2]};const v=f.match(/^([^:]+):\s*(.*)$/);return v&&v[1].trim()!==f.trim()?{persona:v[1].trim(),text:v[2]}:{persona:null,text:f}},l=t.filter(d=>"source"in d?d.source==="highlight":!0),u=t.filter(d=>"source"in d&&d.source==="generated");return a.jsxs("div",{className:"glass-panel rounded-xl p-6 h-[70vh] flex flex-col overflow-hidden",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(gu,{className:"h-5 w-5 text-primary mr-2"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"Key Themes"})]}),a.jsxs("div",{className:"overflow-auto",children:[u.length>0&&a.jsxs("div",{className:"mb-8",children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(mu,{className:"h-4 w-4 text-primary mr-2"}),a.jsx("h3",{className:"font-medium",children:"AI-Generated Themes"})]}),a.jsx("div",{className:"grid grid-cols-1 gap-4 mb-4",children:u.map(d=>a.jsxs(pt,{className:"hover:shadow-md transition-shadow relative group",children:[r&&a.jsx("button",{className:"absolute top-2 right-2 p-1 rounded-full bg-slate-200 opacity-0 group-hover:opacity-100 transition-opacity",onClick:f=>o(f,d.id),children:a.jsx(Mi,{className:"h-3 w-3 text-slate-700"})}),a.jsx(Ei,{className:"pb-2",children:a.jsx(Qi,{className:"text-base",children:d.title})}),a.jsxs(Rt,{children:[a.jsx("p",{className:"text-sm text-slate-600 mb-2",children:d.description}),d.quotes&&d.quotes.length>0&&a.jsxs("div",{className:"mt-3",children:[a.jsx("h4",{className:"text-xs font-medium text-slate-700 mb-2",children:"Supporting Quotes:"}),a.jsx("div",{className:"space-y-2",children:d.quotes.map((f,h)=>{const p=typeof f=="object"&&f!==null,v=p?f.text:f,m=p?f.speaker:c(f).persona,y=p?f.message_id:void 0,b=p?f.original:f;return a.jsxs("div",{className:"bg-slate-50 p-2 rounded text-xs text-slate-600 border-l-2 border-slate-200 cursor-pointer hover:bg-slate-100 transition-colors",onClick:x=>{x.stopPropagation(),i&&i(p?f:b,y)},title:y?`Message ID: ${y}`:"Click to find original message",children:[m&&a.jsxs("span",{className:"font-semibold text-slate-700 mr-1",children:[m,":"]}),'"',v,'"',y&&a.jsx("span",{className:"ml-2 text-xs text-green-600 opacity-70",children:"✓"})]},h)})})]})]})]},d.id))})]}),l.length>0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(Jee,{className:"h-4 w-4 text-primary mr-2"}),a.jsx("h3",{className:"font-medium",children:"Highlighted Comments"})]}),a.jsx("div",{className:"grid grid-cols-1 gap-4 mb-4",children:l.map(d=>{const f=d.messages.length>0?e.find(y=>y.id===d.messages[0]):null,h=(f==null?void 0:f.text)||d.text,p=h.length>200?h.substring(0,200)+"...":h,v=f==null?void 0:f.senderId;let m="";if(v==="moderator")m="AI Moderator";else if(v==="facilitator")m="Human Facilitator";else if(v){const y=s(v);m=(y==null?void 0:y.name)||"Unknown Participant"}return a.jsxs(pt,{className:"hover:shadow-md hover:bg-slate-50 transition-all cursor-pointer relative group",onClick:y=>{y.stopPropagation(),i&&f&&i(f.text,f.id)},title:"Click to view in discussion",children:[r&&a.jsx("button",{className:"absolute top-2 right-2 p-1 rounded-full bg-slate-200 opacity-0 group-hover:opacity-100 transition-opacity z-10",onClick:y=>o(y,d.id),children:a.jsx(Mi,{className:"h-3 w-3 text-slate-700"})}),a.jsx(Ei,{className:"pb-2",children:a.jsx(Qi,{className:"text-sm font-medium text-slate-800 line-clamp-2",children:m&&a.jsx("span",{className:"text-primary font-semibold",children:m})})}),a.jsxs(Rt,{className:"pt-0",children:[a.jsxs("p",{className:"text-sm text-slate-600 leading-relaxed",children:['"',p,'"']}),a.jsxs("div",{className:"mt-2 flex items-center text-xs text-slate-400",children:[a.jsx(Is,{className:"h-3 w-3 mr-1"}),"Click to view in discussion"]})]})]},d.id)})})]}),t.length===0&&a.jsxs("div",{className:"flex flex-col items-center justify-center p-8 text-center bg-slate-50 rounded-lg",children:[a.jsx(gu,{className:"h-8 w-8 text-slate-400 mb-3"}),a.jsx("p",{className:"text-slate-600",children:"No themes have been identified yet."}),a.jsx("p",{className:"text-sm text-slate-500 mt-2",children:"Highlight important messages in the discussion or generate themes automatically."})]})]})]})},Eme=({themes:t,messages:e,personas:n,focusGroupId:r,onThemesGenerated:i,onThemeDelete:o,onQuoteClick:s,onGenerateKeyThemes:c})=>{const l=()=>{if(!t||t.length===0){ae.warning("No themes to export",{description:"Generate some themes first before exporting."});return}let u=`# Key Themes Analysis + +`;const d=t.filter(v=>"source"in v&&v.source==="generated");if(d.length===0){ae.warning("No AI-generated themes to export",{description:"Only AI-generated themes are included in the export."});return}d.forEach((v,m)=>{u+=`## ${m+1}. ${v.title} + +`,u+=`${v.description} + +`,v.quotes&&v.quotes.length>0&&(u+=`**Supporting Quotes:** + +`,v.quotes.forEach(y=>{if(typeof y=="string")u+=`> ${y} + +`;else{let b="";y.speaker&&(b+=`**${y.speaker}:** `),b+=y.text,u+=`> ${b} + +`}})),u+=`--- + +`});const f=new Blob([u],{type:"text/markdown"}),h=URL.createObjectURL(f),p=document.createElement("a");p.href=h,p.download=`key-themes-${new Date().toISOString().split("T")[0]}.md`,document.body.appendChild(p),p.click(),document.body.removeChild(p),URL.revokeObjectURL(h),ae.success("Themes exported successfully",{description:`Downloaded ${d.length} themes as markdown file.`})};return a.jsxs("div",{className:"flex flex-col h-full",children:[a.jsxs("div",{className:"mb-4 space-y-2",children:[a.jsxs(se,{onClick:c,className:"w-full",children:[a.jsx(ute,{className:"mr-2 h-4 w-4"}),"Analyze Discussion for Key Themes"]}),a.jsxs(se,{onClick:l,disabled:!t||t.length===0,variant:"outline",className:"w-full",children:[a.jsx(ol,{className:"mr-2 h-4 w-4"}),"Export Themes"]})]}),a.jsx("div",{className:"flex-grow overflow-hidden",children:a.jsx(jme,{themes:t,messages:e,personas:n,onThemeDelete:o,focusGroupId:r,onQuoteClick:s})})]})};var Nme=Array.isArray,Hi=Nme,Tme=typeof hv=="object"&&hv&&hv.Object===Object&&hv,h8=Tme,kme=h8,Pme=typeof self=="object"&&self&&self.Object===Object&&self,Ome=kme||Pme||Function("return this")(),sa=Ome,Ime=sa,Rme=Ime.Symbol,tv=Rme,q2=tv,p8=Object.prototype,Mme=p8.hasOwnProperty,Dme=p8.toString,zh=q2?q2.toStringTag:void 0;function $me(t){var e=Mme.call(t,zh),n=t[zh];try{t[zh]=void 0;var r=!0}catch{}var i=Dme.call(t);return r&&(e?t[zh]=n:delete t[zh]),i}var Lme=$me,Fme=Object.prototype,Bme=Fme.toString;function Ume(t){return Bme.call(t)}var zme=Ume,Y2=tv,Hme=Lme,Gme=zme,Vme="[object Null]",Kme="[object Undefined]",Q2=Y2?Y2.toStringTag:void 0;function Wme(t){return t==null?t===void 0?Kme:Vme:Q2&&Q2 in Object(t)?Hme(t):Gme(t)}var tc=Wme;function qme(t){return t!=null&&typeof t=="object"}var nc=qme,Yme=tc,Qme=nc,Xme="[object Symbol]";function Jme(t){return typeof t=="symbol"||Qme(t)&&Yme(t)==Xme}var ah=Jme,Zme=Hi,ege=ah,tge=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nge=/^\w*$/;function rge(t,e){if(Zme(t))return!1;var n=typeof t;return n=="number"||n=="symbol"||n=="boolean"||t==null||ege(t)?!0:nge.test(t)||!tge.test(t)||e!=null&&t in Object(e)}var rP=rge;function ige(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Sl=ige;const ch=hn(Sl);var oge=tc,sge=Sl,age="[object AsyncFunction]",cge="[object Function]",lge="[object GeneratorFunction]",uge="[object Proxy]";function dge(t){if(!sge(t))return!1;var e=oge(t);return e==cge||e==lge||e==age||e==uge}var iP=dge;const At=hn(iP);var fge=sa,hge=fge["__core-js_shared__"],pge=hge,YC=pge,X2=function(){var t=/[^.]+$/.exec(YC&&YC.keys&&YC.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function mge(t){return!!X2&&X2 in t}var gge=mge,vge=Function.prototype,yge=vge.toString;function xge(t){if(t!=null){try{return yge.call(t)}catch{}try{return t+""}catch{}}return""}var m8=xge,bge=iP,wge=gge,Sge=Sl,Cge=m8,_ge=/[\\^$.*+?()[\]{}|]/g,Age=/^\[object .+?Constructor\]$/,jge=Function.prototype,Ege=Object.prototype,Nge=jge.toString,Tge=Ege.hasOwnProperty,kge=RegExp("^"+Nge.call(Tge).replace(_ge,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Pge(t){if(!Sge(t)||wge(t))return!1;var e=bge(t)?kge:Age;return e.test(Cge(t))}var Oge=Pge;function Ige(t,e){return t==null?void 0:t[e]}var Rge=Ige,Mge=Oge,Dge=Rge;function $ge(t,e){var n=Dge(t,e);return Mge(n)?n:void 0}var Lu=$ge,Lge=Lu,Fge=Lge(Object,"create"),Xw=Fge,J2=Xw;function Bge(){this.__data__=J2?J2(null):{},this.size=0}var Uge=Bge;function zge(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Hge=zge,Gge=Xw,Vge="__lodash_hash_undefined__",Kge=Object.prototype,Wge=Kge.hasOwnProperty;function qge(t){var e=this.__data__;if(Gge){var n=e[t];return n===Vge?void 0:n}return Wge.call(e,t)?e[t]:void 0}var Yge=qge,Qge=Xw,Xge=Object.prototype,Jge=Xge.hasOwnProperty;function Zge(t){var e=this.__data__;return Qge?e[t]!==void 0:Jge.call(e,t)}var eve=Zge,tve=Xw,nve="__lodash_hash_undefined__";function rve(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=tve&&e===void 0?nve:e,this}var ive=rve,ove=Uge,sve=Hge,ave=Yge,cve=eve,lve=ive;function lh(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e-1}var jve=Ave,Eve=Jw;function Nve(t,e){var n=this.__data__,r=Eve(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var Tve=Nve,kve=fve,Pve=bve,Ove=Cve,Ive=jve,Rve=Tve;function uh(t){var e=-1,n=t==null?0:t.length;for(this.clear();++e0?1:-1},Kl=function(e){return nv(e)&&e.indexOf("%")===e.length-1},De=function(e){return txe(e)&&!fh(e)},Tr=function(e){return De(e)||nv(e)},oxe=0,hh=function(e){var n=++oxe;return"".concat(e||"").concat(n)},yi=function(e,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!De(e)&&!nv(e))return r;var o;if(Kl(e)){var s=e.indexOf("%");o=n*parseFloat(e.slice(0,s))/100}else o=+e;return fh(o)&&(o=r),i&&o>n&&(o=n),o},wc=function(e){if(!e)return null;var n=Object.keys(e);return n&&n.length?e[n[0]]:null},sxe=function(e){if(!Array.isArray(e))return!1;for(var n=e.length,r={},i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function fxe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function M1(t){"@babel/helpers - typeof";return M1=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},M1(t)}var oM={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart"},Ma=function(e){return typeof e=="string"?e:e?e.displayName||e.name||"Component":""},sM=null,XC=null,pP=function t(e){if(e===sM&&Array.isArray(XC))return XC;var n=[];return g.Children.forEach(e,function(r){Lt(r)||(_8.isFragment(r)?n=n.concat(t(r.props.children)):n.push(r))}),XC=n,sM=e,n};function ko(t,e){var n=[],r=[];return Array.isArray(e)?r=e.map(function(i){return Ma(i)}):r=[Ma(e)],pP(t).forEach(function(i){var o=io(i,"type.displayName")||io(i,"type.name");r.indexOf(o)!==-1&&n.push(i)}),n}function Yi(t,e){var n=ko(t,e);return n&&n[0]}var aM=function(e){if(!e||!e.props)return!1;var n=e.props,r=n.width,i=n.height;return!(!De(r)||r<=0||!De(i)||i<=0)},hxe=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],pxe=function(e){return e&&e.type&&nv(e.type)&&hxe.indexOf(e.type)>=0},mxe=function(e){return e&&M1(e)==="object"&&"clipDot"in e},gxe=function(e,n,r,i){var o,s=(o=QC==null?void 0:QC[i])!==null&&o!==void 0?o:[];return!At(e)&&(i&&s.includes(n)||cxe.includes(n))||r&&hP.includes(n)},ft=function(e,n,r){if(!e||typeof e=="function"||typeof e=="boolean")return null;var i=e;if(g.isValidElement(e)&&(i=e.props),!ch(i))return null;var o={};return Object.keys(i).forEach(function(s){var c;gxe((c=i)===null||c===void 0?void 0:c[s],s,n,r)&&(o[s]=i[s])}),o},D1=function t(e,n){if(e===n)return!0;var r=g.Children.count(e);if(r!==g.Children.count(n))return!1;if(r===0)return!0;if(r===1)return cM(Array.isArray(e)?e[0]:e,Array.isArray(n)?n[0]:n);for(var i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function wxe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function L1(t){var e=t.children,n=t.width,r=t.height,i=t.viewBox,o=t.className,s=t.style,c=t.title,l=t.desc,u=bxe(t,xxe),d=i||{width:n,height:r,x:0,y:0},f=Mt("recharts-surface",o);return T.createElement("svg",$1({},ft(u,!0,"svg"),{className:f,width:n,height:r,style:s,viewBox:"".concat(d.x," ").concat(d.y," ").concat(d.width," ").concat(d.height)}),T.createElement("title",null,c),T.createElement("desc",null,l),e)}var Sxe=["children","className"];function F1(){return F1=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function _xe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var tn=T.forwardRef(function(t,e){var n=t.children,r=t.className,i=Cxe(t,Sxe),o=Mt("recharts-layer",r);return T.createElement("g",F1({className:o},ft(i,!0),{ref:e}),n)}),cs=function(e,n){for(var r=arguments.length,i=new Array(r>2?r-2:0),o=2;oi?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r=r?t:Exe(t,e,n)}var Txe=Nxe,kxe="\\ud800-\\udfff",Pxe="\\u0300-\\u036f",Oxe="\\ufe20-\\ufe2f",Ixe="\\u20d0-\\u20ff",Rxe=Pxe+Oxe+Ixe,Mxe="\\ufe0e\\ufe0f",Dxe="\\u200d",$xe=RegExp("["+Dxe+kxe+Rxe+Mxe+"]");function Lxe(t){return $xe.test(t)}var j8=Lxe;function Fxe(t){return t.split("")}var Bxe=Fxe,E8="\\ud800-\\udfff",Uxe="\\u0300-\\u036f",zxe="\\ufe20-\\ufe2f",Hxe="\\u20d0-\\u20ff",Gxe=Uxe+zxe+Hxe,Vxe="\\ufe0e\\ufe0f",Kxe="["+E8+"]",B1="["+Gxe+"]",U1="\\ud83c[\\udffb-\\udfff]",Wxe="(?:"+B1+"|"+U1+")",N8="[^"+E8+"]",T8="(?:\\ud83c[\\udde6-\\uddff]){2}",k8="[\\ud800-\\udbff][\\udc00-\\udfff]",qxe="\\u200d",P8=Wxe+"?",O8="["+Vxe+"]?",Yxe="(?:"+qxe+"(?:"+[N8,T8,k8].join("|")+")"+O8+P8+")*",Qxe=O8+P8+Yxe,Xxe="(?:"+[N8+B1+"?",B1,T8,k8,Kxe].join("|")+")",Jxe=RegExp(U1+"(?="+U1+")|"+Xxe+Qxe,"g");function Zxe(t){return t.match(Jxe)||[]}var ebe=Zxe,tbe=Bxe,nbe=j8,rbe=ebe;function ibe(t){return nbe(t)?rbe(t):tbe(t)}var obe=ibe,sbe=Txe,abe=j8,cbe=obe,lbe=x8;function ube(t){return function(e){e=lbe(e);var n=abe(e)?cbe(e):void 0,r=n?n[0]:e.charAt(0),i=n?sbe(n,1).join(""):e.slice(1);return r[t]()+i}}var dbe=ube,fbe=dbe,hbe=fbe("toUpperCase"),pbe=hbe;const fS=hn(pbe);function Pn(t){return function(){return t}}const I8=Math.cos,kb=Math.sin,Cs=Math.sqrt,Pb=Math.PI,hS=2*Pb,z1=Math.PI,H1=2*z1,Rl=1e-6,mbe=H1-Rl;function R8(t){this._+=t[0];for(let e=1,n=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return R8;const n=10**e;return function(r){this._+=r[0];for(let i=1,o=r.length;iRl)if(!(Math.abs(f*l-u*d)>Rl)||!o)this._append`L${this._x1=e},${this._y1=n}`;else{let p=r-s,v=i-c,m=l*l+u*u,y=p*p+v*v,b=Math.sqrt(m),x=Math.sqrt(h),w=o*Math.tan((z1-Math.acos((m+h-y)/(2*b*x)))/2),S=w/x,C=w/b;Math.abs(S-1)>Rl&&this._append`L${e+S*d},${n+S*f}`,this._append`A${o},${o},0,0,${+(f*p>d*v)},${this._x1=e+C*l},${this._y1=n+C*u}`}}arc(e,n,r,i,o,s){if(e=+e,n=+n,r=+r,s=!!s,r<0)throw new Error(`negative radius: ${r}`);let c=r*Math.cos(i),l=r*Math.sin(i),u=e+c,d=n+l,f=1^s,h=s?i-o:o-i;this._x1===null?this._append`M${u},${d}`:(Math.abs(this._x1-u)>Rl||Math.abs(this._y1-d)>Rl)&&this._append`L${u},${d}`,r&&(h<0&&(h=h%H1+H1),h>mbe?this._append`A${r},${r},0,1,${f},${e-c},${n-l}A${r},${r},0,1,${f},${this._x1=u},${this._y1=d}`:h>Rl&&this._append`A${r},${r},0,${+(h>=z1)},${f},${this._x1=e+r*Math.cos(o)},${this._y1=n+r*Math.sin(o)}`)}rect(e,n,r,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+n}h${r=+r}v${+i}h${-r}Z`}toString(){return this._}}function mP(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(n==null)e=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);e=r}return t},()=>new vbe(e)}function gP(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function M8(t){this._context=t}M8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function pS(t){return new M8(t)}function D8(t){return t[0]}function $8(t){return t[1]}function L8(t,e){var n=Pn(!0),r=null,i=pS,o=null,s=mP(c);t=typeof t=="function"?t:t===void 0?D8:Pn(t),e=typeof e=="function"?e:e===void 0?$8:Pn(e);function c(l){var u,d=(l=gP(l)).length,f,h=!1,p;for(r==null&&(o=i(p=s())),u=0;u<=d;++u)!(u=p;--v)c.point(w[v],S[v]);c.lineEnd(),c.areaEnd()}b&&(w[h]=+t(y,h,f),S[h]=+e(y,h,f),c.point(r?+r(y,h,f):w[h],n?+n(y,h,f):S[h]))}if(x)return c=null,x+""||null}function d(){return L8().defined(i).curve(s).context(o)}return u.x=function(f){return arguments.length?(t=typeof f=="function"?f:Pn(+f),r=null,u):t},u.x0=function(f){return arguments.length?(t=typeof f=="function"?f:Pn(+f),u):t},u.x1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:Pn(+f),u):r},u.y=function(f){return arguments.length?(e=typeof f=="function"?f:Pn(+f),n=null,u):e},u.y0=function(f){return arguments.length?(e=typeof f=="function"?f:Pn(+f),u):e},u.y1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:Pn(+f),u):n},u.lineX0=u.lineY0=function(){return d().x(t).y(e)},u.lineY1=function(){return d().x(t).y(n)},u.lineX1=function(){return d().x(r).y(e)},u.defined=function(f){return arguments.length?(i=typeof f=="function"?f:Pn(!!f),u):i},u.curve=function(f){return arguments.length?(s=f,o!=null&&(c=s(o)),u):s},u.context=function(f){return arguments.length?(f==null?o=c=null:c=s(o=f),u):o},u}class F8{constructor(e,n){this._context=e,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,n){switch(e=+e,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,n):this._context.moveTo(e,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,n,e,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,e,this._y0,e,n);break}}this._x0=e,this._y0=n}}function ybe(t){return new F8(t,!0)}function xbe(t){return new F8(t,!1)}const vP={draw(t,e){const n=Cs(e/Pb);t.moveTo(n,0),t.arc(0,0,n,0,hS)}},bbe={draw(t,e){const n=Cs(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},B8=Cs(1/3),wbe=B8*2,Sbe={draw(t,e){const n=Cs(e/wbe),r=n*B8;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},Cbe={draw(t,e){const n=Cs(e),r=-n/2;t.rect(r,r,n,n)}},_be=.8908130915292852,U8=kb(Pb/10)/kb(7*Pb/10),Abe=kb(hS/10)*U8,jbe=-I8(hS/10)*U8,Ebe={draw(t,e){const n=Cs(e*_be),r=Abe*n,i=jbe*n;t.moveTo(0,-n),t.lineTo(r,i);for(let o=1;o<5;++o){const s=hS*o/5,c=I8(s),l=kb(s);t.lineTo(l*n,-c*n),t.lineTo(c*r-l*i,l*r+c*i)}t.closePath()}},JC=Cs(3),Nbe={draw(t,e){const n=-Cs(e/(JC*3));t.moveTo(0,n*2),t.lineTo(-JC*n,-n),t.lineTo(JC*n,-n),t.closePath()}},lo=-.5,uo=Cs(3)/2,G1=1/Cs(12),Tbe=(G1/2+1)*3,kbe={draw(t,e){const n=Cs(e/Tbe),r=n/2,i=n*G1,o=r,s=n*G1+n,c=-o,l=s;t.moveTo(r,i),t.lineTo(o,s),t.lineTo(c,l),t.lineTo(lo*r-uo*i,uo*r+lo*i),t.lineTo(lo*o-uo*s,uo*o+lo*s),t.lineTo(lo*c-uo*l,uo*c+lo*l),t.lineTo(lo*r+uo*i,lo*i-uo*r),t.lineTo(lo*o+uo*s,lo*s-uo*o),t.lineTo(lo*c+uo*l,lo*l-uo*c),t.closePath()}};function Pbe(t,e){let n=null,r=mP(i);t=typeof t=="function"?t:Pn(t||vP),e=typeof e=="function"?e:Pn(e===void 0?64:+e);function i(){let o;if(n||(n=o=r()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),o)return n=null,o+""||null}return i.type=function(o){return arguments.length?(t=typeof o=="function"?o:Pn(o),i):t},i.size=function(o){return arguments.length?(e=typeof o=="function"?o:Pn(+o),i):e},i.context=function(o){return arguments.length?(n=o??null,i):n},i}function Ob(){}function Ib(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function z8(t){this._context=t}z8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ib(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ib(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Obe(t){return new z8(t)}function H8(t){this._context=t}H8.prototype={areaStart:Ob,areaEnd:Ob,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Ib(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Ibe(t){return new H8(t)}function G8(t){this._context=t}G8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Ib(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Rbe(t){return new G8(t)}function V8(t){this._context=t}V8.prototype={areaStart:Ob,areaEnd:Ob,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function Mbe(t){return new V8(t)}function uM(t){return t<0?-1:1}function dM(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),s=(n-t._y1)/(i||r<0&&-0),c=(o*i+s*r)/(r+i);return(uM(o)+uM(s))*Math.min(Math.abs(o),Math.abs(s),.5*Math.abs(c))||0}function fM(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function ZC(t,e,n){var r=t._x0,i=t._y0,o=t._x1,s=t._y1,c=(o-r)/3;t._context.bezierCurveTo(r+c,i+c*e,o-c,s-c*n,o,s)}function Rb(t){this._context=t}Rb.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:ZC(this,this._t0,fM(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,ZC(this,fM(this,n=dM(this,t,e)),n);break;default:ZC(this,this._t0,n=dM(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}};function K8(t){this._context=new W8(t)}(K8.prototype=Object.create(Rb.prototype)).point=function(t,e){Rb.prototype.point.call(this,e,t)};function W8(t){this._context=t}W8.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,o){this._context.bezierCurveTo(e,t,r,n,o,i)}};function Dbe(t){return new Rb(t)}function $be(t){return new K8(t)}function q8(t){this._context=t}q8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),n===2)this._context.lineTo(t[1],e[1]);else for(var r=hM(t),i=hM(e),o=0,s=1;s=0;--e)i[e]=(s[e]-i[e+1])/o[e];for(o[n-1]=(t[n]+i[n-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}break}}this._x=t,this._y=e}};function Fbe(t){return new mS(t,.5)}function Bbe(t){return new mS(t,0)}function Ube(t){return new mS(t,1)}function hf(t,e){if((s=t.length)>1)for(var n=1,r,i,o=t[e[0]],s,c=o.length;n=0;)n[e]=e;return n}function zbe(t,e){return t[e]}function Hbe(t){const e=[];return e.key=t,e}function Gbe(){var t=Pn([]),e=V1,n=hf,r=zbe;function i(o){var s=Array.from(t.apply(this,arguments),Hbe),c,l=s.length,u=-1,d;for(const f of o)for(c=0,++u;c0){for(var n,r,i=0,o=t[0].length,s;i0){for(var n=0,r=t[e[0]],i,o=r.length;n0)||!((o=(i=t[e[0]]).length)>0))){for(var n=0,r=1,i,o,s;r=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function Zbe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var Y8={symbolCircle:vP,symbolCross:bbe,symbolDiamond:Sbe,symbolSquare:Cbe,symbolStar:Ebe,symbolTriangle:Nbe,symbolWye:kbe},e0e=Math.PI/180,t0e=function(e){var n="symbol".concat(fS(e));return Y8[n]||vP},n0e=function(e,n,r){if(n==="area")return e;switch(r){case"cross":return 5*e*e/9;case"diamond":return .5*e*e/Math.sqrt(3);case"square":return e*e;case"star":{var i=18*e0e;return 1.25*e*e*(Math.tan(i)-Math.tan(i*2)*Math.pow(Math.tan(i),2))}case"triangle":return Math.sqrt(3)*e*e/4;case"wye":return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},r0e=function(e,n){Y8["symbol".concat(fS(e))]=n},yP=function(e){var n=e.type,r=n===void 0?"circle":n,i=e.size,o=i===void 0?64:i,s=e.sizeType,c=s===void 0?"area":s,l=Jbe(e,qbe),u=mM(mM({},l),{},{type:r,size:o,sizeType:c}),d=function(){var y=t0e(r),b=Pbe().type(y).size(n0e(o,c,r));return b()},f=u.className,h=u.cx,p=u.cy,v=ft(u,!0);return h===+h&&p===+p&&o===+o?T.createElement("path",K1({},v,{className:Mt("recharts-symbols",f),transform:"translate(".concat(h,", ").concat(p,")"),d:d()})):null};yP.registerSymbol=r0e;function pf(t){"@babel/helpers - typeof";return pf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pf(t)}function W1(){return W1=Object.assign?Object.assign.bind():function(t){for(var e=1;e`);var x=p.inactive?u:p.color;return T.createElement("li",W1({className:y,style:f,key:"legend-item-".concat(v)},ju(r.props,p,v)),T.createElement(L1,{width:s,height:s,viewBox:d,style:h},r.renderIcon(p)),T.createElement("span",{className:"recharts-legend-item-text",style:{color:x}},m?m(b,p,v):b))})}},{key:"render",value:function(){var r=this.props,i=r.payload,o=r.layout,s=r.align;if(!i||!i.length)return null;var c={padding:0,margin:0,textAlign:o==="horizontal"?s:"left"};return T.createElement("ul",{className:"recharts-default-legend",style:c},this.renderItems())}}])}(g.PureComponent);Gm(xP,"displayName","Legend");Gm(xP,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var h0e=Zw;function p0e(){this.__data__=new h0e,this.size=0}var m0e=p0e;function g0e(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}var v0e=g0e;function y0e(t){return this.__data__.get(t)}var x0e=y0e;function b0e(t){return this.__data__.has(t)}var w0e=b0e,S0e=Zw,C0e=sP,_0e=aP,A0e=200;function j0e(t,e){var n=this.__data__;if(n instanceof S0e){var r=n.__data__;if(!C0e||r.lengthc))return!1;var u=o.get(t),d=o.get(e);if(u&&d)return u==e&&d==t;var f=-1,h=!0,p=n&q0e?new G0e:void 0;for(o.set(t,e),o.set(e,t);++f-1&&t%1==0&&t-1&&t%1==0&&t<=Jwe}var CP=Zwe,eSe=tc,tSe=CP,nSe=nc,rSe="[object Arguments]",iSe="[object Array]",oSe="[object Boolean]",sSe="[object Date]",aSe="[object Error]",cSe="[object Function]",lSe="[object Map]",uSe="[object Number]",dSe="[object Object]",fSe="[object RegExp]",hSe="[object Set]",pSe="[object String]",mSe="[object WeakMap]",gSe="[object ArrayBuffer]",vSe="[object DataView]",ySe="[object Float32Array]",xSe="[object Float64Array]",bSe="[object Int8Array]",wSe="[object Int16Array]",SSe="[object Int32Array]",CSe="[object Uint8Array]",_Se="[object Uint8ClampedArray]",ASe="[object Uint16Array]",jSe="[object Uint32Array]",Dn={};Dn[ySe]=Dn[xSe]=Dn[bSe]=Dn[wSe]=Dn[SSe]=Dn[CSe]=Dn[_Se]=Dn[ASe]=Dn[jSe]=!0;Dn[rSe]=Dn[iSe]=Dn[gSe]=Dn[oSe]=Dn[vSe]=Dn[sSe]=Dn[aSe]=Dn[cSe]=Dn[lSe]=Dn[uSe]=Dn[dSe]=Dn[fSe]=Dn[hSe]=Dn[pSe]=Dn[mSe]=!1;function ESe(t){return nSe(t)&&tSe(t.length)&&!!Dn[eSe(t)]}var NSe=ESe;function TSe(t){return function(e){return t(e)}}var sK=TSe,Lb={exports:{}};Lb.exports;(function(t,e){var n=h8,r=e&&!e.nodeType&&e,i=r&&!0&&t&&!t.nodeType&&t,o=i&&i.exports===r,s=o&&n.process,c=function(){try{var l=i&&i.require&&i.require("util").types;return l||s&&s.binding&&s.binding("util")}catch{}}();t.exports=c})(Lb,Lb.exports);var kSe=Lb.exports,PSe=NSe,OSe=sK,SM=kSe,CM=SM&&SM.isTypedArray,ISe=CM?OSe(CM):PSe,aK=ISe,RSe=$we,MSe=wP,DSe=Hi,$Se=oK,LSe=SP,FSe=aK,BSe=Object.prototype,USe=BSe.hasOwnProperty;function zSe(t,e){var n=DSe(t),r=!n&&MSe(t),i=!n&&!r&&$Se(t),o=!n&&!r&&!i&&FSe(t),s=n||r||i||o,c=s?RSe(t.length,String):[],l=c.length;for(var u in t)(e||USe.call(t,u))&&!(s&&(u=="length"||i&&(u=="offset"||u=="parent")||o&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||LSe(u,l)))&&c.push(u);return c}var HSe=zSe,GSe=Object.prototype;function VSe(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||GSe;return t===n}var KSe=VSe;function WSe(t,e){return function(n){return t(e(n))}}var cK=WSe,qSe=cK,YSe=qSe(Object.keys,Object),QSe=YSe,XSe=KSe,JSe=QSe,ZSe=Object.prototype,eCe=ZSe.hasOwnProperty;function tCe(t){if(!XSe(t))return JSe(t);var e=[];for(var n in Object(t))eCe.call(t,n)&&n!="constructor"&&e.push(n);return e}var nCe=tCe,rCe=iP,iCe=CP;function oCe(t){return t!=null&&iCe(t.length)&&!rCe(t)}var rv=oCe,sCe=HSe,aCe=nCe,cCe=rv;function lCe(t){return cCe(t)?sCe(t):aCe(t)}var gS=lCe,uCe=Awe,dCe=Mwe,fCe=gS;function hCe(t){return uCe(t,fCe,dCe)}var pCe=hCe,_M=pCe,mCe=1,gCe=Object.prototype,vCe=gCe.hasOwnProperty;function yCe(t,e,n,r,i,o){var s=n&mCe,c=_M(t),l=c.length,u=_M(e),d=u.length;if(l!=d&&!s)return!1;for(var f=l;f--;){var h=c[f];if(!(s?h in e:vCe.call(e,h)))return!1}var p=o.get(t),v=o.get(e);if(p&&v)return p==e&&v==t;var m=!0;o.set(t,e),o.set(e,t);for(var y=s;++f-1}var gAe=mAe;function vAe(t,e,n){for(var r=-1,i=t==null?0:t.length;++r=OAe){var u=e?null:kAe(t);if(u)return PAe(u);s=!1,i=TAe,l=new jAe}else l=e?[]:c;e:for(;++r=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function qAe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function YAe(t){return t.value}function QAe(t,e){if(T.isValidElement(t))return T.cloneElement(t,e);if(typeof t=="function")return T.createElement(t,e);e.ref;var n=WAe(e,FAe);return T.createElement(xP,n)}var BM=1,Da=function(t){function e(){var n;BAe(this,e);for(var r=arguments.length,i=new Array(r),o=0;oBM||Math.abs(i.height-this.lastBoundingBox.height)>BM)&&(this.lastBoundingBox.width=i.width,this.lastBoundingBox.height=i.height,r&&r(i)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?da({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var i=this.props,o=i.layout,s=i.align,c=i.verticalAlign,l=i.margin,u=i.chartWidth,d=i.chartHeight,f,h;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(s==="center"&&o==="vertical"){var p=this.getBBoxSnapshot();f={left:((u||0)-p.width)/2}}else f=s==="right"?{right:l&&l.right||0}:{left:l&&l.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(c==="middle"){var v=this.getBBoxSnapshot();h={top:((d||0)-v.height)/2}}else h=c==="bottom"?{bottom:l&&l.bottom||0}:{top:l&&l.top||0};return da(da({},f),h)}},{key:"render",value:function(){var r=this,i=this.props,o=i.content,s=i.width,c=i.height,l=i.wrapperStyle,u=i.payloadUniqBy,d=i.payload,f=da(da({position:"absolute",width:s||"auto",height:c||"auto"},this.getDefaultPosition(l)),l);return T.createElement("div",{className:"recharts-legend-wrapper",style:f,ref:function(p){r.wrapperNode=p}},QAe(o,da(da({},this.props),{},{payload:mK(d,u,YAe)})))}}],[{key:"getWithHeight",value:function(r,i){var o=da(da({},this.defaultProps),r.props),s=o.layout;return s==="vertical"&&De(r.props.height)?{height:r.props.height}:s==="horizontal"?{width:r.props.width||i}:null}}])}(g.PureComponent);vS(Da,"displayName","Legend");vS(Da,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var UM=tv,XAe=wP,JAe=Hi,zM=UM?UM.isConcatSpreadable:void 0;function ZAe(t){return JAe(t)||XAe(t)||!!(zM&&t&&t[zM])}var e1e=ZAe,t1e=rK,n1e=e1e;function yK(t,e,n,r,i){var o=-1,s=t.length;for(n||(n=n1e),i||(i=[]);++o0&&n(c)?e>1?yK(c,e-1,n,r,i):t1e(i,c):r||(i[i.length]=c)}return i}var xK=yK;function r1e(t){return function(e,n,r){for(var i=-1,o=Object(e),s=r(e),c=s.length;c--;){var l=s[t?c:++i];if(n(o[l],l,o)===!1)break}return e}}var i1e=r1e,o1e=i1e,s1e=o1e(),a1e=s1e,c1e=a1e,l1e=gS;function u1e(t,e){return t&&c1e(t,e,l1e)}var bK=u1e,d1e=rv;function f1e(t,e){return function(n,r){if(n==null)return n;if(!d1e(n))return t(n,r);for(var i=n.length,o=e?i:-1,s=Object(n);(e?o--:++oe||o&&s&&l&&!c&&!u||r&&s&&l||!n&&l||!i)return 1;if(!r&&!o&&!u&&t=c)return l;var u=n[r];return l*(u=="desc"?-1:1)}}return t.index-e.index}var j1e=A1e,r_=lP,E1e=uP,N1e=aa,T1e=wK,k1e=w1e,P1e=sK,O1e=j1e,I1e=gh,R1e=Hi;function M1e(t,e,n){e.length?e=r_(e,function(o){return R1e(o)?function(s){return E1e(s,o.length===1?o[0]:o)}:o}):e=[I1e];var r=-1;e=r_(e,P1e(N1e));var i=T1e(t,function(o,s,c){var l=r_(e,function(u){return u(o)});return{criteria:l,index:++r,value:o}});return k1e(i,function(o,s){return O1e(o,s,n)})}var D1e=M1e;function $1e(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}var L1e=$1e,F1e=L1e,GM=Math.max;function B1e(t,e,n){return e=GM(e===void 0?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=GM(r.length-e,0),s=Array(o);++i0){if(++e>=Q1e)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var eje=Z1e,tje=Y1e,nje=eje,rje=nje(tje),ije=rje,oje=gh,sje=U1e,aje=ije;function cje(t,e){return aje(sje(t,e,oje),t+"")}var lje=cje,uje=oP,dje=rv,fje=SP,hje=Sl;function pje(t,e,n){if(!hje(n))return!1;var r=typeof e;return(r=="number"?dje(n)&&fje(e,n.length):r=="string"&&e in n)?uje(n[e],t):!1}var yS=pje,mje=xK,gje=D1e,vje=lje,KM=yS,yje=vje(function(t,e){if(t==null)return[];var n=e.length;return n>1&&KM(t,e[0],e[1])?e=[]:n>2&&KM(e[0],e[1],e[2])&&(e=[e[0]]),gje(t,mje(e,1),[])}),xje=yje;const jP=hn(xje);function Vm(t){"@babel/helpers - typeof";return Vm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vm(t)}function tj(){return tj=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=e.x),"".concat(Hh,"-left"),De(n)&&e&&De(e.x)&&n=e.y),"".concat(Hh,"-top"),De(r)&&e&&De(e.y)&&rm?Math.max(d,l[r]):Math.max(f,l[r])}function Rje(t){var e=t.translateX,n=t.translateY,r=t.useTranslate3d;return{transform:r?"translate3d(".concat(e,"px, ").concat(n,"px, 0)"):"translate(".concat(e,"px, ").concat(n,"px)")}}function Mje(t){var e=t.allowEscapeViewBox,n=t.coordinate,r=t.offsetTopLeft,i=t.position,o=t.reverseDirection,s=t.tooltipBox,c=t.useTranslate3d,l=t.viewBox,u,d,f;return s.height>0&&s.width>0&&n?(d=YM({allowEscapeViewBox:e,coordinate:n,key:"x",offsetTopLeft:r,position:i,reverseDirection:o,tooltipDimension:s.width,viewBox:l,viewBoxDimension:l.width}),f=YM({allowEscapeViewBox:e,coordinate:n,key:"y",offsetTopLeft:r,position:i,reverseDirection:o,tooltipDimension:s.height,viewBox:l,viewBoxDimension:l.height}),u=Rje({translateX:d,translateY:f,useTranslate3d:c})):u=Oje,{cssProperties:u,cssClasses:Ije({translateX:d,translateY:f,coordinate:n})}}function gf(t){"@babel/helpers - typeof";return gf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gf(t)}function QM(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function XM(t){for(var e=1;eJM||Math.abs(r.height-this.state.lastBoundingBox.height)>JM)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,i;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((i=this.props.coordinate)===null||i===void 0?void 0:i.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,i=this.props,o=i.active,s=i.allowEscapeViewBox,c=i.animationDuration,l=i.animationEasing,u=i.children,d=i.coordinate,f=i.hasPayload,h=i.isAnimationActive,p=i.offset,v=i.position,m=i.reverseDirection,y=i.useTranslate3d,b=i.viewBox,x=i.wrapperStyle,w=Mje({allowEscapeViewBox:s,coordinate:d,offsetTopLeft:p,position:v,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:y,viewBox:b}),S=w.cssClasses,C=w.cssProperties,_=XM(XM({transition:h&&o?"transform ".concat(c,"ms ").concat(l):void 0},C),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&f?"visible":"hidden",position:"absolute",top:0,left:0},x);return T.createElement("div",{tabIndex:-1,className:S,style:_,ref:function(j){r.wrapperNode=j}},u)}}])}(g.PureComponent),Vje=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},ls={isSsr:Vje(),get:function(e){return ls[e]},set:function(e,n){if(typeof e=="string")ls[e]=n;else{var r=Object.keys(e);r&&r.length&&r.forEach(function(i){ls[i]=e[i]})}}};function vf(t){"@babel/helpers - typeof";return vf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vf(t)}function ZM(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function eD(t){for(var e=1;e0;return T.createElement(Gje,{allowEscapeViewBox:s,animationDuration:c,animationEasing:l,isAnimationActive:h,active:o,coordinate:d,hasPayload:_,offset:p,position:y,reverseDirection:b,useTranslate3d:x,viewBox:w,wrapperStyle:S},tEe(u,eD(eD({},this.props),{},{payload:C})))}}])}(g.PureComponent);EP(ni,"displayName","Tooltip");EP(ni,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!ls.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var nEe=sa,rEe=function(){return nEe.Date.now()},iEe=rEe,oEe=/\s/;function sEe(t){for(var e=t.length;e--&&oEe.test(t.charAt(e)););return e}var aEe=sEe,cEe=aEe,lEe=/^\s+/;function uEe(t){return t&&t.slice(0,cEe(t)+1).replace(lEe,"")}var dEe=uEe,fEe=dEe,tD=Sl,hEe=ah,nD=NaN,pEe=/^[-+]0x[0-9a-f]+$/i,mEe=/^0b[01]+$/i,gEe=/^0o[0-7]+$/i,vEe=parseInt;function yEe(t){if(typeof t=="number")return t;if(hEe(t))return nD;if(tD(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=tD(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=fEe(t);var n=mEe.test(t);return n||gEe.test(t)?vEe(t.slice(2),n?2:8):pEe.test(t)?nD:+t}var EK=yEe,xEe=Sl,o_=iEe,rD=EK,bEe="Expected a function",wEe=Math.max,SEe=Math.min;function CEe(t,e,n){var r,i,o,s,c,l,u=0,d=!1,f=!1,h=!0;if(typeof t!="function")throw new TypeError(bEe);e=rD(e)||0,xEe(n)&&(d=!!n.leading,f="maxWait"in n,o=f?wEe(rD(n.maxWait)||0,e):o,h="trailing"in n?!!n.trailing:h);function p(_){var A=r,j=i;return r=i=void 0,u=_,s=t.apply(j,A),s}function v(_){return u=_,c=setTimeout(b,e),d?p(_):s}function m(_){var A=_-l,j=_-u,N=e-A;return f?SEe(N,o-j):N}function y(_){var A=_-l,j=_-u;return l===void 0||A>=e||A<0||f&&j>=o}function b(){var _=o_();if(y(_))return x(_);c=setTimeout(b,m(_))}function x(_){return c=void 0,h&&r?p(_):(r=i=void 0,s)}function w(){c!==void 0&&clearTimeout(c),u=0,r=l=i=c=void 0}function S(){return c===void 0?s:x(o_())}function C(){var _=o_(),A=y(_);if(r=arguments,i=this,l=_,A){if(c===void 0)return v(l);if(f)return clearTimeout(c),c=setTimeout(b,e),p(l)}return c===void 0&&(c=setTimeout(b,e)),s}return C.cancel=w,C.flush=S,C}var _Ee=CEe,AEe=_Ee,jEe=Sl,EEe="Expected a function";function NEe(t,e,n){var r=!0,i=!0;if(typeof t!="function")throw new TypeError(EEe);return jEe(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),AEe(t,e,{leading:r,maxWait:e,trailing:i})}var TEe=NEe;const NK=hn(TEe);function Wm(t){"@babel/helpers - typeof";return Wm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wm(t)}function iD(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function ny(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&(R=NK(R,m,{trailing:!0,leading:!1}));var D=new ResizeObserver(R),G=C.current.getBoundingClientRect(),L=G.width,z=G.height;return O(L,z),D.observe(C.current),function(){D.disconnect()}},[O,m]);var E=g.useMemo(function(){var R=N.containerWidth,D=N.containerHeight;if(R<0||D<0)return null;cs(Kl(s)||Kl(l),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,s,l),cs(!n||n>0,"The aspect(%s) must be greater than zero.",n);var G=Kl(s)?R:s,L=Kl(l)?D:l;n&&n>0&&(G?L=G/n:L&&(G=L*n),h&&L>h&&(L=h)),cs(G>0||L>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,G,L,s,l,d,f,n);var z=!Array.isArray(p)&&Ma(p.type).endsWith("Chart");return T.Children.map(p,function(M){return _8.isElement(M)?g.cloneElement(M,ny({width:G,height:L},z?{style:ny({height:"100%",width:"100%",maxHeight:L,maxWidth:G},M.props.style)}:{})):M})},[n,p,l,h,f,d,N,s]);return T.createElement("div",{id:y?"".concat(y):void 0,className:Mt("recharts-responsive-container",b),style:ny(ny({},S),{},{width:s,height:l,minWidth:d,minHeight:f,maxHeight:h}),ref:C},E)}),iv=function(e){return null};iv.displayName="Cell";function qm(t){"@babel/helpers - typeof";return qm=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qm(t)}function sD(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function oj(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{};if(e==null||ls.isSsr)return{width:0,height:0};var r=HEe(n),i=JSON.stringify({text:e,copyStyle:r});if(Xu.widthCache[i])return Xu.widthCache[i];try{var o=document.getElementById(aD);o||(o=document.createElement("span"),o.setAttribute("id",aD),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var s=oj(oj({},zEe),r);Object.assign(o.style,s),o.textContent="".concat(e);var c=o.getBoundingClientRect(),l={width:c.width,height:c.height};return Xu.widthCache[i]=l,++Xu.cacheCount>UEe&&(Xu.cacheCount=0,Xu.widthCache={}),l}catch{return{width:0,height:0}}},GEe=function(e){return{top:e.top+window.scrollY-document.documentElement.clientTop,left:e.left+window.scrollX-document.documentElement.clientLeft}};function Ym(t){"@babel/helpers - typeof";return Ym=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ym(t)}function zb(t,e){return qEe(t)||WEe(t,e)||KEe(t,e)||VEe()}function VEe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function KEe(t,e){if(t){if(typeof t=="string")return cD(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return cD(t,e)}}function cD(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function cNe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function pD(t,e){return fNe(t)||dNe(t,e)||uNe(t,e)||lNe()}function lNe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function uNe(t,e){if(t){if(typeof t=="string")return mD(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return mD(t,e)}}function mD(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:[];return G.reduce(function(L,z){var M=z.word,$=z.width,Q=L[L.length-1];if(Q&&(i==null||o||Q.width+$+rz.width?L:z})};if(!d)return p;for(var m="…",y=function(G){var L=f.slice(0,G),z=OK({breakAll:u,style:l,children:L+m}).wordsWithComputedWidth,M=h(z),$=M.length>s||v(M).width>Number(i);return[$,M]},b=0,x=f.length-1,w=0,S;b<=x&&w<=f.length-1;){var C=Math.floor((b+x)/2),_=C-1,A=y(_),j=pD(A,2),N=j[0],k=j[1],O=y(C),E=pD(O,1),R=E[0];if(!N&&!R&&(b=C+1),N&&R&&(x=C-1),!N&&R){S=k;break}w++}return S||p},gD=function(e){var n=Lt(e)?[]:e.toString().split(PK);return[{words:n}]},pNe=function(e){var n=e.width,r=e.scaleToFit,i=e.children,o=e.style,s=e.breakAll,c=e.maxLines;if((n||r)&&!ls.isSsr){var l,u,d=OK({breakAll:s,children:i,style:o});if(d){var f=d.wordsWithComputedWidth,h=d.spaceWidth;l=f,u=h}else return gD(i);return hNe({breakAll:s,children:i,maxLines:c,style:o},l,u,n,r)}return gD(i)},vD="#808080",Eu=function(e){var n=e.x,r=n===void 0?0:n,i=e.y,o=i===void 0?0:i,s=e.lineHeight,c=s===void 0?"1em":s,l=e.capHeight,u=l===void 0?"0.71em":l,d=e.scaleToFit,f=d===void 0?!1:d,h=e.textAnchor,p=h===void 0?"start":h,v=e.verticalAnchor,m=v===void 0?"end":v,y=e.fill,b=y===void 0?vD:y,x=hD(e,sNe),w=g.useMemo(function(){return pNe({breakAll:x.breakAll,children:x.children,maxLines:x.maxLines,scaleToFit:f,style:x.style,width:x.width})},[x.breakAll,x.children,x.maxLines,f,x.style,x.width]),S=x.dx,C=x.dy,_=x.angle,A=x.className,j=x.breakAll,N=hD(x,aNe);if(!Tr(r)||!Tr(o))return null;var k=r+(De(S)?S:0),O=o+(De(C)?C:0),E;switch(m){case"start":E=s_("calc(".concat(u,")"));break;case"middle":E=s_("calc(".concat((w.length-1)/2," * -").concat(c," + (").concat(u," / 2))"));break;default:E=s_("calc(".concat(w.length-1," * -").concat(c,")"));break}var R=[];if(f){var D=w[0].width,G=x.width;R.push("scale(".concat((De(G)?G/D:1)/D,")"))}return _&&R.push("rotate(".concat(_,", ").concat(k,", ").concat(O,")")),R.length&&(N.transform=R.join(" ")),T.createElement("text",sj({},ft(N,!0),{x:k,y:O,className:Mt("recharts-text",A),textAnchor:p,fill:b.includes("url")?vD:b}),w.map(function(L,z){var M=L.words.join(j?"":" ");return T.createElement("tspan",{x:k,dy:z===0?E:c,key:"".concat(M,"-").concat(z)},M)}))};function Xc(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}function mNe(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}function NP(t){let e,n,r;t.length!==2?(e=Xc,n=(c,l)=>Xc(t(c),l),r=(c,l)=>t(c)-l):(e=t===Xc||t===mNe?t:gNe,n=t,r=t);function i(c,l,u=0,d=c.length){if(u>>1;n(c[f],l)<0?u=f+1:d=f}while(u>>1;n(c[f],l)<=0?u=f+1:d=f}while(uu&&r(c[f-1],l)>-r(c[f],l)?f-1:f}return{left:i,center:s,right:o}}function gNe(){return 0}function IK(t){return t===null?NaN:+t}function*vNe(t,e){for(let n of t)n!=null&&(n=+n)>=n&&(yield n)}const yNe=NP(Xc),ov=yNe.right;NP(IK).center;class yD extends Map{constructor(e,n=wNe){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(xD(this,e))}has(e){return super.has(xD(this,e))}set(e,n){return super.set(xNe(this,e),n)}delete(e){return super.delete(bNe(this,e))}}function xD({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function xNe({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function bNe({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function wNe(t){return t!==null&&typeof t=="object"?t.valueOf():t}function SNe(t=Xc){if(t===Xc)return RK;if(typeof t!="function")throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||r===0?r:(t(n,n)===0)-(t(e,e)===0)}}function RK(t,e){return(t==null||!(t>=t))-(e==null||!(e>=e))||(te?1:0)}const CNe=Math.sqrt(50),_Ne=Math.sqrt(10),ANe=Math.sqrt(2);function Hb(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),o=r/Math.pow(10,i),s=o>=CNe?10:o>=_Ne?5:o>=ANe?2:1;let c,l,u;return i<0?(u=Math.pow(10,-i)/s,c=Math.round(t*u),l=Math.round(e*u),c/ue&&--l,u=-u):(u=Math.pow(10,i)*s,c=Math.round(t/u),l=Math.round(e/u),c*ue&&--l),l0))return[];if(t===e)return[t];const r=e=i))return[];const c=o-i+1,l=new Array(c);if(r)if(s<0)for(let u=0;u=r)&&(n=r);return n}function wD(t,e){let n;for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function MK(t,e,n=0,r=1/0,i){if(e=Math.floor(e),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(t.length-1,r)),!(n<=e&&e<=r))return t;for(i=i===void 0?RK:SNe(i);r>n;){if(r-n>600){const l=r-n+1,u=e-n+1,d=Math.log(l),f=.5*Math.exp(2*d/3),h=.5*Math.sqrt(d*f*(l-f)/l)*(u-l/2<0?-1:1),p=Math.max(n,Math.floor(e-u*f/l+h)),v=Math.min(r,Math.floor(e+(l-u)*f/l+h));MK(t,e,p,v,i)}const o=t[e];let s=n,c=r;for(Gh(t,n,e),i(t[r],o)>0&&Gh(t,n,r);s0;)--c}i(t[n],o)===0?Gh(t,n,c):(++c,Gh(t,c,r)),c<=e&&(n=c+1),e<=c&&(r=c-1)}return t}function Gh(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function jNe(t,e,n){if(t=Float64Array.from(vNe(t)),!(!(r=t.length)||isNaN(e=+e))){if(e<=0||r<2)return wD(t);if(e>=1)return bD(t);var r,i=(r-1)*e,o=Math.floor(i),s=bD(MK(t,o).subarray(0,o+1)),c=wD(t.subarray(o+1));return s+(c-s)*(i-o)}}function ENe(t,e,n=IK){if(!(!(r=t.length)||isNaN(e=+e))){if(e<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),s=+n(t[o],o,t),c=+n(t[o+1],o+1,t);return s+(c-s)*(i-o)}}function NNe(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,o=new Array(i);++r>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?iy(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?iy(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=kNe.exec(t))?new Pi(e[1],e[2],e[3],1):(e=PNe.exec(t))?new Pi(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ONe.exec(t))?iy(e[1],e[2],e[3],e[4]):(e=INe.exec(t))?iy(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=RNe.exec(t))?ND(e[1],e[2]/100,e[3]/100,1):(e=MNe.exec(t))?ND(e[1],e[2]/100,e[3]/100,e[4]):SD.hasOwnProperty(t)?AD(SD[t]):t==="transparent"?new Pi(NaN,NaN,NaN,0):null}function AD(t){return new Pi(t>>16&255,t>>8&255,t&255,1)}function iy(t,e,n,r){return r<=0&&(t=e=n=NaN),new Pi(t,e,n,r)}function LNe(t){return t instanceof sv||(t=Zm(t)),t?(t=t.rgb(),new Pi(t.r,t.g,t.b,t.opacity)):new Pi}function dj(t,e,n,r){return arguments.length===1?LNe(t):new Pi(t,e,n,r??1)}function Pi(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}kP(Pi,dj,$K(sv,{brighter(t){return t=t==null?Gb:Math.pow(Gb,t),new Pi(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Xm:Math.pow(Xm,t),new Pi(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Pi(su(this.r),su(this.g),su(this.b),Vb(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:jD,formatHex:jD,formatHex8:FNe,formatRgb:ED,toString:ED}));function jD(){return`#${Wl(this.r)}${Wl(this.g)}${Wl(this.b)}`}function FNe(){return`#${Wl(this.r)}${Wl(this.g)}${Wl(this.b)}${Wl((isNaN(this.opacity)?1:this.opacity)*255)}`}function ED(){const t=Vb(this.opacity);return`${t===1?"rgb(":"rgba("}${su(this.r)}, ${su(this.g)}, ${su(this.b)}${t===1?")":`, ${t})`}`}function Vb(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function su(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Wl(t){return t=su(t),(t<16?"0":"")+t.toString(16)}function ND(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Zo(t,e,n,r)}function LK(t){if(t instanceof Zo)return new Zo(t.h,t.s,t.l,t.opacity);if(t instanceof sv||(t=Zm(t)),!t)return new Zo;if(t instanceof Zo)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),s=NaN,c=o-i,l=(o+i)/2;return c?(e===o?s=(n-r)/c+(n0&&l<1?0:s,new Zo(s,c,l,t.opacity)}function BNe(t,e,n,r){return arguments.length===1?LK(t):new Zo(t,e,n,r??1)}function Zo(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}kP(Zo,BNe,$K(sv,{brighter(t){return t=t==null?Gb:Math.pow(Gb,t),new Zo(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Xm:Math.pow(Xm,t),new Zo(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Pi(a_(t>=240?t-240:t+120,i,r),a_(t,i,r),a_(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Zo(TD(this.h),oy(this.s),oy(this.l),Vb(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Vb(this.opacity);return`${t===1?"hsl(":"hsla("}${TD(this.h)}, ${oy(this.s)*100}%, ${oy(this.l)*100}%${t===1?")":`, ${t})`}`}}));function TD(t){return t=(t||0)%360,t<0?t+360:t}function oy(t){return Math.max(0,Math.min(1,t||0))}function a_(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const PP=t=>()=>t;function UNe(t,e){return function(n){return t+n*e}}function zNe(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function HNe(t){return(t=+t)==1?FK:function(e,n){return n-e?zNe(e,n,t):PP(isNaN(e)?n:e)}}function FK(t,e){var n=e-t;return n?UNe(t,n):PP(isNaN(t)?e:t)}const kD=function t(e){var n=HNe(e);function r(i,o){var s=n((i=dj(i)).r,(o=dj(o)).r),c=n(i.g,o.g),l=n(i.b,o.b),u=FK(i.opacity,o.opacity);return function(d){return i.r=s(d),i.g=c(d),i.b=l(d),i.opacity=u(d),i+""}}return r.gamma=t,r}(1);function GNe(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(o){for(i=0;in&&(o=e.slice(n,o),c[s]?c[s]+=o:c[++s]=o),(r=r[0])===(i=i[0])?c[s]?c[s]+=i:c[++s]=i:(c[++s]=null,l.push({i:s,x:Kb(r,i)})),n=c_.lastIndex;return ne&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function tTe(t,e,n){var r=t[0],i=t[1],o=e[0],s=e[1];return i2?nTe:tTe,l=u=null,f}function f(h){return h==null||isNaN(h=+h)?o:(l||(l=c(t.map(r),e,n)))(r(s(h)))}return f.invert=function(h){return s(i((u||(u=c(e,t.map(r),Kb)))(h)))},f.domain=function(h){return arguments.length?(t=Array.from(h,Wb),d()):t.slice()},f.range=function(h){return arguments.length?(e=Array.from(h),d()):e.slice()},f.rangeRound=function(h){return e=Array.from(h),n=OP,d()},f.clamp=function(h){return arguments.length?(s=h?!0:xi,d()):s!==xi},f.interpolate=function(h){return arguments.length?(n=h,d()):n},f.unknown=function(h){return arguments.length?(o=h,f):o},function(h,p){return r=h,i=p,d()}}function IP(){return xS()(xi,xi)}function rTe(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function qb(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function yf(t){return t=qb(Math.abs(t)),t?t[1]:NaN}function iTe(t,e){return function(n,r){for(var i=n.length,o=[],s=0,c=t[0],l=0;i>0&&c>0&&(l+c+1>r&&(c=Math.max(1,r-l)),o.push(n.substring(i-=c,i+c)),!((l+=c+1)>r));)c=t[s=(s+1)%t.length];return o.reverse().join(e)}}function oTe(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var sTe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function eg(t){if(!(e=sTe.exec(t)))throw new Error("invalid format: "+t);var e;return new RP({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}eg.prototype=RP.prototype;function RP(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}RP.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function aTe(t){e:for(var e=t.length,n=1,r=-1,i;n0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var BK;function cTe(t,e){var n=qb(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(BK=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=r.length;return o===s?r:o>s?r+new Array(o-s+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+qb(t,Math.max(0,e+o-1))[0]}function OD(t,e){var n=qb(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const ID={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:rTe,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>OD(t*100,e),r:OD,s:cTe,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function RD(t){return t}var MD=Array.prototype.map,DD=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function lTe(t){var e=t.grouping===void 0||t.thousands===void 0?RD:iTe(MD.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",o=t.numerals===void 0?RD:oTe(MD.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",c=t.minus===void 0?"−":t.minus+"",l=t.nan===void 0?"NaN":t.nan+"";function u(f){f=eg(f);var h=f.fill,p=f.align,v=f.sign,m=f.symbol,y=f.zero,b=f.width,x=f.comma,w=f.precision,S=f.trim,C=f.type;C==="n"?(x=!0,C="g"):ID[C]||(w===void 0&&(w=12),S=!0,C="g"),(y||h==="0"&&p==="=")&&(y=!0,h="0",p="=");var _=m==="$"?n:m==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",A=m==="$"?r:/[%p]/.test(C)?s:"",j=ID[C],N=/[defgprs%]/.test(C);w=w===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function k(O){var E=_,R=A,D,G,L;if(C==="c")R=j(O)+R,O="";else{O=+O;var z=O<0||1/O<0;if(O=isNaN(O)?l:j(Math.abs(O),w),S&&(O=aTe(O)),z&&+O==0&&v!=="+"&&(z=!1),E=(z?v==="("?v:c:v==="-"||v==="("?"":v)+E,R=(C==="s"?DD[8+BK/3]:"")+R+(z&&v==="("?")":""),N){for(D=-1,G=O.length;++DL||L>57){R=(L===46?i+O.slice(D+1):O.slice(D))+R,O=O.slice(0,D);break}}}x&&!y&&(O=e(O,1/0));var M=E.length+O.length+R.length,$=M>1)+E+O+R+$.slice(M);break;default:O=$+E+O+R;break}return o(O)}return k.toString=function(){return f+""},k}function d(f,h){var p=u((f=eg(f),f.type="f",f)),v=Math.max(-8,Math.min(8,Math.floor(yf(h)/3)))*3,m=Math.pow(10,-v),y=DD[8+v/3];return function(b){return p(m*b)+y}}return{format:u,formatPrefix:d}}var sy,MP,UK;uTe({thousands:",",grouping:[3],currency:["$",""]});function uTe(t){return sy=lTe(t),MP=sy.format,UK=sy.formatPrefix,sy}function dTe(t){return Math.max(0,-yf(Math.abs(t)))}function fTe(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(yf(e)/3)))*3-yf(Math.abs(t)))}function hTe(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,yf(e)-yf(t))+1}function zK(t,e,n,r){var i=lj(t,e,n),o;switch(r=eg(r??",f"),r.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(o=fTe(i,s))&&(r.precision=o),UK(r,s)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=hTe(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=dTe(i))&&(r.precision=o-(r.type==="%")*2);break}}return MP(r)}function Cl(t){var e=t.domain;return t.ticks=function(n){var r=e();return aj(r[0],r[r.length-1],n??10)},t.tickFormat=function(n,r){var i=e();return zK(i[0],i[i.length-1],n??10,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,o=r.length-1,s=r[i],c=r[o],l,u,d=10;for(c0;){if(u=cj(s,c,n),u===l)return r[i]=s,r[o]=c,e(r);if(u>0)s=Math.floor(s/u)*u,c=Math.ceil(c/u)*u;else if(u<0)s=Math.ceil(s*u)/u,c=Math.floor(c*u)/u;else break;l=u}return t},t}function Yb(){var t=IP();return t.copy=function(){return av(t,Yb())},$o.apply(t,arguments),Cl(t)}function HK(t){var e;function n(r){return r==null||isNaN(r=+r)?e:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(t=Array.from(r,Wb),n):t.slice()},n.unknown=function(r){return arguments.length?(e=r,n):e},n.copy=function(){return HK(t).unknown(e)},t=arguments.length?Array.from(t,Wb):[0,1],Cl(n)}function GK(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],o=t[r],s;return oMath.pow(t,e)}function yTe(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}function FD(t){return(e,n)=>-t(-e,n)}function DP(t){const e=t($D,LD),n=e.domain;let r=10,i,o;function s(){return i=yTe(r),o=vTe(r),n()[0]<0?(i=FD(i),o=FD(o),t(pTe,mTe)):t($D,LD),e}return e.base=function(c){return arguments.length?(r=+c,s()):r},e.domain=function(c){return arguments.length?(n(c),s()):n()},e.ticks=c=>{const l=n();let u=l[0],d=l[l.length-1];const f=d0){for(;h<=p;++h)for(v=1;vd)break;b.push(m)}}else for(;h<=p;++h)for(v=r-1;v>=1;--v)if(m=h>0?v/o(-h):v*o(h),!(md)break;b.push(m)}b.length*2{if(c==null&&(c=10),l==null&&(l=r===10?"s":","),typeof l!="function"&&(!(r%1)&&(l=eg(l)).precision==null&&(l.trim=!0),l=MP(l)),c===1/0)return l;const u=Math.max(1,r*c/e.ticks().length);return d=>{let f=d/o(Math.round(i(d)));return f*rn(GK(n(),{floor:c=>o(Math.floor(i(c))),ceil:c=>o(Math.ceil(i(c)))})),e}function VK(){const t=DP(xS()).domain([1,10]);return t.copy=()=>av(t,VK()).base(t.base()),$o.apply(t,arguments),t}function BD(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function UD(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function $P(t){var e=1,n=t(BD(e),UD(e));return n.constant=function(r){return arguments.length?t(BD(e=+r),UD(e)):e},Cl(n)}function KK(){var t=$P(xS());return t.copy=function(){return av(t,KK()).constant(t.constant())},$o.apply(t,arguments)}function zD(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function xTe(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function bTe(t){return t<0?-t*t:t*t}function LP(t){var e=t(xi,xi),n=1;function r(){return n===1?t(xi,xi):n===.5?t(xTe,bTe):t(zD(n),zD(1/n))}return e.exponent=function(i){return arguments.length?(n=+i,r()):n},Cl(e)}function FP(){var t=LP(xS());return t.copy=function(){return av(t,FP()).exponent(t.exponent())},$o.apply(t,arguments),t}function wTe(){return FP.apply(null,arguments).exponent(.5)}function HD(t){return Math.sign(t)*t*t}function STe(t){return Math.sign(t)*Math.sqrt(Math.abs(t))}function WK(){var t=IP(),e=[0,1],n=!1,r;function i(o){var s=STe(t(o));return isNaN(s)?r:n?Math.round(s):s}return i.invert=function(o){return t.invert(HD(o))},i.domain=function(o){return arguments.length?(t.domain(o),i):t.domain()},i.range=function(o){return arguments.length?(t.range((e=Array.from(o,Wb)).map(HD)),i):e.slice()},i.rangeRound=function(o){return i.range(o).round(!0)},i.round=function(o){return arguments.length?(n=!!o,i):n},i.clamp=function(o){return arguments.length?(t.clamp(o),i):t.clamp()},i.unknown=function(o){return arguments.length?(r=o,i):r},i.copy=function(){return WK(t.domain(),e).round(n).clamp(t.clamp()).unknown(r)},$o.apply(i,arguments),Cl(i)}function qK(){var t=[],e=[],n=[],r;function i(){var s=0,c=Math.max(1,e.length);for(n=new Array(c-1);++s0?n[c-1]:t[0],c=n?[r[n-1],e]:[r[u-1],r[u]]},s.unknown=function(l){return arguments.length&&(o=l),s},s.thresholds=function(){return r.slice()},s.copy=function(){return YK().domain([t,e]).range(i).unknown(o)},$o.apply(Cl(s),arguments)}function QK(){var t=[.5],e=[0,1],n,r=1;function i(o){return o!=null&&o<=o?e[ov(t,o,0,r)]:n}return i.domain=function(o){return arguments.length?(t=Array.from(o),r=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(o){return arguments.length?(e=Array.from(o),r=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(o){var s=e.indexOf(o);return[t[s-1],t[s]]},i.unknown=function(o){return arguments.length?(n=o,i):n},i.copy=function(){return QK().domain(t).range(e).unknown(n)},$o.apply(i,arguments)}const l_=new Date,u_=new Date;function kr(t,e,n,r){function i(o){return t(o=arguments.length===0?new Date:new Date(+o)),o}return i.floor=o=>(t(o=new Date(+o)),o),i.ceil=o=>(t(o=new Date(o-1)),e(o,1),t(o),o),i.round=o=>{const s=i(o),c=i.ceil(o);return o-s(e(o=new Date(+o),s==null?1:Math.floor(s)),o),i.range=(o,s,c)=>{const l=[];if(o=i.ceil(o),c=c==null?1:Math.floor(c),!(o0))return l;let u;do l.push(u=new Date(+o)),e(o,c),t(o);while(ukr(s=>{if(s>=s)for(;t(s),!o(s);)s.setTime(s-1)},(s,c)=>{if(s>=s)if(c<0)for(;++c<=0;)for(;e(s,-1),!o(s););else for(;--c>=0;)for(;e(s,1),!o(s););}),n&&(i.count=(o,s)=>(l_.setTime(+o),u_.setTime(+s),t(l_),t(u_),Math.floor(n(l_,u_))),i.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?i.filter(r?s=>r(s)%o===0:s=>i.count(0,s)%o===0):i)),i}const Qb=kr(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Qb.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?kr(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Qb);Qb.range;const ja=1e3,jo=ja*60,Ea=jo*60,Wa=Ea*24,BP=Wa*7,GD=Wa*30,d_=Wa*365,ql=kr(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ja)},(t,e)=>(e-t)/ja,t=>t.getUTCSeconds());ql.range;const UP=kr(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ja)},(t,e)=>{t.setTime(+t+e*jo)},(t,e)=>(e-t)/jo,t=>t.getMinutes());UP.range;const zP=kr(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*jo)},(t,e)=>(e-t)/jo,t=>t.getUTCMinutes());zP.range;const HP=kr(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ja-t.getMinutes()*jo)},(t,e)=>{t.setTime(+t+e*Ea)},(t,e)=>(e-t)/Ea,t=>t.getHours());HP.range;const GP=kr(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*Ea)},(t,e)=>(e-t)/Ea,t=>t.getUTCHours());GP.range;const cv=kr(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*jo)/Wa,t=>t.getDate()-1);cv.range;const bS=kr(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/Wa,t=>t.getUTCDate()-1);bS.range;const XK=kr(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/Wa,t=>Math.floor(t/Wa));XK.range;function Fu(t){return kr(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*jo)/BP)}const wS=Fu(0),Xb=Fu(1),CTe=Fu(2),_Te=Fu(3),xf=Fu(4),ATe=Fu(5),jTe=Fu(6);wS.range;Xb.range;CTe.range;_Te.range;xf.range;ATe.range;jTe.range;function Bu(t){return kr(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/BP)}const SS=Bu(0),Jb=Bu(1),ETe=Bu(2),NTe=Bu(3),bf=Bu(4),TTe=Bu(5),kTe=Bu(6);SS.range;Jb.range;ETe.range;NTe.range;bf.range;TTe.range;kTe.range;const VP=kr(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());VP.range;const KP=kr(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());KP.range;const qa=kr(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());qa.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:kr(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});qa.range;const Ya=kr(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());Ya.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:kr(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});Ya.range;function JK(t,e,n,r,i,o){const s=[[ql,1,ja],[ql,5,5*ja],[ql,15,15*ja],[ql,30,30*ja],[o,1,jo],[o,5,5*jo],[o,15,15*jo],[o,30,30*jo],[i,1,Ea],[i,3,3*Ea],[i,6,6*Ea],[i,12,12*Ea],[r,1,Wa],[r,2,2*Wa],[n,1,BP],[e,1,GD],[e,3,3*GD],[t,1,d_]];function c(u,d,f){const h=dy).right(s,h);if(p===s.length)return t.every(lj(u/d_,d/d_,f));if(p===0)return Qb.every(Math.max(lj(u,d,f),1));const[v,m]=s[h/s[p-1][2]53)return null;"w"in K||(K.w=1),"Z"in K?(Me=h_(Vh(K.y,0,1)),ut=Me.getUTCDay(),Me=ut>4||ut===0?Jb.ceil(Me):Jb(Me),Me=bS.offset(Me,(K.V-1)*7),K.y=Me.getUTCFullYear(),K.m=Me.getUTCMonth(),K.d=Me.getUTCDate()+(K.w+6)%7):(Me=f_(Vh(K.y,0,1)),ut=Me.getDay(),Me=ut>4||ut===0?Xb.ceil(Me):Xb(Me),Me=cv.offset(Me,(K.V-1)*7),K.y=Me.getFullYear(),K.m=Me.getMonth(),K.d=Me.getDate()+(K.w+6)%7)}else("W"in K||"U"in K)&&("w"in K||(K.w="u"in K?K.u%7:"W"in K?1:0),ut="Z"in K?h_(Vh(K.y,0,1)).getUTCDay():f_(Vh(K.y,0,1)).getDay(),K.m=0,K.d="W"in K?(K.w+6)%7+K.W*7-(ut+5)%7:K.w+K.U*7-(ut+6)%7);return"Z"in K?(K.H+=K.Z/100|0,K.M+=K.Z%100,h_(K)):f_(K)}}function j(oe,ne,je,K){for(var et=0,Me=ne.length,ut=je.length,qe,Pt;et=ut)return-1;if(qe=ne.charCodeAt(et++),qe===37){if(qe=ne.charAt(et++),Pt=C[qe in VD?ne.charAt(et++):qe],!Pt||(K=Pt(oe,je,K))<0)return-1}else if(qe!=je.charCodeAt(K++))return-1}return K}function N(oe,ne,je){var K=u.exec(ne.slice(je));return K?(oe.p=d.get(K[0].toLowerCase()),je+K[0].length):-1}function k(oe,ne,je){var K=p.exec(ne.slice(je));return K?(oe.w=v.get(K[0].toLowerCase()),je+K[0].length):-1}function O(oe,ne,je){var K=f.exec(ne.slice(je));return K?(oe.w=h.get(K[0].toLowerCase()),je+K[0].length):-1}function E(oe,ne,je){var K=b.exec(ne.slice(je));return K?(oe.m=x.get(K[0].toLowerCase()),je+K[0].length):-1}function R(oe,ne,je){var K=m.exec(ne.slice(je));return K?(oe.m=y.get(K[0].toLowerCase()),je+K[0].length):-1}function D(oe,ne,je){return j(oe,e,ne,je)}function G(oe,ne,je){return j(oe,n,ne,je)}function L(oe,ne,je){return j(oe,r,ne,je)}function z(oe){return s[oe.getDay()]}function M(oe){return o[oe.getDay()]}function $(oe){return l[oe.getMonth()]}function Q(oe){return c[oe.getMonth()]}function q(oe){return i[+(oe.getHours()>=12)]}function te(oe){return 1+~~(oe.getMonth()/3)}function xe(oe){return s[oe.getUTCDay()]}function B(oe){return o[oe.getUTCDay()]}function ce(oe){return l[oe.getUTCMonth()]}function fe(oe){return c[oe.getUTCMonth()]}function U(oe){return i[+(oe.getUTCHours()>=12)]}function ue(oe){return 1+~~(oe.getUTCMonth()/3)}return{format:function(oe){var ne=_(oe+="",w);return ne.toString=function(){return oe},ne},parse:function(oe){var ne=A(oe+="",!1);return ne.toString=function(){return oe},ne},utcFormat:function(oe){var ne=_(oe+="",S);return ne.toString=function(){return oe},ne},utcParse:function(oe){var ne=A(oe+="",!0);return ne.toString=function(){return oe},ne}}}var VD={"-":"",_:" ",0:"0"},Br=/^\s*\d+/,DTe=/^%/,$Te=/[\\^$*+?|[\]().{}]/g;function dn(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[e.toLowerCase(),n]))}function FTe(t,e,n){var r=Br.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function BTe(t,e,n){var r=Br.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function UTe(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function zTe(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function HTe(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function KD(t,e,n){var r=Br.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function WD(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function GTe(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function VTe(t,e,n){var r=Br.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function KTe(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function qD(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function WTe(t,e,n){var r=Br.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function YD(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function qTe(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function YTe(t,e,n){var r=Br.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function QTe(t,e,n){var r=Br.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function XTe(t,e,n){var r=Br.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function JTe(t,e,n){var r=DTe.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function ZTe(t,e,n){var r=Br.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function eke(t,e,n){var r=Br.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function QD(t,e){return dn(t.getDate(),e,2)}function tke(t,e){return dn(t.getHours(),e,2)}function nke(t,e){return dn(t.getHours()%12||12,e,2)}function rke(t,e){return dn(1+cv.count(qa(t),t),e,3)}function ZK(t,e){return dn(t.getMilliseconds(),e,3)}function ike(t,e){return ZK(t,e)+"000"}function oke(t,e){return dn(t.getMonth()+1,e,2)}function ske(t,e){return dn(t.getMinutes(),e,2)}function ake(t,e){return dn(t.getSeconds(),e,2)}function cke(t){var e=t.getDay();return e===0?7:e}function lke(t,e){return dn(wS.count(qa(t)-1,t),e,2)}function eW(t){var e=t.getDay();return e>=4||e===0?xf(t):xf.ceil(t)}function uke(t,e){return t=eW(t),dn(xf.count(qa(t),t)+(qa(t).getDay()===4),e,2)}function dke(t){return t.getDay()}function fke(t,e){return dn(Xb.count(qa(t)-1,t),e,2)}function hke(t,e){return dn(t.getFullYear()%100,e,2)}function pke(t,e){return t=eW(t),dn(t.getFullYear()%100,e,2)}function mke(t,e){return dn(t.getFullYear()%1e4,e,4)}function gke(t,e){var n=t.getDay();return t=n>=4||n===0?xf(t):xf.ceil(t),dn(t.getFullYear()%1e4,e,4)}function vke(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+dn(e/60|0,"0",2)+dn(e%60,"0",2)}function XD(t,e){return dn(t.getUTCDate(),e,2)}function yke(t,e){return dn(t.getUTCHours(),e,2)}function xke(t,e){return dn(t.getUTCHours()%12||12,e,2)}function bke(t,e){return dn(1+bS.count(Ya(t),t),e,3)}function tW(t,e){return dn(t.getUTCMilliseconds(),e,3)}function wke(t,e){return tW(t,e)+"000"}function Ske(t,e){return dn(t.getUTCMonth()+1,e,2)}function Cke(t,e){return dn(t.getUTCMinutes(),e,2)}function _ke(t,e){return dn(t.getUTCSeconds(),e,2)}function Ake(t){var e=t.getUTCDay();return e===0?7:e}function jke(t,e){return dn(SS.count(Ya(t)-1,t),e,2)}function nW(t){var e=t.getUTCDay();return e>=4||e===0?bf(t):bf.ceil(t)}function Eke(t,e){return t=nW(t),dn(bf.count(Ya(t),t)+(Ya(t).getUTCDay()===4),e,2)}function Nke(t){return t.getUTCDay()}function Tke(t,e){return dn(Jb.count(Ya(t)-1,t),e,2)}function kke(t,e){return dn(t.getUTCFullYear()%100,e,2)}function Pke(t,e){return t=nW(t),dn(t.getUTCFullYear()%100,e,2)}function Oke(t,e){return dn(t.getUTCFullYear()%1e4,e,4)}function Ike(t,e){var n=t.getUTCDay();return t=n>=4||n===0?bf(t):bf.ceil(t),dn(t.getUTCFullYear()%1e4,e,4)}function Rke(){return"+0000"}function JD(){return"%"}function ZD(t){return+t}function e$(t){return Math.floor(+t/1e3)}var Ju,rW,iW;Mke({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Mke(t){return Ju=MTe(t),rW=Ju.format,Ju.parse,iW=Ju.utcFormat,Ju.utcParse,Ju}function Dke(t){return new Date(t)}function $ke(t){return t instanceof Date?+t:+new Date(+t)}function WP(t,e,n,r,i,o,s,c,l,u){var d=IP(),f=d.invert,h=d.domain,p=u(".%L"),v=u(":%S"),m=u("%I:%M"),y=u("%I %p"),b=u("%a %d"),x=u("%b %d"),w=u("%B"),S=u("%Y");function C(_){return(l(_)<_?p:c(_)<_?v:s(_)<_?m:o(_)<_?y:r(_)<_?i(_)<_?b:x:n(_)<_?w:S)(_)}return d.invert=function(_){return new Date(f(_))},d.domain=function(_){return arguments.length?h(Array.from(_,$ke)):h().map(Dke)},d.ticks=function(_){var A=h();return t(A[0],A[A.length-1],_??10)},d.tickFormat=function(_,A){return A==null?C:u(A)},d.nice=function(_){var A=h();return(!_||typeof _.range!="function")&&(_=e(A[0],A[A.length-1],_??10)),_?h(GK(A,_)):d},d.copy=function(){return av(d,WP(t,e,n,r,i,o,s,c,l,u))},d}function Lke(){return $o.apply(WP(ITe,RTe,qa,VP,wS,cv,HP,UP,ql,rW).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Fke(){return $o.apply(WP(PTe,OTe,Ya,KP,SS,bS,GP,zP,ql,iW).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function CS(){var t=0,e=1,n,r,i,o,s=xi,c=!1,l;function u(f){return f==null||isNaN(f=+f)?l:s(i===0?.5:(f=(o(f)-n)*i,c?Math.max(0,Math.min(1,f)):f))}u.domain=function(f){return arguments.length?([t,e]=f,n=o(t=+t),r=o(e=+e),i=n===r?0:1/(r-n),u):[t,e]},u.clamp=function(f){return arguments.length?(c=!!f,u):c},u.interpolator=function(f){return arguments.length?(s=f,u):s};function d(f){return function(h){var p,v;return arguments.length?([p,v]=h,s=f(p,v),u):[s(0),s(1)]}}return u.range=d(vh),u.rangeRound=d(OP),u.unknown=function(f){return arguments.length?(l=f,u):l},function(f){return o=f,n=f(t),r=f(e),i=n===r?0:1/(r-n),u}}function _l(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function oW(){var t=Cl(CS()(xi));return t.copy=function(){return _l(t,oW())},rc.apply(t,arguments)}function sW(){var t=DP(CS()).domain([1,10]);return t.copy=function(){return _l(t,sW()).base(t.base())},rc.apply(t,arguments)}function aW(){var t=$P(CS());return t.copy=function(){return _l(t,aW()).constant(t.constant())},rc.apply(t,arguments)}function qP(){var t=LP(CS());return t.copy=function(){return _l(t,qP()).exponent(t.exponent())},rc.apply(t,arguments)}function Bke(){return qP.apply(null,arguments).exponent(.5)}function cW(){var t=[],e=xi;function n(r){if(r!=null&&!isNaN(r=+r))return e((ov(t,r,1)-1)/(t.length-1))}return n.domain=function(r){if(!arguments.length)return t.slice();t=[];for(let i of r)i!=null&&!isNaN(i=+i)&&t.push(i);return t.sort(Xc),n},n.interpolator=function(r){return arguments.length?(e=r,n):e},n.range=function(){return t.map((r,i)=>e(i/(t.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(i,o)=>jNe(t,o/r))},n.copy=function(){return cW(e).domain(t)},rc.apply(n,arguments)}function _S(){var t=0,e=.5,n=1,r=1,i,o,s,c,l,u=xi,d,f=!1,h;function p(m){return isNaN(m=+m)?h:(m=.5+((m=+d(m))-o)*(r*me}var fW=Gke,Vke=AS,Kke=fW,Wke=gh;function qke(t){return t&&t.length?Vke(t,Wke,Kke):void 0}var Yke=qke;const Oc=hn(Yke);function Qke(t,e){return tt.e^o.s<0?1:-1;for(r=o.d.length,i=t.d.length,e=0,n=rt.d[e]^o.s<0?1:-1;return r===i?0:r>i^o.s<0?1:-1};lt.decimalPlaces=lt.dp=function(){var t=this,e=t.d.length-1,n=(e-t.e)*Ln;if(e=t.d[e],e)for(;e%10==0;e/=10)n--;return n<0?0:n};lt.dividedBy=lt.div=function(t){return $a(this,new this.constructor(t))};lt.dividedToIntegerBy=lt.idiv=function(t){var e=this,n=e.constructor;return En($a(e,new n(t),0,1),n.precision)};lt.equals=lt.eq=function(t){return!this.cmp(t)};lt.exponent=function(){return vr(this)};lt.greaterThan=lt.gt=function(t){return this.cmp(t)>0};lt.greaterThanOrEqualTo=lt.gte=function(t){return this.cmp(t)>=0};lt.isInteger=lt.isint=function(){return this.e>this.d.length-2};lt.isNegative=lt.isneg=function(){return this.s<0};lt.isPositive=lt.ispos=function(){return this.s>0};lt.isZero=function(){return this.s===0};lt.lessThan=lt.lt=function(t){return this.cmp(t)<0};lt.lessThanOrEqualTo=lt.lte=function(t){return this.cmp(t)<1};lt.logarithm=lt.log=function(t){var e,n=this,r=n.constructor,i=r.precision,o=i+5;if(t===void 0)t=new r(10);else if(t=new r(t),t.s<1||t.eq(Ji))throw Error(Ro+"NaN");if(n.s<1)throw Error(Ro+(n.s?"NaN":"-Infinity"));return n.eq(Ji)?new r(0):(Kn=!1,e=$a(tg(n,o),tg(t,o),o),Kn=!0,En(e,i))};lt.minus=lt.sub=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?vW(e,t):mW(e,(t.s=-t.s,t))};lt.modulo=lt.mod=function(t){var e,n=this,r=n.constructor,i=r.precision;if(t=new r(t),!t.s)throw Error(Ro+"NaN");return n.s?(Kn=!1,e=$a(n,t,0,1).times(t),Kn=!0,n.minus(e)):En(new r(n),i)};lt.naturalExponential=lt.exp=function(){return gW(this)};lt.naturalLogarithm=lt.ln=function(){return tg(this)};lt.negated=lt.neg=function(){var t=new this.constructor(this);return t.s=-t.s||0,t};lt.plus=lt.add=function(t){var e=this;return t=new e.constructor(t),e.s==t.s?mW(e,t):vW(e,(t.s=-t.s,t))};lt.precision=lt.sd=function(t){var e,n,r,i=this;if(t!==void 0&&t!==!!t&&t!==1&&t!==0)throw Error(au+t);if(e=vr(i)+1,r=i.d.length-1,n=r*Ln+1,r=i.d[r],r){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return t&&e>n?e:n};lt.squareRoot=lt.sqrt=function(){var t,e,n,r,i,o,s,c=this,l=c.constructor;if(c.s<1){if(!c.s)return new l(0);throw Error(Ro+"NaN")}for(t=vr(c),Kn=!1,i=Math.sqrt(+c),i==0||i==1/0?(e=Bs(c.d),(e.length+t)%2==0&&(e+="0"),i=Math.sqrt(e),t=xh((t+1)/2)-(t<0||t%2),i==1/0?e="5e"+t:(e=i.toExponential(),e=e.slice(0,e.indexOf("e")+1)+t),r=new l(e)):r=new l(i.toString()),n=l.precision,i=s=n+3;;)if(o=r,r=o.plus($a(c,o,s+2)).times(.5),Bs(o.d).slice(0,s)===(e=Bs(r.d)).slice(0,s)){if(e=e.slice(s-3,s+1),i==s&&e=="4999"){if(En(o,n+1,0),o.times(o).eq(c)){r=o;break}}else if(e!="9999")break;s+=4}return Kn=!0,En(r,n)};lt.times=lt.mul=function(t){var e,n,r,i,o,s,c,l,u,d=this,f=d.constructor,h=d.d,p=(t=new f(t)).d;if(!d.s||!t.s)return new f(0);for(t.s*=d.s,n=d.e+t.e,l=h.length,u=p.length,l=0;){for(e=0,i=l+r;i>r;)c=o[i]+p[r]*h[i-r-1]+e,o[i--]=c%Or|0,e=c/Or|0;o[i]=(o[i]+e)%Or|0}for(;!o[--s];)o.pop();return e?++n:o.shift(),t.d=o,t.e=n,Kn?En(t,f.precision):t};lt.toDecimalPlaces=lt.todp=function(t,e){var n=this,r=n.constructor;return n=new r(n),t===void 0?n:(ta(t,0,yh),e===void 0?e=r.rounding:ta(e,0,8),En(n,t+vr(n)+1,e))};lt.toExponential=function(t,e){var n,r=this,i=r.constructor;return t===void 0?n=Tu(r,!0):(ta(t,0,yh),e===void 0?e=i.rounding:ta(e,0,8),r=En(new i(r),t+1,e),n=Tu(r,!0,t+1)),n};lt.toFixed=function(t,e){var n,r,i=this,o=i.constructor;return t===void 0?Tu(i):(ta(t,0,yh),e===void 0?e=o.rounding:ta(e,0,8),r=En(new o(i),t+vr(i)+1,e),n=Tu(r.abs(),!1,t+vr(r)+1),i.isneg()&&!i.isZero()?"-"+n:n)};lt.toInteger=lt.toint=function(){var t=this,e=t.constructor;return En(new e(t),vr(t)+1,e.rounding)};lt.toNumber=function(){return+this};lt.toPower=lt.pow=function(t){var e,n,r,i,o,s,c=this,l=c.constructor,u=12,d=+(t=new l(t));if(!t.s)return new l(Ji);if(c=new l(c),!c.s){if(t.s<1)throw Error(Ro+"Infinity");return c}if(c.eq(Ji))return c;if(r=l.precision,t.eq(Ji))return En(c,r);if(e=t.e,n=t.d.length-1,s=e>=n,o=c.s,s){if((n=d<0?-d:d)<=pW){for(i=new l(Ji),e=Math.ceil(r/Ln+4),Kn=!1;n%2&&(i=i.times(c),r$(i.d,e)),n=xh(n/2),n!==0;)c=c.times(c),r$(c.d,e);return Kn=!0,t.s<0?new l(Ji).div(i):En(i,r)}}else if(o<0)throw Error(Ro+"NaN");return o=o<0&&t.d[Math.max(e,n)]&1?-1:1,c.s=1,Kn=!1,i=t.times(tg(c,r+u)),Kn=!0,i=gW(i),i.s=o,i};lt.toPrecision=function(t,e){var n,r,i=this,o=i.constructor;return t===void 0?(n=vr(i),r=Tu(i,n<=o.toExpNeg||n>=o.toExpPos)):(ta(t,1,yh),e===void 0?e=o.rounding:ta(e,0,8),i=En(new o(i),t,e),n=vr(i),r=Tu(i,t<=n||n<=o.toExpNeg,t)),r};lt.toSignificantDigits=lt.tosd=function(t,e){var n=this,r=n.constructor;return t===void 0?(t=r.precision,e=r.rounding):(ta(t,1,yh),e===void 0?e=r.rounding:ta(e,0,8)),En(new r(n),t,e)};lt.toString=lt.valueOf=lt.val=lt.toJSON=lt[Symbol.for("nodejs.util.inspect.custom")]=function(){var t=this,e=vr(t),n=t.constructor;return Tu(t,e<=n.toExpNeg||e>=n.toExpPos)};function mW(t,e){var n,r,i,o,s,c,l,u,d=t.constructor,f=d.precision;if(!t.s||!e.s)return e.s||(e=new d(t)),Kn?En(e,f):e;if(l=t.d,u=e.d,s=t.e,i=e.e,l=l.slice(),o=s-i,o){for(o<0?(r=l,o=-o,c=u.length):(r=u,i=s,c=l.length),s=Math.ceil(f/Ln),c=s>c?s+1:c+1,o>c&&(o=c,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(c=l.length,o=u.length,c-o<0&&(o=c,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/Or|0,l[o]%=Or;for(n&&(l.unshift(n),++i),c=l.length;l[--c]==0;)l.pop();return e.d=l,e.e=i,Kn?En(e,f):e}function ta(t,e,n){if(t!==~~t||tn)throw Error(au+t)}function Bs(t){var e,n,r,i=t.length-1,o="",s=t[0];if(i>0){for(o+=s,e=1;es?1:-1;else for(c=l=0;ci[c]?1:-1;break}return l}function n(r,i,o){for(var s=0;o--;)r[o]-=s,s=r[o]1;)r.shift()}return function(r,i,o,s){var c,l,u,d,f,h,p,v,m,y,b,x,w,S,C,_,A,j,N=r.constructor,k=r.s==i.s?1:-1,O=r.d,E=i.d;if(!r.s)return new N(r);if(!i.s)throw Error(Ro+"Division by zero");for(l=r.e-i.e,A=E.length,C=O.length,p=new N(k),v=p.d=[],u=0;E[u]==(O[u]||0);)++u;if(E[u]>(O[u]||0)&&--l,o==null?x=o=N.precision:s?x=o+(vr(r)-vr(i))+1:x=o,x<0)return new N(0);if(x=x/Ln+2|0,u=0,A==1)for(d=0,E=E[0],x++;(u1&&(E=t(E,d),O=t(O,d),A=E.length,C=O.length),S=A,m=O.slice(0,A),y=m.length;y=Or/2&&++_;do d=0,c=e(E,m,A,y),c<0?(b=m[0],A!=y&&(b=b*Or+(m[1]||0)),d=b/_|0,d>1?(d>=Or&&(d=Or-1),f=t(E,d),h=f.length,y=m.length,c=e(f,m,h,y),c==1&&(d--,n(f,A16)throw Error(QP+vr(t));if(!t.s)return new d(Ji);for(e==null?(Kn=!1,c=f):c=e,s=new d(.03125);t.abs().gte(.1);)t=t.times(s),u+=5;for(r=Math.log(Dl(2,u))/Math.LN10*2+5|0,c+=r,n=i=o=new d(Ji),d.precision=c;;){if(i=En(i.times(t),c),n=n.times(++l),s=o.plus($a(i,n,c)),Bs(s.d).slice(0,c)===Bs(o.d).slice(0,c)){for(;u--;)o=En(o.times(o),c);return d.precision=f,e==null?(Kn=!0,En(o,f)):o}o=s}}function vr(t){for(var e=t.e*Ln,n=t.d[0];n>=10;n/=10)e++;return e}function p_(t,e,n){if(e>t.LN10.sd())throw Kn=!0,n&&(t.precision=n),Error(Ro+"LN10 precision limit exceeded");return En(new t(t.LN10),e)}function mc(t){for(var e="";t--;)e+="0";return e}function tg(t,e){var n,r,i,o,s,c,l,u,d,f=1,h=10,p=t,v=p.d,m=p.constructor,y=m.precision;if(p.s<1)throw Error(Ro+(p.s?"NaN":"-Infinity"));if(p.eq(Ji))return new m(0);if(e==null?(Kn=!1,u=y):u=e,p.eq(10))return e==null&&(Kn=!0),p_(m,u);if(u+=h,m.precision=u,n=Bs(v),r=n.charAt(0),o=vr(p),Math.abs(o)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)p=p.times(t),n=Bs(p.d),r=n.charAt(0),f++;o=vr(p),r>1?(p=new m("0."+n),o++):p=new m(r+"."+n.slice(1))}else return l=p_(m,u+2,y).times(o+""),p=tg(new m(r+"."+n.slice(1)),u-h).plus(l),m.precision=y,e==null?(Kn=!0,En(p,y)):p;for(c=s=p=$a(p.minus(Ji),p.plus(Ji),u),d=En(p.times(p),u),i=3;;){if(s=En(s.times(d),u),l=c.plus($a(s,new m(i),u)),Bs(l.d).slice(0,u)===Bs(c.d).slice(0,u))return c=c.times(2),o!==0&&(c=c.plus(p_(m,u+2,y).times(o+""))),c=$a(c,new m(f),u),m.precision=y,e==null?(Kn=!0,En(c,y)):c;c=l,i+=2}}function n$(t,e){var n,r,i;for((n=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(n<0&&(n=r),n+=+e.slice(r+1),e=e.substring(0,r)):n<0&&(n=e.length),r=0;e.charCodeAt(r)===48;)++r;for(i=e.length;e.charCodeAt(i-1)===48;)--i;if(e=e.slice(r,i),e){if(i-=r,n=n-r-1,t.e=xh(n/Ln),t.d=[],r=(n+1)%Ln,n<0&&(r+=Ln),rZb||t.e<-Zb))throw Error(QP+n)}else t.s=0,t.e=0,t.d=[0];return t}function En(t,e,n){var r,i,o,s,c,l,u,d,f=t.d;for(s=1,o=f[0];o>=10;o/=10)s++;if(r=e-s,r<0)r+=Ln,i=e,u=f[d=0];else{if(d=Math.ceil((r+1)/Ln),o=f.length,d>=o)return t;for(u=o=f[d],s=1;o>=10;o/=10)s++;r%=Ln,i=r-Ln+s}if(n!==void 0&&(o=Dl(10,s-i-1),c=u/o%10|0,l=e<0||f[d+1]!==void 0||u%o,l=n<4?(c||l)&&(n==0||n==(t.s<0?3:2)):c>5||c==5&&(n==4||l||n==6&&(r>0?i>0?u/Dl(10,s-i):0:f[d-1])%10&1||n==(t.s<0?8:7))),e<1||!f[0])return l?(o=vr(t),f.length=1,e=e-o-1,f[0]=Dl(10,(Ln-e%Ln)%Ln),t.e=xh(-e/Ln)||0):(f.length=1,f[0]=t.e=t.s=0),t;if(r==0?(f.length=d,o=1,d--):(f.length=d+1,o=Dl(10,Ln-r),f[d]=i>0?(u/Dl(10,s-i)%Dl(10,i)|0)*o:0),l)for(;;)if(d==0){(f[0]+=o)==Or&&(f[0]=1,++t.e);break}else{if(f[d]+=o,f[d]!=Or)break;f[d--]=0,o=1}for(r=f.length;f[--r]===0;)f.pop();if(Kn&&(t.e>Zb||t.e<-Zb))throw Error(QP+vr(t));return t}function vW(t,e){var n,r,i,o,s,c,l,u,d,f,h=t.constructor,p=h.precision;if(!t.s||!e.s)return e.s?e.s=-e.s:e=new h(t),Kn?En(e,p):e;if(l=t.d,f=e.d,r=e.e,u=t.e,l=l.slice(),s=u-r,s){for(d=s<0,d?(n=l,s=-s,c=f.length):(n=f,r=u,c=l.length),i=Math.max(Math.ceil(p/Ln),c)+2,s>i&&(s=i,n.length=1),n.reverse(),i=s;i--;)n.push(0);n.reverse()}else{for(i=l.length,c=f.length,d=i0;--i)l[c++]=0;for(i=f.length;i>s;){if(l[--i]0?o=o.charAt(0)+"."+o.slice(1)+mc(r):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i<0?"e":"e+")+i):i<0?(o="0."+mc(-i-1)+o,n&&(r=n-s)>0&&(o+=mc(r))):i>=s?(o+=mc(i+1-s),n&&(r=n-i-1)>0&&(o=o+"."+mc(r))):((r=i+1)0&&(i+1===s&&(o+="."),o+=mc(r))),t.s<0?"-"+o:o}function r$(t,e){if(t.length>e)return t.length=e,!0}function yW(t){var e,n,r;function i(o){var s=this;if(!(s instanceof i))return new i(o);if(s.constructor=i,o instanceof i){s.s=o.s,s.e=o.e,s.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(au+o);if(o>0)s.s=1;else if(o<0)o=-o,s.s=-1;else{s.s=0,s.e=0,s.d=[0];return}if(o===~~o&&o<1e7){s.e=0,s.d=[o];return}return n$(s,o.toString())}else if(typeof o!="string")throw Error(au+o);if(o.charCodeAt(0)===45?(o=o.slice(1),s.s=-1):s.s=1,vPe.test(o))n$(s,o);else throw Error(au+o)}if(i.prototype=lt,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=yW,i.config=i.set=yPe,t===void 0&&(t={}),t)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],e=0;e=i[e+1]&&r<=i[e+2])this[n]=r;else throw Error(au+n+": "+r);if((r=t[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(au+n+": "+r);return this}var XP=yW(gPe);Ji=new XP(1);const Sn=XP;function xPe(t){return CPe(t)||SPe(t)||wPe(t)||bPe()}function bPe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function wPe(t,e){if(t){if(typeof t=="string")return pj(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pj(t,e)}}function SPe(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function CPe(t){if(Array.isArray(t))return pj(t)}function pj(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=e?n.apply(void 0,i):t(e-s,i$(function(){for(var c=arguments.length,l=new Array(c),u=0;ut.length)&&(e=t.length);for(var n=0,r=new Array(e);n"u"||!(Symbol.iterator in Object(t)))){var n=[],r=!0,i=!1,o=void 0;try{for(var s=t[Symbol.iterator](),c;!(r=(c=s.next()).done)&&(n.push(c.value),!(e&&n.length===e));r=!0);}catch(l){i=!0,o=l}finally{try{!r&&s.return!=null&&s.return()}finally{if(i)throw o}}return n}}function LPe(t){if(Array.isArray(t))return t}function CW(t){var e=ng(t,2),n=e[0],r=e[1],i=n,o=r;return n>r&&(i=r,o=n),[i,o]}function _W(t,e,n){if(t.lte(0))return new Sn(0);var r=NS.getDigitCount(t.toNumber()),i=new Sn(10).pow(r),o=t.div(i),s=r!==1?.05:.1,c=new Sn(Math.ceil(o.div(s).toNumber())).add(n).mul(s),l=c.mul(i);return e?l:new Sn(Math.ceil(l))}function FPe(t,e,n){var r=1,i=new Sn(t);if(!i.isint()&&n){var o=Math.abs(t);o<1?(r=new Sn(10).pow(NS.getDigitCount(t)-1),i=new Sn(Math.floor(i.div(r).toNumber())).mul(r)):o>1&&(i=new Sn(Math.floor(t)))}else t===0?i=new Sn(Math.floor((e-1)/2)):n||(i=new Sn(Math.floor(t)));var s=Math.floor((e-1)/2),c=EPe(jPe(function(l){return i.add(new Sn(l-s).mul(r)).toNumber()}),mj);return c(0,e)}function AW(t,e,n,r){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((e-t)/(n-1)))return{step:new Sn(0),tickMin:new Sn(0),tickMax:new Sn(0)};var o=_W(new Sn(e).sub(t).div(n-1),r,i),s;t<=0&&e>=0?s=new Sn(0):(s=new Sn(t).add(e).div(2),s=s.sub(new Sn(s).mod(o)));var c=Math.ceil(s.sub(t).div(o).toNumber()),l=Math.ceil(new Sn(e).sub(s).div(o).toNumber()),u=c+l+1;return u>n?AW(t,e,n,r,i+1):(u0?l+(n-u):l,c=e>0?c:c+(n-u)),{step:o,tickMin:s.sub(new Sn(c).mul(o)),tickMax:s.add(new Sn(l).mul(o))})}function BPe(t){var e=ng(t,2),n=e[0],r=e[1],i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=Math.max(i,2),c=CW([n,r]),l=ng(c,2),u=l[0],d=l[1];if(u===-1/0||d===1/0){var f=d===1/0?[u].concat(vj(mj(0,i-1).map(function(){return 1/0}))):[].concat(vj(mj(0,i-1).map(function(){return-1/0})),[d]);return n>r?gj(f):f}if(u===d)return FPe(u,i,o);var h=AW(u,d,s,o),p=h.step,v=h.tickMin,m=h.tickMax,y=NS.rangeStep(v,m.add(new Sn(.1).mul(p)),p);return n>r?gj(y):y}function UPe(t,e){var n=ng(t,2),r=n[0],i=n[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=CW([r,i]),c=ng(s,2),l=c[0],u=c[1];if(l===-1/0||u===1/0)return[r,i];if(l===u)return[l];var d=Math.max(e,2),f=_W(new Sn(u).sub(l).div(d-1),o,0),h=[].concat(vj(NS.rangeStep(new Sn(l),new Sn(u).sub(new Sn(.99).mul(f)),f)),[u]);return r>i?gj(h):h}var zPe=wW(BPe),HPe=wW(UPe),GPe="Invariant failed";function ku(t,e){throw new Error(GPe)}var VPe=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function wf(t){"@babel/helpers - typeof";return wf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wf(t)}function e0(){return e0=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function JPe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function ZPe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function eOe(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&arguments[1]!==void 0?arguments[1]:[],i=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,s=-1,c=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(c<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var l=o.range,u=0;u0?i[u-1].coordinate:i[c-1].coordinate,f=i[u].coordinate,h=u>=c-1?i[0].coordinate:i[u+1].coordinate,p=void 0;if(vi(f-d)!==vi(h-f)){var v=[];if(vi(h-f)===vi(l[1]-l[0])){p=h;var m=f+l[1]-l[0];v[0]=Math.min(m,(m+d)/2),v[1]=Math.max(m,(m+d)/2)}else{p=d;var y=h+l[1]-l[0];v[0]=Math.min(f,(y+f)/2),v[1]=Math.max(f,(y+f)/2)}var b=[Math.min(f,(p+f)/2),Math.max(f,(p+f)/2)];if(e>b[0]&&e<=b[1]||e>=v[0]&&e<=v[1]){s=i[u].index;break}}else{var x=Math.min(d,h),w=Math.max(d,h);if(e>(x+f)/2&&e<=(w+f)/2){s=i[u].index;break}}}else for(var S=0;S0&&S(r[S].coordinate+r[S-1].coordinate)/2&&e<=(r[S].coordinate+r[S+1].coordinate)/2||S===c-1&&e>(r[S].coordinate+r[S-1].coordinate)/2){s=r[S].index;break}return s},JP=function(e){var n,r=e,i=r.type.displayName,o=(n=e.type)!==null&&n!==void 0&&n.defaultProps?or(or({},e.type.defaultProps),e.props):e.props,s=o.stroke,c=o.fill,l;switch(i){case"Line":l=s;break;case"Area":case"Radar":l=s&&s!=="none"?s:c;break;default:l=c;break}return l},vOe=function(e){var n=e.barSize,r=e.totalSize,i=e.stackGroups,o=i===void 0?{}:i;if(!o)return{};for(var s={},c=Object.keys(o),l=0,u=c.length;l=0});if(b&&b.length){var x=b[0].type.defaultProps,w=x!==void 0?or(or({},x),b[0].props):b[0].props,S=w.barSize,C=w[y];s[C]||(s[C]=[]);var _=Lt(S)?n:S;s[C].push({item:b[0],stackList:b.slice(1),barSize:Lt(_)?void 0:yi(_,r,0)})}}return s},yOe=function(e){var n=e.barGap,r=e.barCategoryGap,i=e.bandSize,o=e.sizeList,s=o===void 0?[]:o,c=e.maxBarSize,l=s.length;if(l<1)return null;var u=yi(n,i,0,!0),d,f=[];if(s[0].barSize===+s[0].barSize){var h=!1,p=i/l,v=s.reduce(function(S,C){return S+C.barSize||0},0);v+=(l-1)*u,v>=i&&(v-=(l-1)*u,u=0),v>=i&&p>0&&(h=!0,p*=.9,v=l*p);var m=(i-v)/2>>0,y={offset:m-u,size:0};d=s.reduce(function(S,C){var _={item:C.item,position:{offset:y.offset+y.size+u,size:h?p:C.barSize}},A=[].concat(a$(S),[_]);return y=A[A.length-1].position,C.stackList&&C.stackList.length&&C.stackList.forEach(function(j){A.push({item:j,position:y})}),A},f)}else{var b=yi(r,i,0,!0);i-2*b-(l-1)*u<=0&&(u=0);var x=(i-2*b-(l-1)*u)/l;x>1&&(x>>=0);var w=c===+c?Math.min(x,c):x;d=s.reduce(function(S,C,_){var A=[].concat(a$(S),[{item:C.item,position:{offset:b+(x+u)*_+(x-w)/2,size:w}}]);return C.stackList&&C.stackList.length&&C.stackList.forEach(function(j){A.push({item:j,position:A[A.length-1].position})}),A},f)}return d},xOe=function(e,n,r,i){var o=r.children,s=r.width,c=r.margin,l=s-(c.left||0)-(c.right||0),u=TW({children:o,legendWidth:l});if(u){var d=i||{},f=d.width,h=d.height,p=u.align,v=u.verticalAlign,m=u.layout;if((m==="vertical"||m==="horizontal"&&v==="middle")&&p!=="center"&&De(e[p]))return or(or({},e),{},Ld({},p,e[p]+(f||0)));if((m==="horizontal"||m==="vertical"&&p==="center")&&v!=="middle"&&De(e[v]))return or(or({},e),{},Ld({},v,e[v]+(h||0)))}return e},bOe=function(e,n,r){return Lt(n)?!0:e==="horizontal"?n==="yAxis":e==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},kW=function(e,n,r,i,o){var s=n.props.children,c=ko(s,TS).filter(function(u){return bOe(i,o,u.props.direction)});if(c&&c.length){var l=c.map(function(u){return u.props.dataKey});return e.reduce(function(u,d){var f=ar(d,r);if(Lt(f))return u;var h=Array.isArray(f)?[jS(f),Oc(f)]:[f,f],p=l.reduce(function(v,m){var y=ar(d,m,0),b=h[0]-Math.abs(Array.isArray(y)?y[0]:y),x=h[1]+Math.abs(Array.isArray(y)?y[1]:y);return[Math.min(b,v[0]),Math.max(x,v[1])]},[1/0,-1/0]);return[Math.min(p[0],u[0]),Math.max(p[1],u[1])]},[1/0,-1/0])}return null},wOe=function(e,n,r,i,o){var s=n.map(function(c){return kW(e,c,r,o,i)}).filter(function(c){return!Lt(c)});return s&&s.length?s.reduce(function(c,l){return[Math.min(c[0],l[0]),Math.max(c[1],l[1])]},[1/0,-1/0]):null},PW=function(e,n,r,i,o){var s=n.map(function(l){var u=l.props.dataKey;return r==="number"&&u&&kW(e,l,u,i)||Dp(e,u,r,o)});if(r==="number")return s.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]);var c={};return s.reduce(function(l,u){for(var d=0,f=u.length;d=2?vi(c[0]-c[1])*2*u:u,n&&(e.ticks||e.niceTicks)){var d=(e.ticks||e.niceTicks).map(function(f){var h=o?o.indexOf(f):f;return{coordinate:i(h)+u,value:f,offset:u}});return d.filter(function(f){return!fh(f.coordinate)})}return e.isCategorical&&e.categoricalDomain?e.categoricalDomain.map(function(f,h){return{coordinate:i(f)+u,value:f,index:h,offset:u}}):i.ticks&&!r?i.ticks(e.tickCount).map(function(f){return{coordinate:i(f)+u,value:f,offset:u}}):i.domain().map(function(f,h){return{coordinate:i(f)+u,value:o?o[f]:f,index:h,offset:u}})},m_=new WeakMap,ay=function(e,n){if(typeof n!="function")return e;m_.has(e)||m_.set(e,new WeakMap);var r=m_.get(e);if(r.has(n))return r.get(n);var i=function(){e.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,i),i},RW=function(e,n,r){var i=e.scale,o=e.type,s=e.layout,c=e.axisType;if(i==="auto")return s==="radial"&&c==="radiusAxis"?{scale:Qm(),realScaleType:"band"}:s==="radial"&&c==="angleAxis"?{scale:Yb(),realScaleType:"linear"}:o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:Mp(),realScaleType:"point"}:o==="category"?{scale:Qm(),realScaleType:"band"}:{scale:Yb(),realScaleType:"linear"};if(nv(i)){var l="scale".concat(fS(i));return{scale:(t$[l]||Mp)(),realScaleType:t$[l]?l:"point"}}return At(i)?{scale:i}:{scale:Mp(),realScaleType:"point"}},l$=1e-4,MW=function(e){var n=e.domain();if(!(!n||n.length<=2)){var r=n.length,i=e.range(),o=Math.min(i[0],i[1])-l$,s=Math.max(i[0],i[1])+l$,c=e(n[0]),l=e(n[r-1]);(cs||ls)&&e.domain([n[0],n[r-1]])}},SOe=function(e,n){if(!e)return null;for(var r=0,i=e.length;ri)&&(o[1]=i),o[0]>i&&(o[0]=i),o[1]=0?(e[c][r][0]=o,e[c][r][1]=o+l,o=e[c][r][1]):(e[c][r][0]=s,e[c][r][1]=s+l,s=e[c][r][1])}},AOe=function(e){var n=e.length;if(!(n<=0))for(var r=0,i=e[0].length;r=0?(e[s][r][0]=o,e[s][r][1]=o+c,o=e[s][r][1]):(e[s][r][0]=0,e[s][r][1]=0)}},jOe={sign:_Oe,expand:Vbe,none:hf,silhouette:Kbe,wiggle:Wbe,positive:AOe},EOe=function(e,n,r){var i=n.map(function(c){return c.props.dataKey}),o=jOe[r],s=Gbe().keys(i).value(function(c,l){return+ar(c,l,0)}).order(V1).offset(o);return s(e)},NOe=function(e,n,r,i,o,s){if(!e)return null;var c=s?n.reverse():n,l={},u=c.reduce(function(f,h){var p,v=(p=h.type)!==null&&p!==void 0&&p.defaultProps?or(or({},h.type.defaultProps),h.props):h.props,m=v.stackId,y=v.hide;if(y)return f;var b=v[r],x=f[b]||{hasStack:!1,stackGroups:{}};if(Tr(m)){var w=x.stackGroups[m]||{numericAxisId:r,cateAxisId:i,items:[]};w.items.push(h),x.hasStack=!0,x.stackGroups[m]=w}else x.stackGroups[hh("_stackId_")]={numericAxisId:r,cateAxisId:i,items:[h]};return or(or({},f),{},Ld({},b,x))},l),d={};return Object.keys(u).reduce(function(f,h){var p=u[h];if(p.hasStack){var v={};p.stackGroups=Object.keys(p.stackGroups).reduce(function(m,y){var b=p.stackGroups[y];return or(or({},m),{},Ld({},y,{numericAxisId:r,cateAxisId:i,items:b.items,stackedData:EOe(e,b.items,o)}))},v)}return or(or({},f),{},Ld({},h,p))},d)},DW=function(e,n){var r=n.realScaleType,i=n.type,o=n.tickCount,s=n.originalDomain,c=n.allowDecimals,l=r||n.scale;if(l!=="auto"&&l!=="linear")return null;if(o&&i==="number"&&s&&(s[0]==="auto"||s[1]==="auto")){var u=e.domain();if(!u.length)return null;var d=zPe(u,o,c);return e.domain([jS(d),Oc(d)]),{niceTicks:d}}if(o&&i==="number"){var f=e.domain(),h=HPe(f,o,c);return{niceTicks:h}}return null};function u$(t){var e=t.axis,n=t.ticks,r=t.bandSize,i=t.entry,o=t.index,s=t.dataKey;if(e.type==="category"){if(!e.allowDuplicatedCategory&&e.dataKey&&!Lt(i[e.dataKey])){var c=Nb(n,"value",i[e.dataKey]);if(c)return c.coordinate+r/2}return n[o]?n[o].coordinate+r/2:null}var l=ar(i,Lt(s)?e.dataKey:s);return Lt(l)?null:e.scale(l)}var d$=function(e){var n=e.axis,r=e.ticks,i=e.offset,o=e.bandSize,s=e.entry,c=e.index;if(n.type==="category")return r[c]?r[c].coordinate+i:null;var l=ar(s,n.dataKey,n.domain[c]);return Lt(l)?null:n.scale(l)-o/2+i},TOe=function(e){var n=e.numericAxis,r=n.scale.domain();if(n.type==="number"){var i=Math.min(r[0],r[1]),o=Math.max(r[0],r[1]);return i<=0&&o>=0?0:o<0?o:i}return r[0]},kOe=function(e,n){var r,i=(r=e.type)!==null&&r!==void 0&&r.defaultProps?or(or({},e.type.defaultProps),e.props):e.props,o=i.stackId;if(Tr(o)){var s=n[o];if(s){var c=s.items.indexOf(e);return c>=0?s.stackedData[c]:null}}return null},POe=function(e){return e.reduce(function(n,r){return[jS(r.concat([n[0]]).filter(De)),Oc(r.concat([n[1]]).filter(De))]},[1/0,-1/0])},$W=function(e,n,r){return Object.keys(e).reduce(function(i,o){var s=e[o],c=s.stackedData,l=c.reduce(function(u,d){var f=POe(d.slice(n,r+1));return[Math.min(u[0],f[0]),Math.max(u[1],f[1])]},[1/0,-1/0]);return[Math.min(l[0],i[0]),Math.max(l[1],i[1])]},[1/0,-1/0]).map(function(i){return i===1/0||i===-1/0?0:i})},f$=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,h$=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,wj=function(e,n,r){if(At(e))return e(n,r);if(!Array.isArray(e))return n;var i=[];if(De(e[0]))i[0]=r?e[0]:Math.min(e[0],n[0]);else if(f$.test(e[0])){var o=+f$.exec(e[0])[1];i[0]=n[0]-o}else At(e[0])?i[0]=e[0](n[0]):i[0]=n[0];if(De(e[1]))i[1]=r?e[1]:Math.max(e[1],n[1]);else if(h$.test(e[1])){var s=+h$.exec(e[1])[1];i[1]=n[1]+s}else At(e[1])?i[1]=e[1](n[1]):i[1]=n[1];return i},n0=function(e,n,r){if(e&&e.scale&&e.scale.bandwidth){var i=e.scale.bandwidth();if(!r||i>0)return i}if(e&&n&&n.length>=2){for(var o=jP(n,function(f){return f.coordinate}),s=1/0,c=1,l=o.length;ct.length)&&(e=t.length);for(var n=0,r=new Array(e);n2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(e-(r.left||0)-(r.right||0)),Math.abs(n-(r.top||0)-(r.bottom||0)))/2},UW=function(e,n,r,i,o){var s=e.width,c=e.height,l=e.startAngle,u=e.endAngle,d=yi(e.cx,s,s/2),f=yi(e.cy,c,c/2),h=BW(s,c,r),p=yi(e.innerRadius,h,0),v=yi(e.outerRadius,h,h*.8),m=Object.keys(n);return m.reduce(function(y,b){var x=n[b],w=x.domain,S=x.reversed,C;if(Lt(x.range))i==="angleAxis"?C=[l,u]:i==="radiusAxis"&&(C=[p,v]),S&&(C=[C[1],C[0]]);else{C=x.range;var _=C,A=ROe(_,2);l=A[0],u=A[1]}var j=RW(x,o),N=j.realScaleType,k=j.scale;k.domain(w).range(C),MW(k);var O=DW(k,va(va({},x),{},{realScaleType:N})),E=va(va(va({},x),O),{},{range:C,radius:v,realScaleType:N,scale:k,cx:d,cy:f,innerRadius:p,outerRadius:v,startAngle:l,endAngle:u});return va(va({},y),{},FW({},b,E))},{})},BOe=function(e,n){var r=e.x,i=e.y,o=n.x,s=n.y;return Math.sqrt(Math.pow(r-o,2)+Math.pow(i-s,2))},UOe=function(e,n){var r=e.x,i=e.y,o=n.cx,s=n.cy,c=BOe({x:r,y:i},{x:o,y:s});if(c<=0)return{radius:c};var l=(r-o)/c,u=Math.acos(l);return i>s&&(u=2*Math.PI-u),{radius:c,angle:FOe(u),angleInRadian:u}},zOe=function(e){var n=e.startAngle,r=e.endAngle,i=Math.floor(n/360),o=Math.floor(r/360),s=Math.min(i,o);return{startAngle:n-s*360,endAngle:r-s*360}},HOe=function(e,n){var r=n.startAngle,i=n.endAngle,o=Math.floor(r/360),s=Math.floor(i/360),c=Math.min(o,s);return e+c*360},v$=function(e,n){var r=e.x,i=e.y,o=UOe({x:r,y:i},n),s=o.radius,c=o.angle,l=n.innerRadius,u=n.outerRadius;if(su)return!1;if(s===0)return!0;var d=zOe(n),f=d.startAngle,h=d.endAngle,p=c,v;if(f<=h){for(;p>h;)p-=360;for(;p=f&&p<=h}else{for(;p>f;)p-=360;for(;p=h&&p<=f}return v?va(va({},n),{},{radius:s,angle:HOe(p,n)}):null},zW=function(e){return!g.isValidElement(e)&&!At(e)&&typeof e!="boolean"?e.className:""};function sg(t){"@babel/helpers - typeof";return sg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},sg(t)}var GOe=["offset"];function VOe(t){return YOe(t)||qOe(t)||WOe(t)||KOe()}function KOe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function WOe(t,e){if(t){if(typeof t=="string")return Sj(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Sj(t,e)}}function qOe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function YOe(t){if(Array.isArray(t))return Sj(t)}function Sj(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function XOe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function y$(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function xr(t){for(var e=1;e=0?1:-1,w,S;i==="insideStart"?(w=p+x*s,S=m):i==="insideEnd"?(w=v-x*s,S=!m):i==="end"&&(w=v+x*s,S=m),S=b<=0?S:!S;var C=fn(u,d,y,w),_=fn(u,d,y,w+(S?1:-1)*359),A="M".concat(C.x,",").concat(C.y,` + A`).concat(y,",").concat(y,",0,1,").concat(S?0:1,`, + `).concat(_.x,",").concat(_.y),j=Lt(e.id)?hh("recharts-radial-line-"):e.id;return T.createElement("text",ag({},r,{dominantBaseline:"central",className:Mt("recharts-radial-bar-label",c)}),T.createElement("defs",null,T.createElement("path",{id:j,d:A})),T.createElement("textPath",{xlinkHref:"#".concat(j)},n))},iIe=function(e){var n=e.viewBox,r=e.offset,i=e.position,o=n,s=o.cx,c=o.cy,l=o.innerRadius,u=o.outerRadius,d=o.startAngle,f=o.endAngle,h=(d+f)/2;if(i==="outside"){var p=fn(s,c,u+r,h),v=p.x,m=p.y;return{x:v,y:m,textAnchor:v>=s?"start":"end",verticalAnchor:"middle"}}if(i==="center")return{x:s,y:c,textAnchor:"middle",verticalAnchor:"middle"};if(i==="centerTop")return{x:s,y:c,textAnchor:"middle",verticalAnchor:"start"};if(i==="centerBottom")return{x:s,y:c,textAnchor:"middle",verticalAnchor:"end"};var y=(l+u)/2,b=fn(s,c,y,h),x=b.x,w=b.y;return{x,y:w,textAnchor:"middle",verticalAnchor:"middle"}},oIe=function(e){var n=e.viewBox,r=e.parentViewBox,i=e.offset,o=e.position,s=n,c=s.x,l=s.y,u=s.width,d=s.height,f=d>=0?1:-1,h=f*i,p=f>0?"end":"start",v=f>0?"start":"end",m=u>=0?1:-1,y=m*i,b=m>0?"end":"start",x=m>0?"start":"end";if(o==="top"){var w={x:c+u/2,y:l-f*i,textAnchor:"middle",verticalAnchor:p};return xr(xr({},w),r?{height:Math.max(l-r.y,0),width:u}:{})}if(o==="bottom"){var S={x:c+u/2,y:l+d+h,textAnchor:"middle",verticalAnchor:v};return xr(xr({},S),r?{height:Math.max(r.y+r.height-(l+d),0),width:u}:{})}if(o==="left"){var C={x:c-y,y:l+d/2,textAnchor:b,verticalAnchor:"middle"};return xr(xr({},C),r?{width:Math.max(C.x-r.x,0),height:d}:{})}if(o==="right"){var _={x:c+u+y,y:l+d/2,textAnchor:x,verticalAnchor:"middle"};return xr(xr({},_),r?{width:Math.max(r.x+r.width-_.x,0),height:d}:{})}var A=r?{width:u,height:d}:{};return o==="insideLeft"?xr({x:c+y,y:l+d/2,textAnchor:x,verticalAnchor:"middle"},A):o==="insideRight"?xr({x:c+u-y,y:l+d/2,textAnchor:b,verticalAnchor:"middle"},A):o==="insideTop"?xr({x:c+u/2,y:l+h,textAnchor:"middle",verticalAnchor:v},A):o==="insideBottom"?xr({x:c+u/2,y:l+d-h,textAnchor:"middle",verticalAnchor:p},A):o==="insideTopLeft"?xr({x:c+y,y:l+h,textAnchor:x,verticalAnchor:v},A):o==="insideTopRight"?xr({x:c+u-y,y:l+h,textAnchor:b,verticalAnchor:v},A):o==="insideBottomLeft"?xr({x:c+y,y:l+d-h,textAnchor:x,verticalAnchor:p},A):o==="insideBottomRight"?xr({x:c+u-y,y:l+d-h,textAnchor:b,verticalAnchor:p},A):ch(o)&&(De(o.x)||Kl(o.x))&&(De(o.y)||Kl(o.y))?xr({x:c+yi(o.x,u),y:l+yi(o.y,d),textAnchor:"end",verticalAnchor:"end"},A):xr({x:c+u/2,y:l+d/2,textAnchor:"middle",verticalAnchor:"middle"},A)},sIe=function(e){return"cx"in e&&De(e.cx)};function Dr(t){var e=t.offset,n=e===void 0?5:e,r=QOe(t,GOe),i=xr({offset:n},r),o=i.viewBox,s=i.position,c=i.value,l=i.children,u=i.content,d=i.className,f=d===void 0?"":d,h=i.textBreakAll;if(!o||Lt(c)&&Lt(l)&&!g.isValidElement(u)&&!At(u))return null;if(g.isValidElement(u))return g.cloneElement(u,i);var p;if(At(u)){if(p=g.createElement(u,i),g.isValidElement(p))return p}else p=tIe(i);var v=sIe(o),m=ft(i,!0);if(v&&(s==="insideStart"||s==="insideEnd"||s==="end"))return rIe(i,p,m);var y=v?iIe(i):oIe(i);return T.createElement(Eu,ag({className:Mt("recharts-label",f)},m,y,{breakAll:h}),p)}Dr.displayName="Label";var HW=function(e){var n=e.cx,r=e.cy,i=e.angle,o=e.startAngle,s=e.endAngle,c=e.r,l=e.radius,u=e.innerRadius,d=e.outerRadius,f=e.x,h=e.y,p=e.top,v=e.left,m=e.width,y=e.height,b=e.clockWise,x=e.labelViewBox;if(x)return x;if(De(m)&&De(y)){if(De(f)&&De(h))return{x:f,y:h,width:m,height:y};if(De(p)&&De(v))return{x:p,y:v,width:m,height:y}}return De(f)&&De(h)?{x:f,y:h,width:0,height:0}:De(n)&&De(r)?{cx:n,cy:r,startAngle:o||i||0,endAngle:s||i||0,innerRadius:u||0,outerRadius:d||l||c||0,clockWise:b}:e.viewBox?e.viewBox:{}},aIe=function(e,n){return e?e===!0?T.createElement(Dr,{key:"label-implicit",viewBox:n}):Tr(e)?T.createElement(Dr,{key:"label-implicit",viewBox:n,value:e}):g.isValidElement(e)?e.type===Dr?g.cloneElement(e,{key:"label-implicit",viewBox:n}):T.createElement(Dr,{key:"label-implicit",content:e,viewBox:n}):At(e)?T.createElement(Dr,{key:"label-implicit",content:e,viewBox:n}):ch(e)?T.createElement(Dr,ag({viewBox:n},e,{key:"label-implicit"})):null:null},cIe=function(e,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&r&&!e.label)return null;var i=e.children,o=HW(e),s=ko(i,Dr).map(function(l,u){return g.cloneElement(l,{viewBox:n||o,key:"label-".concat(u)})});if(!r)return s;var c=aIe(e.label,n||o);return[c].concat(VOe(s))};Dr.parseViewBox=HW;Dr.renderCallByParent=cIe;function lIe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var uIe=lIe;const GW=hn(uIe);function cg(t){"@babel/helpers - typeof";return cg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},cg(t)}var dIe=["valueAccessor"],fIe=["data","dataKey","clockWise","id","textBreakAll"];function hIe(t){return vIe(t)||gIe(t)||mIe(t)||pIe()}function pIe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mIe(t,e){if(t){if(typeof t=="string")return Cj(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Cj(t,e)}}function gIe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function vIe(t){if(Array.isArray(t))return Cj(t)}function Cj(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function wIe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var SIe=function(e){return Array.isArray(e.value)?GW(e.value):e.value};function Ws(t){var e=t.valueAccessor,n=e===void 0?SIe:e,r=w$(t,dIe),i=r.data,o=r.dataKey,s=r.clockWise,c=r.id,l=r.textBreakAll,u=w$(r,fIe);return!i||!i.length?null:T.createElement(tn,{className:"recharts-label-list"},i.map(function(d,f){var h=Lt(o)?n(d,f):ar(d&&d.payload,o),p=Lt(c)?{}:{id:"".concat(c,"-").concat(f)};return T.createElement(Dr,i0({},ft(d,!0),u,p,{parentViewBox:d.parentViewBox,value:h,textBreakAll:l,viewBox:Dr.parseViewBox(Lt(s)?d:b$(b$({},d),{},{clockWise:s})),key:"label-".concat(f),index:f}))}))}Ws.displayName="LabelList";function CIe(t,e){return t?t===!0?T.createElement(Ws,{key:"labelList-implicit",data:e}):T.isValidElement(t)||At(t)?T.createElement(Ws,{key:"labelList-implicit",data:e,content:t}):ch(t)?T.createElement(Ws,i0({data:e},t,{key:"labelList-implicit"})):null:null}function _Ie(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&n&&!t.label)return null;var r=t.children,i=ko(r,Ws).map(function(s,c){return g.cloneElement(s,{data:e,key:"labelList-".concat(c)})});if(!n)return i;var o=CIe(t.label,e);return[o].concat(hIe(i))}Ws.renderCallByParent=_Ie;function lg(t){"@babel/helpers - typeof";return lg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lg(t)}function _j(){return _j=Object.assign?Object.assign.bind():function(t){for(var e=1;e180),",").concat(+(s>u),`, + `).concat(f.x,",").concat(f.y,` + `);if(i>0){var p=fn(n,r,i,s),v=fn(n,r,i,u);h+="L ".concat(v.x,",").concat(v.y,` + A `).concat(i,",").concat(i,`,0, + `).concat(+(Math.abs(l)>180),",").concat(+(s<=u),`, + `).concat(p.x,",").concat(p.y," Z")}else h+="L ".concat(n,",").concat(r," Z");return h},TIe=function(e){var n=e.cx,r=e.cy,i=e.innerRadius,o=e.outerRadius,s=e.cornerRadius,c=e.forceCornerRadius,l=e.cornerIsExternal,u=e.startAngle,d=e.endAngle,f=vi(d-u),h=cy({cx:n,cy:r,radius:o,angle:u,sign:f,cornerRadius:s,cornerIsExternal:l}),p=h.circleTangency,v=h.lineTangency,m=h.theta,y=cy({cx:n,cy:r,radius:o,angle:d,sign:-f,cornerRadius:s,cornerIsExternal:l}),b=y.circleTangency,x=y.lineTangency,w=y.theta,S=l?Math.abs(u-d):Math.abs(u-d)-m-w;if(S<0)return c?"M ".concat(v.x,",").concat(v.y,` + a`).concat(s,",").concat(s,",0,0,1,").concat(s*2,`,0 + a`).concat(s,",").concat(s,",0,0,1,").concat(-s*2,`,0 + `):VW({cx:n,cy:r,innerRadius:i,outerRadius:o,startAngle:u,endAngle:d});var C="M ".concat(v.x,",").concat(v.y,` + A`).concat(s,",").concat(s,",0,0,").concat(+(f<0),",").concat(p.x,",").concat(p.y,` + A`).concat(o,",").concat(o,",0,").concat(+(S>180),",").concat(+(f<0),",").concat(b.x,",").concat(b.y,` + A`).concat(s,",").concat(s,",0,0,").concat(+(f<0),",").concat(x.x,",").concat(x.y,` + `);if(i>0){var _=cy({cx:n,cy:r,radius:i,angle:u,sign:f,isExternal:!0,cornerRadius:s,cornerIsExternal:l}),A=_.circleTangency,j=_.lineTangency,N=_.theta,k=cy({cx:n,cy:r,radius:i,angle:d,sign:-f,isExternal:!0,cornerRadius:s,cornerIsExternal:l}),O=k.circleTangency,E=k.lineTangency,R=k.theta,D=l?Math.abs(u-d):Math.abs(u-d)-N-R;if(D<0&&s===0)return"".concat(C,"L").concat(n,",").concat(r,"Z");C+="L".concat(E.x,",").concat(E.y,` + A`).concat(s,",").concat(s,",0,0,").concat(+(f<0),",").concat(O.x,",").concat(O.y,` + A`).concat(i,",").concat(i,",0,").concat(+(D>180),",").concat(+(f>0),",").concat(A.x,",").concat(A.y,` + A`).concat(s,",").concat(s,",0,0,").concat(+(f<0),",").concat(j.x,",").concat(j.y,"Z")}else C+="L".concat(n,",").concat(r,"Z");return C},kIe={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},KW=function(e){var n=C$(C$({},kIe),e),r=n.cx,i=n.cy,o=n.innerRadius,s=n.outerRadius,c=n.cornerRadius,l=n.forceCornerRadius,u=n.cornerIsExternal,d=n.startAngle,f=n.endAngle,h=n.className;if(s0&&Math.abs(d-f)<360?y=TIe({cx:r,cy:i,innerRadius:o,outerRadius:s,cornerRadius:Math.min(m,v/2),forceCornerRadius:l,cornerIsExternal:u,startAngle:d,endAngle:f}):y=VW({cx:r,cy:i,innerRadius:o,outerRadius:s,startAngle:d,endAngle:f}),T.createElement("path",_j({},ft(n,!0),{className:p,d:y,role:"img"}))};function ug(t){"@babel/helpers - typeof";return ug=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ug(t)}function Aj(){return Aj=Object.assign?Object.assign.bind():function(t){for(var e=1;e0;)if(!n.equals(t[r],e[r],r,r,t,e,n))return!1;return!0}function VIe(t,e){return bh(t.getTime(),e.getTime())}function P$(t,e,n){if(t.size!==e.size)return!1;for(var r={},i=t.entries(),o=0,s,c;(s=i.next())&&!s.done;){for(var l=e.entries(),u=!1,d=0;(c=l.next())&&!c.done;){var f=s.value,h=f[0],p=f[1],v=c.value,m=v[0],y=v[1];!u&&!r[d]&&(u=n.equals(h,m,o,d,t,e,n)&&n.equals(p,y,h,m,t,e,n))&&(r[d]=!0),d++}if(!u)return!1;o++}return!0}function KIe(t,e,n){var r=k$(t),i=r.length;if(k$(e).length!==i)return!1;for(var o;i-- >0;)if(o=r[i],o===XW&&(t.$$typeof||e.$$typeof)&&t.$$typeof!==e.$$typeof||!QW(e,o)||!n.equals(t[o],e[o],o,o,t,e,n))return!1;return!0}function Qh(t,e,n){var r=N$(t),i=r.length;if(N$(e).length!==i)return!1;for(var o,s,c;i-- >0;)if(o=r[i],o===XW&&(t.$$typeof||e.$$typeof)&&t.$$typeof!==e.$$typeof||!QW(e,o)||!n.equals(t[o],e[o],o,o,t,e,n)||(s=T$(t,o),c=T$(e,o),(s||c)&&(!s||!c||s.configurable!==c.configurable||s.enumerable!==c.enumerable||s.writable!==c.writable)))return!1;return!0}function WIe(t,e){return bh(t.valueOf(),e.valueOf())}function qIe(t,e){return t.source===e.source&&t.flags===e.flags}function O$(t,e,n){if(t.size!==e.size)return!1;for(var r={},i=t.values(),o,s;(o=i.next())&&!o.done;){for(var c=e.values(),l=!1,u=0;(s=c.next())&&!s.done;)!l&&!r[u]&&(l=n.equals(o.value,s.value,o.value,s.value,t,e,n))&&(r[u]=!0),u++;if(!l)return!1}return!0}function YIe(t,e){var n=t.length;if(e.length!==n)return!1;for(;n-- >0;)if(t[n]!==e[n])return!1;return!0}var QIe="[object Arguments]",XIe="[object Boolean]",JIe="[object Date]",ZIe="[object Map]",eRe="[object Number]",tRe="[object Object]",nRe="[object RegExp]",rRe="[object Set]",iRe="[object String]",oRe=Array.isArray,I$=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,R$=Object.assign,sRe=Object.prototype.toString.call.bind(Object.prototype.toString);function aRe(t){var e=t.areArraysEqual,n=t.areDatesEqual,r=t.areMapsEqual,i=t.areObjectsEqual,o=t.arePrimitiveWrappersEqual,s=t.areRegExpsEqual,c=t.areSetsEqual,l=t.areTypedArraysEqual;return function(d,f,h){if(d===f)return!0;if(d==null||f==null||typeof d!="object"||typeof f!="object")return d!==d&&f!==f;var p=d.constructor;if(p!==f.constructor)return!1;if(p===Object)return i(d,f,h);if(oRe(d))return e(d,f,h);if(I$!=null&&I$(d))return l(d,f,h);if(p===Date)return n(d,f,h);if(p===RegExp)return s(d,f,h);if(p===Map)return r(d,f,h);if(p===Set)return c(d,f,h);var v=sRe(d);return v===JIe?n(d,f,h):v===nRe?s(d,f,h):v===ZIe?r(d,f,h):v===rRe?c(d,f,h):v===tRe?typeof d.then!="function"&&typeof f.then!="function"&&i(d,f,h):v===QIe?i(d,f,h):v===XIe||v===eRe||v===iRe?o(d,f,h):!1}}function cRe(t){var e=t.circular,n=t.createCustomConfig,r=t.strict,i={areArraysEqual:r?Qh:GIe,areDatesEqual:VIe,areMapsEqual:r?E$(P$,Qh):P$,areObjectsEqual:r?Qh:KIe,arePrimitiveWrappersEqual:WIe,areRegExpsEqual:qIe,areSetsEqual:r?E$(O$,Qh):O$,areTypedArraysEqual:r?Qh:YIe};if(n&&(i=R$({},i,n(i))),e){var o=uy(i.areArraysEqual),s=uy(i.areMapsEqual),c=uy(i.areObjectsEqual),l=uy(i.areSetsEqual);i=R$({},i,{areArraysEqual:o,areMapsEqual:s,areObjectsEqual:c,areSetsEqual:l})}return i}function lRe(t){return function(e,n,r,i,o,s,c){return t(e,n,c)}}function uRe(t){var e=t.circular,n=t.comparator,r=t.createState,i=t.equals,o=t.strict;if(r)return function(l,u){var d=r(),f=d.cache,h=f===void 0?e?new WeakMap:void 0:f,p=d.meta;return n(l,u,{cache:h,equals:i,meta:p,strict:o})};if(e)return function(l,u){return n(l,u,{cache:new WeakMap,equals:i,meta:void 0,strict:o})};var s={cache:void 0,equals:i,meta:void 0,strict:o};return function(l,u){return n(l,u,s)}}var dRe=Al();Al({strict:!0});Al({circular:!0});Al({circular:!0,strict:!0});Al({createInternalComparator:function(){return bh}});Al({strict:!0,createInternalComparator:function(){return bh}});Al({circular:!0,createInternalComparator:function(){return bh}});Al({circular:!0,createInternalComparator:function(){return bh},strict:!0});function Al(t){t===void 0&&(t={});var e=t.circular,n=e===void 0?!1:e,r=t.createInternalComparator,i=t.createState,o=t.strict,s=o===void 0?!1:o,c=cRe(t),l=aRe(c),u=r?r(l):lRe(l);return uRe({circular:n,comparator:l,createState:i,equals:u,strict:s})}function fRe(t){typeof requestAnimationFrame<"u"&&requestAnimationFrame(t)}function M$(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function i(o){n<0&&(n=o),o-n>e?(t(o),n=-1):fRe(i)};requestAnimationFrame(r)}function jj(t){"@babel/helpers - typeof";return jj=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},jj(t)}function hRe(t){return vRe(t)||gRe(t)||mRe(t)||pRe()}function pRe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mRe(t,e){if(t){if(typeof t=="string")return D$(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return D$(t,e)}}function D$(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1?1:b<0?0:b},m=function(b){for(var x=b>1?1:b,w=x,S=0;S<8;++S){var C=f(w)-x,_=p(w);if(Math.abs(C-x)0&&arguments[0]!==void 0?arguments[0]:{},n=e.stiff,r=n===void 0?100:n,i=e.damping,o=i===void 0?8:i,s=e.dt,c=s===void 0?17:s,l=function(d,f,h){var p=-(d-f)*r,v=h*o,m=h+(p-v)*c/1e3,y=h*c/1e3+d;return Math.abs(y-f)t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function qRe(t,e){if(t==null)return{};var n={},r=Object.keys(t),i,o;for(o=0;o=0)&&(n[i]=t[i]);return n}function g_(t){return JRe(t)||XRe(t)||QRe(t)||YRe()}function YRe(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QRe(t,e){if(t){if(typeof t=="string")return Pj(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Pj(t,e)}}function XRe(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function JRe(t){if(Array.isArray(t))return Pj(t)}function Pj(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function a0(t){return a0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},a0(t)}var bs=function(t){r2e(n,t);var e=i2e(n);function n(r,i){var o;ZRe(this,n),o=e.call(this,r,i);var s=o.props,c=s.isActive,l=s.attributeName,u=s.from,d=s.to,f=s.steps,h=s.children,p=s.duration;if(o.handleStyleChange=o.handleStyleChange.bind(Rj(o)),o.changeStyle=o.changeStyle.bind(Rj(o)),!c||p<=0)return o.state={style:{}},typeof h=="function"&&(o.state={style:d}),Ij(o);if(f&&f.length)o.state={style:f[0].style};else if(u){if(typeof h=="function")return o.state={style:u},Ij(o);o.state={style:l?dp({},l,u):u}}else o.state={style:{}};return o}return t2e(n,[{key:"componentDidMount",value:function(){var i=this.props,o=i.isActive,s=i.canBegin;this.mounted=!0,!(!o||!s)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(i){var o=this.props,s=o.isActive,c=o.canBegin,l=o.attributeName,u=o.shouldReAnimate,d=o.to,f=o.from,h=this.state.style;if(c){if(!s){var p={style:l?dp({},l,d):d};this.state&&h&&(l&&h[l]!==d||!l&&h!==d)&&this.setState(p);return}if(!(dRe(i.to,d)&&i.canBegin&&i.isActive)){var v=!i.canBegin||!i.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=v||u?f:i.to;if(this.state&&h){var y={style:l?dp({},l,m):m};(l&&h[l]!==m||!l&&h!==m)&&this.setState(y)}this.runAnimation(Uo(Uo({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var i=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),i&&i()}},{key:"handleStyleChange",value:function(i){this.changeStyle(i)}},{key:"changeStyle",value:function(i){this.mounted&&this.setState({style:i})}},{key:"runJSAnimation",value:function(i){var o=this,s=i.from,c=i.to,l=i.duration,u=i.easing,d=i.begin,f=i.onAnimationEnd,h=i.onAnimationStart,p=VRe(s,c,RRe(u),l,this.changeStyle),v=function(){o.stopJSAnimation=p()};this.manager.start([h,d,v,l,f])}},{key:"runStepAnimation",value:function(i){var o=this,s=i.steps,c=i.begin,l=i.onAnimationStart,u=s[0],d=u.style,f=u.duration,h=f===void 0?0:f,p=function(m,y,b){if(b===0)return m;var x=y.duration,w=y.easing,S=w===void 0?"ease":w,C=y.style,_=y.properties,A=y.onAnimationEnd,j=b>0?s[b-1]:y,N=_||Object.keys(C);if(typeof S=="function"||S==="spring")return[].concat(g_(m),[o.runJSAnimation.bind(o,{from:j.style,to:C,duration:x,easing:S}),x]);var k=F$(N,x,S),O=Uo(Uo(Uo({},j.style),C),{},{transition:k});return[].concat(g_(m),[O,x,A]).filter(SRe)};return this.manager.start([l].concat(g_(s.reduce(p,[d,Math.max(h,c)])),[i.onAnimationEnd]))}},{key:"runAnimation",value:function(i){this.manager||(this.manager=yRe());var o=i.begin,s=i.duration,c=i.attributeName,l=i.to,u=i.easing,d=i.onAnimationStart,f=i.onAnimationEnd,h=i.steps,p=i.children,v=this.manager;if(this.unSubscribe=v.subscribe(this.handleStyleChange),typeof u=="function"||typeof p=="function"||u==="spring"){this.runJSAnimation(i);return}if(h.length>1){this.runStepAnimation(i);return}var m=c?dp({},c,l):l,y=F$(Object.keys(m),s,u);v.start([d,o,Uo(Uo({},m),{},{transition:y}),s,f])}},{key:"render",value:function(){var i=this.props,o=i.children;i.begin;var s=i.duration;i.attributeName,i.easing;var c=i.isActive;i.steps,i.from,i.to,i.canBegin,i.onAnimationEnd,i.shouldReAnimate,i.onAnimationReStart;var l=WRe(i,KRe),u=g.Children.count(o),d=this.state.style;if(typeof o=="function")return o(d);if(!c||u===0||s<=0)return o;var f=function(p){var v=p.props,m=v.style,y=m===void 0?{}:m,b=v.className,x=g.cloneElement(p,Uo(Uo({},l),{},{style:Uo(Uo({},y),d),className:b}));return x};return u===1?f(g.Children.only(o)):T.createElement("div",null,g.Children.map(o,function(h){return f(h)}))}}]),n}(g.PureComponent);bs.displayName="Animate";bs.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};bs.propTypes={from:Vt.oneOfType([Vt.object,Vt.string]),to:Vt.oneOfType([Vt.object,Vt.string]),attributeName:Vt.string,duration:Vt.number,begin:Vt.number,easing:Vt.oneOfType([Vt.string,Vt.func]),steps:Vt.arrayOf(Vt.shape({duration:Vt.number.isRequired,style:Vt.object.isRequired,easing:Vt.oneOfType([Vt.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),Vt.func]),properties:Vt.arrayOf("string"),onAnimationEnd:Vt.func})),children:Vt.oneOfType([Vt.node,Vt.func]),isActive:Vt.bool,canBegin:Vt.bool,onAnimationEnd:Vt.func,shouldReAnimate:Vt.bool,onAnimationStart:Vt.func,onAnimationReStart:Vt.func};Vt.object,Vt.object,Vt.object,Vt.element;Vt.object,Vt.object,Vt.object,Vt.oneOfType([Vt.array,Vt.element]),Vt.any;function hg(t){"@babel/helpers - typeof";return hg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},hg(t)}function c0(){return c0=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0?1:-1,l=r>=0?1:-1,u=i>=0&&r>=0||i<0&&r<0?1:0,d;if(s>0&&o instanceof Array){for(var f=[0,0,0,0],h=0,p=4;hs?s:o[h];d="M".concat(e,",").concat(n+c*f[0]),f[0]>0&&(d+="A ".concat(f[0],",").concat(f[0],",0,0,").concat(u,",").concat(e+l*f[0],",").concat(n)),d+="L ".concat(e+r-l*f[1],",").concat(n),f[1]>0&&(d+="A ".concat(f[1],",").concat(f[1],",0,0,").concat(u,`, + `).concat(e+r,",").concat(n+c*f[1])),d+="L ".concat(e+r,",").concat(n+i-c*f[2]),f[2]>0&&(d+="A ".concat(f[2],",").concat(f[2],",0,0,").concat(u,`, + `).concat(e+r-l*f[2],",").concat(n+i)),d+="L ".concat(e+l*f[3],",").concat(n+i),f[3]>0&&(d+="A ".concat(f[3],",").concat(f[3],",0,0,").concat(u,`, + `).concat(e,",").concat(n+i-c*f[3])),d+="Z"}else if(s>0&&o===+o&&o>0){var v=Math.min(s,o);d="M ".concat(e,",").concat(n+c*v,` + A `).concat(v,",").concat(v,",0,0,").concat(u,",").concat(e+l*v,",").concat(n,` + L `).concat(e+r-l*v,",").concat(n,` + A `).concat(v,",").concat(v,",0,0,").concat(u,",").concat(e+r,",").concat(n+c*v,` + L `).concat(e+r,",").concat(n+i-c*v,` + A `).concat(v,",").concat(v,",0,0,").concat(u,",").concat(e+r-l*v,",").concat(n+i,` + L `).concat(e+l*v,",").concat(n+i,` + A `).concat(v,",").concat(v,",0,0,").concat(u,",").concat(e,",").concat(n+i-c*v," Z")}else d="M ".concat(e,",").concat(n," h ").concat(r," v ").concat(i," h ").concat(-r," Z");return d},p2e=function(e,n){if(!e||!n)return!1;var r=e.x,i=e.y,o=n.x,s=n.y,c=n.width,l=n.height;if(Math.abs(c)>0&&Math.abs(l)>0){var u=Math.min(o,o+c),d=Math.max(o,o+c),f=Math.min(s,s+l),h=Math.max(s,s+l);return r>=u&&r<=d&&i>=f&&i<=h}return!1},m2e={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},ZP=function(e){var n=W$(W$({},m2e),e),r=g.useRef(),i=g.useState(-1),o=s2e(i,2),s=o[0],c=o[1];g.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var S=r.current.getTotalLength();S&&c(S)}catch{}},[]);var l=n.x,u=n.y,d=n.width,f=n.height,h=n.radius,p=n.className,v=n.animationEasing,m=n.animationDuration,y=n.animationBegin,b=n.isAnimationActive,x=n.isUpdateAnimationActive;if(l!==+l||u!==+u||d!==+d||f!==+f||d===0||f===0)return null;var w=Mt("recharts-rectangle",p);return x?T.createElement(bs,{canBegin:s>0,from:{width:d,height:f,x:l,y:u},to:{width:d,height:f,x:l,y:u},duration:m,animationEasing:v,isActive:x},function(S){var C=S.width,_=S.height,A=S.x,j=S.y;return T.createElement(bs,{canBegin:s>0,from:"0px ".concat(s===-1?1:s,"px"),to:"".concat(s,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:m,isActive:b,easing:v},T.createElement("path",c0({},ft(n,!0),{className:w,d:q$(A,j,C,_,h),ref:r})))}):T.createElement("path",c0({},ft(n,!0),{className:w,d:q$(l,u,d,f,h)}))},g2e=["points","className","baseLinePoints","connectNulls"];function yd(){return yd=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function y2e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Y$(t){return S2e(t)||w2e(t)||b2e(t)||x2e()}function x2e(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function b2e(t,e){if(t){if(typeof t=="string")return Mj(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mj(t,e)}}function w2e(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function S2e(t){if(Array.isArray(t))return Mj(t)}function Mj(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:[],n=[[]];return e.forEach(function(r){Q$(r)?n[n.length-1].push(r):n[n.length-1].length>0&&n.push([])}),Q$(e[0])&&n[n.length-1].push(e[0]),n[n.length-1].length<=0&&(n=n.slice(0,-1)),n},Lp=function(e,n){var r=C2e(e);n&&(r=[r.reduce(function(o,s){return[].concat(Y$(o),Y$(s))},[])]);var i=r.map(function(o){return o.reduce(function(s,c,l){return"".concat(s).concat(l===0?"M":"L").concat(c.x,",").concat(c.y)},"")}).join("");return r.length===1?"".concat(i,"Z"):i},_2e=function(e,n,r){var i=Lp(e,r);return"".concat(i.slice(-1)==="Z"?i.slice(0,-1):i,"L").concat(Lp(n.reverse(),r).slice(1))},iq=function(e){var n=e.points,r=e.className,i=e.baseLinePoints,o=e.connectNulls,s=v2e(e,g2e);if(!n||!n.length)return null;var c=Mt("recharts-polygon",r);if(i&&i.length){var l=s.stroke&&s.stroke!=="none",u=_2e(n,i,o);return T.createElement("g",{className:c},T.createElement("path",yd({},ft(s,!0),{fill:u.slice(-1)==="Z"?s.fill:"none",stroke:"none",d:u})),l?T.createElement("path",yd({},ft(s,!0),{fill:"none",d:Lp(n,o)})):null,l?T.createElement("path",yd({},ft(s,!0),{fill:"none",d:Lp(i,o)})):null)}var d=Lp(n,o);return T.createElement("path",yd({},ft(s,!0),{fill:d.slice(-1)==="Z"?s.fill:"none",className:c,d}))};function Dj(){return Dj=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function P2e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var O2e=function(e,n,r,i,o,s){return"M".concat(e,",").concat(o,"v").concat(i,"M").concat(s,",").concat(n,"h").concat(r)},I2e=function(e){var n=e.x,r=n===void 0?0:n,i=e.y,o=i===void 0?0:i,s=e.top,c=s===void 0?0:s,l=e.left,u=l===void 0?0:l,d=e.width,f=d===void 0?0:d,h=e.height,p=h===void 0?0:h,v=e.className,m=k2e(e,A2e),y=j2e({x:r,y:o,top:c,left:u,width:f,height:p},m);return!De(r)||!De(o)||!De(f)||!De(p)||!De(c)||!De(u)?null:T.createElement("path",$j({},ft(y,!0),{className:Mt("recharts-cross",v),d:O2e(r,o,f,p,c,u)}))},R2e=["cx","cy","innerRadius","outerRadius","gridType","radialLines"];function mg(t){"@babel/helpers - typeof";return mg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},mg(t)}function M2e(t,e){if(t==null)return{};var n=D2e(t,e),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function D2e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Qa(){return Qa=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function oMe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function sMe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function tL(t,e){for(var n=0;niL?s=i==="outer"?"start":"end":o<-iL?s=i==="outer"?"end":"start":s="middle",s}},{key:"renderAxisLine",value:function(){var r=this.props,i=r.cx,o=r.cy,s=r.radius,c=r.axisLine,l=r.axisLineType,u=kl(kl({},ft(this.props,!1)),{},{fill:"none"},ft(c,!1));if(l==="circle")return T.createElement(lv,$l({className:"recharts-polar-angle-axis-line"},u,{cx:i,cy:o,r:s}));var d=this.props.ticks,f=d.map(function(h){return fn(i,o,s,h.coordinate)});return T.createElement(iq,$l({className:"recharts-polar-angle-axis-line"},u,{points:f}))}},{key:"renderTicks",value:function(){var r=this,i=this.props,o=i.ticks,s=i.tick,c=i.tickLine,l=i.tickFormatter,u=i.stroke,d=ft(this.props,!1),f=ft(s,!1),h=kl(kl({},d),{},{fill:"none"},ft(c,!1)),p=o.map(function(v,m){var y=r.getTickLineCoord(v),b=r.getTickTextAnchor(v),x=kl(kl(kl({textAnchor:b},d),{},{stroke:"none",fill:u},f),{},{index:m,payload:v,x:y.x2,y:y.y2});return T.createElement(tn,$l({className:Mt("recharts-polar-angle-axis-tick",zW(s)),key:"tick-".concat(v.coordinate)},ju(r.props,v,m)),c&&T.createElement("line",$l({className:"recharts-polar-angle-axis-tick-line"},h,y)),s&&e.renderTickItem(s,x,l?l(v.value,m):v.value))});return T.createElement(tn,{className:"recharts-polar-angle-axis-ticks"},p)}},{key:"render",value:function(){var r=this.props,i=r.ticks,o=r.radius,s=r.axisLine;return o<=0||!i||!i.length?null:T.createElement(tn,{className:Mt("recharts-polar-angle-axis",this.props.className)},s&&this.renderAxisLine(),this.renderTicks())}}],[{key:"renderTickItem",value:function(r,i,o){var s;return T.isValidElement(r)?s=T.cloneElement(r,i):At(r)?s=r(i):s=T.createElement(Eu,$l({},i,{className:"recharts-polar-angle-axis-tick-value"}),o),s}}])}(g.PureComponent);PS(Sh,"displayName","PolarAngleAxis");PS(Sh,"axisType","angleAxis");PS(Sh,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var wMe=cK,SMe=wMe(Object.getPrototypeOf,Object),CMe=SMe,_Me=tc,AMe=CMe,jMe=nc,EMe="[object Object]",NMe=Function.prototype,TMe=Object.prototype,uq=NMe.toString,kMe=TMe.hasOwnProperty,PMe=uq.call(Object);function OMe(t){if(!jMe(t)||_Me(t)!=EMe)return!1;var e=AMe(t);if(e===null)return!0;var n=kMe.call(e,"constructor")&&e.constructor;return typeof n=="function"&&n instanceof n&&uq.call(n)==PMe}var IMe=OMe;const RMe=hn(IMe);var MMe=tc,DMe=nc,$Me="[object Boolean]";function LMe(t){return t===!0||t===!1||DMe(t)&&MMe(t)==$Me}var FMe=LMe;const BMe=hn(FMe);function vg(t){"@babel/helpers - typeof";return vg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vg(t)}function d0(){return d0=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n0,from:{upperWidth:0,lowerWidth:0,height:h,x:l,y:u},to:{upperWidth:d,lowerWidth:f,height:h,x:l,y:u},duration:m,animationEasing:v,isActive:b},function(w){var S=w.upperWidth,C=w.lowerWidth,_=w.height,A=w.x,j=w.y;return T.createElement(bs,{canBegin:s>0,from:"0px ".concat(s===-1?1:s,"px"),to:"".concat(s,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:m,easing:v},T.createElement("path",d0({},ft(n,!0),{className:x,d:cL(A,j,S,C,_),ref:r})))}):T.createElement("g",null,T.createElement("path",d0({},ft(n,!0),{className:x,d:cL(l,u,d,f,h)})))},XMe=["option","shapeType","propTransformer","activeClassName","isActive"];function yg(t){"@babel/helpers - typeof";return yg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yg(t)}function JMe(t,e){if(t==null)return{};var n=ZMe(t,e),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function ZMe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function lL(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function f0(t){for(var e=1;e0?io(w,"paddingAngle",0):0;if(C){var A=Mr(C.endAngle-C.startAngle,w.endAngle-w.startAngle),j=kn(kn({},w),{},{startAngle:x+_,endAngle:x+A(m)+_});y.push(j),x=j.endAngle}else{var N=w.endAngle,k=w.startAngle,O=Mr(0,N-k),E=O(m),R=kn(kn({},w),{},{startAngle:x+_,endAngle:x+E+_});y.push(R),x=R.endAngle}}),T.createElement(tn,null,r.renderSectorsStatically(y))})}},{key:"attachKeyboardHandlers",value:function(r){var i=this;r.onkeydown=function(o){if(!o.altKey)switch(o.key){case"ArrowLeft":{var s=++i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[s].focus(),i.setState({sectorToFocus:s});break}case"ArrowRight":{var c=--i.state.sectorToFocus<0?i.sectorRefs.length-1:i.state.sectorToFocus%i.sectorRefs.length;i.sectorRefs[c].focus(),i.setState({sectorToFocus:c});break}case"Escape":{i.sectorRefs[i.state.sectorToFocus].blur(),i.setState({sectorToFocus:0});break}}}}},{key:"renderSectors",value:function(){var r=this.props,i=r.sectors,o=r.isAnimationActive,s=this.state.prevSectors;return o&&i&&i.length&&(!s||!Nu(s,i))?this.renderSectorsWithAnimation():this.renderSectorsStatically(i)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var r=this,i=this.props,o=i.hide,s=i.sectors,c=i.className,l=i.label,u=i.cx,d=i.cy,f=i.innerRadius,h=i.outerRadius,p=i.isAnimationActive,v=this.state.isAnimationFinished;if(o||!s||!s.length||!De(u)||!De(d)||!De(f)||!De(h))return null;var m=Mt("recharts-pie",c);return T.createElement(tn,{tabIndex:this.props.rootTabIndex,className:m,ref:function(b){r.pieRef=b}},this.renderSectors(),l&&this.renderLabels(s),Dr.renderCallByParent(this.props,null,!1),(!p||v)&&Ws.renderCallByParent(this.props,s,!1))}}],[{key:"getDerivedStateFromProps",value:function(r,i){return i.prevIsAnimationActive!==r.isAnimationActive?{prevIsAnimationActive:r.isAnimationActive,prevAnimationId:r.animationId,curSectors:r.sectors,prevSectors:[],isAnimationFinished:!0}:r.isAnimationActive&&r.animationId!==i.prevAnimationId?{prevAnimationId:r.animationId,curSectors:r.sectors,prevSectors:i.curSectors,isAnimationFinished:!0}:r.sectors!==i.curSectors?{curSectors:r.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(r,i){return r>i?"start":r=360?x:x-1)*l,S=y-x*p-w,C=i.reduce(function(j,N){var k=ar(N,b,0);return j+(De(k)?k:0)},0),_;if(C>0){var A;_=i.map(function(j,N){var k=ar(j,b,0),O=ar(j,d,N),E=(De(k)?k:0)/C,R;N?R=A.endAngle+vi(m)*l*(k!==0?1:0):R=s;var D=R+vi(m)*((k!==0?p:0)+E*S),G=(R+D)/2,L=(v.innerRadius+v.outerRadius)/2,z=[{name:O,value:k,payload:j,dataKey:b,type:h}],M=fn(v.cx,v.cy,L,G);return A=kn(kn(kn({percent:E,cornerRadius:o,name:O,tooltipPayload:z,midAngle:G,middleRadius:L,tooltipPosition:M},j),v),{},{value:ar(j,b),startAngle:R,endAngle:D,payload:j,paddingAngle:vi(m)*l}),A})}return kn(kn({},v),{},{sectors:_,data:i})});function bDe(t){return t&&t.length?t[0]:void 0}var wDe=bDe,SDe=wDe;const CDe=hn(SDe);var _De=["key"];function jf(t){"@babel/helpers - typeof";return jf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},jf(t)}function ADe(t,e){if(t==null)return{};var n=jDe(t,e),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function jDe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function p0(){return p0=Object.assign?Object.assign.bind():function(t){for(var e=1;e=2&&(l=!0),u.push(di(di({},fn(s,c,x,y)),{},{name:v,value:m,cx:s,cy:c,radius:x,angle:y,payload:h}))});var f=[];return l&&u.forEach(function(h){if(Array.isArray(h.value)){var p=CDe(h.value),v=Lt(p)?void 0:e.scale(p);f.push(di(di({},h),{},{radius:v},fn(s,c,v,h.angle)))}else f.push(h)}),{points:u,isRange:l,baseLinePoints:f}});var RDe=Math.ceil,MDe=Math.max;function DDe(t,e,n,r){for(var i=-1,o=MDe(RDe((e-t)/(n||1)),0),s=Array(o);o--;)s[r?o:++i]=t,t+=n;return s}var $De=DDe,LDe=EK,mL=1/0,FDe=17976931348623157e292;function BDe(t){if(!t)return t===0?t:0;if(t=LDe(t),t===mL||t===-mL){var e=t<0?-1:1;return e*FDe}return t===t?t:0}var gq=BDe,UDe=$De,zDe=yS,v_=gq;function HDe(t){return function(e,n,r){return r&&typeof r!="number"&&zDe(e,n,r)&&(n=r=void 0),e=v_(e),n===void 0?(n=e,e=0):n=v_(n),r=r===void 0?e0&&r.handleDrag(i.changedTouches[0])}),Vi(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var i=r.props,o=i.endIndex,s=i.onDragEnd,c=i.startIndex;s==null||s({endIndex:o,startIndex:c})}),r.detachDragEndListener()}),Vi(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Vi(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Vi(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Vi(r,"handleSlideDragStart",function(i){var o=bL(i)?i.changedTouches[0]:i;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return r$e(e,t),ZDe(e,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var i=r.startX,o=r.endX,s=this.state.scaleValues,c=this.props,l=c.gap,u=c.data,d=u.length-1,f=Math.min(i,o),h=Math.max(i,o),p=e.getIndexInRange(s,f),v=e.getIndexInRange(s,h);return{startIndex:p-p%l,endIndex:v===d?d:v-v%l}}},{key:"getTextOfTick",value:function(r){var i=this.props,o=i.data,s=i.tickFormatter,c=i.dataKey,l=ar(o[r],c,r);return At(s)?s(l,r):l}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var i=this.state,o=i.slideMoveStartX,s=i.startX,c=i.endX,l=this.props,u=l.x,d=l.width,f=l.travellerWidth,h=l.startIndex,p=l.endIndex,v=l.onChange,m=r.pageX-o;m>0?m=Math.min(m,u+d-f-c,u+d-f-s):m<0&&(m=Math.max(m,u-s,u-c));var y=this.getIndex({startX:s+m,endX:c+m});(y.startIndex!==h||y.endIndex!==p)&&v&&v(y),this.setState({startX:s+m,endX:c+m,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,i){var o=bL(i)?i.changedTouches[0]:i;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var i=this.state,o=i.brushMoveStartX,s=i.movingTravellerId,c=i.endX,l=i.startX,u=this.state[s],d=this.props,f=d.x,h=d.width,p=d.travellerWidth,v=d.onChange,m=d.gap,y=d.data,b={startX:this.state.startX,endX:this.state.endX},x=r.pageX-o;x>0?x=Math.min(x,f+h-p-u):x<0&&(x=Math.max(x,f-u)),b[s]=u+x;var w=this.getIndex(b),S=w.startIndex,C=w.endIndex,_=function(){var j=y.length-1;return s==="startX"&&(c>l?S%m===0:C%m===0)||cl?C%m===0:S%m===0)||c>l&&C===j};this.setState(Vi(Vi({},s,u+x),"brushMoveStartX",r.pageX),function(){v&&_()&&v(w)})}},{key:"handleTravellerMoveKeyboard",value:function(r,i){var o=this,s=this.state,c=s.scaleValues,l=s.startX,u=s.endX,d=this.state[i],f=c.indexOf(d);if(f!==-1){var h=f+r;if(!(h===-1||h>=c.length)){var p=c[h];i==="startX"&&p>=u||i==="endX"&&p<=l||this.setState(Vi({},i,p),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,i=r.x,o=r.y,s=r.width,c=r.height,l=r.fill,u=r.stroke;return T.createElement("rect",{stroke:u,fill:l,x:i,y:o,width:s,height:c})}},{key:"renderPanorama",value:function(){var r=this.props,i=r.x,o=r.y,s=r.width,c=r.height,l=r.data,u=r.children,d=r.padding,f=g.Children.only(u);return f?T.cloneElement(f,{x:i,y:o,width:s,height:c,margin:d,compact:!0,data:l}):null}},{key:"renderTravellerLayer",value:function(r,i){var o,s,c=this,l=this.props,u=l.y,d=l.travellerWidth,f=l.height,h=l.traveller,p=l.ariaLabel,v=l.data,m=l.startIndex,y=l.endIndex,b=Math.max(r,this.props.x),x=y_(y_({},ft(this.props,!1)),{},{x:b,y:u,width:d,height:f}),w=p||"Min value: ".concat((o=v[m])===null||o===void 0?void 0:o.name,", Max value: ").concat((s=v[y])===null||s===void 0?void 0:s.name);return T.createElement(tn,{tabIndex:0,role:"slider","aria-label":w,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[i],onTouchStart:this.travellerDragStartHandlers[i],onKeyDown:function(C){["ArrowLeft","ArrowRight"].includes(C.key)&&(C.preventDefault(),C.stopPropagation(),c.handleTravellerMoveKeyboard(C.key==="ArrowRight"?1:-1,i))},onFocus:function(){c.setState({isTravellerFocused:!0})},onBlur:function(){c.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},e.renderTraveller(h,x))}},{key:"renderSlide",value:function(r,i){var o=this.props,s=o.y,c=o.height,l=o.stroke,u=o.travellerWidth,d=Math.min(r,i)+u,f=Math.max(Math.abs(i-r)-u,0);return T.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:l,fillOpacity:.2,x:d,y:s,width:f,height:c})}},{key:"renderText",value:function(){var r=this.props,i=r.startIndex,o=r.endIndex,s=r.y,c=r.height,l=r.travellerWidth,u=r.stroke,d=this.state,f=d.startX,h=d.endX,p=5,v={pointerEvents:"none",fill:u};return T.createElement(tn,{className:"recharts-brush-texts"},T.createElement(Eu,v0({textAnchor:"end",verticalAnchor:"middle",x:Math.min(f,h)-p,y:s+c/2},v),this.getTextOfTick(i)),T.createElement(Eu,v0({textAnchor:"start",verticalAnchor:"middle",x:Math.max(f,h)+l+p,y:s+c/2},v),this.getTextOfTick(o)))}},{key:"render",value:function(){var r=this.props,i=r.data,o=r.className,s=r.children,c=r.x,l=r.y,u=r.width,d=r.height,f=r.alwaysShowText,h=this.state,p=h.startX,v=h.endX,m=h.isTextActive,y=h.isSlideMoving,b=h.isTravellerMoving,x=h.isTravellerFocused;if(!i||!i.length||!De(c)||!De(l)||!De(u)||!De(d)||u<=0||d<=0)return null;var w=Mt("recharts-brush",o),S=T.Children.count(s)===1,C=XDe("userSelect","none");return T.createElement(tn,{className:w,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:C},this.renderBackground(),S&&this.renderPanorama(),this.renderSlide(p,v),this.renderTravellerLayer(p,"startX"),this.renderTravellerLayer(v,"endX"),(m||y||b||x||f)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var i=r.x,o=r.y,s=r.width,c=r.height,l=r.stroke,u=Math.floor(o+c/2)-1;return T.createElement(T.Fragment,null,T.createElement("rect",{x:i,y:o,width:s,height:c,fill:l,stroke:"none"}),T.createElement("line",{x1:i+1,y1:u,x2:i+s-1,y2:u,fill:"none",stroke:"#fff"}),T.createElement("line",{x1:i+1,y1:u+2,x2:i+s-1,y2:u+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,i){var o;return T.isValidElement(r)?o=T.cloneElement(r,i):At(r)?o=r(i):o=e.renderDefaultTraveller(i),o}},{key:"getDerivedStateFromProps",value:function(r,i){var o=r.data,s=r.width,c=r.x,l=r.travellerWidth,u=r.updateId,d=r.startIndex,f=r.endIndex;if(o!==i.prevData||u!==i.prevUpdateId)return y_({prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:c,prevWidth:s},o&&o.length?o$e({data:o,width:s,x:c,travellerWidth:l,startIndex:d,endIndex:f}):{scale:null,scaleValues:null});if(i.scale&&(s!==i.prevWidth||c!==i.prevX||l!==i.prevTravellerWidth)){i.scale.range([c,c+s-l]);var h=i.scale.domain().map(function(p){return i.scale(p)});return{prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:c,prevWidth:s,startX:i.scale(r.startIndex),endX:i.scale(r.endIndex),scaleValues:h}}return null}},{key:"getIndexInRange",value:function(r,i){for(var o=r.length,s=0,c=o-1;c-s>1;){var l=Math.floor((s+c)/2);r[l]>i?c=l:s=l}return i>=r[c]?c:s}}])}(g.PureComponent);Vi(Nf,"displayName","Brush");Vi(Nf,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var s$e=AP;function a$e(t,e){var n;return s$e(t,function(r,i,o){return n=e(r,i,o),!n}),!!n}var c$e=a$e,l$e=eK,u$e=aa,d$e=c$e,f$e=Hi,h$e=yS;function p$e(t,e,n){var r=f$e(t)?l$e:d$e;return n&&h$e(t,e,n)&&(e=void 0),r(t,u$e(e))}var m$e=p$e;const g$e=hn(m$e);var qs=function(e,n){var r=e.alwaysShow,i=e.ifOverflow;return r&&(i="extendDomain"),i===n},wL=SK;function v$e(t,e,n){e=="__proto__"&&wL?wL(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var y$e=v$e,x$e=y$e,b$e=bK,w$e=aa;function S$e(t,e){var n={};return e=w$e(e),b$e(t,function(r,i,o){x$e(n,i,e(r,i,o))}),n}var C$e=S$e;const _$e=hn(C$e);function A$e(t,e){for(var n=-1,r=t==null?0:t.length;++n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function z$e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function H$e(t,e){var n=t.x,r=t.y,i=U$e(t,$$e),o="".concat(n),s=parseInt(o,10),c="".concat(r),l=parseInt(c,10),u="".concat(e.height||i.height),d=parseInt(u,10),f="".concat(e.width||i.width),h=parseInt(f,10);return Xh(Xh(Xh(Xh(Xh({},e),i),s?{x:s}:{}),l?{y:l}:{}),{},{height:d,width:h,name:e.name,radius:e.radius})}function CL(t){return T.createElement(dq,Hj({shapeType:"rectangle",propTransformer:H$e,activeClassName:"recharts-active-bar"},t))}var G$e=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,i){if(typeof e=="number")return e;var o=typeof r=="number";return o?e(r,i):(o||ku(),n)}},V$e=["value","background"],wq;function Tf(t){"@babel/helpers - typeof";return Tf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Tf(t)}function K$e(t,e){if(t==null)return{};var n=W$e(t,e),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function W$e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function x0(){return x0=Object.assign?Object.assign.bind():function(t){for(var e=1;e0&&Math.abs(G)0&&Math.abs(D)0&&(R=Math.min((B||0)-(D[ce-1]||0),R))}),Number.isFinite(R)){var G=R/E,L=m.layout==="vertical"?r.height:r.width;if(m.padding==="gap"&&(A=G*L/2),m.padding==="no-gap"){var z=yi(e.barCategoryGap,G*L),M=G*L/2;A=M-z-(M-z)/L*z}}}i==="xAxis"?j=[r.left+(w.left||0)+(A||0),r.left+r.width-(w.right||0)-(A||0)]:i==="yAxis"?j=l==="horizontal"?[r.top+r.height-(w.bottom||0),r.top+(w.top||0)]:[r.top+(w.top||0)+(A||0),r.top+r.height-(w.bottom||0)-(A||0)]:j=m.range,C&&(j=[j[1],j[0]]);var $=RW(m,o,h),Q=$.scale,q=$.realScaleType;Q.domain(b).range(j),MW(Q);var te=DW(Q,Yo(Yo({},m),{},{realScaleType:q}));i==="xAxis"?(O=y==="top"&&!S||y==="bottom"&&S,N=r.left,k=f[_]-O*m.height):i==="yAxis"&&(O=y==="left"&&!S||y==="right"&&S,N=f[_]-O*m.width,k=r.top);var xe=Yo(Yo(Yo({},m),te),{},{realScaleType:q,x:N,y:k,scale:Q,width:i==="xAxis"?r.width:m.width,height:i==="yAxis"?r.height:m.height});return xe.bandSize=n0(xe,te),!m.hide&&i==="xAxis"?f[_]+=(O?-1:1)*xe.height:m.hide||(f[_]+=(O?-1:1)*xe.width),Yo(Yo({},p),{},RS({},v,xe))},{})},jq=function(e,n){var r=e.x,i=e.y,o=n.x,s=n.y;return{x:Math.min(r,o),y:Math.min(i,s),width:Math.abs(o-r),height:Math.abs(s-i)}},iLe=function(e){var n=e.x1,r=e.y1,i=e.x2,o=e.y2;return jq({x:n,y:r},{x:i,y:o})},Eq=function(){function t(e){tLe(this,t),this.scale=e}return nLe(t,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.bandAware,o=r.position;if(n!==void 0){if(o)switch(o){case"start":return this.scale(n);case"middle":{var s=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+s}case"end":{var c=this.bandwidth?this.bandwidth():0;return this.scale(n)+c}default:return this.scale(n)}if(i){var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+l}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),i=r[0],o=r[r.length-1];return i<=o?n>=i&&n<=o:n>=o&&n<=i}}],[{key:"create",value:function(n){return new t(n)}}])}();RS(Eq,"EPS",1e-4);var eO=function(e){var n=Object.keys(e).reduce(function(r,i){return Yo(Yo({},r),{},RS({},i,Eq.create(e[i])))},{});return Yo(Yo({},n),{},{apply:function(i){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},s=o.bandAware,c=o.position;return _$e(i,function(l,u){return n[u].apply(l,{bandAware:s,position:c})})},isInRange:function(i){return bq(i,function(o,s){return n[s].isInRange(o)})}})};function oLe(t){return(t%180+180)%180}var sLe=function(e){var n=e.width,r=e.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=oLe(i),s=o*Math.PI/180,c=Math.atan(r/n),l=s>c&&s-1?i[o?e[s]:s]:void 0}}var dLe=uLe,fLe=gq;function hLe(t){var e=fLe(t),n=e%1;return e===e?n?e-n:e:0}var pLe=hLe,mLe=pK,gLe=aa,vLe=pLe,yLe=Math.max;function xLe(t,e,n){var r=t==null?0:t.length;if(!r)return-1;var i=n==null?0:vLe(n);return i<0&&(i=yLe(r+i,0)),mLe(t,gLe(e),i)}var bLe=xLe,wLe=dLe,SLe=bLe,CLe=wLe(SLe),_Le=CLe;const ALe=hn(_Le);var jLe=uye(function(t){return{x:t.left,y:t.top,width:t.width,height:t.height}},function(t){return["l",t.left,"t",t.top,"w",t.width,"h",t.height].join("")}),tO=g.createContext(void 0),nO=g.createContext(void 0),Nq=g.createContext(void 0),Tq=g.createContext({}),kq=g.createContext(void 0),Pq=g.createContext(0),Oq=g.createContext(0),NL=function(e){var n=e.state,r=n.xAxisMap,i=n.yAxisMap,o=n.offset,s=e.clipPathId,c=e.children,l=e.width,u=e.height,d=jLe(o);return T.createElement(tO.Provider,{value:r},T.createElement(nO.Provider,{value:i},T.createElement(Tq.Provider,{value:o},T.createElement(Nq.Provider,{value:d},T.createElement(kq.Provider,{value:s},T.createElement(Pq.Provider,{value:u},T.createElement(Oq.Provider,{value:l},c)))))))},ELe=function(){return g.useContext(kq)},Iq=function(e){var n=g.useContext(tO);n==null&&ku();var r=n[e];return r==null&&ku(),r},NLe=function(){var e=g.useContext(tO);return wc(e)},TLe=function(){var e=g.useContext(nO),n=ALe(e,function(r){return bq(r.domain,Number.isFinite)});return n||wc(e)},Rq=function(e){var n=g.useContext(nO);n==null&&ku();var r=n[e];return r==null&&ku(),r},kLe=function(){var e=g.useContext(Nq);return e},PLe=function(){return g.useContext(Tq)},rO=function(){return g.useContext(Oq)},iO=function(){return g.useContext(Pq)};function kf(t){"@babel/helpers - typeof";return kf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},kf(t)}function OLe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ILe(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);nt*i)return!1;var o=n();return t*(e-t*o/2-r)>=0&&t*(e+t*o/2-i)<=0}function pFe(t,e){return Uq(t,e+1)}function mFe(t,e,n,r,i){for(var o=(r||[]).slice(),s=e.start,c=e.end,l=0,u=1,d=s,f=function(){var v=r==null?void 0:r[l];if(v===void 0)return{v:Uq(r,u)};var m=l,y,b=function(){return y===void 0&&(y=n(v,m)),y},x=v.coordinate,w=l===0||_0(t,x,b,d,c);w||(l=0,d=s,u+=1),w&&(d=x+t*(b()/2+i),l+=u)},h;u<=o.length;)if(h=f(),h)return h.v;return[]}function Cg(t){"@babel/helpers - typeof";return Cg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cg(t)}function DL(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function ei(t){for(var e=1;e0?p.coordinate-y*t:p.coordinate})}else o[h]=p=ei(ei({},p),{},{tickCoord:p.coordinate});var b=_0(t,p.tickCoord,m,c,l);b&&(l=p.tickCoord-t*(m()/2+i),o[h]=ei(ei({},p),{},{isShow:!0}))},d=s-1;d>=0;d--)u(d);return o}function bFe(t,e,n,r,i,o){var s=(r||[]).slice(),c=s.length,l=e.start,u=e.end;if(o){var d=r[c-1],f=n(d,c-1),h=t*(d.coordinate+t*f/2-u);s[c-1]=d=ei(ei({},d),{},{tickCoord:h>0?d.coordinate-h*t:d.coordinate});var p=_0(t,d.tickCoord,function(){return f},l,u);p&&(u=d.tickCoord-t*(f/2+i),s[c-1]=ei(ei({},d),{},{isShow:!0}))}for(var v=o?c-1:c,m=function(x){var w=s[x],S,C=function(){return S===void 0&&(S=n(w,x)),S};if(x===0){var _=t*(w.coordinate-t*C()/2-l);s[x]=w=ei(ei({},w),{},{tickCoord:_<0?w.coordinate-_*t:w.coordinate})}else s[x]=w=ei(ei({},w),{},{tickCoord:w.coordinate});var A=_0(t,w.tickCoord,C,l,u);A&&(l=w.tickCoord+t*(C()/2+i),s[x]=ei(ei({},w),{},{isShow:!0}))},y=0;y=2?vi(i[1].coordinate-i[0].coordinate):1,b=hFe(o,y,p);return l==="equidistantPreserveStart"?mFe(y,b,m,i,s):(l==="preserveStart"||l==="preserveStartEnd"?h=bFe(y,b,m,i,s,l==="preserveStartEnd"):h=xFe(y,b,m,i,s),h.filter(function(x){return x.isShow}))}var wFe=["viewBox"],SFe=["viewBox"],CFe=["ticks"];function If(t){"@babel/helpers - typeof";return If=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},If(t)}function bd(){return bd=Object.assign?Object.assign.bind():function(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function _Fe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function AFe(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function LL(t,e){for(var n=0;n0?l(this.props):l(p)),s<=0||c<=0||!v||!v.length?null:T.createElement(tn,{className:Mt("recharts-cartesian-axis",u),ref:function(y){r.layerReference=y}},o&&this.renderAxisLine(),this.renderTicks(v,this.state.fontSize,this.state.letterSpacing),Dr.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,i,o){var s;return T.isValidElement(r)?s=T.cloneElement(r,i):At(r)?s=r(i):s=T.createElement(Eu,bd({},i,{className:"recharts-cartesian-axis-tick-value"}),o),s}}])}(g.Component);cO(Ch,"displayName","CartesianAxis");cO(Ch,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var OFe=["x1","y1","x2","y2","key"],IFe=["offset"];function Pu(t){"@babel/helpers - typeof";return Pu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pu(t)}function FL(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function ii(t){for(var e=1;e=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function $Fe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}var LFe=function(e){var n=e.fill;if(!n||n==="none")return null;var r=e.fillOpacity,i=e.x,o=e.y,s=e.width,c=e.height,l=e.ry;return T.createElement("rect",{x:i,y:o,ry:l,width:s,height:c,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function Gq(t,e){var n;if(T.isValidElement(t))n=T.cloneElement(t,e);else if(At(t))n=t(e);else{var r=e.x1,i=e.y1,o=e.x2,s=e.y2,c=e.key,l=BL(e,OFe),u=ft(l,!1);u.offset;var d=BL(u,IFe);n=T.createElement("line",Yl({},d,{x1:r,y1:i,x2:o,y2:s,fill:"none",key:c}))}return n}function FFe(t){var e=t.x,n=t.width,r=t.horizontal,i=r===void 0?!0:r,o=t.horizontalPoints;if(!i||!o||!o.length)return null;var s=o.map(function(c,l){var u=ii(ii({},t),{},{x1:e,y1:c,x2:e+n,y2:c,key:"line-".concat(l),index:l});return Gq(i,u)});return T.createElement("g",{className:"recharts-cartesian-grid-horizontal"},s)}function BFe(t){var e=t.y,n=t.height,r=t.vertical,i=r===void 0?!0:r,o=t.verticalPoints;if(!i||!o||!o.length)return null;var s=o.map(function(c,l){var u=ii(ii({},t),{},{x1:c,y1:e,x2:c,y2:e+n,key:"line-".concat(l),index:l});return Gq(i,u)});return T.createElement("g",{className:"recharts-cartesian-grid-vertical"},s)}function UFe(t){var e=t.horizontalFill,n=t.fillOpacity,r=t.x,i=t.y,o=t.width,s=t.height,c=t.horizontalPoints,l=t.horizontal,u=l===void 0?!0:l;if(!u||!e||!e.length)return null;var d=c.map(function(h){return Math.round(h+i-i)}).sort(function(h,p){return h-p});i!==d[0]&&d.unshift(0);var f=d.map(function(h,p){var v=!d[p+1],m=v?i+s-h:d[p+1]-h;if(m<=0)return null;var y=p%e.length;return T.createElement("rect",{key:"react-".concat(p),y:h,x:r,height:m,width:o,stroke:"none",fill:e[y],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return T.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},f)}function zFe(t){var e=t.vertical,n=e===void 0?!0:e,r=t.verticalFill,i=t.fillOpacity,o=t.x,s=t.y,c=t.width,l=t.height,u=t.verticalPoints;if(!n||!r||!r.length)return null;var d=u.map(function(h){return Math.round(h+o-o)}).sort(function(h,p){return h-p});o!==d[0]&&d.unshift(0);var f=d.map(function(h,p){var v=!d[p+1],m=v?o+c-h:d[p+1]-h;if(m<=0)return null;var y=p%r.length;return T.createElement("rect",{key:"react-".concat(p),x:h,y:s,width:m,height:l,stroke:"none",fill:r[y],fillOpacity:i,className:"recharts-cartesian-grid-bg"})});return T.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},f)}var HFe=function(e,n){var r=e.xAxis,i=e.width,o=e.height,s=e.offset;return IW(aO(ii(ii(ii({},Ch.defaultProps),r),{},{ticks:Na(r,!0),viewBox:{x:0,y:0,width:i,height:o}})),s.left,s.left+s.width,n)},GFe=function(e,n){var r=e.yAxis,i=e.width,o=e.height,s=e.offset;return IW(aO(ii(ii(ii({},Ch.defaultProps),r),{},{ticks:Na(r,!0),viewBox:{x:0,y:0,width:i,height:o}})),s.top,s.top+s.height,n)},Zu={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function _g(t){var e,n,r,i,o,s,c=rO(),l=iO(),u=PLe(),d=ii(ii({},t),{},{stroke:(e=t.stroke)!==null&&e!==void 0?e:Zu.stroke,fill:(n=t.fill)!==null&&n!==void 0?n:Zu.fill,horizontal:(r=t.horizontal)!==null&&r!==void 0?r:Zu.horizontal,horizontalFill:(i=t.horizontalFill)!==null&&i!==void 0?i:Zu.horizontalFill,vertical:(o=t.vertical)!==null&&o!==void 0?o:Zu.vertical,verticalFill:(s=t.verticalFill)!==null&&s!==void 0?s:Zu.verticalFill,x:De(t.x)?t.x:u.left,y:De(t.y)?t.y:u.top,width:De(t.width)?t.width:u.width,height:De(t.height)?t.height:u.height}),f=d.x,h=d.y,p=d.width,v=d.height,m=d.syncWithTicks,y=d.horizontalValues,b=d.verticalValues,x=NLe(),w=TLe();if(!De(p)||p<=0||!De(v)||v<=0||!De(f)||f!==+f||!De(h)||h!==+h)return null;var S=d.verticalCoordinatesGenerator||HFe,C=d.horizontalCoordinatesGenerator||GFe,_=d.horizontalPoints,A=d.verticalPoints;if((!_||!_.length)&&At(C)){var j=y&&y.length,N=C({yAxis:w?ii(ii({},w),{},{ticks:j?y:w.ticks}):void 0,width:c,height:l,offset:u},j?!0:m);cs(Array.isArray(N),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Pu(N),"]")),Array.isArray(N)&&(_=N)}if((!A||!A.length)&&At(S)){var k=b&&b.length,O=S({xAxis:x?ii(ii({},x),{},{ticks:k?b:x.ticks}):void 0,width:c,height:l,offset:u},k?!0:m);cs(Array.isArray(O),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Pu(O),"]")),Array.isArray(O)&&(A=O)}return T.createElement("g",{className:"recharts-cartesian-grid"},T.createElement(LFe,{fill:d.fill,fillOpacity:d.fillOpacity,x:d.x,y:d.y,width:d.width,height:d.height,ry:d.ry}),T.createElement(FFe,Yl({},d,{offset:u,horizontalPoints:_,xAxis:x,yAxis:w})),T.createElement(BFe,Yl({},d,{offset:u,verticalPoints:A,xAxis:x,yAxis:w})),T.createElement(UFe,Yl({},d,{horizontalPoints:_})),T.createElement(zFe,Yl({},d,{verticalPoints:A})))}_g.displayName="CartesianGrid";var VFe=["layout","type","stroke","connectNulls","isRange","ref"],KFe=["key"],Vq;function Rf(t){"@babel/helpers - typeof";return Rf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rf(t)}function Kq(t,e){if(t==null)return{};var n=WFe(t,e),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function WFe(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function Ql(){return Ql=Object.assign?Object.assign.bind():function(t){for(var e=1;e0||!Nu(d,s)||!Nu(f,c))?this.renderAreaWithAnimation(r,i):this.renderAreaStatically(s,c,r,i)}},{key:"render",value:function(){var r,i=this.props,o=i.hide,s=i.dot,c=i.points,l=i.className,u=i.top,d=i.left,f=i.xAxis,h=i.yAxis,p=i.width,v=i.height,m=i.isAnimationActive,y=i.id;if(o||!c||!c.length)return null;var b=this.state.isAnimationFinished,x=c.length===1,w=Mt("recharts-area",l),S=f&&f.allowDataOverflow,C=h&&h.allowDataOverflow,_=S||C,A=Lt(y)?this.id:y,j=(r=ft(s,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},N=j.r,k=N===void 0?3:N,O=j.strokeWidth,E=O===void 0?2:O,R=mxe(s)?s:{},D=R.clipDot,G=D===void 0?!0:D,L=k*2+E;return T.createElement(tn,{className:w},S||C?T.createElement("defs",null,T.createElement("clipPath",{id:"clipPath-".concat(A)},T.createElement("rect",{x:S?d:d-p/2,y:C?u:u-v/2,width:S?p:p*2,height:C?v:v*2})),!G&&T.createElement("clipPath",{id:"clipPath-dots-".concat(A)},T.createElement("rect",{x:d-L/2,y:u-L/2,width:p+L,height:v+L}))):null,x?null:this.renderArea(_,A),(s||x)&&this.renderDots(_,G,A),(!m||b)&&Ws.renderCallByParent(this.props,c))}}],[{key:"getDerivedStateFromProps",value:function(r,i){return r.animationId!==i.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:i.curPoints,prevBaseLine:i.curBaseLine}:r.points!==i.curPoints||r.baseLine!==i.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(g.PureComponent);Vq=us;Us(us,"displayName","Area");Us(us,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!ls.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});Us(us,"getBaseValue",function(t,e,n,r){var i=t.layout,o=t.baseValue,s=e.props.baseValue,c=s??o;if(De(c)&&typeof c=="number")return c;var l=i==="horizontal"?r:n,u=l.scale.domain();if(l.type==="number"){var d=Math.max(u[0],u[1]),f=Math.min(u[0],u[1]);return c==="dataMin"?f:c==="dataMax"||d<0?d:Math.max(Math.min(u[0],u[1]),0)}return c==="dataMin"?u[0]:c==="dataMax"?u[1]:u[0]});Us(us,"getComposedData",function(t){var e=t.props,n=t.item,r=t.xAxis,i=t.yAxis,o=t.xAxisTicks,s=t.yAxisTicks,c=t.bandSize,l=t.dataKey,u=t.stackedData,d=t.dataStartIndex,f=t.displayedData,h=t.offset,p=e.layout,v=u&&u.length,m=Vq.getBaseValue(e,n,r,i),y=p==="horizontal",b=!1,x=f.map(function(S,C){var _;v?_=u[d+C]:(_=ar(S,l),Array.isArray(_)?b=!0:_=[m,_]);var A=_[1]==null||v&&ar(S,l)==null;return y?{x:u$({axis:r,ticks:o,bandSize:c,entry:S,index:C}),y:A?null:i.scale(_[1]),value:_,payload:S}:{x:A?null:r.scale(_[1]),y:u$({axis:i,ticks:s,bandSize:c,entry:S,index:C}),value:_,payload:S}}),w;return v||b?w=x.map(function(S){var C=Array.isArray(S.value)?S.value[0]:null;return y?{x:S.x,y:C!=null&&S.y!=null?i.scale(C):null}:{x:C!=null?r.scale(C):null,y:S.y}}):w=y?i.scale(m):r.scale(m),uc({points:x,baseLine:w,layout:p,isRange:b},h)});Us(us,"renderDotItem",function(t,e){var n;if(T.isValidElement(t))n=T.cloneElement(t,e);else if(At(t))n=t(e);else{var r=Mt("recharts-area-dot",typeof t!="boolean"?t.className:""),i=e.key,o=Kq(e,KFe);n=T.createElement(lv,Ql({},o,{key:i,className:r}))}return n});function Mf(t){"@babel/helpers - typeof";return Mf=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mf(t)}function t4e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n4e(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function z4e(t,e){if(t==null)return{};var n={};for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)){if(e.indexOf(r)>=0)continue;n[r]=t[r]}return n}function H4e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function G4e(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0?s:e&&e.length&&De(i)&&De(o)?e.slice(i,o+1):[]};function c7(t){return t==="number"?[0,"auto"]:void 0}var aE=function(e,n,r,i){var o=e.graphicalItems,s=e.tooltipAxis,c=FS(n,e);return r<0||!o||!o.length||r>=c.length?null:o.reduce(function(l,u){var d,f=(d=u.props.data)!==null&&d!==void 0?d:n;f&&e.dataStartIndex+e.dataEndIndex!==0&&e.dataEndIndex-e.dataStartIndex>=r&&(f=f.slice(e.dataStartIndex,e.dataEndIndex+1));var h;if(s.dataKey&&!s.allowDuplicatedCategory){var p=f===void 0?c:f;h=Nb(p,s.dataKey,i)}else h=f&&f[r]||c[r];return h?[].concat(Lf(l),[LW(u,h)]):l},[])},qL=function(e,n,r,i){var o=i||{x:e.chartX,y:e.chartY},s=n5e(o,r),c=e.orderedTooltipTicks,l=e.tooltipAxis,u=e.tooltipTicks,d=gOe(s,c,u,l);if(d>=0&&u){var f=u[d]&&u[d].value,h=aE(e,n,d,f),p=r5e(r,c,d,o);return{activeTooltipIndex:d,activeLabel:f,activePayload:h,activeCoordinate:p}}return null},i5e=function(e,n){var r=n.axes,i=n.graphicalItems,o=n.axisType,s=n.axisIdKey,c=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,d=e.layout,f=e.children,h=e.stackOffset,p=OW(d,o);return r.reduce(function(v,m){var y,b=m.type.defaultProps!==void 0?ve(ve({},m.type.defaultProps),m.props):m.props,x=b.type,w=b.dataKey,S=b.allowDataOverflow,C=b.allowDuplicatedCategory,_=b.scale,A=b.ticks,j=b.includeHidden,N=b[s];if(v[N])return v;var k=FS(e.data,{graphicalItems:i.filter(function(te){var xe,B=s in te.props?te.props[s]:(xe=te.type.defaultProps)===null||xe===void 0?void 0:xe[s];return B===N}),dataStartIndex:l,dataEndIndex:u}),O=k.length,E,R,D;k4e(b.domain,S,x)&&(E=wj(b.domain,null,S),p&&(x==="number"||_!=="auto")&&(D=Dp(k,w,"category")));var G=c7(x);if(!E||E.length===0){var L,z=(L=b.domain)!==null&&L!==void 0?L:G;if(w){if(E=Dp(k,w,x),x==="category"&&p){var M=sxe(E);C&&M?(R=E,E=g0(0,O)):C||(E=p$(z,E,m).reduce(function(te,xe){return te.indexOf(xe)>=0?te:[].concat(Lf(te),[xe])},[]))}else if(x==="category")C?E=E.filter(function(te){return te!==""&&!Lt(te)}):E=p$(z,E,m).reduce(function(te,xe){return te.indexOf(xe)>=0||xe===""||Lt(xe)?te:[].concat(Lf(te),[xe])},[]);else if(x==="number"){var $=wOe(k,i.filter(function(te){var xe,B,ce=s in te.props?te.props[s]:(xe=te.type.defaultProps)===null||xe===void 0?void 0:xe[s],fe="hide"in te.props?te.props.hide:(B=te.type.defaultProps)===null||B===void 0?void 0:B.hide;return ce===N&&(j||!fe)}),w,o,d);$&&(E=$)}p&&(x==="number"||_!=="auto")&&(D=Dp(k,w,"category"))}else p?E=g0(0,O):c&&c[N]&&c[N].hasStack&&x==="number"?E=h==="expand"?[0,1]:$W(c[N].stackGroups,l,u):E=PW(k,i.filter(function(te){var xe=s in te.props?te.props[s]:te.type.defaultProps[s],B="hide"in te.props?te.props.hide:te.type.defaultProps.hide;return xe===N&&(j||!B)}),x,d,!0);if(x==="number")E=iE(f,E,N,o,A),z&&(E=wj(z,E,S));else if(x==="category"&&z){var Q=z,q=E.every(function(te){return Q.indexOf(te)>=0});q&&(E=Q)}}return ve(ve({},v),{},Tt({},N,ve(ve({},b),{},{axisType:o,domain:E,categoricalDomain:D,duplicateDomain:R,originalDomain:(y=b.domain)!==null&&y!==void 0?y:G,isCategorical:p,layout:d})))},{})},o5e=function(e,n){var r=n.graphicalItems,i=n.Axis,o=n.axisType,s=n.axisIdKey,c=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,d=e.layout,f=e.children,h=FS(e.data,{graphicalItems:r,dataStartIndex:l,dataEndIndex:u}),p=h.length,v=OW(d,o),m=-1;return r.reduce(function(y,b){var x=b.type.defaultProps!==void 0?ve(ve({},b.type.defaultProps),b.props):b.props,w=x[s],S=c7("number");if(!y[w]){m++;var C;return v?C=g0(0,p):c&&c[w]&&c[w].hasStack?(C=$W(c[w].stackGroups,l,u),C=iE(f,C,w,o)):(C=wj(S,PW(h,r.filter(function(_){var A,j,N=s in _.props?_.props[s]:(A=_.type.defaultProps)===null||A===void 0?void 0:A[s],k="hide"in _.props?_.props.hide:(j=_.type.defaultProps)===null||j===void 0?void 0:j.hide;return N===w&&!k}),"number",d),i.defaultProps.allowDataOverflow),C=iE(f,C,w,o)),ve(ve({},y),{},Tt({},w,ve(ve({axisType:o},i.defaultProps),{},{hide:!0,orientation:io(e5e,"".concat(o,".").concat(m%2),null),domain:C,originalDomain:S,isCategorical:v,layout:d})))}return y},{})},s5e=function(e,n){var r=n.axisType,i=r===void 0?"xAxis":r,o=n.AxisComp,s=n.graphicalItems,c=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,d=e.children,f="".concat(i,"Id"),h=ko(d,o),p={};return h&&h.length?p=i5e(e,{axes:h,graphicalItems:s,axisType:i,axisIdKey:f,stackGroups:c,dataStartIndex:l,dataEndIndex:u}):s&&s.length&&(p=o5e(e,{Axis:o,graphicalItems:s,axisType:i,axisIdKey:f,stackGroups:c,dataStartIndex:l,dataEndIndex:u})),p},a5e=function(e){var n=wc(e),r=Na(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:jP(r,function(i){return i.coordinate}),tooltipAxis:n,tooltipAxisBandSize:n0(n,r)}},YL=function(e){var n=e.children,r=e.defaultShowTooltip,i=Yi(n,Nf),o=0,s=0;return e.data&&e.data.length!==0&&(s=e.data.length-1),i&&i.props&&(i.props.startIndex>=0&&(o=i.props.startIndex),i.props.endIndex>=0&&(s=i.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:s,activeTooltipIndex:-1,isTooltipActive:!!r}},c5e=function(e){return!e||!e.length?!1:e.some(function(n){var r=Ma(n&&n.type);return r&&r.indexOf("Bar")>=0})},QL=function(e){return e==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:e==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:e==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},l5e=function(e,n){var r=e.props,i=e.graphicalItems,o=e.xAxisMap,s=o===void 0?{}:o,c=e.yAxisMap,l=c===void 0?{}:c,u=r.width,d=r.height,f=r.children,h=r.margin||{},p=Yi(f,Nf),v=Yi(f,Da),m=Object.keys(l).reduce(function(C,_){var A=l[_],j=A.orientation;return!A.mirror&&!A.hide?ve(ve({},C),{},Tt({},j,C[j]+A.width)):C},{left:h.left||0,right:h.right||0}),y=Object.keys(s).reduce(function(C,_){var A=s[_],j=A.orientation;return!A.mirror&&!A.hide?ve(ve({},C),{},Tt({},j,io(C,"".concat(j))+A.height)):C},{top:h.top||0,bottom:h.bottom||0}),b=ve(ve({},y),m),x=b.bottom;p&&(b.bottom+=p.props.height||Nf.defaultProps.height),v&&n&&(b=xOe(b,i,r,n));var w=u-b.left-b.right,S=d-b.top-b.bottom;return ve(ve({brushBottom:x},b),{},{width:Math.max(w,0),height:Math.max(S,0)})},u5e=function(e,n){if(n==="xAxis")return e[n].width;if(n==="yAxis")return e[n].height},BS=function(e){var n=e.chartName,r=e.GraphicalChild,i=e.defaultTooltipEventType,o=i===void 0?"axis":i,s=e.validateTooltipEventTypes,c=s===void 0?["axis"]:s,l=e.axisComponents,u=e.legendContent,d=e.formatAxisMap,f=e.defaultProps,h=function(y,b){var x=b.graphicalItems,w=b.stackGroups,S=b.offset,C=b.updateId,_=b.dataStartIndex,A=b.dataEndIndex,j=y.barSize,N=y.layout,k=y.barGap,O=y.barCategoryGap,E=y.maxBarSize,R=QL(N),D=R.numericAxisName,G=R.cateAxisName,L=c5e(x),z=[];return x.forEach(function(M,$){var Q=FS(y.data,{graphicalItems:[M],dataStartIndex:_,dataEndIndex:A}),q=M.type.defaultProps!==void 0?ve(ve({},M.type.defaultProps),M.props):M.props,te=q.dataKey,xe=q.maxBarSize,B=q["".concat(D,"Id")],ce=q["".concat(G,"Id")],fe={},U=l.reduce(function(ie,ye){var Ee=b["".concat(ye.axisType,"Map")],P=q["".concat(ye.axisType,"Id")];Ee&&Ee[P]||ye.axisType==="zAxis"||ku();var H=Ee[P];return ve(ve({},ie),{},Tt(Tt({},ye.axisType,H),"".concat(ye.axisType,"Ticks"),Na(H)))},fe),ue=U[G],oe=U["".concat(G,"Ticks")],ne=w&&w[B]&&w[B].hasStack&&kOe(M,w[B].stackGroups),je=Ma(M.type).indexOf("Bar")>=0,K=n0(ue,oe),et=[],Me=L&&vOe({barSize:j,stackGroups:w,totalSize:u5e(U,G)});if(je){var ut,qe,Pt=Lt(xe)?E:xe,F=(ut=(qe=n0(ue,oe,!0))!==null&&qe!==void 0?qe:Pt)!==null&&ut!==void 0?ut:0;et=yOe({barGap:k,barCategoryGap:O,bandSize:F!==K?F:K,sizeList:Me[ce],maxBarSize:Pt}),F!==K&&(et=et.map(function(ie){return ve(ve({},ie),{},{position:ve(ve({},ie.position),{},{offset:ie.position.offset-F/2})})}))}var J=M&&M.type&&M.type.getComposedData;J&&z.push({props:ve(ve({},J(ve(ve({},U),{},{displayedData:Q,props:y,dataKey:te,item:M,bandSize:K,barPosition:et,offset:S,stackedData:ne,layout:N,dataStartIndex:_,dataEndIndex:A}))),{},Tt(Tt(Tt({key:M.key||"item-".concat($)},D,U[D]),G,U[G]),"animationId",C)),childIndex:yxe(M,y.children),item:M})}),z},p=function(y,b){var x=y.props,w=y.dataStartIndex,S=y.dataEndIndex,C=y.updateId;if(!aM({props:x}))return null;var _=x.children,A=x.layout,j=x.stackOffset,N=x.data,k=x.reverseStackOrder,O=QL(A),E=O.numericAxisName,R=O.cateAxisName,D=ko(_,r),G=NOe(N,D,"".concat(E,"Id"),"".concat(R,"Id"),j,k),L=l.reduce(function(q,te){var xe="".concat(te.axisType,"Map");return ve(ve({},q),{},Tt({},xe,s5e(x,ve(ve({},te),{},{graphicalItems:D,stackGroups:te.axisType===E&&G,dataStartIndex:w,dataEndIndex:S}))))},{}),z=l5e(ve(ve({},L),{},{props:x,graphicalItems:D}),b==null?void 0:b.legendBBox);Object.keys(L).forEach(function(q){L[q]=d(x,L[q],z,q.replace("Map",""),n)});var M=L["".concat(R,"Map")],$=a5e(M),Q=h(x,ve(ve({},L),{},{dataStartIndex:w,dataEndIndex:S,updateId:C,graphicalItems:D,stackGroups:G,offset:z}));return ve(ve({formattedGraphicalItems:Q,graphicalItems:D,offset:z,stackGroups:G},$),L)},v=function(m){function y(b){var x,w,S;return H4e(this,y),S=K4e(this,y,[b]),Tt(S,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),Tt(S,"accessibilityManager",new T4e),Tt(S,"handleLegendBBoxUpdate",function(C){if(C){var _=S.state,A=_.dataStartIndex,j=_.dataEndIndex,N=_.updateId;S.setState(ve({legendBBox:C},p({props:S.props,dataStartIndex:A,dataEndIndex:j,updateId:N},ve(ve({},S.state),{},{legendBBox:C}))))}}),Tt(S,"handleReceiveSyncEvent",function(C,_,A){if(S.props.syncId===C){if(A===S.eventEmitterSymbol&&typeof S.props.syncMethod!="function")return;S.applySyncEvent(_)}}),Tt(S,"handleBrushChange",function(C){var _=C.startIndex,A=C.endIndex;if(_!==S.state.dataStartIndex||A!==S.state.dataEndIndex){var j=S.state.updateId;S.setState(function(){return ve({dataStartIndex:_,dataEndIndex:A},p({props:S.props,dataStartIndex:_,dataEndIndex:A,updateId:j},S.state))}),S.triggerSyncEvent({dataStartIndex:_,dataEndIndex:A})}}),Tt(S,"handleMouseEnter",function(C){var _=S.getMouseInfo(C);if(_){var A=ve(ve({},_),{},{isTooltipActive:!0});S.setState(A),S.triggerSyncEvent(A);var j=S.props.onMouseEnter;At(j)&&j(A,C)}}),Tt(S,"triggeredAfterMouseMove",function(C){var _=S.getMouseInfo(C),A=_?ve(ve({},_),{},{isTooltipActive:!0}):{isTooltipActive:!1};S.setState(A),S.triggerSyncEvent(A);var j=S.props.onMouseMove;At(j)&&j(A,C)}),Tt(S,"handleItemMouseEnter",function(C){S.setState(function(){return{isTooltipActive:!0,activeItem:C,activePayload:C.tooltipPayload,activeCoordinate:C.tooltipPosition||{x:C.cx,y:C.cy}}})}),Tt(S,"handleItemMouseLeave",function(){S.setState(function(){return{isTooltipActive:!1}})}),Tt(S,"handleMouseMove",function(C){C.persist(),S.throttleTriggeredAfterMouseMove(C)}),Tt(S,"handleMouseLeave",function(C){S.throttleTriggeredAfterMouseMove.cancel();var _={isTooltipActive:!1};S.setState(_),S.triggerSyncEvent(_);var A=S.props.onMouseLeave;At(A)&&A(_,C)}),Tt(S,"handleOuterEvent",function(C){var _=vxe(C),A=io(S.props,"".concat(_));if(_&&At(A)){var j,N;/.*touch.*/i.test(_)?N=S.getMouseInfo(C.changedTouches[0]):N=S.getMouseInfo(C),A((j=N)!==null&&j!==void 0?j:{},C)}}),Tt(S,"handleClick",function(C){var _=S.getMouseInfo(C);if(_){var A=ve(ve({},_),{},{isTooltipActive:!0});S.setState(A),S.triggerSyncEvent(A);var j=S.props.onClick;At(j)&&j(A,C)}}),Tt(S,"handleMouseDown",function(C){var _=S.props.onMouseDown;if(At(_)){var A=S.getMouseInfo(C);_(A,C)}}),Tt(S,"handleMouseUp",function(C){var _=S.props.onMouseUp;if(At(_)){var A=S.getMouseInfo(C);_(A,C)}}),Tt(S,"handleTouchMove",function(C){C.changedTouches!=null&&C.changedTouches.length>0&&S.throttleTriggeredAfterMouseMove(C.changedTouches[0])}),Tt(S,"handleTouchStart",function(C){C.changedTouches!=null&&C.changedTouches.length>0&&S.handleMouseDown(C.changedTouches[0])}),Tt(S,"handleTouchEnd",function(C){C.changedTouches!=null&&C.changedTouches.length>0&&S.handleMouseUp(C.changedTouches[0])}),Tt(S,"triggerSyncEvent",function(C){S.props.syncId!==void 0&&b_.emit(w_,S.props.syncId,C,S.eventEmitterSymbol)}),Tt(S,"applySyncEvent",function(C){var _=S.props,A=_.layout,j=_.syncMethod,N=S.state.updateId,k=C.dataStartIndex,O=C.dataEndIndex;if(C.dataStartIndex!==void 0||C.dataEndIndex!==void 0)S.setState(ve({dataStartIndex:k,dataEndIndex:O},p({props:S.props,dataStartIndex:k,dataEndIndex:O,updateId:N},S.state)));else if(C.activeTooltipIndex!==void 0){var E=C.chartX,R=C.chartY,D=C.activeTooltipIndex,G=S.state,L=G.offset,z=G.tooltipTicks;if(!L)return;if(typeof j=="function")D=j(z,C);else if(j==="value"){D=-1;for(var M=0;M=0){var ne,je;if(E.dataKey&&!E.allowDuplicatedCategory){var K=typeof E.dataKey=="function"?oe:"payload.".concat(E.dataKey.toString());ne=Nb(M,K,D),je=$&&Q&&Nb(Q,K,D)}else ne=M==null?void 0:M[R],je=$&&Q&&Q[R];if(ce||B){var et=C.props.activeIndex!==void 0?C.props.activeIndex:R;return[g.cloneElement(C,ve(ve(ve({},j.props),U),{},{activeIndex:et})),null,null]}if(!Lt(ne))return[ue].concat(Lf(S.renderActivePoints({item:j,activePoint:ne,basePoint:je,childIndex:R,isRange:$})))}else{var Me,ut=(Me=S.getItemByXY(S.state.activeCoordinate))!==null&&Me!==void 0?Me:{graphicalItem:ue},qe=ut.graphicalItem,Pt=qe.item,F=Pt===void 0?C:Pt,J=qe.childIndex,ie=ve(ve(ve({},j.props),U),{},{activeIndex:J});return[g.cloneElement(F,ie),null,null]}return $?[ue,null,null]:[ue,null]}),Tt(S,"renderCustomized",function(C,_,A){return g.cloneElement(C,ve(ve({key:"recharts-customized-".concat(A)},S.props),S.state))}),Tt(S,"renderMap",{CartesianGrid:{handler:fy,once:!0},ReferenceArea:{handler:S.renderReferenceElement},ReferenceLine:{handler:fy},ReferenceDot:{handler:S.renderReferenceElement},XAxis:{handler:fy},YAxis:{handler:fy},Brush:{handler:S.renderBrush,once:!0},Bar:{handler:S.renderGraphicChild},Line:{handler:S.renderGraphicChild},Area:{handler:S.renderGraphicChild},Radar:{handler:S.renderGraphicChild},RadialBar:{handler:S.renderGraphicChild},Scatter:{handler:S.renderGraphicChild},Pie:{handler:S.renderGraphicChild},Funnel:{handler:S.renderGraphicChild},Tooltip:{handler:S.renderCursor,once:!0},PolarGrid:{handler:S.renderPolarGrid,once:!0},PolarAngleAxis:{handler:S.renderPolarAxis},PolarRadiusAxis:{handler:S.renderPolarAxis},Customized:{handler:S.renderCustomized}}),S.clipPathId="".concat((x=b.id)!==null&&x!==void 0?x:hh("recharts"),"-clip"),S.throttleTriggeredAfterMouseMove=NK(S.triggeredAfterMouseMove,(w=b.throttleDelay)!==null&&w!==void 0?w:1e3/60),S.state={},S}return Y4e(y,m),V4e(y,[{key:"componentDidMount",value:function(){var x,w;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(w=this.props.margin.top)!==null&&w!==void 0?w:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,w=x.children,S=x.data,C=x.height,_=x.layout,A=Yi(w,ni);if(A){var j=A.props.defaultIndex;if(!(typeof j!="number"||j<0||j>this.state.tooltipTicks.length-1)){var N=this.state.tooltipTicks[j]&&this.state.tooltipTicks[j].value,k=aE(this.state,S,j,N),O=this.state.tooltipTicks[j].coordinate,E=(this.state.offset.top+C)/2,R=_==="horizontal",D=R?{x:O,y:E}:{y:O,x:E},G=this.state.formattedGraphicalItems.find(function(z){var M=z.item;return M.type.name==="Scatter"});G&&(D=ve(ve({},D),G.props.points[j].tooltipPosition),k=G.props.points[j].tooltipPayload);var L={activeTooltipIndex:j,isTooltipActive:!0,activeLabel:N,activePayload:k,activeCoordinate:D};this.setState(L),this.renderCursor(A),this.accessibilityManager.setIndex(j)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,w){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==w.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var S,C;this.accessibilityManager.setDetails({offset:{left:(S=this.props.margin.left)!==null&&S!==void 0?S:0,top:(C=this.props.margin.top)!==null&&C!==void 0?C:0}})}return null}},{key:"componentDidUpdate",value:function(x){D1([Yi(x.children,ni)],[Yi(this.props.children,ni)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=Yi(this.props.children,ni);if(x&&typeof x.props.shared=="boolean"){var w=x.props.shared?"axis":"item";return c.indexOf(w)>=0?w:o}return o}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var w=this.container,S=w.getBoundingClientRect(),C=GEe(S),_={chartX:Math.round(x.pageX-C.left),chartY:Math.round(x.pageY-C.top)},A=S.width/w.offsetWidth||1,j=this.inRange(_.chartX,_.chartY,A);if(!j)return null;var N=this.state,k=N.xAxisMap,O=N.yAxisMap,E=this.getTooltipEventType();if(E!=="axis"&&k&&O){var R=wc(k).scale,D=wc(O).scale,G=R&&R.invert?R.invert(_.chartX):null,L=D&&D.invert?D.invert(_.chartY):null;return ve(ve({},_),{},{xValue:G,yValue:L})}var z=qL(this.state,this.props.data,this.props.layout,j);return z?ve(ve({},_),z):null}},{key:"inRange",value:function(x,w){var S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=this.props.layout,_=x/S,A=w/S;if(C==="horizontal"||C==="vertical"){var j=this.state.offset,N=_>=j.left&&_<=j.left+j.width&&A>=j.top&&A<=j.top+j.height;return N?{x:_,y:A}:null}var k=this.state,O=k.angleAxisMap,E=k.radiusAxisMap;if(O&&E){var R=wc(O);return v$({x:_,y:A},R)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,w=this.getTooltipEventType(),S=Yi(x,ni),C={};S&&w==="axis"&&(S.props.trigger==="click"?C={onClick:this.handleClick}:C={onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd});var _=Tb(this.props,this.handleOuterEvent);return ve(ve({},_),C)}},{key:"addListener",value:function(){b_.on(w_,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){b_.removeListener(w_,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,w,S){for(var C=this.state.formattedGraphicalItems,_=0,A=C.length;_{var v;const[r,i]=g.useState([{name:"Very Positive",value:0,color:"#4ade80"},{name:"Positive",value:0,color:"#a3e635"},{name:"Neutral",value:0,color:"#93c5fd"},{name:"Negative",value:0,color:"#fb923c"},{name:"Very Negative",value:0,color:"#f87171"}]),[o,s]=g.useState([]),[c,l]=g.useState({}),[u,d]=g.useState({isBalanced:!1,score:0,reason:""}),f=m=>{const y=n.find(b=>b.id===m);return y?y.name:`Participant ${m}`};g.useEffect(()=>{if(t.length===0)return;const m={"Very Positive":0,Positive:0,Neutral:0,Negative:0,"Very Negative":0},y={},b={};t.forEach(S=>{if(S.senderId!=="moderator"&&S.senderId!=="facilitator"){const C=S.text.toLowerCase();let _="Neutral";C.includes("love")||C.includes("excellent")||C.includes("amazing")?_="Very Positive":C.includes("good")||C.includes("like")||C.includes("great")?_="Positive":C.includes("bad")||C.includes("issue")||C.includes("problem")?_="Negative":(C.includes("terrible")||C.includes("hate")||C.includes("awful"))&&(_="Very Negative"),m[_]++,b[S.senderId]||(b[S.senderId]={"Very Positive":0,Positive:0,Neutral:0,Negative:0,"Very Negative":0}),b[S.senderId][_]++,y[S.senderId]=(y[S.senderId]||0)+1}}),i(S=>S.map(C=>({...C,value:m[C.name]||0})));const x=Object.entries(y).map(([S,C])=>({name:f(S),messages:C}));s(x);const w={};Object.entries(b).forEach(([S,C])=>{w[S]={name:f(S),sentiments:C}}),l(w),h(y,b)},[t,n,f]);const h=(m,y)=>{if(Object.keys(m).length===0){d({isBalanced:!1,score:0,reason:"No participant data available"});return}const x=Object.values(m).reduce((z,M)=>z+M,0)/Object.keys(m).length,w=Object.values(m).map(z=>Math.abs(z-x)/x),S=w.reduce((z,M)=>z+M,0)/w.length,C=Object.values(y).map(z=>Object.values(z).filter(M=>M>0).length),_=C.reduce((z,M)=>z+M,0)/C.length,A=["Very Positive","Positive","Neutral","Negative","Very Negative"],j=Object.values(y).map(z=>{const M=Math.max(...Object.values(z));return A.find($=>z[$]===M)||"Neutral"}),N=new Set(j).size,k=N/A.length,O=Math.max(0,100-S*100),E=_/5*100,R=k*100,D=Math.round(O*.6+E*.2+R*.2);let G="";const L=D>=70;S>.3&&(G+="Participation is uneven among participants. "),_<2&&(G+="Limited range of sentiments expressed. "),N<=1?G+="Participants show similar sentiment patterns, suggesting potential group-think. ":N>=4&&(G+="Wide divergence in participant sentiments, showing healthy diversity of opinions. "),G===""&&(G=L?"Good mix of participation and diverse opinions.":"Multiple factors affecting balance."),d({isBalanced:L,score:D,reason:G})},p=m=>{const y=c[m];if(!y)return"N/A";const b=y.sentiments;let x=0,w="Neutral";return Object.entries(b).forEach(([S,C])=>{C>x&&(x=C,w=S)}),w};return a.jsx("div",{className:"glass-panel rounded-xl p-4",children:a.jsxs(wl,{defaultValue:"sentiment",children:[a.jsxs(Za,{className:"grid grid-cols-2 mb-4",children:[a.jsxs(vn,{value:"sentiment",className:"flex items-center",children:[a.jsx(Ree,{className:"h-4 w-4 mr-2"}),"Sentiment"]}),a.jsxs(vn,{value:"participation",className:"flex items-center",children:[a.jsx(IA,{className:"h-4 w-4 mr-2"}),"Participation"]})]}),a.jsx(yn,{value:"sentiment",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"pt-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsx("h3",{className:"text-lg font-semibold",children:"Sentiment Analysis"}),a.jsxs("div",{className:`px-3 py-1 rounded-full text-sm ${u.isBalanced?"bg-green-100 text-green-800":"bg-amber-100 text-amber-800"}`,children:["Balance score: ",u.score,"/100"]})]}),a.jsx("div",{className:"h-60",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(lO,{children:[a.jsx(ni,{}),a.jsx(_s,{data:r,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:80,label:({name:m,percent:y})=>y>0?`${m} ${(y*100).toFixed(0)}%`:"",children:r.map((m,y)=>a.jsx(iv,{fill:m.color},`cell-${y}`))}),a.jsx(Da,{})]})})}),a.jsxs("div",{className:"mt-4",children:[a.jsx("h4",{className:"text-sm font-medium mb-2",children:"Sentiment by Participant"}),a.jsx("div",{className:"space-y-2 max-h-60 overflow-y-auto pr-2",children:Object.entries(c).map(([m,y])=>{var w;const b=p(m),x=((w=r.find(S=>S.name===b))==null?void 0:w.color)||"#93c5fd";return a.jsxs("div",{className:"flex items-center justify-between p-2 bg-slate-50 rounded",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(fm,{className:"h-4 w-4 text-slate-400 mr-2"}),a.jsx("span",{className:"text-sm",children:y.name})]}),a.jsxs("div",{className:"flex items-center",children:[a.jsx("span",{className:"text-xs mr-2",children:"Predominant:"}),a.jsx("span",{className:"text-xs font-medium px-2 py-0.5 rounded",style:{backgroundColor:`${x}30`,color:x},children:b})]})]},m)})})]}),a.jsxs("div",{className:"mt-4 pt-4 border-t",children:[a.jsx("h4",{className:"text-sm font-medium mb-2",children:"Focus Group Balance Assessment"}),a.jsxs("div",{className:`p-3 rounded text-sm ${u.isBalanced?"bg-green-50 text-green-700":"bg-amber-50 text-amber-700"}`,children:[a.jsx("span",{className:"font-medium",children:u.isBalanced?"Balanced Focus Group":"Potential Balance Issues"}),a.jsx("p",{className:"mt-1 text-xs",children:u.reason})]})]})]})})}),a.jsx(yn,{value:"participation",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"pt-6",children:[a.jsx("h3",{className:"text-lg font-semibold mb-4",children:"Participation Distribution"}),a.jsx("div",{className:"h-60",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(l7,{data:o,layout:"vertical",margin:{top:5,right:30,left:20,bottom:5},children:[a.jsx(_g,{strokeDasharray:"3 3"}),a.jsx(fl,{type:"number"}),a.jsx(hl,{dataKey:"name",type:"category",width:100}),a.jsx(ni,{}),a.jsx(jl,{dataKey:"messages",fill:"#8884d8",name:"Messages"})]})})}),a.jsx("p",{className:"text-sm text-muted-foreground mt-4",children:o.length>0?`Most active: ${(v=o.sort((m,y)=>y.messages-m.messages)[0])==null?void 0:v.name}`:"No participation data available"})]})})})]})})};function h5e(t){if(console.log("🔍 [GPT-5 CONVERTER] Input wsMessage:",JSON.stringify(t,null,2)),!t)return console.error("🔍 [GPT-5 CONVERTER] ERROR: wsMessage is null/undefined"),null;const e={id:t.id,senderId:t.senderId,text:t.text,timestamp:new Date(t.timestamp),type:t.type,highlighted:t.highlighted,attached_assets:t.attached_assets||[],activates_visual_context:t.activates_visual_context||!1,visualAsset:t.visualAsset};return console.log("🔍 [GPT-5 CONVERTER] Output converted:",JSON.stringify(e,null,2)),e}function p5e(t){return{id:t.id,title:t.title,description:t.description,quotes:t.quotes,source:t.source,created_at:t.created_at}}function d7(){return!0}const m5e=({focusGroupId:t,personas:e,isVisible:n,onToggle:r})=>{const[i,o]=g.useState(null),[s,c]=g.useState(null),[l,u]=g.useState(null),[d,f]=g.useState(null),[h,p]=g.useState(!1),[v,m]=g.useState(null),[y,b]=g.useState(null);ia();const x=d7();g.useEffect(()=>{if(!(!n||!t))return S(),console.log("📊 Setting up STABLE WebSocket event listeners for dashboard"),console.log("📊 Dashboard WebSocket listeners temporarily disabled for GPT-5 fix"),()=>{console.log("📊 Cleaning up STABLE dashboard WebSocket listeners")}},[n,t,x,!0]);const S=async()=>{p(!0),m(null);try{const[N,k,O,E]=await Promise.allSettled([rr.getConversationAnalytics(t),rr.getConversationState(t),rr.getAutonomousConversationStatus(t),rr.getConversationInsights(t)]);N.status==="fulfilled"&&o(N.value.data.analytics),k.status==="fulfilled"&&c(k.value.data.state),O.status==="fulfilled"&&u(O.value.data.status),E.status==="fulfilled"&&f(E.value.data.insights),b(new Date)}catch(N){console.error("Error fetching dashboard data:",N),m("Failed to load dashboard data")}finally{p(!1)}},C=()=>{S()},_=N=>{switch(N){case"running":return"bg-green-500";case"paused":return"bg-amber-500";case"completed":return"bg-blue-500";case"error":return"bg-red-500";default:return"bg-gray-500"}},A=N=>{switch(N){case"positive":return"text-green-600";case"negative":return"text-red-600";default:return"text-gray-600"}},j=N=>{switch(N){case"excellent":return"text-green-600";case"good":return"text-blue-600";case"fair":return"text-amber-600";case"poor":return"text-red-600";default:return"text-gray-600"}};return n?a.jsxs("div",{className:"fixed right-4 top-4 bottom-4 w-80 bg-white rounded-lg shadow-lg border border-gray-200 flex flex-col overflow-hidden z-50",children:[a.jsxs("div",{className:"p-4 border-b border-gray-200 bg-gray-50",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Ca,{className:"h-5 w-5 text-blue-600"}),a.jsx("h3",{className:"font-semibold text-gray-900",children:"AI Dashboard"})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(se,{variant:"ghost",size:"sm",onClick:C,disabled:h,className:"p-1",children:a.jsx(ru,{className:`h-4 w-4 ${h?"animate-spin":""}`})}),a.jsx(se,{variant:"ghost",size:"sm",onClick:r,className:"p-1",children:a.jsx(Uee,{className:"h-4 w-4"})})]})]}),y&&a.jsxs("p",{className:"text-xs text-gray-500 mt-1",children:["Last updated: ",y.toLocaleTimeString()]})]}),a.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[v&&a.jsx("div",{className:"bg-red-50 border border-red-200 rounded-lg p-3",children:a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(Mee,{className:"h-4 w-4 text-red-600"}),a.jsx("span",{className:"text-sm text-red-800",children:v})]})}),l&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx("div",{className:`w-3 h-3 rounded-full ${_(l.conversation_state)}`}),"Autonomous Status"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"State:"}),a.jsx(On,{variant:l.conversation_state==="running"?"default":"secondary",children:l.conversation_state})]}),a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Actions:"}),a.jsx("span",{className:"font-medium",children:l.action_count||0})]})]})})]}),s&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(xa,{className:"h-4 w-4"}),"Conversation Health"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-sm",children:"Overall Health:"}),a.jsx(On,{className:j(s.conversation_health.status),children:s.conversation_health.status})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Score:"}),a.jsxs("span",{className:"font-medium",children:[s.conversation_health.score,"/100"]})]}),a.jsx(Pc,{value:s.conversation_health.score,className:"h-2"})]}),a.jsxs("div",{className:"space-y-1",children:[a.jsx("span",{className:"text-xs text-gray-600",children:"Indicators:"}),a.jsx("div",{className:"flex flex-wrap gap-1",children:s.conversation_health.indicators.map((N,k)=>a.jsx(On,{variant:"outline",className:"text-xs",children:N.replace("_"," ")},k))})]})]})})]}),i&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(Fr,{className:"h-4 w-4"}),"Participation"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[a.jsxs("div",{className:"text-center",children:[a.jsx("div",{className:"text-lg font-semibold text-blue-600",children:i.overview.active_participants}),a.jsx("div",{className:"text-xs text-gray-600",children:"Active"})]}),a.jsxs("div",{className:"text-center",children:[a.jsx("div",{className:"text-lg font-semibold text-green-600",children:i.overview.participant_messages}),a.jsx("div",{className:"text-xs text-gray-600",children:"Messages"})]})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Balance:"}),a.jsx(On,{variant:i.participation.participation_balance==="balanced"?"default":"secondary",children:i.participation.participation_balance.replace("_"," ")})]}),i.participation.dominant_participants.length>0&&a.jsxs("div",{className:"text-xs text-amber-600",children:["Dominant: ",i.participation.dominant_participants.length," participant(s)"]}),i.participation.quiet_participants.length>0&&a.jsxs("div",{className:"text-xs text-blue-600",children:["Quiet: ",i.participation.quiet_participants.length," participant(s)"]})]})]})})]}),i&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(ate,{className:"h-4 w-4"}),"Sentiment"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-sm",children:"Overall:"}),a.jsx(On,{className:A(i.sentiment_analysis.overall_sentiment),children:i.sentiment_analysis.overall_sentiment})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-xs",children:[a.jsxs("span",{children:["Positive: ",i.sentiment_analysis.sentiment_distribution.positive]}),a.jsxs("span",{children:["Neutral: ",i.sentiment_analysis.sentiment_distribution.neutral]}),a.jsxs("span",{children:["Negative: ",i.sentiment_analysis.sentiment_distribution.negative]})]}),a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Trend:"}),a.jsx("span",{className:"font-medium",children:i.sentiment_analysis.sentiment_trend})]})]})]})})]}),i&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(Iee,{className:"h-4 w-4"}),"Quality Metrics"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Engagement:"}),a.jsxs("span",{className:"font-medium",children:[Math.round(i.quality_metrics.engagement_score),"/100"]})]}),a.jsx(Pc,{value:i.quality_metrics.engagement_score,className:"h-2"})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Depth:"}),a.jsxs("span",{className:"font-medium",children:[Math.round(i.quality_metrics.depth_score),"/100"]})]}),a.jsx(Pc,{value:i.quality_metrics.depth_score,className:"h-2"})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Overall:"}),a.jsxs("span",{className:"font-medium",children:[Math.round(i.quality_metrics.quality_score),"/100"]})]}),a.jsx(Pc,{value:i.quality_metrics.quality_score,className:"h-2"})]})]})})]}),d&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(gu,{className:"h-4 w-4"}),"AI Insights"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Energy:"}),a.jsx(On,{variant:d.conversation_energy==="high"?"default":"secondary",children:d.conversation_energy})]}),a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{children:"Engagement:"}),a.jsx(On,{variant:d.topic_engagement==="high"?"default":"secondary",children:d.topic_engagement})]}),d.next_suggested_action&&a.jsx("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-2 mt-2",children:a.jsxs("div",{className:"text-xs text-blue-800",children:[a.jsx("strong",{children:"Suggestion:"})," ",d.next_suggested_action]})})]})})]}),i&&i.recommendations.length>0&&a.jsxs(pt,{children:[a.jsx(Ei,{className:"pb-3",children:a.jsxs(Qi,{className:"text-sm flex items-center gap-2",children:[a.jsx(ON,{className:"h-4 w-4"}),"Recommendations"]})}),a.jsx(Rt,{className:"pt-0",children:a.jsx("div",{className:"space-y-2",children:i.recommendations.map((N,k)=>a.jsx("div",{className:"bg-amber-50 border border-amber-200 rounded-lg p-2",children:a.jsx("div",{className:"text-xs text-amber-800",children:N})},k))})})]})]})]}):null},g5e=({discussionGuide:t,moderatorStatus:e,onSectionSelect:n,onSetPosition:r,onSave:i,focusGroupId:o,isOpen:s,onToggle:c,className:l,onEditingChange:u})=>{const d=g.useRef(!1),f=g.useCallback(y=>{d.current=y,u==null||u(y)},[u]),[h,p]=g.useState(!1),v=async()=>{if(!t){ae.error("No discussion guide available",{description:"The discussion guide is not available for download"});return}p(!0);try{await gt.downloadDiscussionGuide(o),ae.success("Discussion guide downloaded",{description:"The guide has been saved to your downloads folder"})}catch(y){console.error("Error downloading discussion guide:",y),ae.error("Download failed",{description:"Unable to download the discussion guide. Please try again."})}finally{p(!1)}},m=t&&typeof t=="object"&&t.sections;return a.jsx("div",{className:Le("w-full border-b bg-white shadow-sm",l),children:a.jsxs(Wg,{open:s,onOpenChange:c,children:[a.jsx(qg,{asChild:!0,children:a.jsxs("div",{className:"w-full px-4 py-3 flex items-center justify-between hover:bg-slate-50 transition-colors cursor-pointer",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx(Lee,{className:"h-5 w-5 text-slate-600"}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-semibold text-slate-900",children:"Discussion Guide"}),m&&a.jsxs("p",{className:"text-xs text-slate-500",children:[t.title," • ",t.total_duration," minutes"]})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx(se,{variant:"ghost",size:"sm",onClick:y=>{y.stopPropagation(),v()},disabled:!t||h,className:"h-8",children:h?a.jsx(No,{className:"h-4 w-4 animate-spin"}):a.jsx(ol,{className:"h-4 w-4"})}),s?a.jsx(qf,{className:"h-4 w-4 text-slate-500"}):a.jsx(yl,{className:"h-4 w-4 text-slate-500"})]})]})}),a.jsx(Yg,{children:a.jsx("div",{className:"border-t bg-slate-50",children:a.jsx(pt,{className:"mx-4 mb-4 mt-2",children:a.jsx(Rt,{className:"p-4",children:a.jsx("div",{className:"max-h-[70vh] overflow-y-auto",children:a.jsx(Jk,{discussionGuide:t,moderatorStatus:e,onSectionSelect:n,onSetPosition:r,onSave:i,showProgress:!0,collapsible:!0,defaultExpanded:!0,focusGroupId:o,onEditingChange:f})})})})})})]})})},v5e=({focusGroupId:t,focusGroupName:e="Focus Group",onNoteClick:n})=>{const[r,i]=g.useState([]),[o,s]=g.useState(!0),[c,l]=g.useState(null);g.useEffect(()=>{u()},[t]);const u=async()=>{try{s(!0);const x=await gt.getNotes(t);if(x.data&&Array.isArray(x.data)){const w=x.data.map(S=>({...S,timestamp:new Date(S.timestamp),createdAt:new Date(S.createdAt)}));i(y(w))}}catch(x){console.error("Error fetching notes:",x),ae.error("Failed to load notes",{description:"Please refresh the page to try again."})}finally{s(!1)}},d=async x=>{l(x);try{await gt.deleteNote(t,x),i(r.filter(w=>w.id!==x)),ae.success("Note deleted successfully")}catch(w){console.error("Error deleting note:",w),ae.error("Failed to delete note",{description:"Please try again."})}finally{l(null)}},f=x=>{x.associatedMessageId&&n?n(x.associatedMessageId):ae.info("No associated message",{description:"This note is not linked to a specific discussion point."})},h=()=>{if(r.length===0){ae.warning("No notes to export",{description:"Create some notes first before exporting."});return}const x=p(),w=document.createElement("a"),S=new Blob([x],{type:"text/markdown"});w.href=URL.createObjectURL(S),w.download=`${e.replace(/[^a-z0-9]/gi,"_").toLowerCase()}_notes.md`,document.body.appendChild(w),w.click(),document.body.removeChild(w),ae.success("Notes exported successfully",{description:`Downloaded ${r.length} notes as Markdown file.`})},p=()=>{const x=[`# Notes: ${e}`,"",`Exported on: ${new Date().toLocaleString()}`,`Total notes: ${r.length}`,"","---",""];return r.forEach((w,S)=>{var C;x.push(`## Note ${S+1}`),x.push(""),x.push(`**Created:** ${w.createdAt.toLocaleString()}`),(C=w.sectionInfo)!=null&&C.sectionTitle&&x.push(`**Section:** ${w.sectionInfo.sectionTitle}`),x.push(`**Elapsed Time:** ${v(w.elapsedTime)}`),x.push(""),x.push("**Content:**"),x.push(w.content),x.push(""),x.push("---"),x.push("")}),x.join(` +`)},v=x=>{const w=Math.floor(x/1e3),S=Math.floor(w/60),C=w%60;return`${S}:${C.toString().padStart(2,"0")}`},m=x=>x.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),y=x=>[...x].sort((w,S)=>S.createdAt.getTime()-w.createdAt.getTime()),b=x=>{i(w=>y([...w,x]))};return g.useEffect(()=>(window.notesPanelAddNote=b,()=>{delete window.notesPanelAddNote}),[]),o?a.jsx("div",{className:"flex items-center justify-center h-64",children:a.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}):a.jsxs("div",{className:"flex flex-col h-full",children:[a.jsxs("div",{className:"flex items-center justify-between mb-4",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(Ex,{className:"h-5 w-5 text-primary mr-2"}),a.jsx("h2",{className:"font-sf text-xl font-semibold",children:"Notes"}),r.length>0&&a.jsxs("span",{className:"ml-2 text-sm text-slate-500",children:["(",r.length,")"]})]}),a.jsxs(se,{variant:"outline",size:"sm",onClick:h,disabled:r.length===0,children:[a.jsx(ol,{className:"mr-2 h-4 w-4"}),"Export Notes"]})]}),a.jsx(Qw,{className:"flex-1",children:r.length===0?a.jsxs("div",{className:"flex flex-col items-center justify-center p-8 text-center bg-slate-50 rounded-lg",children:[a.jsx(Ex,{className:"h-8 w-8 text-slate-400 mb-3"}),a.jsx("p",{className:"text-slate-600",children:"No notes yet."}),a.jsx("p",{className:"text-sm text-slate-500 mt-2",children:'Click the "Note" button during the session to add contextual notes.'})]}):a.jsx("div",{className:"space-y-4",children:r.map(x=>{var w;return a.jsxs(pt,{className:"hover:shadow-md transition-shadow cursor-pointer group",onClick:()=>f(x),children:[a.jsx(Ei,{className:"pb-2",children:a.jsxs("div",{className:"flex items-start justify-between",children:[a.jsxs("div",{className:"flex-1",children:[a.jsx(Qi,{className:"text-sm font-medium text-slate-600",children:m(x.createdAt)}),((w=x.sectionInfo)==null?void 0:w.sectionTitle)&&a.jsx("div",{className:"text-xs text-slate-500 mt-1",children:a.jsx("span",{children:x.sectionInfo.sectionTitle})})]}),a.jsxs("div",{className:"flex items-center space-x-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[x.associatedMessageId&&a.jsx(se,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0",onClick:S=>{S.stopPropagation(),f(x)},title:"Go to discussion point",children:a.jsx(ete,{className:"h-3 w-3"})}),a.jsx(se,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0 text-red-600 hover:text-red-700",onClick:S=>{S.stopPropagation(),d(x.id)},disabled:c===x.id,title:"Delete note",children:a.jsx(Qn,{className:"h-3 w-3"})})]})]})}),a.jsx(Rt,{className:"pt-0",children:a.jsx("p",{className:"text-sm text-slate-700 whitespace-pre-wrap",children:x.content})})]},x.id)})})})]})},y5e=({isOpen:t,onClose:e,focusGroupId:n,associatedMessageId:r,sectionInfo:i,messageTimestamp:o,onNoteSaved:s})=>{const[c,l]=g.useState(""),[u,d]=g.useState(!1),f=async()=>{if(!c.trim()){ae.error("Note content cannot be empty");return}d(!0);try{const p={content:c.trim(),associatedMessageId:r,sectionInfo:i,elapsedTime:0,timestamp:o.toISOString(),createdAt:new Date().toISOString()},v=await gt.createNote(n,p);if(v.data){const m={...v.data,timestamp:new Date(v.data.timestamp),createdAt:new Date(v.data.createdAt)},y=i!=null&&i.sectionTitle?`'${i.sectionTitle}'`:"current section",b=o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});ae.success("Quick note saved",{description:`Note linked to ${y} at ${b}`}),s&&s(m),l(""),e()}}catch(p){console.error("Error saving note:",p),ae.error("Failed to save note",{description:"Please try again or check your connection."})}finally{d(!1)}},h=()=>{l(""),e()};return a.jsx(Wc,{open:t,onOpenChange:h,children:a.jsxs(Pa,{className:"sm:max-w-md",children:[a.jsx(Oa,{children:a.jsx(Ra,{children:"Quick Note"})}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"text-sm text-slate-600",children:[a.jsxs("div",{children:[a.jsx("strong",{children:"Section:"})," ",(i==null?void 0:i.sectionTitle)||"Unknown section"]}),a.jsxs("div",{children:[a.jsx("strong",{children:"Time:"})," ",o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]}),a.jsx(vt,{placeholder:"Enter your note here...",value:c,onChange:p=>l(p.target.value),className:"min-h-[100px] resize-none",autoFocus:!0})]}),a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",onClick:h,disabled:u,children:"Cancel"}),a.jsx(se,{onClick:f,disabled:u,children:u?"Saving...":"Save Note"})]})]})})},na=Object.create(null);na.open="0";na.close="1";na.ping="2";na.pong="3";na.message="4";na.upgrade="5";na.noop="6";const zy=Object.create(null);Object.keys(na).forEach(t=>{zy[na[t]]=t});const cE={type:"error",data:"parser error"},f7=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",h7=typeof ArrayBuffer=="function",p7=t=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(t):t&&t.buffer instanceof ArrayBuffer,uO=({type:t,data:e},n,r)=>f7&&e instanceof Blob?n?r(e):XL(e,r):h7&&(e instanceof ArrayBuffer||p7(e))?n?r(e):XL(new Blob([e]),r):r(na[t]+(e||"")),XL=(t,e)=>{const n=new FileReader;return n.onload=function(){const r=n.result.split(",")[1];e("b"+(r||""))},n.readAsDataURL(t)};function JL(t){return t instanceof Uint8Array?t:t instanceof ArrayBuffer?new Uint8Array(t):new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}let C_;function x5e(t,e){if(f7&&t.data instanceof Blob)return t.data.arrayBuffer().then(JL).then(e);if(h7&&(t.data instanceof ArrayBuffer||p7(t.data)))return e(JL(t.data));uO(t,!1,n=>{C_||(C_=new TextEncoder),e(C_.encode(n))})}const ZL="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",fp=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let t=0;t{let e=t.length*.75,n=t.length,r,i=0,o,s,c,l;t[t.length-1]==="="&&(e--,t[t.length-2]==="="&&e--);const u=new ArrayBuffer(e),d=new Uint8Array(u);for(r=0;r>4,d[i++]=(s&15)<<4|c>>2,d[i++]=(c&3)<<6|l&63;return u},w5e=typeof ArrayBuffer=="function",dO=(t,e)=>{if(typeof t!="string")return{type:"message",data:m7(t,e)};const n=t.charAt(0);return n==="b"?{type:"message",data:S5e(t.substring(1),e)}:zy[n]?t.length>1?{type:zy[n],data:t.substring(1)}:{type:zy[n]}:cE},S5e=(t,e)=>{if(w5e){const n=b5e(t);return m7(n,e)}else return{base64:!0,data:t}},m7=(t,e)=>{switch(e){case"blob":return t instanceof Blob?t:new Blob([t]);case"arraybuffer":default:return t instanceof ArrayBuffer?t:t.buffer}},g7="",C5e=(t,e)=>{const n=t.length,r=new Array(n);let i=0;t.forEach((o,s)=>{uO(o,!1,c=>{r[s]=c,++i===n&&e(r.join(g7))})})},_5e=(t,e)=>{const n=t.split(g7),r=[];for(let i=0;i{const r=n.length;let i;if(r<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,r);else if(r<65536){i=new Uint8Array(3);const o=new DataView(i.buffer);o.setUint8(0,126),o.setUint16(1,r)}else{i=new Uint8Array(9);const o=new DataView(i.buffer);o.setUint8(0,127),o.setBigUint64(1,BigInt(r))}t.data&&typeof t.data!="string"&&(i[0]|=128),e.enqueue(i),e.enqueue(n)})}})}let __;function hy(t){return t.reduce((e,n)=>e+n.length,0)}function py(t,e){if(t[0].length===e)return t.shift();const n=new Uint8Array(e);let r=0;for(let i=0;iMath.pow(2,21)-1){c.enqueue(cE);break}i=d*Math.pow(2,32)+u.getUint32(4),r=3}else{if(hy(n)t){c.enqueue(cE);break}}}})}const v7=4;function gr(t){if(t)return E5e(t)}function E5e(t){for(var e in gr.prototype)t[e]=gr.prototype[e];return t}gr.prototype.on=gr.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this};gr.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this};gr.prototype.off=gr.prototype.removeListener=gr.prototype.removeAllListeners=gr.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks["$"+t];if(!n)return this;if(arguments.length==1)return delete this._callbacks["$"+t],this;for(var r,i=0;iPromise.resolve().then(e):(e,n)=>n(e,0),So=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),N5e="arraybuffer";function y7(t,...e){return e.reduce((n,r)=>(t.hasOwnProperty(r)&&(n[r]=t[r]),n),{})}const T5e=So.setTimeout,k5e=So.clearTimeout;function zS(t,e){e.useNativeTimers?(t.setTimeoutFn=T5e.bind(So),t.clearTimeoutFn=k5e.bind(So)):(t.setTimeoutFn=So.setTimeout.bind(So),t.clearTimeoutFn=So.clearTimeout.bind(So))}const P5e=1.33;function O5e(t){return typeof t=="string"?I5e(t):Math.ceil((t.byteLength||t.size)*P5e)}function I5e(t){let e=0,n=0;for(let r=0,i=t.length;r=57344?n+=3:(r++,n+=4);return n}function x7(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function R5e(t){let e="";for(let n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e}function M5e(t){let e={},n=t.split("&");for(let r=0,i=n.length;r{this.readyState="paused",e()};if(this._polling||!this.writable){let r=0;this._polling&&(r++,this.once("pollComplete",function(){--r||n()})),this.writable||(r++,this.once("drain",function(){--r||n()}))}else n()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){const n=r=>{if(this.readyState==="opening"&&r.type==="open"&&this.onOpen(),r.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(r)};_5e(e,this.socket.binaryType).forEach(n),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){const e=()=>{this.write([{type:"close"}])};this.readyState==="open"?e():this.once("open",e)}write(e){this.writable=!1,C5e(e,n=>{this.doWrite(n,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){const e=this.opts.secure?"https":"http",n=this.query||{};return this.opts.timestampRequests!==!1&&(n[this.opts.timestampParam]=x7()),!this.supportsBinary&&!n.sid&&(n.b64=1),this.createUri(e,n)}}let b7=!1;try{b7=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}const L5e=b7;function F5e(){}class B5e extends $5e{constructor(e){if(super(e),typeof location<"u"){const n=location.protocol==="https:";let r=location.port;r||(r=n?"443":"80"),this.xd=typeof location<"u"&&e.hostname!==location.hostname||r!==e.port}}doWrite(e,n){const r=this.request({method:"POST",data:e});r.on("success",n),r.on("error",(i,o)=>{this.onError("xhr post error",i,o)})}doPoll(){const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(n,r)=>{this.onError("xhr poll error",n,r)}),this.pollXhr=e}}let Bd=class Hy extends gr{constructor(e,n,r){super(),this.createRequest=e,zS(this,r),this._opts=r,this._method=r.method||"GET",this._uri=n,this._data=r.data!==void 0?r.data:null,this._create()}_create(){var e;const n=y7(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");n.xdomain=!!this._opts.xd;const r=this._xhr=this.createRequest(n);try{r.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let i in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(i)&&r.setRequestHeader(i,this._opts.extraHeaders[i])}}catch{}if(this._method==="POST")try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{r.setRequestHeader("Accept","*/*")}catch{}(e=this._opts.cookieJar)===null||e===void 0||e.addCookies(r),"withCredentials"in r&&(r.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(r.timeout=this._opts.requestTimeout),r.onreadystatechange=()=>{var i;r.readyState===3&&((i=this._opts.cookieJar)===null||i===void 0||i.parseCookies(r.getResponseHeader("set-cookie"))),r.readyState===4&&(r.status===200||r.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof r.status=="number"?r.status:0)},0))},r.send(this._data)}catch(i){this.setTimeoutFn(()=>{this._onError(i)},0);return}typeof document<"u"&&(this._index=Hy.requestsCount++,Hy.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(e){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=F5e,e)try{this._xhr.abort()}catch{}typeof document<"u"&&delete Hy.requests[this._index],this._xhr=null}}_onLoad(){const e=this._xhr.responseText;e!==null&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};Bd.requestsCount=0;Bd.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",eF);else if(typeof addEventListener=="function"){const t="onpagehide"in So?"pagehide":"unload";addEventListener(t,eF,!1)}}function eF(){for(let t in Bd.requests)Bd.requests.hasOwnProperty(t)&&Bd.requests[t].abort()}const U5e=function(){const t=w7({xdomain:!1});return t&&t.responseType!==null}();class z5e extends B5e{constructor(e){super(e);const n=e&&e.forceBase64;this.supportsBinary=U5e&&!n}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new Bd(w7,this.uri(),e)}}function w7(t){const e=t.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!e||L5e))return new XMLHttpRequest}catch{}if(!e)try{return new So[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}const S7=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative";class H5e extends fO{get name(){return"websocket"}doOpen(){const e=this.uri(),n=this.opts.protocols,r=S7?{}:y7(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,n,r)}catch(i){return this.emitReserved("error",i)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let n=0;n{try{this.doWrite(r,o)}catch{}i&&US(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",n=this.query||{};return this.opts.timestampRequests&&(n[this.opts.timestampParam]=x7()),this.supportsBinary||(n.b64=1),this.createUri(e,n)}}const A_=So.WebSocket||So.MozWebSocket;class G5e extends H5e{createSocket(e,n,r){return S7?new A_(e,n,r):n?new A_(e,n):new A_(e)}doWrite(e,n){this.ws.send(n)}}class V5e extends fO{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved("error",e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{const n=j5e(Number.MAX_SAFE_INTEGER,this.socket.binaryType),r=e.readable.pipeThrough(n).getReader(),i=A5e();i.readable.pipeTo(e.writable),this._writer=i.writable.getWriter();const o=()=>{r.read().then(({done:c,value:l})=>{c||(this.onPacket(l),o())}).catch(c=>{})};o();const s={type:"open"};this.query.sid&&(s.data=`{"sid":"${this.query.sid}"}`),this._writer.write(s).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let n=0;n{i&&US(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)===null||e===void 0||e.close()}}const K5e={websocket:G5e,webtransport:V5e,polling:z5e},W5e=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,q5e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function lE(t){if(t.length>8e3)throw"URI too long";const e=t,n=t.indexOf("["),r=t.indexOf("]");n!=-1&&r!=-1&&(t=t.substring(0,n)+t.substring(n,r).replace(/:/g,";")+t.substring(r,t.length));let i=W5e.exec(t||""),o={},s=14;for(;s--;)o[q5e[s]]=i[s]||"";return n!=-1&&r!=-1&&(o.source=e,o.host=o.host.substring(1,o.host.length-1).replace(/;/g,":"),o.authority=o.authority.replace("[","").replace("]","").replace(/;/g,":"),o.ipv6uri=!0),o.pathNames=Y5e(o,o.path),o.queryKey=Q5e(o,o.query),o}function Y5e(t,e){const n=/\/{2,9}/g,r=e.replace(n,"/").split("/");return(e.slice(0,1)=="/"||e.length===0)&&r.splice(0,1),e.slice(-1)=="/"&&r.splice(r.length-1,1),r}function Q5e(t,e){const n={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(r,i,o){i&&(n[i]=o)}),n}const uE=typeof addEventListener=="function"&&typeof removeEventListener=="function",Gy=[];uE&&addEventListener("offline",()=>{Gy.forEach(t=>t())},!1);class Jc extends gr{constructor(e,n){if(super(),this.binaryType=N5e,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e=="object"&&(n=e,e=null),e){const r=lE(e);n.hostname=r.host,n.secure=r.protocol==="https"||r.protocol==="wss",n.port=r.port,r.query&&(n.query=r.query)}else n.host&&(n.hostname=lE(n.host).host);zS(this,n),this.secure=n.secure!=null?n.secure:typeof location<"u"&&location.protocol==="https:",n.hostname&&!n.port&&(n.port=this.secure?"443":"80"),this.hostname=n.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=n.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},n.transports.forEach(r=>{const i=r.prototype.name;this.transports.push(i),this._transportsByName[i]=r}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},n),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=M5e(this.opts.query)),uE&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},Gy.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){const n=Object.assign({},this.opts.query);n.EIO=v7,n.transport=e,this.id&&(n.sid=this.id);const r=Object.assign({},this.opts,{query:n,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](r)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}const e=this.opts.rememberUpgrade&&Jc.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";const n=this.createTransport(e);n.open(),this.setTransport(n)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",n=>this._onClose("transport close",n))}onOpen(){this.readyState="open",Jc.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":const n=new Error("server error");n.code=e.data,this._onError(n);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data);break}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let n=1;for(let r=0;r0&&n>this._maxPayload)return this.writeBuffer.slice(0,r);n+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;const e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,US(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,n,r){return this._sendPacket("message",e,n,r),this}send(e,n,r){return this._sendPacket("message",e,n,r),this}_sendPacket(e,n,r,i){if(typeof n=="function"&&(i=n,n=void 0),typeof r=="function"&&(i=r,r=null),this.readyState==="closing"||this.readyState==="closed")return;r=r||{},r.compress=r.compress!==!1;const o={type:e,data:n,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),i&&this.once("flush",i),this.flush()}close(){const e=()=>{this._onClose("forced close"),this.transport.close()},n=()=>{this.off("upgrade",n),this.off("upgradeError",n),e()},r=()=>{this.once("upgrade",n),this.once("upgradeError",n)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?r():e()}):this.upgrading?r():e()),this}_onError(e){if(Jc.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,n){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),uE&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){const r=Gy.indexOf(this._offlineEventListener);r!==-1&&Gy.splice(r,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,n),this.writeBuffer=[],this._prevBufferLen=0}}}Jc.protocol=v7;class X5e extends Jc{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let e=0;e{r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",f=>{if(!r)if(f.type==="pong"&&f.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",n),!n)return;Jc.priorWebsocketSuccess=n.name==="websocket",this.transport.pause(()=>{r||this.readyState!=="closed"&&(d(),this.setTransport(n),n.send([{type:"upgrade"}]),this.emitReserved("upgrade",n),n=null,this.upgrading=!1,this.flush())})}else{const h=new Error("probe error");h.transport=n.name,this.emitReserved("upgradeError",h)}}))};function o(){r||(r=!0,d(),n.close(),n=null)}const s=f=>{const h=new Error("probe error: "+f);h.transport=n.name,o(),this.emitReserved("upgradeError",h)};function c(){s("transport closed")}function l(){s("socket closed")}function u(f){n&&f.name!==n.name&&o()}const d=()=>{n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",c),this.off("close",l),this.off("upgrading",u)};n.once("open",i),n.once("error",s),n.once("close",c),this.once("close",l),this.once("upgrading",u),this._upgrades.indexOf("webtransport")!==-1&&e!=="webtransport"?this.setTimeoutFn(()=>{r||n.open()},200):n.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){const n=[];for(let r=0;rK5e[i]).filter(i=>!!i)),super(e,r)}};function Z5e(t,e="",n){let r=t;n=n||typeof location<"u"&&location,t==null&&(t=n.protocol+"//"+n.host),typeof t=="string"&&(t.charAt(0)==="/"&&(t.charAt(1)==="/"?t=n.protocol+t:t=n.host+t),/^(https?|wss?):\/\//.test(t)||(typeof n<"u"?t=n.protocol+"//"+t:t="https://"+t),r=lE(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";const o=r.host.indexOf(":")!==-1?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+o+":"+r.port+e,r.href=r.protocol+"://"+o+(n&&n.port===r.port?"":":"+r.port),r}const eBe=typeof ArrayBuffer=="function",tBe=t=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer,C7=Object.prototype.toString,nBe=typeof Blob=="function"||typeof Blob<"u"&&C7.call(Blob)==="[object BlobConstructor]",rBe=typeof File=="function"||typeof File<"u"&&C7.call(File)==="[object FileConstructor]";function hO(t){return eBe&&(t instanceof ArrayBuffer||tBe(t))||nBe&&t instanceof Blob||rBe&&t instanceof File}function Vy(t,e){if(!t||typeof t!="object")return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n=0&&t.num{delete this.acks[e];for(let c=0;c{this.io.clearTimeoutFn(o),n.apply(this,c)};s.withError=!0,this.acks[e]=s}emitWithAck(e,...n){return new Promise((r,i)=>{const o=(s,c)=>s?i(s):r(c);o.withError=!0,n.push(o),this.emit(e,...n)})}_addToQueue(e){let n;typeof e[e.length-1]=="function"&&(n=e.pop());const r={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((i,...o)=>r!==this._queue[0]?void 0:(i!==null?r.tryCount>this._opts.retries&&(this._queue.shift(),n&&n(i)):(this._queue.shift(),n&&n(null,...o)),r.pending=!1,this._drainQueue())),this._queue.push(r),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;const n=this._queue[0];n.pending&&!e||(n.pending=!0,n.tryCount++,this.flags=n.flags,this.emit.apply(this,n.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth=="function"?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:on.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,n){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,n),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(r=>String(r.id)===e)){const r=this.acks[e];delete this.acks[e],r.withError&&r.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case on.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case on.EVENT:case on.BINARY_EVENT:this.onevent(e);break;case on.ACK:case on.BINARY_ACK:this.onack(e);break;case on.DISCONNECT:this.ondisconnect();break;case on.CONNECT_ERROR:this.destroy();const r=new Error(e.data.message);r.data=e.data.data,this.emitReserved("connect_error",r);break}}onevent(e){const n=e.data||[];e.id!=null&&n.push(this.ack(e.id)),this.connected?this.emitEvent(n):this.receiveBuffer.push(Object.freeze(n))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const n=this._anyListeners.slice();for(const r of n)r.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]=="string"&&(this._lastOffset=e[e.length-1])}ack(e){const n=this;let r=!1;return function(...i){r||(r=!0,n.packet({type:on.ACK,id:e,data:i}))}}onack(e){const n=this.acks[e.id];typeof n=="function"&&(delete this.acks[e.id],n.withError&&e.data.unshift(null),n.apply(this,e.data))}onconnect(e,n){this.id=e,this.recovered=n&&this._pid===n,this._pid=n,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:on.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const n=this._anyListeners;for(let r=0;r0&&t.jitter<=1?t.jitter:0,this.attempts=0}_h.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=Math.floor(e*10)&1?t+n:t-n}return Math.min(t,this.max)|0};_h.prototype.reset=function(){this.attempts=0};_h.prototype.setMin=function(t){this.ms=t};_h.prototype.setMax=function(t){this.max=t};_h.prototype.setJitter=function(t){this.jitter=t};class hE extends gr{constructor(e,n){var r;super(),this.nsps={},this.subs=[],e&&typeof e=="object"&&(n=e,e=void 0),n=n||{},n.path=n.path||"/socket.io",this.opts=n,zS(this,n),this.reconnection(n.reconnection!==!1),this.reconnectionAttempts(n.reconnectionAttempts||1/0),this.reconnectionDelay(n.reconnectionDelay||1e3),this.reconnectionDelayMax(n.reconnectionDelayMax||5e3),this.randomizationFactor((r=n.randomizationFactor)!==null&&r!==void 0?r:.5),this.backoff=new _h({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(n.timeout==null?2e4:n.timeout),this._readyState="closed",this.uri=e;const i=n.parser||uBe;this.encoder=new i.Encoder,this.decoder=new i.Decoder,this._autoConnect=n.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var n;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(n=this.backoff)===null||n===void 0||n.setMin(e),this)}randomizationFactor(e){var n;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(n=this.backoff)===null||n===void 0||n.setJitter(e),this)}reconnectionDelayMax(e){var n;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(n=this.backoff)===null||n===void 0||n.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new J5e(this.uri,this.opts);const n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;const i=Qo(n,"open",function(){r.onopen(),e&&e()}),o=c=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",c),e?e(c):this.maybeReconnectOnOpen()},s=Qo(n,"error",o);if(this._timeout!==!1){const c=this._timeout,l=this.setTimeoutFn(()=>{i(),o(new Error("timeout")),n.close()},c);this.opts.autoUnref&&l.unref(),this.subs.push(()=>{this.clearTimeoutFn(l)})}return this.subs.push(i),this.subs.push(s),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(Qo(e,"ping",this.onping.bind(this)),Qo(e,"data",this.ondata.bind(this)),Qo(e,"error",this.onerror.bind(this)),Qo(e,"close",this.onclose.bind(this)),Qo(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(n){this.onclose("parse error",n)}}ondecoded(e){US(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,n){let r=this.nsps[e];return r?this._autoConnect&&!r.active&&r.connect():(r=new _7(this,e,n),this.nsps[e]=r),r}_destroy(e){const n=Object.keys(this.nsps);for(const r of n)if(this.nsps[r].active)return;this._close()}_packet(e){const n=this.encoder.encode(e);for(let r=0;re()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,n){var r;this.cleanup(),(r=this.engine)===null||r===void 0||r.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,n),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const n=this.backoff.duration();this._reconnecting=!0;const r=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),!e.skipReconnect&&e.open(i=>{i?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",i)):e.onreconnect()}))},n);this.opts.autoUnref&&r.unref(),this.subs.push(()=>{this.clearTimeoutFn(r)})}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}const Jh={};function Ky(t,e){typeof t=="object"&&(e=t,t=void 0),e=e||{};const n=Z5e(t,e.path||"/socket.io"),r=n.source,i=n.id,o=n.path,s=Jh[i]&&o in Jh[i].nsps,c=e.forceNew||e["force new connection"]||e.multiplex===!1||s;let l;return c?l=new hE(r,e):(Jh[i]||(Jh[i]=new hE(r,e)),l=Jh[i]),n.query&&!e.query&&(e.query=n.queryKey),l.socket(n.path,e)}Object.assign(Ky,{Manager:hE,Socket:_7,io:Ky,connect:Ky});const nF=window.location.origin,rF="/semblance_back/socket.io/";let Ot=null,cu=null,iF=!1;function A7(t){if(Ot)return Ot.io.opts.auth={token:t()},Ot;console.log("🔧 [GPT-5] Creating singleton socket:",nF,rF),Ot=Ky(nF,{path:rF,transports:["websocket"],reconnection:!0,autoConnect:!1,timeout:6e4,pingInterval:45e3,pingTimeout:12e4,auth:n=>n({token:t()})}),Ot.io.on("reconnect_attempt",()=>{console.log("🔧 [GPT-5] Reconnect attempt - refreshing token"),Ot.io.opts.auth={token:t()}});const e=()=>{console.log("🔧 [GPT-5] Socket connected, rebinding listeners and rejoining room"),mBe(),cu&&pBe()};return Ot.on("connect",e),Ot.onAny((n,...r)=>{console.log(`🔧 [GPT-5 onAny] ${n}:`,r);const i=r[0];switch(n){case"joined_focus_group":console.log("🔧 [GPT-5] *** ROUTING joined_focus_group from onAny ***"),window.dispatchEvent(new CustomEvent("ws:joined_focus_group",{detail:i}));break;case"left_focus_group":console.log("🔧 [GPT-5] *** ROUTING left_focus_group from onAny ***"),window.dispatchEvent(new CustomEvent("ws:left_focus_group",{detail:i}));break;case"message_update":console.log("🔧 [GPT-5] *** ROUTING message_update from onAny ***");try{window.dispatchEvent(new CustomEvent("ws:message_update",{detail:i})),console.log("🔧 [GPT-5] DISPATCHED window event ws:message_update SUCCESS (via onAny)")}catch(o){console.error("🔧 [GPT-5] ERROR dispatching window event (via onAny):",o)}break;case"ai_status_update":console.log("🔧 [GPT-5] *** ROUTING ai_status_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:ai_status_update",{detail:i}));break;case"moderator_status_update":console.log("🔧 [GPT-5] *** ROUTING moderator_status_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:moderator_status_update",{detail:i}));break;case"theme_update":console.log("🔧 [GPT-5] *** ROUTING theme_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:theme_update",{detail:i}));break;case"focus_group_update":console.log("🔧 [GPT-5] *** ROUTING focus_group_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:focus_group_update",{detail:i}));break;case"mode_event_update":console.log("🔧 [GPT-5] *** ROUTING mode_event_update from onAny ***"),window.dispatchEvent(new CustomEvent("ws:mode_event_update",{detail:i}));break;case"connected":console.log("🔧 [GPT-5] *** ROUTING connected from onAny ***");break;case"error":console.error("🔧 [GPT-5] *** ROUTING error from onAny ***",i);break}}),Ot.on("connect_error",n=>{console.error("🔧 [GPT-5] Connect error:",n)}),Ot.on("disconnect",n=>{console.log("🔧 [GPT-5] Disconnected:",n)}),Ot}function j7(){Ot&&!Ot.connected&&(console.log("🔧 [GPT-5] Connecting socket"),Ot.connect())}function fBe(t,e){if(console.log("🔧 [GPT-5] Joining focus group:",t),cu=t,!(Ot!=null&&Ot.connected)){console.log("🔧 [GPT-5] Socket not connected, will auto-rejoin on connect"),j7(),setTimeout(()=>{Ot!=null&&Ot.connected?(console.log("🔧 [GPT-5] Retrying join after connection established"),Ot.emit("join_focus_group",{focus_group_id:t},n=>{console.log("🔧 [GPT-5] join_focus_group RETRY ACK:",n)})):console.log("🔧 [GPT-5] Still not connected, will rejoin on next connect event")},1e3);return}Ot.emit("join_focus_group",{focus_group_id:t},n=>{console.log("🔧 [GPT-5] join_focus_group ACK:",n)})}function hBe(t){console.log("🔧 [GPT-5] Leaving focus group:",t),cu===t&&(cu=null),Ot!=null&&Ot.connected&&Ot.emit("leave_focus_group",{focus_group_id:t})}function pBe(){!(Ot!=null&&Ot.connected)||!cu||(console.log("🔧 [GPT-5] Auto-rejoining room after reconnect:",cu),Ot.emit("join_focus_group",{focus_group_id:cu}))}function mBe(){if(!Ot){console.log("🔧 [GPT-5] bindCoreListeners called but socket is null!");return}iF&&console.log("🔧 [GPT-5] Listeners already bound, but rebinding anyway for safety"),console.log("🔧 [GPT-5] bindCoreListeners called - socket exists, binding listeners");const t=l=>{console.log("🔧 [GPT-5] joined_focus_group:",l),window.dispatchEvent(new CustomEvent("ws:joined_focus_group",{detail:l}))},e=l=>{console.log("🔧 [GPT-5] left_focus_group:",l),window.dispatchEvent(new CustomEvent("ws:left_focus_group",{detail:l}))},n=l=>{console.log("🔧 [GPT-5] *** MESSAGE_UPDATE LISTENER FIRED! ***"),console.log("🔧 [GPT-5] message_update payload:",l),console.log("🔧 [GPT-5] DISPATCHING window event ws:message_update");try{window.dispatchEvent(new CustomEvent("ws:message_update",{detail:l})),console.log("🔧 [GPT-5] DISPATCHED window event ws:message_update SUCCESS")}catch(u){console.error("🔧 [GPT-5] ERROR dispatching window event:",u)}},r=l=>{console.log("🔧 [GPT-5] ai_status_update:",l),console.log("🔧 [GPT-5] DISPATCHING window event ws:ai_status_update"),window.dispatchEvent(new CustomEvent("ws:ai_status_update",{detail:l})),console.log("🔧 [GPT-5] DISPATCHED window event ws:ai_status_update")},i=l=>{console.log("🔧 [GPT-5] moderator_status_update:",l),window.dispatchEvent(new CustomEvent("ws:moderator_status_update",{detail:l}))},o=l=>{console.log("🔧 [GPT-5] theme_update:",l),window.dispatchEvent(new CustomEvent("ws:theme_update",{detail:l}))},s=l=>{console.log("🔧 [GPT-5] focus_group_update:",l),window.dispatchEvent(new CustomEvent("ws:focus_group_update",{detail:l}))},c=l=>{console.log("🔧 [GPT-5] mode_event_update:",l),window.dispatchEvent(new CustomEvent("ws:mode_event_update",{detail:l}))};console.log("🔧 [GPT-5] BINDING specific listeners to socket"),Ot.on("joined_focus_group",t),Ot.on("left_focus_group",e),Ot.on("message_update",n),Ot.on("ai_status_update",r),Ot.on("moderator_status_update",i),Ot.on("theme_update",o),Ot.on("focus_group_update",s),Ot.on("mode_event_update",c),console.log("🔧 [GPT-5] BOUND specific listeners to socket"),console.log("🔧 [GPT-5] Socket listeners after binding:",Ot.listeners("message_update").length),console.log("🔧 [GPT-5] Socket hasListeners message_update:",Ot.hasListeners("message_update")),setTimeout(()=>{Ot!=null&&Ot.connected&&(console.log("🔧 [GPT-5] SELF-TEST: Emitting test event"),Ot.emit("message_update",{test:"self-emit-test"}))},1e3),Ot.on("connected",l=>{console.log("🔧 [GPT-5] connected:",l)}),Ot.on("error",l=>{console.error("🔧 [GPT-5] socket error:",l)}),iF=!0}const gBe=()=>{const{id:t}=PN(),e=ur(),{token:n}=ia(),[r,i]=g.useState([]),[o,s]=g.useState([]),[c,l]=g.useState([]),[u,d]=g.useState(null),[f,h]=g.useState([]),[p,v]=g.useState("chat"),[m,y]=g.useState(null),[b,x]=g.useState(!1),[w,S]=g.useState(!1),[C,_]=g.useState(!0),[A,j]=g.useState(!1),[N,k]=g.useState(!1),O=g.useRef(!1),[E,R]=g.useState(!1),D=g.useRef(u);D.current=u;const[G,L]=g.useState([]),[z,M]=g.useState(!1),[$,Q]=g.useState(""),[q,te]=g.useState("medium"),[xe,B]=g.useState("medium"),[ce,fe]=g.useState(!1),[U,ue]=g.useState(!1),[oe,ne]=g.useState(null),[je,K]=g.useState([]),[et,Me]=g.useState(!1),[ut,qe]=g.useState(!1),[Pt,F]=g.useState(!1),[J,ie]=g.useState(!0),[ye,Ee]=g.useState({isOpen:!1}),P=g.useRef(!1),[H,ee]=g.useState(""),re=g.useRef(""),Z=g.useRef(!1),Se=g.useRef({wasConnected:!1,wasConnecting:!1,initialConnection:!0,hasShownFallbackNotification:!1}),Ae=d7(),[Ie,Ve]=g.useState(!1),[Be,Fe]=g.useState(!1),[nt,Ne]=g.useState(null),Nt=g.useCallback(()=>n||"",[n]);g.useEffect(()=>{console.log("🔧 [GPT-5 Session] Initializing WebSocket"),A7(Nt)},[Ae,Nt]),g.useEffect(()=>{if(!t)return;(()=>{console.log("🔧 [GPT-5 Session] Joining focus group:",t),fBe(t)})()},[t,Ae]),g.useEffect(()=>{Fe(!0),Ve(!1),Ne(null);const le=setTimeout(()=>{Ve(!0),Fe(!1)},1e3);return()=>{clearTimeout(le)}},[Ae]),g.useEffect(()=>{console.log("🔧 [GPT-5 Session] Setting up window event listeners");const le=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] message_update:",me),me.focus_group_id&&(console.log("🔧 [GPT-5] Message focus_group_id:",me.focus_group_id),console.log("🔧 [GPT-5] Current focus group from URL:",t));const dt=h5e(me.message);if(!dt){console.error("🔧 [GPT-5] convertWebSocketMessage returned null");return}i(st=>st.find(yt=>yt.id===dt.id)?(console.log("🔧 [GPT-5] Message already exists, skipping"),st):(console.log("🔧 [GPT-5] Adding new message, count:",st.length+1),[...st,dt]))},ge=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] ai_status_update:",me),S(dt=>me.status.status==="ai_mode"),ee(dt=>me.status.status)},Ge=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] moderator_status_update:",me),y(me.moderator_status)},I=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] theme_update:",me);const dt=p5e(me.theme);l(st=>{const Wt=[...st],yt=Wt.findIndex(er=>er.id===dt.id);return yt>=0?Wt[yt]=dt:Wt.push(dt),Wt})},X=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] focus_group_update:",me),d(dt=>dt?{...dt,...me}:null)},Y=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] mode_event_update:",me);const dt={...me,timestamp:new Date(me.timestamp),created_at:new Date(me.created_at)};s(st=>st.findIndex(yt=>yt.id===dt.id)>=0?(console.log("🔧 [GPT-5 Session] Mode event already exists, skipping:",dt.id),st):(console.log("🔧 [GPT-5 Session] Adding new mode event:",dt.id),[...st,dt]))},pe=Pe=>{const me=Pe.detail;console.log("🔧 [GPT-5 Session] joined_focus_group:",me)};return console.log("🔧 [GPT-5 Session] ADDING window event listeners"),window.addEventListener("ws:message_update",le),window.addEventListener("ws:ai_status_update",ge),window.addEventListener("ws:moderator_status_update",Ge),window.addEventListener("ws:theme_update",I),window.addEventListener("ws:focus_group_update",X),window.addEventListener("ws:mode_event_update",Y),window.addEventListener("ws:joined_focus_group",pe),console.log("🔧 [GPT-5 Session] ADDED all window event listeners"),()=>{console.log("🔧 [GPT-5 Session] Cleaning up window event listeners"),window.removeEventListener("ws:message_update",le),window.removeEventListener("ws:ai_status_update",ge),window.removeEventListener("ws:moderator_status_update",Ge),window.removeEventListener("ws:theme_update",I),window.removeEventListener("ws:focus_group_update",X),window.removeEventListener("ws:mode_event_update",Y),window.removeEventListener("ws:joined_focus_group",pe),t&&hBe(t)}},[Ae,t]),g.useEffect(()=>{if(!t)return;const le=Se.current;Ie&&!le.wasConnected&&(le.initialConnection?Ye.success("Live updates enabled",{description:"Connected to real-time updates. Changes will appear instantly.",duration:3e3}):Ye.success("Real-time updates restored",{description:"WebSocket connection re-established. You'll now receive instant updates.",duration:4e3}),le.wasConnected=!0,le.initialConnection=!1),!Ie&&!Be&&le.wasConnected&&!le.initialConnection&&(Ye.warning("Connection lost",{description:"Real-time updates unavailable. Attempting to reconnect...",duration:5e3}),le.wasConnected=!1,ie(!0)),nt&&!Be&&!Ie&&!le.initialConnection&&(Ye.error("Connection failed",{description:"Unable to establish real-time connection. Using periodic updates instead.",duration:6e3}),ie(!0)),le.wasConnecting=Be},[Ie,Be,nt,Ae,t]),g.useEffect(()=>{},[Ae,t,u]);const pn=async()=>{var le;if(t)try{const ge=await rr.getModeratorStatus(t);if((le=ge==null?void 0:ge.data)!=null&&le.status){const Ge=ge.data.status;if(m){const I=m.current_section_id!==Ge.current_section_id||m.current_item_id!==Ge.current_item_id||m.progress!==Ge.progress}O.current||y(Ge)}}catch(ge){console.error("Error fetching moderator status:",ge)}},Je=async()=>{if(!t)return{aiActive:!1,sessionStatus:""};try{if(typeof(gt==null?void 0:gt.getById)!="function")return console.error("focusGroupsApi.getById is not a function:",typeof(gt==null?void 0:gt.getById)),{aiActive:w,sessionStatus:H};const le=await gt.getById(t);if(!le||typeof le!="object")return console.error("Invalid response object received:",le),{aiActive:w,sessionStatus:H};if(!le.data||typeof le.data!="object")return console.warn("Focus group response missing data property:",le),{aiActive:w,sessionStatus:H};const ge=le.data.status;if(typeof ge>"u")return console.warn("Focus group response missing status field:",le.data),{aiActive:w,sessionStatus:H};const Ge=ge==="ai_mode";return ge==="autonomous_active"?console.warn('Detected legacy "autonomous_active" status - backend may need updating to "ai_mode"'):["ai_mode","active","completed","paused","draft","in-progress"].includes(ge)||console.warn("Unexpected focus group status value:",ge),{aiActive:Ge,sessionStatus:ge}}catch(le){console.error("Error checking AI mode status:",le);const ge={focusGroupId:t,currentAiModeStatus:w,errorType:"unknown",timestamp:new Date().toISOString()};return le.response?(ge.errorType="api_error",ge.status=le.response.status,ge.data=le.response.data,console.error("API error response:",le.response.status,le.response.data),le.response.status===404?console.warn("Focus group not found - may have been deleted"):le.response.status===500&&console.error("Server error during status check - backend issue")):le.request?(ge.errorType="network_error",console.error("Network error - no response received, check connectivity")):(ge.errorType="request_setup",ge.message=le.message,console.error("Request setup error:",le.message)),console.debug("Status check error details:",ge),{aiActive:w,sessionStatus:H,isGenerating:!1}}},rt=async(le,ge)=>{if(!t||Z.current)return;const Ge=["completed","paused"],X=["ai_mode","autonomous_active","active","in-progress"].includes(ge),Y=Ge.includes(le);if(X&&Y){Z.current=!0;try{let pe="session_ended";le==="completed"?pe="auto_complete":le==="paused"&&(pe="manual_stop");const Pe=await rr.endSession(t,pe);Pe!=null&&Pe.data&&(Ye.success("Session concluded",{description:"The focus group session has ended with a concluding statement from the moderator."}),setTimeout(()=>{jt()},1e3))}catch(pe){console.error("❌ Error ending session with concluding statement:",pe),Ye.error("Error ending session",{description:"Failed to add concluding statement, but the session has ended."})}}},jt=async()=>{var le;if(t)try{const ge=await gt.getMessages(t);console.log("🔍 [FetchMessages] Raw API response:",ge==null?void 0:ge.data);let Ge=[],I=[];ge&&ge.data&&(Array.isArray(ge.data)?(Ge=ge.data,I=[]):ge.data.messages||ge.data.mode_events?(Ge=ge.data.messages||[],I=ge.data.mode_events||[]):(Ge=Array.isArray(ge.data)?ge.data:[],I=[]));const X=Ge.map(me=>({id:me._id||me.id||`msg-${Date.now()}`,senderId:me.senderId,text:me.text,timestamp:new Date(me.timestamp||me.created_at),type:me.type||"response",highlighted:me.highlighted||!1,visualAsset:me.visualAsset}));console.log("🔍 [FetchMessages] Formatted messages with visual assets:",X.filter(me=>me.visualAsset).map(me=>({id:me.id,senderId:me.senderId,hasVisualAsset:!!me.visualAsset,visualAsset:me.visualAsset})));const Y=I.map(me=>({id:me._id||me.id||`event-${Date.now()}`,focus_group_id:me.focus_group_id,event_type:me.event_type,timestamp:new Date(me.timestamp||me.created_at),user_id:me.user_id,created_at:new Date(me.created_at)}));s(Y),X.length>0?i(me=>{if(me.length===0)return X;{const dt=new Map;me.forEach(ln=>dt.set(ln.id,ln));const st=X.map(ln=>{if(dt.has(ln.id)){const An=dt.get(ln.id);return{...ln,highlighted:An.highlighted}}return ln}),Wt=new Set(st.map(ln=>ln.id)),yt=me.filter(ln=>!Wt.has(ln.id));return[...st,...yt].sort((ln,An)=>ln.timestamp.getTime()-An.timestamp.getTime())}}):X.length===0&&i(me=>me.length===0?[]:me);const pe=X.filter(me=>me.highlighted),Pe=pe.length>0?pe.map(me=>({id:`theme-${me.id}`,text:me.text.substring(0,40)+(me.text.length>40?"...":""),count:1,messages:[me.id],source:"highlight"})):[];try{const me=await rr.getKeyThemes(t);if((le=me==null?void 0:me.data)!=null&&le.themes&&Array.isArray(me.data.themes)){const dt=me.data.themes;l([...Pe,...dt])}else l(Pe)}catch(me){console.error("Error fetching AI-generated themes:",me),l(Pe)}}catch(ge){console.error("Error fetching messages:",ge),r.length===0&&Ye.error("Failed to fetch messages",{description:"Please try again later or restart the session."})}},Bt=async()=>{if(!t)return!1;try{const ge=(await $r.getAll()).data||[],Ge=await gt.getById(t);if(Ge&&Ge.data){const I=Ge.data;console.log("Focus group data from API:",I);const X={id:I._id||I.id,name:I.name,status:I.status||"in-progress",participants:I.participants||[],date:I.date||new Date().toISOString(),duration:I.duration||60,topic:I.topic||"general",discussionGuide:I.discussionGuide||"",llm_model:I.llm_model||"gemini-2.5-pro"};if(d(X),Q(X.llm_model||"gemini-2.5-pro"),te(X.reasoning_effort||"medium"),B(X.verbosity||"medium"),I.participants_data&&Array.isArray(I.participants_data))h(I.participants_data.map(pe=>({...pe,id:pe._id||pe.id})));else if(X.participants&&Array.isArray(X.participants)){console.log("Matching participants from DB:",{focusGroupParticipants:X.participants,allPersonas:ge.map(Pe=>({id:Pe._id||Pe.id,name:Pe.name}))});const pe=ge.filter(Pe=>{const me=Pe._id||Pe.id;return X.participants.includes(me)});console.log("Matched participants:",pe.map(Pe=>Pe.name)),h(pe)}await jt(),await pn();const Y=await Je();return S(Y.aiActive),ee(Y.sessionStatus),P.current=Y.aiActive,re.current=Y.sessionStatus,!0}return!1}catch(le){return console.error("Error fetching focus group:",le),!1}},Dt=async(le,ge,Ge)=>{if(console.log("🔧 updateFocusGroupModel called with:",{id:t,focusGroup:!!u,newModel:le,reasoningEffort:ge,verbosity:Ge}),!t||!u){console.log("❌ updateFocusGroupModel: Missing id or focusGroup",{id:t,focusGroup:!!u});return}fe(!0);try{const I={llm_model:le};le==="gpt-5"&&(I.reasoning_effort=ge||q,I.verbosity=Ge||xe),console.log("🔧 Making API call to update focus group model:",{id:t,updateData:I});const X=await gt.update(t,I);console.log("🔧 API response:",X),X&&X.data?(d(Y=>Y?{...Y,llm_model:le,reasoning_effort:le==="gpt-5"?ge||q:Y==null?void 0:Y.reasoning_effort,verbosity:le==="gpt-5"?Ge||xe:Y==null?void 0:Y.verbosity}:null),Ye.success("AI Model Updated",{description:`Focus group will now use ${le==="gemini-2.5-pro"?"Gemini 2.5 Pro":le==="gpt-4.1"?"GPT-4.1":le==="gpt-5"?"GPT-5":le} for AI responses`}),M(!1),console.log("✅ Model update successful")):console.log("❌ API response missing data:",X)}catch(I){console.error("❌ Error updating focus group model:",I),Ye.error("Failed to update AI model",{description:"There was an error updating the AI model. Please try again."})}finally{fe(!1)}};g.useEffect(()=>{console.log("Looking for focus group with ID:",t);const le=async()=>{try{return(await $r.getAll()).data||[]}catch(X){return console.error("Error fetching personas:",X),[]}},ge=async X=>{try{const Y=await gt.getById(t);if(Y&&Y.data){const pe=Y.data;console.log("Focus group data from API:",pe);const Pe={id:pe._id||pe.id,name:pe.name,status:pe.status||"in-progress",participants:pe.participants||[],date:pe.date||new Date().toISOString(),duration:pe.duration||60,topic:pe.topic||"general",discussionGuide:pe.discussionGuide||"",llm_model:pe.llm_model||"gemini-2.5-pro"};if(d(Pe),Q(Pe.llm_model||"gemini-2.5-pro"),te(Pe.reasoning_effort||"medium"),B(Pe.verbosity||"medium"),pe.participants_data&&Array.isArray(pe.participants_data))h(pe.participants_data.map(me=>({...me,id:me._id||me.id})));else if(Pe.participants&&Array.isArray(Pe.participants)){console.log("Matching participants from DB:",{focusGroupParticipants:Pe.participants,allPersonas:X.map(dt=>({id:dt._id||dt.id,name:dt.name}))});const me=X.filter(dt=>{const st=dt._id||dt.id;return Pe.participants.includes(st)});console.log("Matched participants:",me.map(dt=>dt.name)),h(me)}return jt(),pn(),_(!1),!0}return!1}catch(Y){return console.error("Error fetching focus group:",Y),!1}};let Ge,I;return le().then(X=>{ge(X).then(Y=>{Y?nt&&(nt.includes("unavailable")||nt.includes("websocket error"))?(console.log("📡 WebSocket connection failed, falling back to polling"),(()=>{jt(),pn(),Ge&&window.clearInterval(Ge);const st=w?3e3:1e4;console.log("📡 Setting up message polling:",{aiModeActive:w,pollInterval:st,timestamp:new Date().toISOString()}),Ge=window.setInterval(()=>{O.current?console.log("📡 Skipping poll - editing discussion guide"):(console.log("📡 Polling for messages...",new Date().toISOString()),jt(),pn())},st)})(),I=window.setInterval(async()=>{const st=P.current,Wt=re.current,yt=await Je();if(P.current=yt.aiActive,re.current=yt.sessionStatus,S(yt.aiActive),ee(yt.sessionStatus),Wt&&Wt!==yt.sessionStatus&&await rt(yt.sessionStatus,Wt),st!==yt.aiActive&&Ge){window.clearInterval(Ge);const er=yt.aiActive?3e3:1e4;Ge=window.setInterval(()=>{O.current||(jt(),pn())},er)}},15e3)):console.log("📡 WebSocket enabled, skipping polling setup"):(console.error("Focus group not found with ID:",t),_(!1),Ye.error("Focus group not found",{description:`Could not find focus group with ID: ${t}`}))})}),()=>{Ge&&window.clearInterval(Ge),I&&window.clearInterval(I)}},[t,e,Ae,nt]);const Jt=le=>{if(!le||!le.sections||!Array.isArray(le.sections))return{content:"Welcome to our focus group session! Let's begin our discussion.",sectionId:"welcome",itemId:"welcome-message"};const ge=le.sections[0];if(!ge)return{content:"Welcome to our focus group session! Let's begin our discussion.",sectionId:"welcome",itemId:"welcome-message"};const Ge=X=>X.questions&&Array.isArray(X.questions)&&X.questions.length>0?{content:X.questions[0].content,itemId:X.questions[0].id,type:"question"}:X.activities&&Array.isArray(X.activities)&&X.activities.length>0?{content:X.activities[0].content,itemId:X.activities[0].id,type:"activity"}:null;let I=Ge(ge);if(!I&&ge.subsections&&Array.isArray(ge.subsections)){for(const X of ge.subsections)if(I=Ge(X),I)break}return I?{content:I.content,sectionId:ge.id,itemId:I.itemId}:{content:`Welcome to our focus group session on "${ge.title||"our topic"}". Let's begin our discussion.`,sectionId:ge.id,itemId:"section-intro"}},en=async()=>{var le,ge,Ge,I,X;if(t)try{Ye.info("Starting focus group session...",{description:"The session is now ready for AI moderation."});try{const Y=await rr.getModeratorStatus(t),pe=(ge=(le=Y==null?void 0:Y.data)==null?void 0:le.status)==null?void 0:ge.moderator_position;pe?console.log("📍 Preserving existing moderator position:",pe):(await rr.setModeratorPosition(t,((X=(I=(Ge=u==null?void 0:u.discussionGuide)==null?void 0:Ge.sections)==null?void 0:I[0])==null?void 0:X.id)||"welcome"),console.log("🚀 Moderator position initialized to start of discussion guide (first time)"))}catch(Y){console.warn("Failed to check/initialize moderator position:",Y)}await gt.update(t,{status:"active"});try{const Y=Jt(u==null?void 0:u.discussionGuide),pe=await gt.sendMessage(t,{senderId:"moderator",text:Y.content,type:"question"});console.log("🚀 Initial moderator message created:",{content:Y.content,sectionId:Y.sectionId,itemId:Y.itemId})}catch(Y){console.warn("Failed to create initial moderator message:",Y)}Ye.success("Focus group session started",{description:"The discussion has begun. Use the control panel below to moderate."})}catch(Y){console.error("Error starting session:",Y),Ye.error("Error starting session",{description:"There was a problem connecting to the server."})}},Nn=le=>{i(ge=>ge.find(I=>I.id===le.id)?(console.log("🔧 [handleNewMessage] Message already exists, skipping:",le.id),ge):(console.log("🔧 [handleNewMessage] Adding new message:",le.id),[...ge,le]))},cn=async le=>{const ge=[...r],Ge=ge.findIndex(I=>I.id===le);if(Ge!==-1){const I=ge[Ge],X=!I.highlighted;if(ge[Ge]={...I,highlighted:X},i(ge),t)try{!le.startsWith("local-")&&!le.startsWith("msg-")?await gt.updateMessageHighlight(t,le,X):console.log("Skipping database update for local message:",le)}catch(Y){console.error("Error updating message highlight state:",Y),Ye.error("Failed to save highlight state",{description:"The highlight may not persist if the page is refreshed."})}}},V=le=>f.find(ge=>ge.id===le||ge._id===le),ke=()=>{const le=r.map(I=>{var pe;let X;return I.senderId==="moderator"?X="AI Moderator":I.senderId==="facilitator"?X="Human Facilitator":X=((pe=V(I.senderId))==null?void 0:pe.name)||"Unknown",`[${I.timestamp.toLocaleTimeString()}] ${X}: ${I.text}`}).join(` + +`),ge=document.createElement("a"),Ge=new Blob([le],{type:"text/plain"});ge.href=URL.createObjectURL(Ge),ge.download=`focus-group-${t}-transcript.txt`,document.body.appendChild(ge),ge.click(),document.body.removeChild(ge),Ye.success("Transcript downloaded",{description:"The focus group transcript has been saved to your device."})},Ce=(le,ge)=>{const Ge=st=>{const Wt=st.match(/^\[([^\]]+)\]:\s*(.*)$/);return Wt?Wt[2].trim():st.trim()},I=st=>st.toLowerCase().replace(/[^\w\s]/g," ").replace(/\s+/g," ").trim(),X=(st,Wt)=>{const yt=I(st),er=I(Wt);if(yt===er)return 1;if(yt.includes(er)||er.includes(yt))return Math.min(yt.length,er.length)/Math.max(yt.length,er.length);const ln=yt.split(" "),An=er.split(" "),dv=ln.filter(mO=>An.includes(mO)&&mO.length>2);return ln.length===0||An.length===0?0:dv.length/Math.max(ln.length,An.length)},Y=typeof le=="object"&&le!==null,pe=Y?le.text:Ge(le),Pe=Y?le.original:le;let me=null,dt="";if(ge&&(me=r.find(st=>st.id===ge),me?dt="direct_message_id_match":console.warn(`Message ID ${ge} not found in current messages array`)),me||(me=r.find(st=>st.text.includes(Pe)),me&&(dt="exact_full_match")),me||(me=r.find(st=>st.text.includes(pe)),me&&(dt="exact_text_match")),me||(me=r.find(st=>pe.includes(st.text.trim())),me&&(dt="reverse_exact_match")),!me){const st=pe.toLowerCase();me=r.find(Wt=>Wt.text.toLowerCase().includes(st)||st.includes(Wt.text.toLowerCase())),me&&(dt="case_insensitive_match")}if(!me){const st=r.map(Wt=>({message:Wt,similarity:X(pe,Wt.text)})).filter(Wt=>Wt.similarity>.7).sort((Wt,yt)=>yt.similarity-Wt.similarity);st.length>0&&(me=st[0].message,dt=`fuzzy_match_${Math.round(st[0].similarity*100)}%`)}if(!me){const Wt=I(pe).split(" ").filter(yt=>yt.length>3);Wt.length>0&&(me=r.find(yt=>{const er=I(yt.text);return Wt.every(ln=>er.includes(ln))}),me&&(dt="partial_word_match"))}me?(console.log(`Quote match found using strategy: ${dt}`,{quoteType:Y?"QuoteData":"string",providedMessageId:ge,extractedText:pe,matchedMessage:me.text.substring(0,100),matchedMessageId:me.id,originalQuote:Pe.substring(0,100)}),v("chat"),setTimeout(()=>{const st=document.getElementById(`message-${me.id}`);st&&(N||st.scrollIntoView({behavior:"smooth",block:"center"}),st.style.backgroundColor="#fbbf24",st.style.transition="background-color 0.3s ease",setTimeout(()=>{st.style.backgroundColor=""},2e3))},100)):(console.warn("Quote match failed",{quoteType:Y?"QuoteData":"string",providedMessageId:ge,originalQuote:Pe.substring(0,100),extractedText:pe.substring(0,100),totalMessages:r.length,messageSample:r.slice(0,3).map(st=>({id:st.id,text:st.text.substring(0,50)}))}),Ye.warning("Message not found",{description:"Could not locate the original message for this quote. The quote may have been paraphrased by the AI."}))},Ke=le=>{l(ge=>{const Ge=new Set(ge.map(X=>X.id)),I=le.filter(X=>!Ge.has(X.id));return[...ge,...I]})},Qe=async le=>{if(!t)return;const ge=c.find(Ge=>Ge.id===le);if(ge)try{"source"in ge&&ge.source==="generated"&&await rr.deleteKeyTheme(t,le),l(c.filter(Ge=>Ge.id!==le))}catch(Ge){console.error("Error deleting theme:",Ge),Ye.error("Failed to delete theme",{description:"There was an error removing the theme. Please try again."})}},ot=g.useCallback(async(le,ge)=>{if(t)try{await rr.setModeratorPosition(t,le,ge),Ye.success("Moderator position updated",{description:"The moderator has been moved to the selected section."})}catch(Ge){console.error("Error setting moderator position:",Ge),Ye.error("Failed to update moderator position",{description:"There was an error updating the moderator position."})}},[t]),Ft=g.useCallback(async le=>{if(console.log("💾 handleDiscussionGuideSave called:",{hasId:!!t,isEditingGuideContent:E,timestamp:new Date().toISOString()}),!!t)try{await gt.update(t,{discussionGuide:le}),E?(D.current&&(D.current={...D.current,discussionGuide:le}),console.log("⚠️ Skipping focus group state update during editing to preserve focus")):(console.log("🔄 Updating focus group state (not editing)"),d(ge=>ge?{...ge,discussionGuide:le}:null))}catch(ge){throw console.error("Error saving discussion guide:",ge),ge}},[t,E]),tt=g.useCallback(le=>{console.log("🔄 handleGuideEditingStateChange called:",{editing:le,timestamp:new Date().toISOString(),currentIsEditingGuideContent:E}),k(le),R(le),!le&&D.current&&(console.log("📝 Updating focus group state after editing ended"),d(D.current))},[E]),Zt=g.useCallback(()=>{j(le=>!le)},[]),$t=g.useCallback((le,ge,Ge,I,X,Y,pe)=>{Ee({isOpen:!0,sectionId:le,itemId:ge,content:Ge,sectionTitle:I,itemTitle:X,itemType:Y,metadata:pe})},[]),Xt=()=>{if(m)return{sectionId:m.current_section_id,sectionTitle:m.current_section,itemId:m.current_item_id,itemTitle:m.current_item}},Tn=()=>{if(r.length!==0)return r[r.length-1].id},Lo=()=>{const le=Tn();if(le&&r.length>0){const ge=r.find(Ge=>Ge.id===le);if(ge)return ge.timestamp}return u!=null&&u.date?new Date(u.date):oe||new Date},Zn=async()=>{if(t){Me(!0),qe(!1),F(!1),Ye.info("Analyzing discussion for key themes...",{description:"This may take a moment as we process the entire conversation."});try{const le=await rr.generateKeyThemes(t);le.data&&le.data.themes?(qe(!0),Ye.success(`Generated ${le.data.themes.length} key themes`,{description:"New themes have been added to the analysis."}),l(ge=>[...ge,...le.data.themes])):(qe(!0),Ye.warning("No new themes were generated",{description:"Try again when the discussion has more content."}))}catch(le){console.error("Error generating key themes:",le),F(!0),Ye.error("Failed to generate key themes",{description:"There was an error analyzing the discussion. Please try again."})}}},Fo=()=>{Me(!1),qe(!1),F(!1)},Ah=()=>{oe||ne(new Date),ue(!0)},Uu=le=>{L(ge=>[...ge,le].sort((Ge,I)=>I.createdAt.getTime()-Ge.createdAt.getTime())),window.notesPanelAddNote&&window.notesPanelAddNote(le)},co=le=>{const ge=r.find(Ge=>Ge.id===le);ge?(v("chat"),setTimeout(()=>{const Ge=document.getElementById(`message-${ge.id}`);Ge&&(N||Ge.scrollIntoView({behavior:"smooth",block:"center"}),Ge.style.backgroundColor="#fbbf24",Ge.style.transition="background-color 0.3s ease",setTimeout(()=>{Ge.style.backgroundColor=""},2e3))},100)):Ye.info("Message not found",{description:"Could not locate the original message for this note."})};g.useEffect(()=>{r.length>0&&!oe&&ne(new Date)},[r.length,oe]),g.useEffect(()=>{O.current=N,N||pn()},[N]);const jh=le=>{K(ge=>ge.includes(le)?ge.filter(Ge=>Ge!==le):[...ge,le])};return C?a.jsxs("div",{className:"min-h-screen bg-slate-50 pt-20 pb-16 px-4",children:[a.jsx(ka,{}),a.jsxs("div",{className:"max-w-7xl mx-auto text-center py-12",children:[a.jsx("div",{className:"flex justify-center items-center",children:a.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}),a.jsx("p",{className:"mt-4 text-slate-600",children:"Loading focus group..."})]})]}):u?a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(ka,{}),J&&a.jsx("div",{className:`w-full transition-all duration-300 ${Ie?"bg-green-500":Be?"bg-yellow-500":"bg-red-500"}`,children:a.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",children:a.jsxs("div",{className:"flex items-center justify-between py-2 text-white text-sm font-medium",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx("div",{className:`w-2 h-2 rounded-full ${Ie?"bg-white animate-pulse":Be?"bg-white animate-spin":"bg-white"}`}),a.jsx("span",{children:Ie?"Real-time updates active - Changes appear instantly":Be?"Connecting to real-time updates...":"Real-time updates unavailable - Using periodic refresh"}),nt&&a.jsx("span",{className:"text-xs opacity-75 ml-2",title:nt,children:"(Connection error)"})]}),a.jsx("button",{onClick:()=>ie(!1),className:"ml-4 text-white hover:text-gray-200 transition-colors",title:"Hide status bar","aria-label":"Hide connection status",children:a.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})}),!J&&a.jsx("div",{className:"fixed top-20 right-4 z-40",children:a.jsx("button",{onClick:()=>ie(!0),className:`px-3 py-1 rounded-full text-white text-xs font-medium shadow-lg transition-all duration-200 hover:shadow-xl ${Ie?"bg-green-500 hover:bg-green-600":Be?"bg-yellow-500 hover:bg-yellow-600":"bg-red-500 hover:bg-red-600"}`,title:Ie?"WebSocket connected - Show status bar":Be?"WebSocket connecting - Show status bar":"WebSocket disconnected - Show status bar",children:a.jsxs("div",{className:"flex items-center space-x-1",children:[a.jsx("div",{className:`w-2 h-2 rounded-full bg-white ${Ie?"animate-pulse":""}`}),a.jsx("span",{children:Ie?"Live":Be?"Connecting":"Offline"})]})})}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-4",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(se,{variant:"ghost",onClick:()=>e("/focus-groups"),className:"mr-2",children:a.jsx(um,{className:"h-4 w-4"})}),a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-2xl font-bold text-slate-900",children:u.name}),a.jsx("p",{className:"text-slate-600",children:new Date(u.date).toLocaleString()}),a.jsxs("div",{className:"flex items-center mt-1",children:[a.jsx(Ca,{className:"h-3 w-3 text-slate-500 mr-1"}),a.jsx(On,{variant:"secondary",className:"text-xs",children:u.llm_model==="gpt-4.1"?"GPT-4.1":u.llm_model==="gpt-5"?"GPT-5":"Gemini 2.5 Pro"})]})]})]}),a.jsxs("div",{className:"flex items-center space-x-4 mt-4 sm:mt-0",children:[a.jsxs(se,{variant:"outline",onClick:()=>x(!b),className:b?"bg-blue-50 text-blue-600":"",children:[a.jsx(IA,{className:"mr-2 h-4 w-4"}),"AI Dashboard"]}),a.jsxs(se,{variant:"outline",onClick:()=>M(!0),children:[a.jsx(DN,{className:"mr-2 h-4 w-4"}),"AI Model"]}),a.jsxs(se,{variant:"outline",onClick:ke,children:[a.jsx(ol,{className:"mr-2 h-4 w-4"}),"Download Transcript"]})]})]}),et&&a.jsx("div",{className:"mb-6",children:a.jsx(Uk,{isActive:et,isComplete:ut,hasError:Pt,label:"Analyzing discussion for key themes",onComplete:Fo,className:"max-w-4xl mx-auto"})}),a.jsx(g5e,{discussionGuide:u.discussionGuide,moderatorStatus:m,onSectionSelect:ot,onSetPosition:$t,onSave:Ft,focusGroupId:t||"",isOpen:A,onToggle:Zt,onEditingChange:tt}),a.jsxs("div",{className:"flex flex-col lg:flex-row gap-6 h-[calc(100vh-12rem)]",children:[a.jsx(Qpe,{participants:f,selectedParticipantIds:je,onToggleParticipantFilter:jh}),a.jsx("div",{className:"flex-1 flex flex-col",children:a.jsxs(wl,{defaultValue:"chat",value:p,onValueChange:v,className:"w-full h-full flex flex-col",children:[a.jsxs(Za,{className:"grid grid-cols-4 mb-4",children:[a.jsxs(vn,{value:"chat",className:"flex items-center",children:[a.jsx(Is,{className:"h-4 w-4 mr-2"}),"Discussion"]}),a.jsxs(vn,{value:"themes",className:"flex items-center",children:[a.jsx(gu,{className:"h-4 w-4 mr-2"}),"Key Themes"]}),a.jsxs(vn,{value:"notes",className:"flex items-center",children:[a.jsx(Ex,{className:"h-4 w-4 mr-2"}),"Notes"]}),a.jsxs(vn,{value:"analytics",className:"flex items-center",children:[a.jsx(IA,{className:"h-4 w-4 mr-2"}),"Analytics"]})]}),a.jsx(yn,{value:"chat",className:"m-0 flex-1 flex flex-col h-0",children:r.length===0?a.jsxs("div",{className:"flex flex-col items-center justify-center py-12 space-y-4",children:[a.jsx("p",{className:"text-lg text-slate-600",children:"No messages yet. Start the session to begin the discussion."}),a.jsxs(se,{onClick:en,size:"lg",className:"flex items-center gap-2",children:[a.jsx(PB,{className:"h-5 w-5"}),"Start Session"]})]}):a.jsx(Ame,{messages:r,modeEvents:o,personas:f,isSpeaking:!1,focusGroupId:t||"",isAiModeActive:w,selectedParticipantIds:je,onToggleHighlight:cn,onAdvanceDiscussion:()=>null,onNewMessage:Nn,onStatusChange:Bt,isEditingDiscussionGuide:N})}),a.jsx(yn,{value:"themes",className:"m-0",children:a.jsx(Eme,{themes:c,messages:r,personas:f,focusGroupId:t||"",onThemesGenerated:Ke,onThemeDelete:Qe,onQuoteClick:Ce,onGenerateKeyThemes:Zn})}),a.jsx(yn,{value:"notes",className:"m-0",style:{height:"calc(100% - 3.5rem)"},children:a.jsx("div",{className:"h-full",children:a.jsx(v5e,{focusGroupId:t||"",focusGroupName:u==null?void 0:u.name,onNoteClick:co})})}),a.jsx(yn,{value:"analytics",className:"m-0",children:a.jsx(f5e,{messages:r,themes:c,personas:f})})]})})]})]}),r.length>0&&a.jsx("div",{className:"fixed bottom-6 right-6 z-40",children:a.jsx(se,{onClick:Ah,className:"rounded-full h-12 w-12 p-0 shadow-lg",title:"Take a quick note",children:a.jsx(Ex,{className:"h-5 w-5"})})}),a.jsx(y5e,{isOpen:U,onClose:()=>ue(!1),focusGroupId:t||"",associatedMessageId:Tn(),sectionInfo:Xt(),messageTimestamp:Lo(),onNoteSaved:Uu}),a.jsx(Wc,{open:ye.isOpen,onOpenChange:le=>Ee(ge=>({...ge,isOpen:le})),children:a.jsxs(Pa,{children:[a.jsxs(Oa,{children:[a.jsx(Ra,{children:"Set Moderator Position"}),a.jsxs(qc,{children:['Are you sure you want to set the moderator position to "',ye.itemTitle,'" in section "',ye.sectionTitle,'"? This will make the moderator ask this question in the chat.']})]}),a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",disabled:ye.isLoading,onClick:()=>Ee({isOpen:!1}),children:"Cancel"}),a.jsxs(se,{disabled:ye.isLoading,onClick:async()=>{var le,ge,Ge,I,X,Y,pe,Pe,me;if(!(!t||!ye.sectionId||!ye.itemId||!ye.content)){Ee(dt=>({...dt,isLoading:!0}));try{await rr.setModeratorPosition(t,ye.sectionId,ye.itemId);let dt=[],st=!1,Wt=ye.content;const yt=(le=ye.metadata)==null?void 0:le.visual_asset,er=!!(yt!=null&&yt.filename),ln=yt==null?void 0:yt.filename;if(console.log("🔍 MANUAL POSITION DEBUG:",{itemType:ye.itemType,hasImageAttached:er,visualAsset:yt,assetFilename:ln,content:ye.content,sectionTitle:ye.sectionTitle,itemTitle:ye.itemTitle,contentLength:(ge=ye.content)==null?void 0:ge.length}),er&&ye.content&&ln)if(console.log("🔍 VISUAL ASSET DEBUG:",{originalContent:ye.content,visualAsset:yt,displayReference:yt==null?void 0:yt.display_reference,filename:ln,contentLength:ye.content.length}),ln){dt=[ln],st=!0,console.log("🎨 MANUAL POSITION: Creative review detected, will activate visual context for:",ln);try{console.log("🎨 MANUAL MODE: Requesting AI description for",ln);const An=await gt.describeAsset(t,ln);if(An.data.description){const dv=(yt==null?void 0:yt.display_reference)||"the asset";Wt=ye.content.replace(dv,`${dv} - ${An.data.description}`),console.log("✅ MANUAL MODE: Enhanced question with AI description"),console.log("🔍 Original:",ye.content),console.log("🔍 Enhanced:",Wt)}}catch(An){console.error("⚠️ MANUAL MODE: Failed to generate AI description:",An),console.error("⚠️ Error response data:",(Ge=An.response)==null?void 0:Ge.data),console.error("⚠️ Error status:",(I=An.response)==null?void 0:I.status),console.error("⚠️ Error headers:",(X=An.response)==null?void 0:X.headers),console.error("⚠️ Full axios error:",{message:An.message,code:An.code,status:(Y=An.response)==null?void 0:Y.status,statusText:(pe=An.response)==null?void 0:pe.statusText,url:(Pe=An.config)==null?void 0:Pe.url,method:(me=An.config)==null?void 0:me.method}),Ye.warning("AI description failed",{description:"Using original question text. Image will still be available to participants."})}}else console.warn("⚠️ MANUAL POSITION: Creative review detected but no asset filename extracted from content");console.log("📤 Sending moderator message to API:",{text:Wt,attachedAssets:dt,activatesVisualContext:st});try{const An=await gt.sendMessage(t,{senderId:"moderator",text:Wt,type:"question",attached_assets:dt,activates_visual_context:st,visualAsset:er&&yt?{filename:ln,displayReference:yt.display_reference}:void 0});console.log("✅ Message API call successful:",An==null?void 0:An.data)}catch(An){console.error("❌ Failed to save message to API:",An),Ye.warning("Message not saved",{description:"Failed to save the moderator message to the server."})}Ee({isOpen:!1}),console.log("✅ Set position complete, moderator message added to UI"),Ye.success("Moderator position set",{description:`Position set to "${ye.itemTitle}" in "${ye.sectionTitle}"`})}catch(dt){console.error("Error setting moderator position:",dt),Ee(st=>({...st,isLoading:!1})),Ye.error("Failed to set moderator position",{description:"There was an error setting the moderator position."})}}},className:"flex items-center gap-2",children:[ye.isLoading&&a.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-white"}),ye.isLoading?"Generating detailed image description...":"Confirm"]})]})]})}),a.jsx(Wc,{open:z,onOpenChange:M,children:a.jsxs(Pa,{children:[a.jsxs(Oa,{children:[a.jsx(Ra,{children:"AI Model Settings"}),a.jsx(qc,{children:"Choose which AI model to use for generating responses and discussion guides in this focus group."})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{className:"flex items-center space-x-2",children:[a.jsx(Ca,{className:"h-4 w-4 text-slate-500"}),a.jsx("span",{className:"text-sm font-medium",children:"Current Model:"}),a.jsx(On,{variant:"secondary",children:(u==null?void 0:u.llm_model)==="gpt-4.1"?"GPT-4.1":(u==null?void 0:u.llm_model)==="gpt-5"?"GPT-5":"Gemini 2.5 Pro"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium",children:"Select AI Model:"}),a.jsxs(Hn,{value:$,onValueChange:le=>{console.log("🔧 Model selection changed:",{from:$,to:le}),Q(le)},children:[a.jsx(Fn,{className:"mt-1",children:a.jsx(Gn,{placeholder:"Select AI model"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"gemini-2.5-pro",children:"Gemini 2.5 Pro"}),a.jsx(he,{value:"gpt-4.1",children:"GPT-4.1"}),a.jsx(he,{value:"gpt-5",children:"GPT-5"})]})]})]}),$==="gpt-5"&&a.jsxs(a.Fragment,{children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium",children:"Reasoning Effort:"}),a.jsxs(Hn,{value:q,onValueChange:te,children:[a.jsx(Fn,{className:"mt-1",children:a.jsx(Gn,{placeholder:"Select reasoning effort"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"minimal",children:"Minimal - Fast responses"}),a.jsx(he,{value:"low",children:"Low - Quick thinking"}),a.jsx(he,{value:"medium",children:"Medium - Balanced (default)"}),a.jsx(he,{value:"high",children:"High - Deep reasoning"})]})]}),a.jsx("p",{className:"text-xs text-slate-600 mt-1",children:"Controls how much time GPT-5 spends thinking before responding"}),a.jsx("p",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how thoroughly GPT-5 thinks and how detailed responses are"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium",children:"Response Verbosity:"}),a.jsxs(Hn,{value:xe,onValueChange:B,children:[a.jsx(Fn,{className:"mt-1",children:a.jsx(Gn,{placeholder:"Select verbosity level"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"low",children:"Low - Concise responses"}),a.jsx(he,{value:"medium",children:"Medium - Balanced length (default)"}),a.jsx(he,{value:"high",children:"High - Detailed responses"})]})]}),a.jsx("p",{className:"text-xs text-slate-600 mt-1",children:"Controls how detailed and lengthy GPT-5's responses will be"}),a.jsx("p",{className:"text-xs text-amber-600 font-medium mt-1",children:"Controls how thoroughly GPT-5 thinks and how detailed responses are"})]})]}),a.jsxs("div",{className:"text-xs text-slate-600",children:[a.jsxs("p",{children:[a.jsx("strong",{children:"Gemini 2.5 Pro:"})," Google's advanced model, great for creative and analytical tasks."]}),a.jsxs("p",{children:[a.jsx("strong",{children:"GPT-4.1:"})," OpenAI's latest model, excellent for conversational and reasoning tasks."]}),a.jsxs("p",{children:[a.jsx("strong",{children:"GPT-5:"})," OpenAI's newest model with advanced reasoning and customizable response styles."]})]})]}),a.jsxs(Ia,{children:[a.jsx(se,{variant:"outline",onClick:()=>M(!1),disabled:ce,children:"Cancel"}),a.jsxs(se,{onClick:()=>{console.log("🔧 Update button clicked:",{selectedModel:$,selectedReasoningEffort:q,selectedVerbosity:xe,currentModel:u==null?void 0:u.llm_model,isDisabled:ce||$===(u==null?void 0:u.llm_model)&&($!=="gpt-5"||q===(u==null?void 0:u.reasoning_effort)&&xe===(u==null?void 0:u.verbosity))}),Dt($,q,xe)},disabled:ce||$===(u==null?void 0:u.llm_model)&&($!=="gpt-5"||q===((u==null?void 0:u.reasoning_effort)||"medium")&&xe===((u==null?void 0:u.verbosity)||"medium")),children:[ce&&a.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-white mr-2"}),ce?"Updating...":"Update Model"]})]})]})}),a.jsx(m5e,{focusGroupId:t,personas:f,isVisible:b,onToggle:()=>x(!b)})]}):a.jsxs("div",{className:"min-h-screen bg-slate-50 pt-20 pb-16 px-4",children:[a.jsx(ka,{}),a.jsxs("div",{className:"max-w-7xl mx-auto text-center py-12",children:[a.jsx("h1",{className:"text-2xl font-bold",children:"Focus group not found"}),a.jsx("p",{className:"mt-2 text-slate-600",children:"We couldn't find the focus group you're looking for."}),a.jsxs(se,{onClick:()=>e("/focus-groups"),className:"mt-4",children:[a.jsx(um,{className:"mr-2 h-4 w-4"})," Back to Focus Groups"]})]})]})},vBe=({title:t,description:e})=>a.jsxs("div",{className:"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-8",children:[a.jsxs("div",{children:[a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900",children:t}),a.jsx("p",{className:"text-slate-600 mt-1",children:e})]}),a.jsxs("div",{className:"mt-4 sm:mt-0 flex gap-2",children:[a.jsx(se,{variant:"outline",children:"Export Data"}),a.jsx(se,{children:"Generate Report"})]})]}),j_=({title:t,value:e,changePercentage:n,icon:r})=>a.jsx(pt,{className:"p-6 hover:shadow-md transition-shadow",children:a.jsxs("div",{className:"flex justify-between items-start",children:[a.jsxs("div",{children:[a.jsx("p",{className:"text-muted-foreground text-sm",children:t}),a.jsx("h3",{className:"text-2xl font-bold mt-1",children:e}),a.jsxs("p",{className:`${n>=0?"text-green-500":"text-red-500"} text-xs mt-1`,children:[n>=0?"↑":"↓"," ",Math.abs(n),"% from last month"]})]}),a.jsx("div",{className:"bg-primary/10 p-2 rounded-full",children:a.jsx(r,{className:"h-6 w-6 text-primary"})})]})}),yBe=[{name:"Jan",users:20,groups:3,interactions:120},{name:"Feb",users:25,groups:4,interactions:160},{name:"Mar",users:30,groups:5,interactions:220},{name:"Apr",users:40,groups:6,interactions:280},{name:"May",users:45,groups:7,interactions:350},{name:"Jun",users:48,groups:7,interactions:420}],xBe=[{id:"1",title:"User Interface Feedback",description:"Users consistently mentioned difficulty with the navigation menu on mobile devices.",source:"Mobile App Focus Group",date:"2023-06-12",sentiment:"negative"},{id:"2",title:"Feature Adoption",description:'The new search functionality is well-received, with 85% of users rating it as "very useful".',source:"Product Testing Group",date:"2023-06-10",sentiment:"positive"},{id:"3",title:"Pricing Strategy",description:"Price-conscious users expressed willingness to pay up to 20% more for premium features.",source:"Pricing Model Analysis",date:"2023-06-08",sentiment:"positive"},{id:"4",title:"Competitive Analysis",description:"Users who switched from competitor products cited our streamlined onboarding as a key factor.",source:"Customer Journey Mapping",date:"2023-06-05",sentiment:"positive"}],bBe=()=>a.jsxs("div",{className:"space-y-6",children:[a.jsxs(pt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-4",children:"Research Activity"}),a.jsx("div",{className:"h-64",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(u7,{data:yBe,margin:{top:10,right:30,left:0,bottom:0},children:[a.jsx(_g,{strokeDasharray:"3 3"}),a.jsx(fl,{dataKey:"name"}),a.jsx(hl,{}),a.jsx(ni,{}),a.jsx(us,{type:"monotone",dataKey:"users",stackId:"1",stroke:"#8884d8",fill:"#8884d8",name:"Synthetic Users"}),a.jsx(us,{type:"monotone",dataKey:"groups",stackId:"2",stroke:"#82ca9d",fill:"#82ca9d",name:"Focus Groups"}),a.jsx(us,{type:"monotone",dataKey:"interactions",stackId:"3",stroke:"#ffc658",fill:"#ffc658",name:"Interactions"})]})})})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs(pt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-4",children:"Recent AI Insights"}),a.jsxs("div",{className:"space-y-4",children:[xBe.slice(0,3).map(t=>a.jsx("div",{className:"border-b pb-4 last:border-b-0 last:pb-0",children:a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:`p-2 rounded-full mr-3 ${t.sentiment==="positive"?"bg-green-100":t.sentiment==="negative"?"bg-red-100":"bg-slate-100"}`,children:a.jsx(mu,{className:`h-4 w-4 ${t.sentiment==="positive"?"text-green-600":t.sentiment==="negative"?"text-red-600":"text-slate-600"}`})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:t.title}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:t.description}),a.jsxs("div",{className:"flex items-center text-xs text-muted-foreground mt-2",children:[a.jsx("span",{children:t.source}),a.jsx("span",{className:"mx-2",children:"•"}),a.jsx("span",{children:t.date})]})]})]})},t.id)),a.jsx(se,{variant:"ghost",className:"w-full text-sm",size:"sm",children:"View All Insights"})]})]}),a.jsxs(pt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold mb-4",children:"Upcoming Research Tasks"}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-blue-100 p-2 rounded-full mr-3",children:a.jsx(Mv,{className:"h-4 w-4 text-blue-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Website Redesign Feedback"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Focus group scheduled for Jun 20"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-purple-100 p-2 rounded-full mr-3",children:a.jsx(Mv,{className:"h-4 w-4 text-purple-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Mobile App User Testing"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"8 participants needed by Jun 25"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-amber-100 p-2 rounded-full mr-3",children:a.jsx(Mv,{className:"h-4 w-4 text-amber-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Pricing Strategy Evaluation"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Create discussion guide by Jun 22"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx("div",{className:"bg-green-100 p-2 rounded-full mr-3",children:a.jsx(Mv,{className:"h-4 w-4 text-green-600"})}),a.jsxs("div",{children:[a.jsx("h4",{className:"text-sm font-medium",children:"Product Onboarding Flow"}),a.jsx("p",{className:"text-xs text-muted-foreground",children:"Results analysis due Jun 30"})]})]}),a.jsx(se,{variant:"ghost",className:"w-full text-sm",size:"sm",children:"Manage Research Calendar"})]})]})]})]}),wBe=[{name:"18-24",value:15},{name:"25-34",value:35},{name:"35-44",value:25},{name:"45-54",value:15},{name:"55+",value:10}],SBe=()=>a.jsxs(pt,{className:"p-6",children:[a.jsxs("div",{className:"flex justify-between items-center mb-4",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold",children:"Synthetic Persona Analytics"}),a.jsx(se,{variant:"outline",size:"sm",children:"View Demographics"})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Persona Demographics"}),a.jsx("div",{className:"h-60",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(lO,{children:[a.jsx(ni,{}),a.jsx(_s,{data:wBe,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:80,fill:"#FFDEE2",label:!0})]})})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Persona Distribution"}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Age: 25-34"}),a.jsx("span",{children:"35%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-400 rounded-full",style:{width:"35%"}})})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Tech Savvy"}),a.jsx("span",{children:"72%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-300 rounded-full",style:{width:"72%"}})})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Brand Loyal"}),a.jsx("span",{children:"58%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-500 rounded-full",style:{width:"58%"}})})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Price Sensitive"}),a.jsx("span",{children:"67%"})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-pink-200 rounded-full",style:{width:"67%"}})})]})]})]})]}),a.jsx("div",{className:"flex justify-center mt-6",children:a.jsx(se,{onClick:()=>window.location.href="/synthetic-users",children:"Manage Synthetic Personas"})})]}),CBe=[{name:"Jan",users:20,groups:3,interactions:120},{name:"Feb",users:25,groups:4,interactions:160},{name:"Mar",users:30,groups:5,interactions:220},{name:"Apr",users:40,groups:6,interactions:280},{name:"May",users:45,groups:7,interactions:350},{name:"Jun",users:48,groups:7,interactions:420}],oF=[{name:"Very Positive",value:25,color:"#4ade80"},{name:"Positive",value:40,color:"#a3e635"},{name:"Neutral",value:20,color:"#93c5fd"},{name:"Negative",value:10,color:"#fb923c"},{name:"Very Negative",value:5,color:"#f87171"}],_Be=[{name:"Navigation",count:42},{name:"Performance",count:28},{name:"UX Design",count:36},{name:"Features",count:22},{name:"Onboarding",count:18}],ABe=()=>{const t=ur();return a.jsxs(pt,{className:"p-6",children:[a.jsxs("div",{className:"flex justify-between items-center mb-4",children:[a.jsx("h3",{className:"font-sf text-lg font-semibold",children:"Focus Group Insights"}),a.jsx(se,{variant:"outline",size:"sm",onClick:()=>t("/focus-groups"),children:"View All Sessions"})]}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Session Analytics"}),a.jsx("div",{className:"h-60",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(u7,{data:CBe,margin:{top:10,right:30,left:0,bottom:0},children:[a.jsx(_g,{strokeDasharray:"3 3"}),a.jsx(fl,{dataKey:"name"}),a.jsx(hl,{}),a.jsx(ni,{}),a.jsx(us,{type:"monotone",dataKey:"interactions",stroke:"#8884d8",fill:"#8884d8",name:"User Interactions"})]})})})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("p",{className:"text-sm text-muted-foreground",children:"Feedback Sentiment"}),a.jsx("div",{className:"h-60",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(lO,{children:[a.jsx(ni,{}),a.jsx(_s,{data:oF,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:80,label:({name:e,percent:n})=>`${e} ${(n*100).toFixed(0)}%`,children:oF.map((e,n)=>a.jsx(iv,{fill:e.color},`cell-${n}`))}),a.jsx(Da,{})]})})})]})]}),a.jsxs("div",{className:"mb-6",children:[a.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"Topic Frequency Analysis"}),a.jsx("div",{className:"h-60",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(l7,{data:_Be,margin:{top:5,right:30,left:20,bottom:5},children:[a.jsx(_g,{strokeDasharray:"3 3"}),a.jsx(fl,{dataKey:"name"}),a.jsx(hl,{}),a.jsx(ni,{}),a.jsx(Da,{}),a.jsx(jl,{dataKey:"count",name:"Mentions",fill:"#8884d8"})]})})})]}),a.jsx("div",{className:"flex justify-center",children:a.jsx(se,{onClick:()=>t("/focus-groups"),children:"Manage Focus Groups"})})]})},jBe=()=>{const[t,e]=g.useState("overview");return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(ka,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsx(vBe,{title:"Dashboard",description:"Monitor and analyze your research insights"}),a.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-8",children:[a.jsx(j_,{title:"Total Synthetic Users",value:48,changePercentage:12,icon:Fr}),a.jsx(j_,{title:"Active Focus Groups",value:7,changePercentage:5,icon:Xs}),a.jsx(j_,{title:"Research Insights",value:124,changePercentage:18,icon:gu})]}),a.jsxs(wl,{value:t,onValueChange:e,className:"glass-panel rounded-xl p-6",children:[a.jsxs(Za,{className:"grid w-full grid-cols-3 mb-6",children:[a.jsx(vn,{value:"overview",children:"Overview"}),a.jsx(vn,{value:"users",children:"Synthetic Users"}),a.jsx(vn,{value:"focus-groups",children:"Focus Groups"})]}),a.jsx(yn,{value:"overview",children:a.jsx(bBe,{})}),a.jsx(yn,{value:"users",children:a.jsx(SBe,{})}),a.jsx(yn,{value:"focus-groups",children:a.jsx(ABe,{})})]})]})]})},E7=g.forwardRef(({...t},e)=>a.jsx("nav",{ref:e,"aria-label":"breadcrumb",...t}));E7.displayName="Breadcrumb";const N7=g.forwardRef(({className:t,...e},n)=>a.jsx("ol",{ref:n,className:Le("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",t),...e}));N7.displayName="BreadcrumbList";const Wy=g.forwardRef(({className:t,...e},n)=>a.jsx("li",{ref:n,className:Le("inline-flex items-center gap-1.5",t),...e}));Wy.displayName="BreadcrumbItem";const pE=g.forwardRef(({asChild:t,className:e,...n},r)=>{const i=t?Ys:"a";return a.jsx(i,{ref:r,className:Le("transition-colors hover:text-foreground",e),...n})});pE.displayName="BreadcrumbLink";const T7=g.forwardRef(({className:t,...e},n)=>a.jsx("span",{ref:n,role:"link","aria-disabled":"true","aria-current":"page",className:Le("font-normal text-foreground",t),...e}));T7.displayName="BreadcrumbPage";const mE=({children:t,className:e,...n})=>a.jsx("li",{role:"presentation","aria-hidden":"true",className:Le("[&>svg]:size-3.5",e),...n,children:t??a.jsx(po,{})});mE.displayName="BreadcrumbSeparator";function EBe({persona:t}){const e=t.id==="0",n=t.id==="1";return a.jsxs(pt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center space-x-4",children:[a.jsx("div",{className:"h-16 w-16 rounded-full bg-muted flex items-center justify-center",children:a.jsx("img",{src:Kg(t),alt:t.name,className:"h-16 w-16 rounded-full object-cover"})}),a.jsxs("div",{children:[a.jsx("h2",{className:"font-sf text-xl font-semibold",children:t.name}),a.jsx("p",{className:"text-muted-foreground",children:t.occupation})]})]}),a.jsxs("div",{className:"mt-6 space-y-4",children:[a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Fr,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Demographics"}),a.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[t.age," ",t.gender?a.jsxs(a.Fragment,{children:["• ",t.gender]}):null,t.ethnicity?a.jsxs(a.Fragment,{children:[" • ",t.ethnicity]}):null]}),t.education&&a.jsx("p",{className:"sidebar-sub-item",children:t.education}),t.socialGrade&&a.jsxs("p",{className:"sidebar-sub-item",children:["Social Grade: ",t.socialGrade]}),t.householdIncome&&a.jsxs("p",{className:"sidebar-sub-item",children:["Household Income: ",t.householdIncome]}),t.householdComposition&&a.jsxs("p",{className:"sidebar-sub-item",children:["Household: ",t.householdComposition]})]})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Yee,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Location"}),a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t.location}),t.livingSituation&&a.jsx("p",{className:"sidebar-sub-item",children:t.livingSituation})]})]}),t.interests&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(MA,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Interests"}),a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t.interests})]})]}),t.mediaConsumption&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(wC,{className:"sidebar-icon"}),a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-sm",children:"Media"}),a.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:t.mediaConsumption})]})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-sm mb-3",children:"Digital Behavior"}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Tech Savviness"}),a.jsxs("span",{children:[t.techSavviness,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-blue-500 rounded-full",style:{width:`${t.techSavviness}%`}})})]}),t.brandLoyalty!==void 0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Brand Loyalty"}),a.jsxs("span",{children:[t.brandLoyalty,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-purple-500 rounded-full",style:{width:`${t.brandLoyalty}%`}})})]}),t.priceConsciousness!==void 0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Price Sensitivity"}),a.jsxs("span",{children:[t.priceConsciousness,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-amber-500 rounded-full",style:{width:`${t.priceConsciousness}%`}})})]}),t.environmentalConcern!==void 0&&a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-xs mb-1",children:[a.jsx("span",{children:"Environmental Concern"}),a.jsxs("span",{children:[t.environmentalConcern,"%"]})]}),a.jsx("div",{className:"h-1.5 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-green-500 rounded-full",style:{width:`${t.environmentalConcern}%`}})})]}),t.deviceUsage&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-xs font-medium mt-3",children:"Device Usage"}),a.jsx("p",{className:"sidebar-sub-item text-xs",children:t.deviceUsage})]}),t.shoppingHabits&&a.jsxs("div",{children:[a.jsx("h4",{className:"text-xs font-medium mt-3",children:"Shopping Habits"}),a.jsx("p",{className:"sidebar-sub-item text-xs",children:t.shoppingHabits})]})]})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-sm mb-3",children:"Additional Information"}),a.jsxs("div",{className:"space-y-2",children:[t.brandPreferences&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(MA,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:t.brandPreferences})]}),t.communicationPreferences&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(fm,{className:"sidebar-icon"}),a.jsxs("span",{className:"text-muted-foreground text-sm",children:["Prefers: ",t.communicationPreferences]})]}),t.deviceUsage&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Xee,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:t.deviceUsage})]}),t.shoppingHabits&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(tte,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:t.shoppingHabits})]}),t.additionalInformation&&typeof t.additionalInformation=="string"&&a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Vee,{className:"sidebar-icon"}),a.jsx("div",{className:"sidebar-sub-item",children:t.additionalInformation.split(` +`).map((r,i)=>a.jsx("div",{className:"mb-1",children:r.trim().startsWith("•")||r.trim().startsWith("-")?r.trim().substring(1).trim():r.trim()},i))})]}),e&&a.jsxs("div",{className:"pt-2 space-y-2",children:[a.jsxs("div",{className:"sidebar-section",children:[a.jsx(rR,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Maintains an extensive network of financial and luxury industry contacts"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Ax,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Owns vacation properties in the Cotswolds and South of France"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(wC,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Collector of rare first-edition books and limited-edition art prints"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(iR,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Significant investment portfolio with focus on sustainable luxury ventures"})]})]}),n&&a.jsxs("div",{className:"pt-2 space-y-2",children:[a.jsxs("div",{className:"sidebar-section",children:[a.jsx(wC,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Active in industry panels, luxury brand collaborations, follows influencers in luxury & design"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(Ax,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Modern flat in exclusive Chelsea, accessible to boutique services"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(iR,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Uses premium digital payment & secure banking for HNWIs"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(rR,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Respected network in London's luxury sector; attends exclusive events"})]}),a.jsxs("div",{className:"sidebar-section",children:[a.jsx(fm,{className:"sidebar-icon"}),a.jsx("span",{className:"text-muted-foreground text-sm",children:"Seeks autonomy, bespoke service, and acknowledgment for taste"})]})]})]})]})]})]})}function NBe({persona:t}){var e,n,r,i,o,s,c,l,u;return a.jsxs("div",{className:"space-y-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(Ny,{className:"h-5 w-5 text-primary mr-2"}),a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Goals"})]}),a.jsx("ul",{className:"space-y-2",children:(e=t.goals)==null?void 0:e.map((d,f)=>a.jsxs("li",{className:"flex items-start",children:[a.jsx("div",{className:"h-5 w-5 rounded-full bg-primary/10 flex items-center justify-center mt-0.5 mr-3",children:a.jsx("span",{className:"text-xs text-primary font-medium",children:f+1})}),a.jsx("p",{className:"text-sm",children:d})]},f))})]})}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(IB,{className:"h-5 w-5 text-amber-500 mr-2"}),a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Frustrations"})]}),a.jsx("ul",{className:"space-y-2",children:(n=t.frustrations)==null?void 0:n.map((d,f)=>a.jsxs("li",{className:"text-sm flex items-start",children:[a.jsx("span",{className:"text-amber-500 mr-2",children:"•"}),a.jsx("span",{children:d})]},f))})]})}),a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center mb-4",children:[a.jsx(xa,{className:"h-5 w-5 text-green-500 mr-2"}),a.jsx("h3",{className:"font-sf text-lg font-medium",children:"Motivations"})]}),a.jsx("ul",{className:"space-y-2",children:(r=t.motivations)==null?void 0:r.map((d,f)=>a.jsxs("li",{className:"text-sm flex items-start",children:[a.jsx("span",{className:"text-green-500 mr-2",children:"•"}),a.jsx("span",{children:d})]},f))})]})})]}),a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:"Think, Feel, Do"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(mu,{className:"h-5 w-5 text-blue-500 mr-2"}),a.jsx("h4",{className:"font-medium text-sm",children:"Thinks"})]}),a.jsx("ul",{className:"space-y-2",children:(o=(i=t.thinkFeelDo)==null?void 0:i.thinks)==null?void 0:o.map((d,f)=>a.jsxs("li",{className:"text-sm bg-blue-50 p-2 rounded-md",children:['"',d,'"']},f))})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(MA,{className:"h-5 w-5 text-red-500 mr-2"}),a.jsx("h4",{className:"font-medium text-sm",children:"Feels"})]}),a.jsx("ul",{className:"space-y-2",children:(c=(s=t.thinkFeelDo)==null?void 0:s.feels)==null?void 0:c.map((d,f)=>a.jsxs("li",{className:"text-sm bg-red-50 p-2 rounded-md",children:['"',d,'"']},f))})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex items-center mb-3",children:[a.jsx(xa,{className:"h-5 w-5 text-green-500 mr-2"}),a.jsx("h4",{className:"font-medium text-sm",children:"Does"})]}),a.jsx("ul",{className:"space-y-2",children:(u=(l=t.thinkFeelDo)==null?void 0:l.does)==null?void 0:u.map((d,f)=>a.jsxs("li",{className:"text-sm bg-green-50 p-2 rounded-md",children:['"',d,'"']},f))})]})]})]})})]})}function TBe({persona:t}){var n,r,i,o,s;const e=[{trait:"Openness",value:((n=t.oceanTraits)==null?void 0:n.openness)||50},{trait:"Conscientiousness",value:((r=t.oceanTraits)==null?void 0:r.conscientiousness)||50},{trait:"Extraversion",value:((i=t.oceanTraits)==null?void 0:i.extraversion)||50},{trait:"Agreeableness",value:((o=t.oceanTraits)==null?void 0:o.agreeableness)||50},{trait:"Neuroticism",value:((s=t.oceanTraits)==null?void 0:s.neuroticism)||50}];return a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:"OCEAN Personality Traits"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsx("div",{className:"h-80",children:a.jsx(Qc,{width:"100%",height:"100%",children:a.jsxs(d5e,{outerRadius:90,data:e,children:[a.jsx(oq,{}),a.jsx(Sh,{dataKey:"trait"}),a.jsx(wh,{domain:[0,100]}),a.jsx(uv,{name:"Personality",dataKey:"value",stroke:"#8884d8",fill:"#8884d8",fillOpacity:.5})]})})}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Openness to Experience"}),a.jsxs("span",{className:"font-medium",children:[e[0].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-purple-500 rounded-full",style:{width:`${e[0].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[0].value>75?"Highly creative and curious":e[0].value>50?"Somewhat imaginative and open to new ideas":"Practical and prefers routine"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Conscientiousness"}),a.jsxs("span",{className:"font-medium",children:[e[1].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-blue-500 rounded-full",style:{width:`${e[1].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[1].value>75?"Highly organized and responsible":e[1].value>50?"Generally reliable and hardworking":"Spontaneous and flexible"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Extraversion"}),a.jsxs("span",{className:"font-medium",children:[e[2].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-green-500 rounded-full",style:{width:`${e[2].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[2].value>75?"Highly sociable and outgoing":e[2].value>50?"Moderately social and talkative":"Reserved and reflective"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Agreeableness"}),a.jsxs("span",{className:"font-medium",children:[e[3].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-amber-500 rounded-full",style:{width:`${e[3].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[3].value>75?"Highly cooperative and compassionate":e[3].value>50?"Generally kind and helpful":"Competitive and challenging"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between text-sm mb-1",children:[a.jsx("span",{children:"Neuroticism"}),a.jsxs("span",{className:"font-medium",children:[e[4].value,"%"]})]}),a.jsx("div",{className:"h-2 bg-slate-100 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full bg-red-500 rounded-full",style:{width:`${e[4].value}%`}})}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:e[4].value>75?"Highly sensitive and prone to stress":e[4].value>50?"Moderately reactive to challenges":"Emotionally stable and resilient"})]})]})]})]})})}function kBe({persona:t}){var r;const e=(i,o)=>{const s=[a.jsx(Wee,{className:"sidebar-icon"},"grid"),a.jsx(nte,{className:"sidebar-icon"},"smartphone"),a.jsx(Kee,{className:"sidebar-icon"},"laptop"),a.jsx(Hee,{className:"sidebar-icon"},"grid2x2")];return s[o%s.length]},n=()=>t.scenarioType?t.scenarioType:"Life Scenarios";return a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-sf text-lg font-medium mb-4",children:n()}),a.jsx("div",{className:"space-y-4",children:(r=t.scenarios)==null?void 0:r.map((i,o)=>a.jsx("div",{className:"bg-slate-50 p-4 rounded-lg border",children:a.jsxs("div",{className:"sidebar-section",children:[e(i,o),a.jsxs("div",{children:[a.jsxs("h4",{className:"font-medium text-sm mb-2",children:["Scenario ",o+1]}),a.jsx("p",{className:"text-sm",children:i})]})]})},o))})]})})}function PBe(){const t=ur();return a.jsx("div",{className:"min-h-screen bg-slate-50 flex items-center justify-center",children:a.jsxs(pt,{className:"w-96 text-center p-6",children:[a.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Persona Not Found"}),a.jsx("p",{className:"text-muted-foreground mb-6",children:"The persona you're looking for couldn't be found."}),a.jsx(se,{onClick:()=>t("/synthetic-users"),children:"Return to Personas"})]})})}function Gt({className:t,...e}){return a.jsx("div",{className:Le("animate-pulse rounded-md bg-muted",t),...e})}function OBe(){return a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(ka,{}),a.jsxs("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:[a.jsxs("div",{className:"flex items-center mb-6 relative",children:[a.jsx(Gt,{className:"absolute left-0 top-0 h-10 w-20"}),a.jsx(Gt,{className:"h-8 w-48 mx-auto"}),a.jsx(Gt,{className:"absolute right-0 top-0 h-10 w-32"})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 mt-10",children:[a.jsx("div",{className:"lg:col-span-1",children:a.jsxs(pt,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center space-x-4",children:[a.jsx(Gt,{className:"h-16 w-16 rounded-full"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(Gt,{className:"h-6 w-32 mb-2"}),a.jsx(Gt,{className:"h-4 w-24"})]})]}),a.jsxs("div",{className:"mt-6 space-y-4",children:[a.jsxs("div",{className:"flex items-start",children:[a.jsx(Gt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(Gt,{className:"h-4 w-20 mb-2"}),a.jsx(Gt,{className:"h-3 w-40 mb-1"}),a.jsx(Gt,{className:"h-3 w-36"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx(Gt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(Gt,{className:"h-4 w-16 mb-2"}),a.jsx(Gt,{className:"h-3 w-32"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx(Gt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(Gt,{className:"h-4 w-16 mb-2"}),a.jsx(Gt,{className:"h-3 w-full"})]})]}),a.jsxs("div",{className:"flex items-start",children:[a.jsx(Gt,{className:"h-5 w-5 mr-3 mt-0.5"}),a.jsxs("div",{className:"flex-1",children:[a.jsx(Gt,{className:"h-4 w-12 mb-2"}),a.jsx(Gt,{className:"h-3 w-full"})]})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx(Gt,{className:"h-4 w-32 mb-3"}),a.jsx("div",{className:"space-y-3",children:[...Array(4)].map((t,e)=>a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx(Gt,{className:"h-3 w-24"}),a.jsx(Gt,{className:"h-3 w-8"})]}),a.jsx(Gt,{className:"h-1.5 w-full rounded-full"})]},e))})]}),a.jsxs("div",{className:"pt-4 border-t",children:[a.jsx(Gt,{className:"h-4 w-36 mb-3"}),a.jsx("div",{className:"space-y-2",children:[...Array(3)].map((t,e)=>a.jsxs("div",{className:"flex items-center",children:[a.jsx(Gt,{className:"h-4 w-4 mr-2"}),a.jsx(Gt,{className:"h-3 w-40"})]},e))})]})]})]})}),a.jsxs("div",{className:"lg:col-span-2",children:[a.jsxs("div",{className:"grid w-full grid-cols-3 gap-2 mb-6",children:[a.jsx(Gt,{className:"h-10 w-full"}),a.jsx(Gt,{className:"h-10 w-full"}),a.jsx(Gt,{className:"h-10 w-full"})]}),a.jsx(pt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsx(Gt,{className:"h-6 w-48"}),a.jsx(Gt,{className:"h-4 w-full"}),a.jsx(Gt,{className:"h-4 w-full"}),a.jsx(Gt,{className:"h-4 w-3/4"}),a.jsxs("div",{className:"mt-8 space-y-4",children:[a.jsx(Gt,{className:"h-6 w-32"}),a.jsx(Gt,{className:"h-4 w-full"}),a.jsx(Gt,{className:"h-4 w-full"}),a.jsx(Gt,{className:"h-4 w-2/3"})]}),a.jsxs("div",{className:"mt-8 space-y-4",children:[a.jsx(Gt,{className:"h-6 w-40"}),a.jsx(Gt,{className:"h-4 w-full"}),a.jsx(Gt,{className:"h-4 w-full"}),a.jsx(Gt,{className:"h-4 w-5/6"})]})]})})]})]})]})]})}function IBe({message:t,onLoginSuccess:e,onCancel:n}){const{login:r}=ia(),i=ur(),[o,s]=g.useState("user"),[c,l]=g.useState("pass"),[u,d]=g.useState(!1),f=async()=>{if(!o||!c){ae.error("Please enter username and password");return}d(!0);try{await r(o,c),ae.success("Login successful"),e&&e()}catch(p){console.error("Login error:",p),ae.error("Login failed",{description:"Please check your credentials and try again"})}finally{d(!1)}},h=()=>{n?n():i("/synthetic-users")};return a.jsxs(pt,{className:"max-w-md mx-auto shadow-lg",children:[a.jsxs(Ei,{children:[a.jsx(Qi,{children:"Login Required"}),a.jsx(ok,{children:t||"You need to log in to save personas to the database"})]}),a.jsxs(Rt,{className:"space-y-4",children:[a.jsxs("div",{className:"space-y-2",children:[a.jsx(vo,{htmlFor:"username",children:"Username"}),a.jsx(Kt,{id:"username",placeholder:"Username",value:o,onChange:p=>s(p.target.value),disabled:u})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx(vo,{htmlFor:"password",children:"Password"}),a.jsx(Kt,{id:"password",type:"password",placeholder:"Password",value:c,onChange:p=>l(p.target.value),disabled:u})]}),a.jsx("div",{className:"text-sm text-muted-foreground",children:"Default credentials: user / pass"})]}),a.jsxs(sk,{className:"flex justify-between",children:[a.jsx(se,{variant:"outline",onClick:h,disabled:u,children:"Cancel"}),a.jsx(se,{onClick:f,disabled:u,children:u?a.jsxs(a.Fragment,{children:[a.jsx(No,{className:"h-4 w-4 mr-2 animate-spin"}),"Logging in..."]}):"Login"})]})]})}function RBe({persona:t,onSave:e,onCancel:n}){var j,N,k,O,E,R,D,G,L,z,M,$,Q,q,te,xe;const r={...t,education:t.education||"",interests:t.interests||"",brandLoyalty:t.brandLoyalty||0,priceConsciousness:t.priceConsciousness||0,environmentalConcern:t.environmentalConcern||0,hasPurchasingPower:t.hasPurchasingPower||!1,hasChildren:t.hasChildren||!1,goals:t.goals||[],frustrations:t.frustrations||[],motivations:t.motivations||[],scenarios:t.scenarios||[],oceanTraits:t.oceanTraits||{openness:50,conscientiousness:50,extraversion:50,agreeableness:50,neuroticism:50},thinkFeelDo:t.thinkFeelDo||{thinks:[],feels:[],does:[]}},[i,o]=g.useState(r),[s,c]=g.useState(!1),[l,u]=g.useState(!1),[d,f]=g.useState(null);g.useState(!1);const{isAuthenticated:h,token:p}=ia();g.useEffect(()=>{(async()=>{l&&h&&p&&(u(!1),d&&await A())})()},[h,p,l]);const v=(B,ce)=>{o(fe=>({...fe,[B]:ce}))},m=(B,ce)=>{o(fe=>({...fe,oceanTraits:{...fe.oceanTraits,[B]:ce}}))},y=B=>{o(ce=>({...ce,[B]:[...ce[B]||[],""]}))},b=(B,ce,fe)=>{o(U=>{const ue=[...U[B]||[]];return ue[ce]=fe,{...U,[B]:ue}})},x=(B,ce)=>{o(fe=>{const U=[...fe[B]||[]];return U.splice(ce,1),{...fe,[B]:U}})},w=(B,ce,fe)=>{o(U=>{const ue={...U.thinkFeelDo},oe=[...ue[B]||[]];return oe[ce]=fe,ue[B]=oe,{...U,thinkFeelDo:ue}})},S=B=>{o(ce=>{var U;const fe={...ce.thinkFeelDo,[B]:[...((U=ce.thinkFeelDo)==null?void 0:U[B])||[],""]};return{...ce,thinkFeelDo:fe}})},C=(B,ce)=>{o(fe=>{const U={...fe.thinkFeelDo},ue=[...U[B]||[]];return ue.splice(ce,1),U[B]=ue,{...fe,thinkFeelDo:U}})},_=()=>{d&&(ae.error("Login canceled - Persona changes not saved"),u(!1),f(null),n())},A=async()=>{if(d){c(!0);try{const B={...d};delete B._id,delete B.isDbPersona;const ce=await $r.create(B),fe={...d,id:ce.data._id||ce.data.id,_id:ce.data._id||ce.data.id,isDbPersona:!0};ae.success("Persona saved to database successfully"),u(!1),f(null),e(fe)}catch(B){console.error("Error saving after login:",B),ae.error("Failed to save to database after login"),u(!1),f(null)}finally{c(!1)}}};return l?a.jsxs("div",{className:"max-w-5xl mx-auto bg-background p-6",children:[a.jsx("div",{className:"flex justify-between items-center mb-6",children:a.jsx("h2",{className:"font-sf text-2xl font-bold",children:"Authentication Required"})}),a.jsx("p",{className:"mb-6 text-muted-foreground",children:"Login is required to save personas to the database. You can either:"}),a.jsxs("ul",{className:"list-disc ml-6 mt-2 mb-6",children:[a.jsx("li",{children:"Log in to save this persona to the database"}),a.jsx("li",{children:"Cancel to discard your changes"})]}),a.jsx(IBe,{message:"Login is required to save your persona to the database",onLoginSuccess:A,onCancel:_})]}):a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsxs("div",{className:"flex items-center",children:[a.jsx(se,{variant:"ghost",onClick:n,className:"mr-2",children:a.jsx(um,{className:"h-5 w-5"})}),a.jsx("h2",{className:"font-sf text-2xl font-bold",children:"Edit Persona"})]}),a.jsxs(se,{onClick:async()=>{c(!0);try{const B=i._id||i.id,ce={...i};ce._id&&delete ce._id,delete ce.isDbPersona;let fe;if(B&&typeof B=="string"&&B.startsWith("local-")){console.log("Creating new persona instead of updating local ID"),fe=await $r.create(ce),ae.success("Persona saved to database");const U={...i,id:fe.data._id||fe.data.id,_id:fe.data._id||fe.data.id,isDbPersona:!0};e(U)}else if(B){fe=await $r.update(B,ce),ae.success("Persona updated successfully");const U={...i,isDbPersona:!0};e(U)}else{fe=await $r.create(ce);const U={...i,id:fe.data._id||fe.data.id,_id:fe.data._id||fe.data.id,isDbPersona:!0};ae.success("Persona created successfully"),e(U)}}catch(B){console.error("Error saving persona:",B),B.response&&B.response.status===401?h&&p?(console.log("Auth error despite having token - token likely invalid"),ae.error("Authentication error - saving locally instead"),e(i)):(f(i),u(!0)):(ae.error("Failed to save persona"),e(i))}finally{c(!1)}},disabled:s,children:[s?a.jsx(No,{className:"h-4 w-4 mr-2 animate-spin"}):a.jsx(MN,{className:"h-4 w-4 mr-2"}),s?"Saving...":"Save Changes"]})]}),a.jsxs(wl,{defaultValue:"basic",children:[a.jsxs(Za,{className:"grid w-full grid-cols-6",children:[a.jsx(vn,{value:"basic",children:"Basic"}),a.jsx(vn,{value:"cooper",children:"Cooper"}),a.jsx(vn,{value:"personality",children:"Personality"}),a.jsx(vn,{value:"demographics",children:"Demographics"}),a.jsx(vn,{value:"lifestyle",children:"Lifestyle"}),a.jsx(vn,{value:"extended",children:"Extended"})]}),a.jsx(yn,{value:"basic",className:"mt-6",children:a.jsx(pt,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Name"}),a.jsx(Kt,{value:i.name||"",onChange:B=>v("name",B.target.value)})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Age Range"}),a.jsxs(Hn,{value:i.age||"",onValueChange:B=>v("age",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select age range"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"18-24",children:"18-24"}),a.jsx(he,{value:"25-34",children:"25-34"}),a.jsx(he,{value:"35-44",children:"35-44"}),a.jsx(he,{value:"45-54",children:"45-54"}),a.jsx(he,{value:"55-64",children:"55-64"}),a.jsx(he,{value:"65+",children:"65+"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Gender"}),a.jsxs(Hn,{value:i.gender||"",onValueChange:B=>v("gender",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select gender"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Male",children:"Male"}),a.jsx(he,{value:"Female",children:"Female"}),a.jsx(he,{value:"Non-binary",children:"Non-binary"}),a.jsx(he,{value:"Other",children:"Other"})]})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Occupation"}),a.jsx(Kt,{value:i.occupation||"",onChange:B=>v("occupation",B.target.value)})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Education"}),a.jsxs(Hn,{value:i.education||"",onValueChange:B=>v("education",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select education level"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"High School",children:"High School"}),a.jsx(he,{value:"Some College",children:"Some College"}),a.jsx(he,{value:"Associate's Degree",children:"Associate's Degree"}),a.jsx(he,{value:"Bachelor's Degree",children:"Bachelor's Degree"}),a.jsx(he,{value:"Master's Degree",children:"Master's Degree"}),a.jsx(he,{value:"PhD",children:"PhD"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Location"}),a.jsx(Kt,{value:i.location||"",onChange:B=>v("location",B.target.value)})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Ethnicity (Optional)"}),a.jsxs(Hn,{value:i.ethnicity||"",onValueChange:B=>v("ethnicity",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select ethnicity"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"white",children:"White"}),a.jsx(he,{value:"black",children:"Black"}),a.jsx(he,{value:"asian",children:"Asian"}),a.jsx(he,{value:"hispanic",children:"Hispanic/Latino"}),a.jsx(he,{value:"native-american",children:"Native American"}),a.jsx(he,{value:"middle-eastern",children:"Middle Eastern"}),a.jsx(he,{value:"mixed",children:"Mixed"}),a.jsx(he,{value:"other",children:"Other"}),a.jsx(he,{value:"prefer-not-to-say",children:"Prefer not to say"})]})]})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Personality"}),a.jsx(vt,{value:i.personality||"",onChange:B=>v("personality",B.target.value),rows:3})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Interests"}),a.jsx(vt,{value:i.interests||"",onChange:B=>v("interests",B.target.value),rows:3,placeholder:"Tech, travel, cooking, etc."})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Tech Savviness"}),a.jsxs("span",{className:"text-sm",children:[i.techSavviness,"%"]})]}),a.jsx(Sr,{value:[i.techSavviness],onValueChange:B=>v("techSavviness",B[0]),max:100,step:1})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Brand Loyalty"}),a.jsxs("span",{className:"text-sm",children:[i.brandLoyalty||0,"%"]})]}),a.jsx(Sr,{value:[i.brandLoyalty||0],onValueChange:B=>v("brandLoyalty",B[0]),max:100,step:1})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Price Consciousness"}),a.jsxs("span",{className:"text-sm",children:[i.priceConsciousness||0,"%"]})]}),a.jsx(Sr,{value:[i.priceConsciousness||0],onValueChange:B=>v("priceConsciousness",B[0]),max:100,step:1})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Environmental Concern"}),a.jsxs("span",{className:"text-sm",children:[i.environmentalConcern||0,"%"]})]}),a.jsx(Sr,{value:[i.environmentalConcern||0],onValueChange:B=>v("environmentalConcern",B[0]),max:100,step:1})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-4 pt-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("label",{className:"text-sm font-medium",children:"Purchasing Power"}),a.jsx(Dm,{checked:i.hasPurchasingPower||!1,onCheckedChange:B=>v("hasPurchasingPower",B)})]}),a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("label",{className:"text-sm font-medium",children:"Has Children"}),a.jsx(Dm,{checked:i.hasChildren||!1,onCheckedChange:B=>v("hasChildren",B)})]})]})]})]})})})}),a.jsxs(yn,{value:"cooper",className:"mt-6 space-y-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsxs("div",{className:"mb-4",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Goals"}),(i.goals||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B||"",onChange:fe=>b("goals",ce,fe.target.value)}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>x("goals",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>y("goals"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Goal"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Frustrations"}),(i.frustrations||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B||"",onChange:fe=>b("frustrations",ce,fe.target.value)}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>x("frustrations",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>y("frustrations"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Frustration"]})]}),a.jsxs("div",{className:"mb-4 pt-4 border-t",children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Motivations"}),(i.motivations||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B||"",onChange:fe=>b("motivations",ce,fe.target.value)}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>x("motivations",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>y("motivations"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Motivation"]})]})]})}),a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Think, Feel, Do"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Thinks"}),(((j=i.thinkFeelDo)==null?void 0:j.thinks)||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B||"",onChange:fe=>w("thinks",ce,fe.target.value)}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>C("thinks",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>S("thinks"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Thought"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Feels"}),(((N=i.thinkFeelDo)==null?void 0:N.feels)||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B||"",onChange:fe=>w("feels",ce,fe.target.value)}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>C("feels",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>S("feels"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Feeling"]})]}),a.jsxs("div",{children:[a.jsx("h4",{className:"font-medium text-sm mb-3",children:"Does"}),(((k=i.thinkFeelDo)==null?void 0:k.does)||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B||"",onChange:fe=>w("does",ce,fe.target.value)}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>C("does",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>S("does"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Action"]})]})]})]})}),a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("div",{className:"space-y-4 mb-6",children:a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Scenario Section Title"}),a.jsx(Kt,{value:i.scenarioType||"",onChange:B=>v("scenarioType",B.target.value),placeholder:"Life Scenarios"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:'Custom title for the scenarios section (e.g., "Customer Journey", "Use Cases")'})]})}),a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Usage Scenarios"}),(i.scenarios||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-start gap-2 mb-2",children:[a.jsx(vt,{value:B||"",onChange:fe=>b("scenarios",ce,fe.target.value),rows:2}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>x("scenarios",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>y("scenarios"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Scenario"]})]})})]}),a.jsx(yn,{value:"personality",className:"mt-6",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"OCEAN Personality Traits"}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Openness to Experience"}),a.jsxs("span",{className:"text-sm",children:[((O=i.oceanTraits)==null?void 0:O.openness)||50,"%"]})]}),a.jsx(Sr,{value:[((E=i.oceanTraits)==null?void 0:E.openness)||50],onValueChange:B=>m("openness",B[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Creativity, curiosity, and openness to new ideas"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Conscientiousness"}),a.jsxs("span",{className:"text-sm",children:[((R=i.oceanTraits)==null?void 0:R.conscientiousness)||50,"%"]})]}),a.jsx(Sr,{value:[((D=i.oceanTraits)==null?void 0:D.conscientiousness)||50],onValueChange:B=>m("conscientiousness",B[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Organization, responsibility, and self-discipline"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Extraversion"}),a.jsxs("span",{className:"text-sm",children:[((G=i.oceanTraits)==null?void 0:G.extraversion)||50,"%"]})]}),a.jsx(Sr,{value:[((L=i.oceanTraits)==null?void 0:L.extraversion)||50],onValueChange:B=>m("extraversion",B[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Sociability, assertiveness, and talkativeness"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Agreeableness"}),a.jsxs("span",{className:"text-sm",children:[((z=i.oceanTraits)==null?void 0:z.agreeableness)||50,"%"]})]}),a.jsx(Sr,{value:[((M=i.oceanTraits)==null?void 0:M.agreeableness)||50],onValueChange:B=>m("agreeableness",B[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Compassion, cooperation, and concern for others"})]}),a.jsxs("div",{children:[a.jsxs("div",{className:"flex justify-between mb-1",children:[a.jsx("label",{className:"text-sm font-medium",children:"Neuroticism"}),a.jsxs("span",{className:"text-sm",children:[(($=i.oceanTraits)==null?void 0:$.neuroticism)||50,"%"]})]}),a.jsx(Sr,{value:[((Q=i.oceanTraits)==null?void 0:Q.neuroticism)||50],onValueChange:B=>m("neuroticism",B[0]),max:100,step:1}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Emotional reactivity, anxiety, and sensitivity to stress"})]})]})]})})}),a.jsx(yn,{value:"demographics",className:"mt-6",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Demographic Information"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Social Grade"}),a.jsxs(Hn,{value:i.socialGrade||"",onValueChange:B=>v("socialGrade",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select social grade"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"A",children:"A - Higher managerial"}),a.jsx(he,{value:"B",children:"B - Intermediate managerial"}),a.jsx(he,{value:"C1",children:"C1 - Supervisory or clerical"}),a.jsx(he,{value:"C2",children:"C2 - Skilled manual workers"}),a.jsx(he,{value:"D",children:"D - Semi and unskilled manual workers"}),a.jsx(he,{value:"E",children:"E - State pensioners, unemployed"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Household Income"}),a.jsxs(Hn,{value:i.householdIncome||"",onValueChange:B=>v("householdIncome",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select income range"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Under $25k",children:"Under $25,000"}),a.jsx(he,{value:"$25k-$50k",children:"$25,000 - $50,000"}),a.jsx(he,{value:"$50k-$75k",children:"$50,000 - $75,000"}),a.jsx(he,{value:"$75k-$100k",children:"$75,000 - $100,000"}),a.jsx(he,{value:"$100k-$150k",children:"$100,000 - $150,000"}),a.jsx(he,{value:"$150k-$250k",children:"$150,000 - $250,000"}),a.jsx(he,{value:"Over $250k",children:"Over $250,000"}),a.jsx(he,{value:"Prefer not to say",children:"Prefer not to say"})]})]})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Household Composition"}),a.jsxs(Hn,{value:i.householdComposition||"",onValueChange:B=>v("householdComposition",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select household type"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Single person",children:"Single person"}),a.jsx(he,{value:"Couple without children",children:"Couple without children"}),a.jsx(he,{value:"Couple with children",children:"Couple with children"}),a.jsx(he,{value:"Single parent",children:"Single parent"}),a.jsx(he,{value:"Multi-generational",children:"Multi-generational"}),a.jsx(he,{value:"Shared housing",children:"Shared housing"}),a.jsx(he,{value:"Other",children:"Other"})]})]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Living Situation"}),a.jsxs(Hn,{value:i.livingSituation||"",onValueChange:B=>v("livingSituation",B),children:[a.jsx(Fn,{children:a.jsx(Gn,{placeholder:"Select living situation"})}),a.jsxs(Bn,{children:[a.jsx(he,{value:"Own home",children:"Own home"}),a.jsx(he,{value:"Rent apartment",children:"Rent apartment"}),a.jsx(he,{value:"Rent house",children:"Rent house"}),a.jsx(he,{value:"Live with family",children:"Live with family"}),a.jsx(he,{value:"Student housing",children:"Student housing"}),a.jsx(he,{value:"Assisted living",children:"Assisted living"}),a.jsx(he,{value:"Other",children:"Other"})]})]})]})]})]})]})})}),a.jsx(yn,{value:"lifestyle",className:"mt-6",children:a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Lifestyle & Behavior"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Media Consumption"}),a.jsx(vt,{value:i.mediaConsumption||"",onChange:B=>v("mediaConsumption",B.target.value),rows:3,placeholder:"TV shows, podcasts, news sources, social media platforms"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Describe media consumption habits and preferences"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Device Usage"}),a.jsx(vt,{value:i.deviceUsage||"",onChange:B=>v("deviceUsage",B.target.value),rows:3,placeholder:"Smartphone, laptop, tablet, smart TV, gaming console"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Primary devices and usage patterns"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Shopping Habits"}),a.jsx(vt,{value:i.shoppingHabits||"",onChange:B=>v("shoppingHabits",B.target.value),rows:3,placeholder:"Online vs in-store, frequency, preferred retailers"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Shopping behavior and preferences"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Brand Preferences"}),a.jsx(vt,{value:i.brandPreferences||"",onChange:B=>v("brandPreferences",B.target.value),rows:3,placeholder:"Favorite brands, brand values alignment"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Preferred brands and reasoning"})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Communication Preferences"}),a.jsx(vt,{value:i.communicationPreferences||"",onChange:B=>v("communicationPreferences",B.target.value),rows:3,placeholder:"Email, phone, text, video calls, in-person"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Preferred communication methods and channels"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Payment Methods"}),a.jsx(vt,{value:i.paymentMethods||"",onChange:B=>v("paymentMethods",B.target.value),rows:3,placeholder:"Credit cards, digital wallets, cash, BNPL"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Preferred payment methods and financial tools"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Purchase Behavior"}),a.jsx(vt,{value:i.purchaseBehaviour||"",onChange:B=>v("purchaseBehaviour",B.target.value),rows:3,placeholder:"Research habits, decision factors, impulse vs planned buying"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"How they approach making purchase decisions"})]})]})]})]})})}),a.jsxs(yn,{value:"extended",className:"mt-6 space-y-6",children:[a.jsx(pt,{children:a.jsxs(Rt,{className:"p-6",children:[a.jsx("h3",{className:"font-medium text-lg mb-4",children:"Extended Profile"}),a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Core Values"}),a.jsx(vt,{value:i.coreValues||"",onChange:B=>v("coreValues",B.target.value),rows:3,placeholder:"Key principles and values that guide decisions"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Lifestyle Choices"}),a.jsx(vt,{value:i.lifestyleChoices||"",onChange:B=>v("lifestyleChoices",B.target.value),rows:3,placeholder:"Health, fitness, diet, work-life balance preferences"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Social Activities"}),a.jsx(vt,{value:i.socialActivities||"",onChange:B=>v("socialActivities",B.target.value),rows:3,placeholder:"Social hobbies, community involvement, networking"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Category Knowledge"}),a.jsx(vt,{value:i.categoryKnowledge||"",onChange:B=>v("categoryKnowledge",B.target.value),rows:3,placeholder:"Expertise in specific product/service categories"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Decision Influences"}),a.jsx(vt,{value:i.decisionInfluences||"",onChange:B=>v("decisionInfluences",B.target.value),rows:3,placeholder:"What factors most influence their decisions"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Pain Points"}),a.jsx(vt,{value:i.painPoints||"",onChange:B=>v("painPoints",B.target.value),rows:3,placeholder:"Common challenges and friction points"})]})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Journey Context"}),a.jsx(vt,{value:i.journeyContext||"",onChange:B=>v("journeyContext",B.target.value),rows:3,placeholder:"Current life stage and contextual factors"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Key Touchpoints"}),a.jsx(vt,{value:i.keyTouchpoints||"",onChange:B=>v("keyTouchpoints",B.target.value),rows:3,placeholder:"Important interaction points and channels"})]}),a.jsxs("div",{className:"space-y-4",children:[a.jsx("h4",{className:"font-medium text-sm",children:"Self-Determination Needs"}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Autonomy"}),a.jsx(vt,{value:((q=i.selfDeterminationNeeds)==null?void 0:q.autonomy)||"",onChange:B=>v("selfDeterminationNeeds",{...i.selfDeterminationNeeds,autonomy:B.target.value}),rows:2,placeholder:"Need for independence and self-direction"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Competence"}),a.jsx(vt,{value:((te=i.selfDeterminationNeeds)==null?void 0:te.competence)||"",onChange:B=>v("selfDeterminationNeeds",{...i.selfDeterminationNeeds,competence:B.target.value}),rows:2,placeholder:"Need to feel capable and effective"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Relatedness"}),a.jsx(vt,{value:((xe=i.selfDeterminationNeeds)==null?void 0:xe.relatedness)||"",onChange:B=>v("selfDeterminationNeeds",{...i.selfDeterminationNeeds,relatedness:B.target.value}),rows:2,placeholder:"Need for connection and belonging"})]})]})]})]})]})}),a.jsx(pt,{children:a.jsx(Rt,{className:"p-6",children:a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("h3",{className:"font-medium text-lg mb-3",children:"Fears & Concerns"}),(i.fears||[]).map((B,ce)=>a.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[a.jsx(Kt,{value:B,onChange:fe=>b("fears",ce,fe.target.value),placeholder:"Enter a fear or concern"}),a.jsx(se,{variant:"ghost",size:"icon",onClick:()=>x("fears",ce),children:a.jsx(Qn,{className:"h-4 w-4 text-muted-foreground"})})]},ce)),a.jsxs(se,{variant:"outline",size:"sm",onClick:()=>y("fears"),className:"mt-2",children:[a.jsx(Gr,{className:"h-4 w-4 mr-2"}),"Add Fear/Concern"]})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Personal Narrative"}),a.jsx(vt,{value:i.narrative||"",onChange:B=>v("narrative",B.target.value),rows:4,placeholder:"Personal story, background, key life experiences"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"A brief narrative that captures their personal story"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"text-sm font-medium block mb-1",children:"Additional Information"}),a.jsx(vt,{value:i.additionalInformation||"",onChange:B=>v("additionalInformation",B.target.value),rows:4,placeholder:"Any other relevant details or context"}),a.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Additional context or details not covered elsewhere"})]})]})})})]})]})]})}function MBe(){const{id:t}=PN(),e=Ui(),n=ur(),{navigationState:r,clearNavigationState:i}=Ug(),[o,s]=g.useState(void 0),[c,l]=g.useState(!1),[u,d]=g.useState(!1),[f,h]=g.useState(!0);return g.useEffect(()=>{if(!t){h(!1);return}let m=!0;const b=new URLSearchParams(e.search).get("fromReview")==="true";return l(b),h(!0),(async()=>{try{const w=t.startsWith("local-")?t.substring(6):t,S=await $r.getById(w);if(S&&S.data){const C=S.data;if(m){console.log("Found persona in database:",C),s({...C,id:C.id||C._id,isDbPersona:!0}),h(!1);return}}console.error("Could not find persona with id:",t),m&&(s(void 0),h(!1),ae.error("Persona not found"))}catch(w){console.error("Error fetching persona:",w),m&&(s(void 0),h(!1),ae.error("Failed to load persona details"))}})(),()=>{m=!1}},[t,e.search]),{currentPersona:o,isEditing:u,isFromReview:c,isLoading:f,setIsEditing:d,handleGoBack:()=>{r.previousRoute&&r.previousRoute.startsWith("/focus-groups/")&&r.focusGroupId?(n(`/focus-groups/${r.focusGroupId}`),i()):r.previousRoute==="/focus-groups"&&r.focusGroupTab?(r.isNewFocusGroup?n(`/focus-groups?mode=create&tab=${r.focusGroupTab}`):r.focusGroupId?n(`/focus-groups?mode=edit&id=${r.focusGroupId}&tab=${r.focusGroupTab}`):n("/focus-groups?mode=create&tab=participants"),i()):n(c?"/synthetic-users?mode=create&tab=ai&step=review":"/synthetic-users")},handleSaveEdit:async m=>{try{d(!1);const y=m.isDbPersona||t&&t.length===24&&/^[0-9a-f]{24}$/i.test(t),b={...m};if(b._id&&delete b._id,delete b.isDbPersona,y&&t&&t.length===24&&/^[0-9a-f]{24}$/i.test(t)){const x=await $r.update(t,b);console.log("Updated persona in database:",x);const w={...m,isDbPersona:!0};s(w),ae.success("Persona updated in database successfully")}else{const x=await $r.create(b);console.log("Created new persona in database:",x.data);const w={...m,id:x.data._id||x.data.id,_id:x.data._id||x.data.id,isDbPersona:!0};s(w),ae.success("Persona saved to database successfully")}}catch(y){return console.error("Error saving persona:",y),y.response&&y.response.status===401?ae.error("Authentication error - Please log in to save personas"):y.response&&y.response.status===404?ae.error("API endpoint not found - Database service may be unavailable"):ae.error("Failed to save persona to database: "+(y.message||"Unknown error")),!1}return!0}}}function sF(){var v;const{currentPersona:t,isEditing:e,isFromReview:n,isLoading:r,setIsEditing:i,handleGoBack:o,handleSaveEdit:s}=MBe(),{navigationState:c}=Ug(),[l,u]=g.useState(""),[d,f]=g.useState(!1);g.useEffect(()=>{var m;c.focusGroupId&&((m=c.previousRoute)!=null&&m.startsWith("/focus-groups/"))&&(async()=>{var b;try{const x=await gt.getById(c.focusGroupId);(b=x==null?void 0:x.data)!=null&&b.name&&u(x.data.name)}catch(x){console.error("Error fetching focus group name:",x)}})()},[c.focusGroupId,c.previousRoute]);const h=((v=c.previousRoute)==null?void 0:v.startsWith("/focus-groups/"))&&c.focusGroupId&&Object.keys(c).length>0,p=async()=>{var m;if(t){f(!0);try{Ye.info("Generating persona profile...",{description:"Using GPT-4.1 to create a beautifully formatted markdown profile"});const y=t._id||t.id;console.log(`🔽 Frontend: Exporting profile for persona ${t.name} (ID: ${y})`);const b=await $r.exportProfile(y,{llm_model:"gpt-4.1",temperature:.3}),{markdown_content:x,persona_name:w,model_used:S,warning:C}=b.data;if(x){const _=new Date().toISOString().split("T")[0],j=`${w.replace(/[^a-zA-Z0-9\-\s]/g,"").replace(/\s+/g,"-").toLowerCase()}-profile-${_}.md`,N=document.createElement("a"),k=new Blob([x],{type:"text/markdown"});if(N.href=URL.createObjectURL(k),N.download=j,document.body.appendChild(N),N.click(),document.body.removeChild(N),C)Ye.success("Profile downloaded with fallback formatting",{description:`${w} profile saved as ${j}`});else{const O=S==="gpt-4.1"?"GPT-4.1":S;Ye.success("Profile downloaded successfully",{description:`${w} profile processed with ${O} and saved as ${j}`})}}else throw new Error("No markdown content received")}catch(y){console.error("Error exporting persona profile:",y),y.response?Ye.error("Failed to export profile",{description:((m=y.response.data)==null?void 0:m.error)||"Server error occurred"}):y.request?Ye.error("Network error",{description:"Unable to connect to the server"}):Ye.error("Export failed",{description:y.message||"An unexpected error occurred"})}finally{f(!1)}}};return r?a.jsx(OBe,{}):t?a.jsxs("div",{className:"min-h-screen bg-slate-50",children:[a.jsx(ka,{}),a.jsx("main",{className:"pt-20 pb-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto",children:e?a.jsx(RBe,{persona:t,onSave:s,onCancel:()=>i(!1)}):a.jsxs(a.Fragment,{children:[h&&a.jsx("div",{className:"mb-4",children:a.jsx(E7,{children:a.jsxs(N7,{children:[a.jsx(Wy,{children:a.jsxs(pE,{href:"/focus-groups",className:"flex items-center",children:[a.jsx(Ax,{className:"h-4 w-4 mr-1"}),"Focus Groups"]})}),a.jsx(mE,{}),a.jsx(Wy,{children:a.jsxs(pE,{href:`/focus-groups/${c.focusGroupId}`,className:"flex items-center",children:[a.jsx(Fr,{className:"h-4 w-4 mr-1"}),l||"Focus Group Session"]})}),a.jsx(mE,{}),a.jsx(Wy,{children:a.jsxs(T7,{className:"flex items-center",children:[a.jsx(fm,{className:"h-4 w-4 mr-1"}),(t==null?void 0:t.name)||"Participant"]})})]})})}),a.jsxs("div",{className:"flex items-center mb-6 relative",children:[a.jsx(se,{variant:"ghost",onClick:o,className:"absolute left-0 top-0 flex items-center",children:a.jsx(um,{className:"h-5 w-5"})}),a.jsx("h1",{className:"font-sf text-3xl font-bold text-slate-900 mx-auto",children:"Persona Profile"}),a.jsxs("div",{className:"absolute right-0 top-0 flex items-center gap-3",children:[a.jsxs(se,{variant:"outline",onClick:p,disabled:d,className:"hover-transition",children:[a.jsx(ol,{className:"h-4 w-4 mr-2"}),d?"Generating...":"Download Profile"]}),a.jsxs(se,{onClick:()=>i(!0),children:[a.jsx(ite,{className:"h-4 w-4 mr-2"}),"Edit Persona"]})]})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 mt-10",children:[a.jsx("div",{className:"lg:col-span-1",children:a.jsx(EBe,{persona:t})}),a.jsx("div",{className:"lg:col-span-2",children:a.jsxs(wl,{defaultValue:"cooper-profile",children:[a.jsxs(Za,{className:"grid w-full grid-cols-3",children:[a.jsx(vn,{value:"cooper-profile",children:"Cooper Profile"}),a.jsx(vn,{value:"personality",children:"Personality"}),a.jsx(vn,{value:"scenarios",children:"Scenarios"})]}),a.jsx(yn,{value:"cooper-profile",className:"mt-6",children:a.jsx(NBe,{persona:t})}),a.jsx(yn,{value:"personality",className:"mt-6",children:a.jsx(TBe,{persona:t})}),a.jsx(yn,{value:"scenarios",className:"mt-6",children:a.jsx(kBe,{persona:t})})]})})]})]})})]}):a.jsx(PBe,{})}const DBe=Ue.object({username:Ue.string().min(3,"Username must be at least 3 characters"),password:Ue.string().min(4,"Password must be at least 4 characters")});function $Be(){var h;const t=ur(),e=Ui(),{login:n,loginWithMicrosoft:r,isAuthenticated:i,isMsalLoading:o}=ia(),[s,c]=g.useState(!1),l=((h=e.state)==null?void 0:h.from)||"/";console.log("Login page - destination path:",l),g.useEffect(()=>{i&&(console.log("User already authenticated, redirecting from login page"),t("/",{replace:!0}))},[i,t]);const u=Nw({resolver:Tw(DBe),defaultValues:{username:"",password:""}});async function d(p){c(!0);try{await n(p.username,p.password)?(console.log("Login successful, received token, navigating to:",l),t(l,{replace:!0})):(console.error("Login succeeded but no token received"),c(!1))}catch(v){console.error("Login error in form handler:",v),c(!1)}}async function f(){try{await r(),console.log("Microsoft login successful, navigating to:",l),t(l,{replace:!0})}catch(p){console.error("Microsoft login error in form handler:",p)}}return a.jsx("div",{className:"flex min-h-screen items-center justify-center bg-gradient-to-br from-gray-100 to-gray-200 dark:from-gray-900 dark:to-gray-800 px-4",children:a.jsxs(pt,{className:"w-full max-w-md",children:[a.jsxs(Ei,{className:"space-y-1",children:[a.jsx(Qi,{className:"text-2xl font-bold text-center",children:"Sign In"}),a.jsx(ok,{className:"text-center",children:"Enter your credentials to access your account"})]}),a.jsxs(Rt,{children:[a.jsx("div",{className:"mb-6",children:a.jsx(se,{type:"button",variant:"outline",className:"w-full bg-[#0078d4] hover:bg-[#106ebe] text-white border-[#0078d4] hover:border-[#106ebe]",onClick:f,disabled:s||o,children:o?a.jsxs(a.Fragment,{children:[a.jsx(No,{className:"mr-2 h-4 w-4 animate-spin"}),"Signing in with Microsoft..."]}):a.jsxs(a.Fragment,{children:[a.jsxs("svg",{className:"mr-2 h-4 w-4",viewBox:"0 0 21 21",fill:"currentColor",children:[a.jsx("path",{d:"M10 0H0v10h10V0z"}),a.jsx("path",{d:"M21 0H11v10h10V0z"}),a.jsx("path",{d:"M10 11H0v10h10V11z"}),a.jsx("path",{d:"M21 11H11v10h10V11z"})]}),"Sign in with Microsoft"]})})}),a.jsxs("div",{className:"relative mb-6",children:[a.jsx("div",{className:"absolute inset-0 flex items-center",children:a.jsx("div",{className:"w-full border-t border-gray-200"})}),a.jsx("div",{className:"relative flex justify-center text-sm",children:a.jsx("span",{className:"bg-white px-2 text-gray-500 dark:bg-gray-800 dark:text-gray-400",children:"Or continue with username"})})]}),a.jsx(Pw,{...u,children:a.jsxs("form",{onSubmit:u.handleSubmit(d),className:"space-y-4",children:[a.jsx(_t,{control:u.control,name:"username",render:({field:p})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Username"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"Enter your username",...p,disabled:s,autoComplete:"username"})}),a.jsx(St,{})]})}),a.jsx(_t,{control:u.control,name:"password",render:({field:p})=>a.jsxs(xt,{children:[a.jsx(bt,{children:"Password"}),a.jsx(wt,{children:a.jsx(Kt,{placeholder:"Enter your password",type:"password",...p,disabled:s,autoComplete:"current-password"})}),a.jsx(St,{})]})}),a.jsx(se,{type:"submit",className:"w-full",disabled:s||o,children:s?"Signing in...":"Sign In"})]})})]}),a.jsxs(sk,{className:"flex flex-col space-y-2",children:[a.jsx("div",{className:"text-sm text-center text-gray-500 mb-2",children:"Default account: user / pass"}),!s&&!o&&a.jsxs("div",{className:"flex flex-col items-center justify-center gap-2",children:[a.jsx(se,{variant:"outline",onClick:()=>t("/",{replace:!0}),className:"mt-2",children:"Return to Home"}),a.jsx(se,{variant:"link",onClick:()=>{localStorage.setItem("offline_mode","true");const p={username:"guest",email:"guest@example.com",role:"user"};localStorage.setItem("auth_token","offline-mode-token"),localStorage.setItem("user",JSON.stringify(p)),Ye.success("Offline mode activated",{description:"Using demo account with limited functionality"}),t("/",{replace:!0})},className:"text-sm text-gray-500",children:"Use offline mode"})]})]})]})})}function ed({children:t}){const{isAuthenticated:e,isLoading:n}=ia(),r=Ui();return console.log("ProtectedRoute check:",{isAuthenticated:e,isLoading:n,path:r.pathname}),n?a.jsx("div",{className:"flex items-center justify-center min-h-screen",children:a.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-primary"})}):e?(console.log("User is authenticated, showing protected content"),a.jsx(a.Fragment,{children:t})):(console.log("Not authenticated, redirecting to login"),a.jsx(TB,{to:"/login",state:{from:r.pathname},replace:!0}))}const LBe=g.createContext({});let aF=!1;function FBe({children:t}){const{token:e}=ia(),n=()=>{const i=e||localStorage.getItem("auth_token");return console.log("🔧 [GPT-5 Context] Getting token:",i?"Found":"Missing"),i||""};g.useEffect(()=>(aF||(console.log("🔧 [GPT-5 Context] Initializing singleton socket"),A7(n),aF=!0),console.log("🔧 [GPT-5 Context] Connecting socket"),j7(),()=>{}),[e]);const r={};return a.jsx(LBe.Provider,{value:r,children:t})}const k7=new WT(Hse);k7.initialize().catch(t=>{console.error("MSAL initialization error:",t)});function BBe({children:t}){return a.jsx(Use,{instance:k7,children:t})}const UBe=new jZ,zBe=()=>a.jsx(NZ,{client:UBe,children:a.jsx(_ee,{basename:"/semblance/",children:a.jsx(BBe,{children:a.jsx(Vse,{children:a.jsx(FBe,{children:a.jsx(Yse,{children:a.jsxs(rZ,{children:[a.jsx(PQ,{}),a.jsxs(gee,{children:[a.jsx(zo,{path:"/",element:a.jsx(Wse,{})}),a.jsx(zo,{path:"/login",element:a.jsx($Be,{})}),a.jsx(zo,{path:"/synthetic-users",element:a.jsx(ed,{children:a.jsx(Jfe,{})})}),a.jsx(zo,{path:"/synthetic-users/:id",element:a.jsx(ed,{children:a.jsx(sF,{})})}),a.jsx(zo,{path:"/personas/:id",element:a.jsx(ed,{children:a.jsx(sF,{})})}),a.jsx(zo,{path:"/focus-groups",element:a.jsx(ed,{children:a.jsx(Ype,{})})}),a.jsx(zo,{path:"/focus-groups/:id",element:a.jsx(ed,{children:a.jsx(gBe,{})})}),a.jsx(zo,{path:"/dashboard",element:a.jsx(ed,{children:a.jsx(jBe,{})})}),a.jsx(zo,{path:"/old-path",element:a.jsx(TB,{to:"/",replace:!0})}),a.jsx(zo,{path:"*",element:a.jsx(qse,{})})]})]})})})})})})});k5(document.getElementById("root")).render(a.jsx(zBe,{})); diff --git a/dist/assets/index-VgChhb1B.css b/dist/assets/index-VgChhb1B.css deleted file mode 100644 index b75c873a..00000000 --- a/dist/assets/index-VgChhb1B.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap";.back-button{position:absolute;top:1.25rem;left:1.25rem;z-index:10;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:9999px;background-color:#fffc;border:1px solid rgba(0,0,0,.1);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:all .15s ease}.back-button:hover{background-color:#ffffffe6;transform:translateY(-1px);box-shadow:0 2px 4px #0000000d}.back-button:active{transform:translateY(0)}.back-button-content{display:flex;align-items:center;gap:.25rem}.page-header-with-back{display:flex;align-items:center;gap:.75rem;padding-left:2.5rem;position:relative}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 350 30% 98%;--foreground: 345 30% 15%;--card: 0 0% 100%;--card-foreground: 345 30% 15%;--popover: 0 0% 100%;--popover-foreground: 345 30% 15%;--primary: 350 85% 80%;--primary-foreground: 350 30% 20%;--secondary: 350 30% 96.1%;--secondary-foreground: 345 30% 15%;--muted: 350 30% 96.1%;--muted-foreground: 350 10% 50%;--accent: 350 30% 96.1%;--accent-foreground: 345 30% 15%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 350 30% 98%;--border: 350 30% 91.4%;--input: 350 30% 91.4%;--ring: 350 85% 80%;--radius: .5rem;--sidebar-background: 0 0% 100%;--sidebar-foreground: 345 30% 15%;--sidebar-primary: 350 85% 80%;--sidebar-primary-foreground: 350 30% 20%;--sidebar-accent: 350 30% 96.1%;--sidebar-accent-foreground: 345 30% 15%;--sidebar-border: 350 30% 91.4%;--sidebar-ring: 350 85% 80%}.dark{--background: 345 30% 10%;--foreground: 350 30% 98%;--card: 345 30% 10%;--card-foreground: 350 30% 98%;--popover: 345 30% 10%;--popover-foreground: 350 30% 98%;--primary: 350 85% 80%;--primary-foreground: 345 30% 15%;--secondary: 342 20% 17.5%;--secondary-foreground: 350 30% 98%;--muted: 342 20% 17.5%;--muted-foreground: 350 10% 70%;--accent: 342 20% 17.5%;--accent-foreground: 350 30% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 350 30% 98%;--border: 342 20% 17.5%;--input: 342 20% 17.5%;--ring: 350 70% 85%;--sidebar-background: 345 30% 10%;--sidebar-foreground: 350 30% 98%;--sidebar-primary: 350 85% 80%;--sidebar-primary-foreground: 350 30% 98%;--sidebar-accent: 342 20% 17.5%;--sidebar-accent-foreground: 350 30% 98%;--sidebar-border: 342 20% 17.5%;--sidebar-ring: 350 70% 85%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));font-family:Inter,system-ui,sans-serif;color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--muted-foreground) / .4)}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .6)}@font-face{font-family:SF Pro Display;src:local("SF Pro Display"),local("SFProDisplay"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-regular-webfont.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:SF Pro Display;src:local("SF Pro Display Medium"),local("SFProDisplay-Medium"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-medium-webfont.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:SF Pro Display;src:local("SF Pro Display Semibold"),local("SFProDisplay-Semibold"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-semibold-webfont.woff) format("woff");font-weight:600;font-style:normal}@font-face{font-family:SF Pro Display;src:local("SF Pro Display Bold"),local("SFProDisplay-Bold"),url(https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-bold-webfont.woff) format("woff");font-weight:700;font-style:normal}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.glass-card{border-width:1px;border-color:#fff3;background-color:#fffc;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.glass-panel{border-width:1px;border-color:#fff6;background-color:#ffffffe6;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.text-gradient{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #f9a8d4 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;color:transparent}.hover-transition{transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation-duration:.3s;animation-timing-function:cubic-bezier(.4,0,.2,1)}.button-transition{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.2s;animation-timing-function:cubic-bezier(0,0,.2,1)}.sidebar-icon{margin-right:.75rem;margin-top:.125rem;height:1rem;width:1rem;flex-shrink:0;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.sidebar-section{display:flex;align-items:flex-start}.sidebar-sub-item{font-size:.875rem;line-height:1.25rem;color:hsl(var(--muted-foreground))}.persona-card{position:relative;overflow:hidden;min-height:360px}.persona-card-overlay{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.2s;animation-timing-function:cubic-bezier(0,0,.2,1)}.persona-card:hover .persona-card-overlay,.persona-card.selected .persona-card-overlay{background-color:#ecd1de4d}.persona-card-checkmark{position:absolute;top:.75rem;left:.75rem;z-index:20;opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);animation-duration:.2s;animation-timing-function:cubic-bezier(0,0,.2,1);border-radius:9999px;border-width:1px;border-color:#fff6;background-color:#ffffffe6;padding:.25rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.persona-card.selected .persona-card-checkmark{opacity:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.-bottom-12{bottom:-3rem}.-left-12{left:-3rem}.-right-12{right:-3rem}.-top-12{top:-3rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.bottom-\[-10rem\]{bottom:-10rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[50\%\]{left:50%}.left-\[calc\(50\%\+11rem\)\]{left:calc(50% + 11rem)}.left-\[calc\(50\%-11rem\)\]{left:calc(50% - 11rem)}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-16{top:4rem}.top-2{top:.5rem}.top-20{top:5rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[-10rem\]{top:-10rem}.top-\[1px\]{top:1px}.top-\[50\%\]{top:50%}.top-\[60\%\]{top:60%}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1\]{z-index:1}.col-span-full{grid-column:1 / -1}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-4{margin-left:-1rem}.-mt-4{margin-top:-1rem}.mb-1{margin-bottom:.25rem}.mb-16{margin-bottom:4rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-5{margin-right:1.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-24{margin-top:6rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-\[1155\/678\]{aspect-ratio:1155/678}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.size-4{width:1rem;height:1rem}.h-0{height:0px}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[1px\]{height:1px}.h-\[25vh\]{height:25vh}.h-\[450px\]{height:450px}.h-\[70vh\]{height:70vh}.h-\[calc\(100vh-12rem\)\]{height:calc(100vh - 12rem)}.h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.max-h-\[400px\]{max-height:400px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[40px\]{min-height:40px}.min-h-\[60px\]{min-height:60px}.min-h-\[80px\]{min-height:80px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:0px}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[100px\]{width:100px}.w-\[1px\]{width:1px}.w-\[350px\]{width:350px}.w-\[36\.125rem\]{width:36.125rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-32{min-width:8rem}.min-w-36{min-width:9rem}.min-w-5{min-width:1.25rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[400px\]{max-width:400px}.max-w-\[70\%\]{max-width:70%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-max{max-width:-moz-max-content;max-width:max-content}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[30deg\]{--tw-rotate: 30deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .5s ease-out}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}.animate-float{animation:float 3s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-tl-sm{border-top-left-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-\[1\.5px\]{border-width:1.5px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-\[\#0078d4\]{--tw-border-opacity: 1;border-color:rgb(0 120 212 / var(--tw-border-opacity, 1))}.border-\[--color-border\]{border-color:var(--color-border)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-muted-foreground\/20{border-color:hsl(var(--muted-foreground) / .2)}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/80{border-color:#e2e8f0cc}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-l-green-500{--tw-border-opacity: 1;border-left-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-l-primary{border-left-color:hsl(var(--primary))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#0078d4\]{--tw-bg-opacity: 1;background-color:rgb(0 120 212 / var(--tw-bg-opacity, 1))}.bg-\[--color-bg\]{background-color:var(--color-bg)}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-foreground{background-color:hsl(var(--foreground))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-900\/10{background-color:#1118271a}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-pink-200{--tw-bg-opacity: 1;background-color:rgb(251 207 232 / var(--tw-bg-opacity, 1))}.bg-pink-300{--tw-bg-opacity: 1;background-color:rgb(249 168 212 / var(--tw-bg-opacity, 1))}.bg-pink-400{--tw-bg-opacity: 1;background-color:rgb(244 114 182 / var(--tw-bg-opacity, 1))}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-yellow-400{--tw-bg-opacity: 1;background-color:rgb(250 204 21 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-blue-400{--tw-gradient-from: #60a5fa var(--tw-gradient-from-position);--tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-100{--tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary{--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary\/5{--tw-gradient-from: hsl(var(--primary) / .05) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-blue-400{--tw-gradient-to: #60a5fa var(--tw-gradient-to-position)}.to-blue-400\/5{--tw-gradient-to: rgb(96 165 250 / .05) var(--tw-gradient-to-position)}.to-gray-200{--tw-gradient-to: #e5e7eb var(--tw-gradient-to-position)}.to-primary{--tw-gradient-to: hsl(var(--primary)) var(--tw-gradient-to-position)}.to-slate-50{--tw-gradient-to: #f8fafc var(--tw-gradient-to-position)}.fill-amber-400{fill:#fbbf24}.fill-current{fill:currentColor}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-2\.5{padding-left:.625rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Inter,system-ui,sans-serif}.font-sf{font-family:SF Pro Display,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.8rem\]{font-size:.8rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-widest{letter-spacing:.1em}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-\[0_-2px_4px_rgba\(0\,0\,0\,0\.05\)\]{--tw-shadow: 0 -2px 4px rgba(0,0,0,.05);--tw-shadow-colored: 0 -2px 4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-blue-200{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.ring-gray-900\/10{--tw-ring-color: rgb(17 24 39 / .1)}.ring-primary{--tw-ring-color: hsl(var(--primary))}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.ring-offset-white{--tw-ring-offset-color: #fff}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.fade-in-80{--tw-enter-opacity: .8}.zoom-in-95{--tw-enter-scale: .95}.duration-1000{animation-duration:1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.running{animation-play-state:running}.paused{animation-play-state:paused}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-500::placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:.25rem}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.first\:border-l:first-child{border-left-width:1px}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.hover\:translate-y-\[-2px\]:hover{--tw-translate-y: -2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:translate-y-\[-4px\]:hover{--tw-translate-y: -4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-\[\#106ebe\]:hover{--tw-border-opacity: 1;border-color:rgb(16 110 190 / var(--tw-border-opacity, 1))}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-\[\#106ebe\]:hover{--tw-bg-opacity: 1;background-color:rgb(16 110 190 / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50\/50:hover{background-color:#f9fafb80}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary:hover{background-color:hsl(var(--primary))}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-300:hover{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-600:hover{--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-primary-foreground:hover{color:hsl(var(--primary-foreground))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-gray-900\/20:hover{--tw-ring-color: rgb(17 24 39 / .2)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-primary:focus{background-color:hsl(var(--primary))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-primary-foreground:focus{color:hsl(var(--primary-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-primary:focus{--tw-ring-color: hsl(var(--primary))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-slate-950:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(2 6 23 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.group.toast .group-\[\.toast\]\:absolute{position:absolute}.group.toast .group-\[\.toast\]\:left-3{left:.75rem}.group.toast .group-\[\.toast\]\:top-3{top:.75rem}.group.toast .group-\[\.toast\]\:h-5{height:1.25rem}.group.toast .group-\[\.toast\]\:w-5{width:1.25rem}.group.toast .group-\[\.toast\]\:rounded-md{border-radius:calc(var(--radius) - 2px)}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:p-1{padding:.25rem}.group.toaster .group-\[\.toaster\]\:pr-8{padding-right:2rem}.group.toast .group-\[\.toast\]\:text-foreground\/70{color:hsl(var(--foreground) / .7)}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toast .group-\[\.toast\]\:opacity-100{opacity:1}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group.toast .group-\[\.toast\]\:transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.group.toast .hover\:group-\[\.toast\]\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.group.toast .hover\:group-\[\.toast\]\:text-foreground:hover{color:hsl(var(--foreground))}.group.toast .focus\:group-\[\.toast\]\:opacity-100:focus{opacity:1}.group.toast .focus\:group-\[\.toast\]\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.group.toast .focus\:group-\[\.toast\]\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.group.toast .focus\:group-\[\.toast\]\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.has-\[\:disabled\]\:opacity-50:has(:disabled){opacity:.5}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:bg-accent\/50[aria-selected=true]{background-color:hsl(var(--accent) / .5)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.aria-selected\:text-muted-foreground[aria-selected=true]{color:hsl(var(--muted-foreground))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.aria-selected\:opacity-30[aria-selected=true]{opacity:.3}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:rotate-90[data-state=open]{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[active\]\:bg-accent\/50[data-active]{background-color:hsl(var(--accent) / .5)}.data-\[selected\=\'true\'\]\:bg-accent[data-selected=true]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:hsl(var(--accent) / .5)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:hsl(var(--accent-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on],.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\=true\]\:opacity-50[data-disabled=true],.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:animate-in[data-motion^=from-],.data-\[state\=open\]\:animate-in[data-state=open],.data-\[state\=visible\]\:animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[motion\^\=to-\]\:animate-out[data-motion^=to-],.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity: 0}.data-\[motion\^\=to-\]\:fade-out[data-motion^=to-],.data-\[state\=closed\]\:fade-out-0[data-state=closed],.data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open],.data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale: .9}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x: 13rem}.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x: -13rem}.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x: 13rem}.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x: -13rem}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:.25rem}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180,.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer[data-variant=inset]~.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]{min-height:calc(100svh - 1rem)}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:from-gray-900:is(.dark *){--tw-gradient-from: #111827 var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:bottom-\[-20rem\]{bottom:-20rem}.sm\:left-\[calc\(50\%\+30rem\)\]{left:calc(50% + 30rem)}.sm\:left-\[calc\(50\%-30rem\)\]{left:calc(50% - 30rem)}.sm\:top-\[-20rem\]{top:-20rem}.sm\:mt-0{margin-top:0}.sm\:mt-24{margin-top:6rem}.sm\:flex{display:flex}.sm\:w-\[72\.1875rem\]{width:72.1875rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-32{padding-top:8rem;padding-bottom:8rem}.sm\:text-left{text-align:left}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 768px){.md\:absolute{position:absolute}.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-64{width:16rem}.md\:w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:border-l{border-left-width:1px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mt-0{margin-top:0}.lg\:flex{display:flex}.lg\:w-64{width:16rem}.lg\:flex-auto{flex:1 1 auto}.lg\:flex-shrink-0{flex-shrink:0}.lg\:flex-grow{flex-grow:1}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-40{padding-top:10rem;padding-bottom:10rem}}@media (min-width: 1280px){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:hsl(var(--accent))}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:has([aria-selected]):first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:has([aria-selected]):last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-accent\/50:has([aria-selected].day-outside){background-color:hsl(var(--accent) / .5)}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:h-2\.5>svg{height:.625rem}.\[\&\>svg\]\:h-3>svg{height:.75rem}.\[\&\>svg\]\:w-2\.5>svg{width:.625rem}.\[\&\>svg\]\:w-3>svg{width:.75rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-muted-foreground>svg{color:hsl(var(--muted-foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text{fill:hsl(var(--muted-foreground))}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke="#ccc"]{stroke:hsl(var(--border) / .5)}.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:hsl(var(--border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-layer\]\:outline-none .recharts-layer{outline:2px solid transparent;outline-offset:2px}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:hsl(var(--muted))}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:hsl(var(--border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-sector\]\:outline-none .recharts-sector,.\[\&_\.recharts-surface\]\:outline-none .recharts-surface{outline:2px solid transparent;outline-offset:2px}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-top:.375rem;padding-bottom:.375rem}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-top:.75rem;padding-bottom:.75rem}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize} diff --git a/dist/index.html b/dist/index.html index e826c083..3a56e61c 100644 --- a/dist/index.html +++ b/dist/index.html @@ -7,8 +7,8 @@ - - + + diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index f23ef22c..5957b89f 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -139,6 +139,20 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@dnd-kit/modifiers": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-9.0.0.tgz", + "integrity": "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, "node_modules/@dnd-kit/sortable": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", diff --git a/node_modules/.vite/deps/@azure_msal-browser.js b/node_modules/.vite/deps/@azure_msal-browser.js new file mode 100644 index 00000000..077d9ec2 --- /dev/null +++ b/node_modules/.vite/deps/@azure_msal-browser.js @@ -0,0 +1,126 @@ +import { + AccountEntity, + ApiId, + AuthError, + AuthErrorCodes_exports, + AuthErrorMessage, + AuthenticationHeaderParser, + AuthenticationScheme, + AzureCloudInstance, + BrowserAuthError, + BrowserAuthErrorCodes_exports, + BrowserAuthErrorMessage, + BrowserCacheLocation, + BrowserConfigurationAuthError, + BrowserConfigurationAuthErrorCodes_exports, + BrowserConfigurationAuthErrorMessage, + BrowserPerformanceClient, + BrowserUtils_exports, + CacheLookupPolicy, + ClientAuthError, + ClientAuthErrorCodes_exports, + ClientAuthErrorMessage, + ClientConfigurationError, + ClientConfigurationErrorCodes_exports, + ClientConfigurationErrorMessage, + DEFAULT_IFRAME_TIMEOUT_MS, + EventHandler, + EventMessageUtils, + EventType, + InteractionRequiredAuthError, + InteractionRequiredAuthErrorCodes_exports, + InteractionRequiredAuthErrorMessage, + InteractionStatus, + InteractionType, + JsonWebTokenTypes, + LocalStorage, + LogLevel, + Logger, + MemoryStorage, + NavigationClient, + OIDC_DEFAULT_SCOPES, + PerformanceEvents, + PromptValue, + ProtocolMode, + PublicClientApplication, + PublicClientNext, + ServerError, + ServerResponseType, + SessionStorage, + SignedHttpRequest, + StringUtils, + StubPerformanceClient, + UrlString, + WrapperSKU, + createNestablePublicClientApplication, + createStandardPublicClientApplication, + isPlatformBrokerAvailable, + stubbedPublicClientApplication, + version +} from "./chunk-Z3MJAI5R.js"; +import { + BrowserPerformanceMeasurement +} from "./chunk-6NKFQNRI.js"; +import "./chunk-4MBMRILA.js"; +export { + AccountEntity, + ApiId, + AuthError, + AuthErrorCodes_exports as AuthErrorCodes, + AuthErrorMessage, + AuthenticationHeaderParser, + AuthenticationScheme, + AzureCloudInstance, + BrowserAuthError, + BrowserAuthErrorCodes_exports as BrowserAuthErrorCodes, + BrowserAuthErrorMessage, + BrowserCacheLocation, + BrowserConfigurationAuthError, + BrowserConfigurationAuthErrorCodes_exports as BrowserConfigurationAuthErrorCodes, + BrowserConfigurationAuthErrorMessage, + BrowserPerformanceClient, + BrowserPerformanceMeasurement, + BrowserUtils_exports as BrowserUtils, + CacheLookupPolicy, + ClientAuthError, + ClientAuthErrorCodes_exports as ClientAuthErrorCodes, + ClientAuthErrorMessage, + ClientConfigurationError, + ClientConfigurationErrorCodes_exports as ClientConfigurationErrorCodes, + ClientConfigurationErrorMessage, + DEFAULT_IFRAME_TIMEOUT_MS, + EventHandler, + EventMessageUtils, + EventType, + InteractionRequiredAuthError, + InteractionRequiredAuthErrorCodes_exports as InteractionRequiredAuthErrorCodes, + InteractionRequiredAuthErrorMessage, + InteractionStatus, + InteractionType, + JsonWebTokenTypes, + LocalStorage, + LogLevel, + Logger, + MemoryStorage, + NavigationClient, + OIDC_DEFAULT_SCOPES, + PerformanceEvents, + PromptValue, + ProtocolMode, + PublicClientApplication, + PublicClientNext, + ServerError, + ServerResponseType, + SessionStorage, + SignedHttpRequest, + StringUtils, + StubPerformanceClient, + UrlString, + WrapperSKU, + createNestablePublicClientApplication, + createStandardPublicClientApplication, + isPlatformBrokerAvailable, + stubbedPublicClientApplication, + version +}; +//# sourceMappingURL=@azure_msal-browser.js.map diff --git a/node_modules/.vite/deps/@azure_msal-browser.js.map b/node_modules/.vite/deps/@azure_msal-browser.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/node_modules/.vite/deps/@azure_msal-browser.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/node_modules/.vite/deps/@azure_msal-react.js b/node_modules/.vite/deps/@azure_msal-react.js new file mode 100644 index 00000000..3b1b3861 --- /dev/null +++ b/node_modules/.vite/deps/@azure_msal-react.js @@ -0,0 +1,561 @@ +import { + AccountEntity, + AuthError, + EventMessageUtils, + EventType, + InteractionRequiredAuthError, + InteractionStatus, + InteractionType, + Logger, + OIDC_DEFAULT_SCOPES, + WrapperSKU, + stubbedPublicClientApplication +} from "./chunk-Z3MJAI5R.js"; +import "./chunk-6NKFQNRI.js"; +import { + require_react +} from "./chunk-3TFVT2CW.js"; +import { + __toESM +} from "./chunk-4MBMRILA.js"; + +// node_modules/@azure/msal-react/dist/MsalContext.js +var React = __toESM(require_react(), 1); +var defaultMsalContext = { + instance: stubbedPublicClientApplication, + inProgress: InteractionStatus.None, + accounts: [], + logger: new Logger({}) +}; +var MsalContext = React.createContext(defaultMsalContext); +var MsalConsumer = MsalContext.Consumer; + +// node_modules/@azure/msal-react/dist/MsalProvider.js +var import_react = __toESM(require_react(), 1); + +// node_modules/@azure/msal-react/dist/utils/utilities.js +function getChildrenOrFunction(children, args) { + if (typeof children === "function") { + return children(args); + } + return children; +} +function accountArraysAreEqual(arrayA, arrayB) { + if (arrayA.length !== arrayB.length) { + return false; + } + const comparisonArray = [...arrayB]; + return arrayA.every((elementA) => { + const elementB = comparisonArray.shift(); + if (!elementA || !elementB) { + return false; + } + return elementA.homeAccountId === elementB.homeAccountId && elementA.localAccountId === elementB.localAccountId && elementA.username === elementB.username; + }); +} +function getAccountByIdentifiers(allAccounts, accountIdentifiers) { + if (allAccounts.length > 0 && (accountIdentifiers.homeAccountId || accountIdentifiers.localAccountId || accountIdentifiers.username)) { + const matchedAccounts = allAccounts.filter((accountObj) => { + if (accountIdentifiers.username && accountIdentifiers.username.toLowerCase() !== accountObj.username.toLowerCase()) { + return false; + } + if (accountIdentifiers.homeAccountId && accountIdentifiers.homeAccountId.toLowerCase() !== accountObj.homeAccountId.toLowerCase()) { + return false; + } + if (accountIdentifiers.localAccountId && accountIdentifiers.localAccountId.toLowerCase() !== accountObj.localAccountId.toLowerCase()) { + return false; + } + return true; + }); + return matchedAccounts[0] || null; + } else { + return null; + } +} + +// node_modules/@azure/msal-react/dist/packageMetadata.js +var name = "@azure/msal-react"; +var version = "3.0.17"; + +// node_modules/@azure/msal-react/dist/MsalProvider.js +var MsalProviderActionType = { + UNBLOCK_INPROGRESS: "UNBLOCK_INPROGRESS", + EVENT: "EVENT" +}; +var reducer = (previousState, action) => { + const { type, payload } = action; + let newInProgress = previousState.inProgress; + switch (type) { + case MsalProviderActionType.UNBLOCK_INPROGRESS: + if (previousState.inProgress === InteractionStatus.Startup) { + newInProgress = InteractionStatus.None; + payload.logger.info("MsalProvider - handleRedirectPromise resolved, setting inProgress to 'none'"); + } + break; + case MsalProviderActionType.EVENT: + const message = payload.message; + const status = EventMessageUtils.getInteractionStatusFromEvent(message, previousState.inProgress); + if (status) { + payload.logger.info(`MsalProvider - ${message.eventType} results in setting inProgress from ${previousState.inProgress} to ${status}`); + newInProgress = status; + } + break; + default: + throw new Error(`Unknown action type: ${type}`); + } + if (newInProgress === InteractionStatus.Startup) { + return previousState; + } + const currentAccounts = payload.instance.getAllAccounts(); + if (newInProgress !== previousState.inProgress && !accountArraysAreEqual(currentAccounts, previousState.accounts)) { + return { + ...previousState, + inProgress: newInProgress, + accounts: currentAccounts + }; + } else if (newInProgress !== previousState.inProgress) { + return { + ...previousState, + inProgress: newInProgress + }; + } else if (!accountArraysAreEqual(currentAccounts, previousState.accounts)) { + return { + ...previousState, + accounts: currentAccounts + }; + } else { + return previousState; + } +}; +function MsalProvider({ instance, children }) { + (0, import_react.useEffect)(() => { + instance.initializeWrapperLibrary(WrapperSKU.React, version); + }, [instance]); + const logger = (0, import_react.useMemo)(() => { + return instance.getLogger().clone(name, version); + }, [instance]); + const [state, updateState] = (0, import_react.useReducer)(reducer, void 0, () => { + return { + inProgress: InteractionStatus.Startup, + accounts: [] + }; + }); + (0, import_react.useEffect)(() => { + const callbackId = instance.addEventCallback((message) => { + updateState({ + payload: { + instance, + logger, + message + }, + type: MsalProviderActionType.EVENT + }); + }); + logger.verbose(`MsalProvider - Registered event callback with id: ${callbackId}`); + instance.initialize().then(() => { + instance.handleRedirectPromise().catch(() => { + return; + }).finally(() => { + updateState({ + payload: { + instance, + logger + }, + type: MsalProviderActionType.UNBLOCK_INPROGRESS + }); + }); + }).catch(() => { + return; + }); + return () => { + if (callbackId) { + logger.verbose(`MsalProvider - Removing event callback ${callbackId}`); + instance.removeEventCallback(callbackId); + } + }; + }, [instance, logger]); + const contextValue = { + instance, + inProgress: state.inProgress, + accounts: state.accounts, + logger + }; + return import_react.default.createElement(MsalContext.Provider, { value: contextValue }, children); +} + +// node_modules/@azure/msal-react/dist/components/AuthenticatedTemplate.js +var import_react4 = __toESM(require_react(), 1); + +// node_modules/@azure/msal-react/dist/hooks/useMsal.js +var import_react2 = __toESM(require_react(), 1); +var useMsal = () => (0, import_react2.useContext)(MsalContext); + +// node_modules/@azure/msal-react/dist/hooks/useIsAuthenticated.js +var import_react3 = __toESM(require_react(), 1); +function isAuthenticated(allAccounts, matchAccount) { + if (matchAccount && (matchAccount.username || matchAccount.homeAccountId || matchAccount.localAccountId)) { + return !!getAccountByIdentifiers(allAccounts, matchAccount); + } + return allAccounts.length > 0; +} +function useIsAuthenticated(matchAccount) { + const { accounts: allAccounts, inProgress } = useMsal(); + const isUserAuthenticated = (0, import_react3.useMemo)(() => { + if (inProgress === InteractionStatus.Startup) { + return false; + } + return isAuthenticated(allAccounts, matchAccount); + }, [allAccounts, inProgress, matchAccount]); + return isUserAuthenticated; +} + +// node_modules/@azure/msal-react/dist/components/AuthenticatedTemplate.js +function AuthenticatedTemplate({ username, homeAccountId, localAccountId, children }) { + const context = useMsal(); + const accountIdentifier = (0, import_react4.useMemo)(() => { + return { + username, + homeAccountId, + localAccountId + }; + }, [username, homeAccountId, localAccountId]); + const isAuthenticated2 = useIsAuthenticated(accountIdentifier); + if (isAuthenticated2 && context.inProgress !== InteractionStatus.Startup) { + return import_react4.default.createElement(import_react4.default.Fragment, null, getChildrenOrFunction(children, context)); + } + return null; +} + +// node_modules/@azure/msal-react/dist/components/UnauthenticatedTemplate.js +var import_react5 = __toESM(require_react(), 1); +function UnauthenticatedTemplate({ username, homeAccountId, localAccountId, children }) { + const context = useMsal(); + const accountIdentifier = (0, import_react5.useMemo)(() => { + return { + username, + homeAccountId, + localAccountId + }; + }, [username, homeAccountId, localAccountId]); + const isAuthenticated2 = useIsAuthenticated(accountIdentifier); + if (!isAuthenticated2 && context.inProgress !== InteractionStatus.Startup && context.inProgress !== InteractionStatus.HandleRedirect) { + return import_react5.default.createElement(import_react5.default.Fragment, null, getChildrenOrFunction(children, context)); + } + return null; +} + +// node_modules/@azure/msal-react/dist/components/MsalAuthenticationTemplate.js +var import_react8 = __toESM(require_react(), 1); + +// node_modules/@azure/msal-react/dist/hooks/useMsalAuthentication.js +var import_react7 = __toESM(require_react(), 1); + +// node_modules/@azure/msal-react/dist/hooks/useAccount.js +var import_react6 = __toESM(require_react(), 1); +function getAccount(instance, accountIdentifiers) { + if (!accountIdentifiers || !accountIdentifiers.homeAccountId && !accountIdentifiers.localAccountId && !accountIdentifiers.username) { + return instance.getActiveAccount(); + } + return getAccountByIdentifiers(instance.getAllAccounts(), accountIdentifiers); +} +function useAccount(accountIdentifiers) { + const { instance, inProgress, logger } = useMsal(); + const [account, setAccount] = (0, import_react6.useState)(() => { + if (inProgress === InteractionStatus.Startup) { + return null; + } else { + return getAccount(instance, accountIdentifiers); + } + }); + (0, import_react6.useEffect)(() => { + if (inProgress !== InteractionStatus.Startup) { + setAccount((currentAccount) => { + const nextAccount = getAccount(instance, accountIdentifiers); + if (!AccountEntity.accountInfoIsEqual(currentAccount, nextAccount, true)) { + logger.info("useAccount - Updating account"); + return nextAccount; + } + return currentAccount; + }); + } + }, [inProgress, accountIdentifiers, instance, logger]); + return account; +} + +// node_modules/@azure/msal-react/dist/error/ReactAuthError.js +var ReactAuthErrorMessage = { + invalidInteractionType: { + code: "invalid_interaction_type", + desc: "The provided interaction type is invalid." + }, + unableToFallbackToInteraction: { + code: "unable_to_fallback_to_interaction", + desc: "Interaction is required but another interaction is already in progress. Please try again when the current interaction is complete." + } +}; +var ReactAuthError = class _ReactAuthError extends AuthError { + constructor(errorCode, errorMessage) { + super(errorCode, errorMessage); + Object.setPrototypeOf(this, _ReactAuthError.prototype); + this.name = "ReactAuthError"; + } + static createInvalidInteractionTypeError() { + return new _ReactAuthError(ReactAuthErrorMessage.invalidInteractionType.code, ReactAuthErrorMessage.invalidInteractionType.desc); + } + static createUnableToFallbackToInteractionError() { + return new _ReactAuthError(ReactAuthErrorMessage.unableToFallbackToInteraction.code, ReactAuthErrorMessage.unableToFallbackToInteraction.desc); + } +}; + +// node_modules/@azure/msal-react/dist/hooks/useMsalAuthentication.js +function useMsalAuthentication(interactionType, authenticationRequest, accountIdentifiers) { + const { instance, inProgress, logger } = useMsal(); + const isAuthenticated2 = useIsAuthenticated(accountIdentifiers); + const account = useAccount(accountIdentifiers); + const [[result, error], setResponse] = (0, import_react7.useState)([null, null]); + const mounted = (0, import_react7.useRef)(true); + (0, import_react7.useEffect)(() => { + return () => { + mounted.current = false; + }; + }, []); + const interactionInProgress = (0, import_react7.useRef)(inProgress !== InteractionStatus.None); + (0, import_react7.useEffect)(() => { + interactionInProgress.current = inProgress !== InteractionStatus.None; + }, [inProgress]); + const shouldAcquireToken = (0, import_react7.useRef)(true); + (0, import_react7.useEffect)(() => { + if (!!error) { + shouldAcquireToken.current = false; + return; + } + if (!!result) { + shouldAcquireToken.current = false; + return; + } + }, [error, result]); + const login = (0, import_react7.useCallback)(async (callbackInteractionType, callbackRequest) => { + const loginType = callbackInteractionType || interactionType; + const loginRequest = callbackRequest || authenticationRequest; + switch (loginType) { + case InteractionType.Popup: + logger.verbose("useMsalAuthentication - Calling loginPopup"); + return instance.loginPopup(loginRequest); + case InteractionType.Redirect: + logger.verbose("useMsalAuthentication - Calling loginRedirect"); + return instance.loginRedirect(loginRequest).then(null); + case InteractionType.Silent: + logger.verbose("useMsalAuthentication - Calling ssoSilent"); + return instance.ssoSilent(loginRequest); + default: + throw ReactAuthError.createInvalidInteractionTypeError(); + } + }, [instance, interactionType, authenticationRequest, logger]); + const acquireToken = (0, import_react7.useCallback)(async (callbackInteractionType, callbackRequest) => { + const fallbackInteractionType = callbackInteractionType || interactionType; + let tokenRequest; + if (callbackRequest) { + logger.trace("useMsalAuthentication - acquireToken - Using request provided in the callback"); + tokenRequest = { + ...callbackRequest + }; + } else if (authenticationRequest) { + logger.trace("useMsalAuthentication - acquireToken - Using request provided in the hook"); + tokenRequest = { + ...authenticationRequest, + scopes: authenticationRequest.scopes || OIDC_DEFAULT_SCOPES + }; + } else { + logger.trace("useMsalAuthentication - acquireToken - No request object provided, using default request."); + tokenRequest = { + scopes: OIDC_DEFAULT_SCOPES + }; + } + if (!tokenRequest.account && account) { + logger.trace("useMsalAuthentication - acquireToken - Attaching account to request"); + tokenRequest.account = account; + } + const getToken = async () => { + logger.verbose("useMsalAuthentication - Calling acquireTokenSilent"); + return instance.acquireTokenSilent(tokenRequest).catch(async (e) => { + if (e instanceof InteractionRequiredAuthError) { + if (!interactionInProgress.current) { + logger.error("useMsalAuthentication - Interaction required, falling back to interaction"); + return login(fallbackInteractionType, tokenRequest); + } else { + logger.error("useMsalAuthentication - Interaction required but is already in progress. Please try again, if needed, after interaction completes."); + throw ReactAuthError.createUnableToFallbackToInteractionError(); + } + } + throw e; + }); + }; + return getToken().then((response) => { + if (mounted.current) { + setResponse([response, null]); + } + return response; + }).catch((e) => { + if (mounted.current) { + setResponse([null, e]); + } + throw e; + }); + }, [ + instance, + interactionType, + authenticationRequest, + logger, + account, + login + ]); + (0, import_react7.useEffect)(() => { + const callbackId = instance.addEventCallback((message) => { + switch (message.eventType) { + case EventType.LOGIN_SUCCESS: + case EventType.SSO_SILENT_SUCCESS: + if (message.payload) { + setResponse([ + message.payload, + null + ]); + } + break; + case EventType.LOGIN_FAILURE: + case EventType.SSO_SILENT_FAILURE: + if (message.error) { + setResponse([null, message.error]); + } + break; + } + }); + logger.verbose(`useMsalAuthentication - Registered event callback with id: ${callbackId}`); + return () => { + if (callbackId) { + logger.verbose(`useMsalAuthentication - Removing event callback ${callbackId}`); + instance.removeEventCallback(callbackId); + } + }; + }, [instance, logger]); + (0, import_react7.useEffect)(() => { + if (shouldAcquireToken.current && inProgress === InteractionStatus.None) { + if (!isAuthenticated2) { + shouldAcquireToken.current = false; + logger.info("useMsalAuthentication - No user is authenticated, attempting to login"); + login().catch(() => { + return; + }); + } else if (account) { + shouldAcquireToken.current = false; + logger.info("useMsalAuthentication - User is authenticated, attempting to acquire token"); + acquireToken().catch(() => { + return; + }); + } + } + }, [isAuthenticated2, account, inProgress, login, acquireToken, logger]); + return { + login, + acquireToken, + result, + error + }; +} + +// node_modules/@azure/msal-react/dist/components/MsalAuthenticationTemplate.js +function MsalAuthenticationTemplate({ interactionType, username, homeAccountId, localAccountId, authenticationRequest, loadingComponent: LoadingComponent, errorComponent: ErrorComponent, children }) { + const accountIdentifier = (0, import_react8.useMemo)(() => { + return { + username, + homeAccountId, + localAccountId + }; + }, [username, homeAccountId, localAccountId]); + const context = useMsal(); + const msalAuthResult = useMsalAuthentication(interactionType, authenticationRequest, accountIdentifier); + const isAuthenticated2 = useIsAuthenticated(accountIdentifier); + if (msalAuthResult.error && context.inProgress === InteractionStatus.None) { + if (!!ErrorComponent) { + return import_react8.default.createElement(ErrorComponent, { ...msalAuthResult }); + } + throw msalAuthResult.error; + } + if (isAuthenticated2) { + return import_react8.default.createElement(import_react8.default.Fragment, null, getChildrenOrFunction(children, msalAuthResult)); + } + if (!!LoadingComponent && context.inProgress !== InteractionStatus.None) { + return import_react8.default.createElement(LoadingComponent, { ...context }); + } + return null; +} + +// node_modules/@azure/msal-react/dist/components/withMsal.js +var import_react9 = __toESM(require_react(), 1); +var withMsal = (Component) => { + const ComponentWithMsal = (props) => { + const msal = useMsal(); + return import_react9.default.createElement(Component, { ...props, msalContext: msal }); + }; + const componentName = Component.displayName || Component.name || "Component"; + ComponentWithMsal.displayName = `withMsal(${componentName})`; + return ComponentWithMsal; +}; +export { + AuthenticatedTemplate, + MsalAuthenticationTemplate, + MsalConsumer, + MsalContext, + MsalProvider, + UnauthenticatedTemplate, + useAccount, + useIsAuthenticated, + useMsal, + useMsalAuthentication, + version, + withMsal +}; +/*! Bundled license information: + +@azure/msal-react/dist/MsalContext.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/utils/utilities.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/packageMetadata.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/MsalProvider.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/hooks/useMsal.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/hooks/useIsAuthenticated.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/components/AuthenticatedTemplate.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/components/UnauthenticatedTemplate.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/hooks/useAccount.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/error/ReactAuthError.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/hooks/useMsalAuthentication.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/components/MsalAuthenticationTemplate.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/components/withMsal.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) + +@azure/msal-react/dist/index.js: + (*! @azure/msal-react v3.0.17 2025-08-05 *) +*/ +//# sourceMappingURL=@azure_msal-react.js.map diff --git a/node_modules/.vite/deps/@azure_msal-react.js.map b/node_modules/.vite/deps/@azure_msal-react.js.map new file mode 100644 index 00000000..d88095a1 --- /dev/null +++ b/node_modules/.vite/deps/@azure_msal-react.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@azure/msal-react/src/MsalContext.ts", "../../@azure/msal-react/src/utils/utilities.ts", "../../@azure/msal-react/src/packageMetadata.ts", "../../@azure/msal-react/src/MsalProvider.tsx", "../../@azure/msal-react/src/hooks/useMsal.ts", "../../@azure/msal-react/src/hooks/useIsAuthenticated.ts", "../../@azure/msal-react/src/components/AuthenticatedTemplate.tsx", "../../@azure/msal-react/src/components/UnauthenticatedTemplate.tsx", "../../@azure/msal-react/src/hooks/useAccount.ts", "../../@azure/msal-react/src/error/ReactAuthError.ts", "../../@azure/msal-react/src/hooks/useMsalAuthentication.ts", "../../@azure/msal-react/src/components/MsalAuthenticationTemplate.tsx", "../../@azure/msal-react/src/components/withMsal.tsx"], + "sourcesContent": ["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport * as React from \"react\";\nimport {\n IPublicClientApplication,\n stubbedPublicClientApplication,\n Logger,\n InteractionStatus,\n AccountInfo,\n} from \"@azure/msal-browser\";\n\nexport interface IMsalContext {\n instance: IPublicClientApplication;\n inProgress: InteractionStatus;\n accounts: AccountInfo[];\n logger: Logger;\n}\n\n/*\n * Stubbed context implementation\n * Only used when there is no provider, which is an unsupported scenario\n */\nconst defaultMsalContext: IMsalContext = {\n instance: stubbedPublicClientApplication,\n inProgress: InteractionStatus.None,\n accounts: [],\n logger: new Logger({}),\n};\n\nexport const MsalContext =\n React.createContext(defaultMsalContext);\nexport const MsalConsumer = MsalContext.Consumer;\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { AccountInfo } from \"@azure/msal-browser\";\n\ntype FaaCFunction = (args: T) => React.ReactNode;\n\nexport function getChildrenOrFunction(\n children: React.ReactNode | FaaCFunction,\n args: T\n): React.ReactNode {\n if (typeof children === \"function\") {\n return children(args);\n }\n return children;\n}\n\n/*\n * Utility types\n * Reference: https://github.com/piotrwitek/utility-types\n */\nexport type SetDifference = A extends B ? never : A;\nexport type SetComplement = SetDifference;\nexport type Subtract = Pick<\n T,\n SetComplement\n>;\n\n/**\n * Helper function to determine whether 2 arrays are equal\n * Used to avoid unnecessary state updates\n * @param arrayA\n * @param arrayB\n */\nexport function accountArraysAreEqual(\n arrayA: Array,\n arrayB: Array\n): boolean {\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n\n const comparisonArray = [...arrayB];\n\n return arrayA.every((elementA) => {\n const elementB = comparisonArray.shift();\n if (!elementA || !elementB) {\n return false;\n }\n\n return (\n elementA.homeAccountId === elementB.homeAccountId &&\n elementA.localAccountId === elementB.localAccountId &&\n elementA.username === elementB.username\n );\n });\n}\n\nexport function getAccountByIdentifiers(\n allAccounts: AccountInfo[],\n accountIdentifiers: AccountIdentifiers\n): AccountInfo | null {\n if (\n allAccounts.length > 0 &&\n (accountIdentifiers.homeAccountId ||\n accountIdentifiers.localAccountId ||\n accountIdentifiers.username)\n ) {\n const matchedAccounts = allAccounts.filter((accountObj) => {\n if (\n accountIdentifiers.username &&\n accountIdentifiers.username.toLowerCase() !==\n accountObj.username.toLowerCase()\n ) {\n return false;\n }\n if (\n accountIdentifiers.homeAccountId &&\n accountIdentifiers.homeAccountId.toLowerCase() !==\n accountObj.homeAccountId.toLowerCase()\n ) {\n return false;\n }\n if (\n accountIdentifiers.localAccountId &&\n accountIdentifiers.localAccountId.toLowerCase() !==\n accountObj.localAccountId.toLowerCase()\n ) {\n return false;\n }\n\n return true;\n });\n\n return matchedAccounts[0] || null;\n } else {\n return null;\n }\n}\n", "/* eslint-disable header/header */\nexport const name = \"@azure/msal-react\";\nexport const version = \"3.0.17\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport React, {\n useEffect,\n useReducer,\n PropsWithChildren,\n useMemo,\n} from \"react\";\nimport {\n IPublicClientApplication,\n EventMessage,\n EventMessageUtils,\n InteractionStatus,\n Logger,\n WrapperSKU,\n AccountInfo,\n} from \"@azure/msal-browser\";\nimport { MsalContext, IMsalContext } from \"./MsalContext.js\";\nimport { accountArraysAreEqual } from \"./utils/utilities.js\";\nimport { name as SKU, version } from \"./packageMetadata.js\";\n\nexport type MsalProviderProps = PropsWithChildren<{\n instance: IPublicClientApplication;\n}>;\n\ntype MsalState = {\n inProgress: InteractionStatus;\n accounts: AccountInfo[];\n};\n\nconst MsalProviderActionType = {\n UNBLOCK_INPROGRESS: \"UNBLOCK_INPROGRESS\",\n EVENT: \"EVENT\",\n} as const;\ntype MsalProviderActionType =\n (typeof MsalProviderActionType)[keyof typeof MsalProviderActionType];\n\ntype MsalProviderReducerAction = {\n type: MsalProviderActionType;\n payload: {\n logger: Logger;\n instance: IPublicClientApplication;\n message?: EventMessage;\n };\n};\n\n/**\n * Returns the next inProgress and accounts state based on event message\n * @param previousState\n * @param action\n */\nconst reducer = (\n previousState: MsalState,\n action: MsalProviderReducerAction\n): MsalState => {\n const { type, payload } = action;\n let newInProgress = previousState.inProgress;\n\n switch (type) {\n case MsalProviderActionType.UNBLOCK_INPROGRESS:\n if (previousState.inProgress === InteractionStatus.Startup) {\n newInProgress = InteractionStatus.None;\n payload.logger.info(\n \"MsalProvider - handleRedirectPromise resolved, setting inProgress to 'none'\"\n );\n }\n break;\n case MsalProviderActionType.EVENT:\n const message = payload.message as EventMessage;\n const status = EventMessageUtils.getInteractionStatusFromEvent(\n message,\n previousState.inProgress\n );\n if (status) {\n payload.logger.info(\n `MsalProvider - ${message.eventType} results in setting inProgress from ${previousState.inProgress} to ${status}`\n );\n newInProgress = status;\n }\n break;\n default:\n throw new Error(`Unknown action type: ${type}`);\n }\n\n if (newInProgress === InteractionStatus.Startup) {\n // Can't start checking accounts until initialization is complete\n return previousState;\n }\n\n const currentAccounts = payload.instance.getAllAccounts();\n if (\n newInProgress !== previousState.inProgress &&\n !accountArraysAreEqual(currentAccounts, previousState.accounts)\n ) {\n // Both inProgress and accounts changed\n return {\n ...previousState,\n inProgress: newInProgress,\n accounts: currentAccounts,\n };\n } else if (newInProgress !== previousState.inProgress) {\n // Only only inProgress changed\n return {\n ...previousState,\n inProgress: newInProgress,\n };\n } else if (\n !accountArraysAreEqual(currentAccounts, previousState.accounts)\n ) {\n // Only accounts changed\n return {\n ...previousState,\n accounts: currentAccounts,\n };\n } else {\n // Nothing changed\n return previousState;\n }\n};\n\n/**\n * MSAL context provider component. This must be rendered above any other components that use MSAL.\n */\nexport function MsalProvider({\n instance,\n children,\n}: MsalProviderProps): React.ReactElement {\n useEffect(() => {\n instance.initializeWrapperLibrary(WrapperSKU.React, version);\n }, [instance]);\n // Create a logger instance for msal-react with the same options as PublicClientApplication\n const logger = useMemo(() => {\n return instance.getLogger().clone(SKU, version);\n }, [instance]);\n\n const [state, updateState] = useReducer(reducer, undefined, () => {\n // Lazy initialization of the initial state\n return {\n inProgress: InteractionStatus.Startup,\n accounts: [],\n };\n });\n\n useEffect(() => {\n const callbackId = instance.addEventCallback(\n (message: EventMessage) => {\n updateState({\n payload: {\n instance,\n logger,\n message,\n },\n type: MsalProviderActionType.EVENT,\n });\n }\n );\n logger.verbose(\n `MsalProvider - Registered event callback with id: ${callbackId}`\n );\n\n instance\n .initialize()\n .then(() => {\n instance\n .handleRedirectPromise()\n .catch(() => {\n // Errors should be handled by listening to the LOGIN_FAILURE event\n return;\n })\n .finally(() => {\n /*\n * If handleRedirectPromise returns a cached promise the necessary events may not be fired\n * This is a fallback to prevent inProgress from getting stuck in 'startup'\n */\n updateState({\n payload: {\n instance,\n logger,\n },\n type: MsalProviderActionType.UNBLOCK_INPROGRESS,\n });\n });\n })\n .catch(() => {\n // Errors should be handled by listening to the LOGIN_FAILURE event\n return;\n });\n\n return () => {\n // Remove callback when component unmounts or accounts change\n if (callbackId) {\n logger.verbose(\n `MsalProvider - Removing event callback ${callbackId}`\n );\n instance.removeEventCallback(callbackId);\n }\n };\n }, [instance, logger]);\n\n const contextValue: IMsalContext = {\n instance,\n inProgress: state.inProgress,\n accounts: state.accounts,\n logger,\n };\n\n return (\n \n {children}\n \n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { useContext } from \"react\";\nimport { IMsalContext, MsalContext } from \"../MsalContext.js\";\n\n/**\n * Returns Msal Context values\n */\nexport const useMsal = (): IMsalContext => useContext(MsalContext);\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { useMemo } from \"react\";\nimport { useMsal } from \"./useMsal.js\";\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { AccountInfo, InteractionStatus } from \"@azure/msal-browser\";\nimport { getAccountByIdentifiers } from \"../utils/utilities.js\";\n\nfunction isAuthenticated(\n allAccounts: AccountInfo[],\n matchAccount?: AccountIdentifiers\n): boolean {\n if (\n matchAccount &&\n (matchAccount.username ||\n matchAccount.homeAccountId ||\n matchAccount.localAccountId)\n ) {\n return !!getAccountByIdentifiers(allAccounts, matchAccount);\n }\n\n return allAccounts.length > 0;\n}\n\n/**\n * Returns whether or not a user is currently signed-in. Optionally provide 1 or more accountIdentifiers to determine if a specific user is signed-in\n * @param matchAccount\n */\nexport function useIsAuthenticated(matchAccount?: AccountIdentifiers): boolean {\n const { accounts: allAccounts, inProgress } = useMsal();\n\n const isUserAuthenticated = useMemo(() => {\n if (inProgress === InteractionStatus.Startup) {\n return false;\n }\n return isAuthenticated(allAccounts, matchAccount);\n }, [allAccounts, inProgress, matchAccount]);\n\n return isUserAuthenticated;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport React, { PropsWithChildren, useMemo } from \"react\";\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { getChildrenOrFunction } from \"../utils/utilities.js\";\nimport { useMsal } from \"../hooks/useMsal.js\";\nimport { useIsAuthenticated } from \"../hooks/useIsAuthenticated.js\";\nimport { InteractionStatus } from \"@azure/msal-browser\";\n\nexport type AuthenticatedTemplateProps = PropsWithChildren;\n\n/**\n * Renders child components if user is authenticated\n * @param props\n */\nexport function AuthenticatedTemplate({\n username,\n homeAccountId,\n localAccountId,\n children,\n}: AuthenticatedTemplateProps): React.ReactElement | null {\n const context = useMsal();\n const accountIdentifier: AccountIdentifiers = useMemo(() => {\n return {\n username,\n homeAccountId,\n localAccountId,\n };\n }, [username, homeAccountId, localAccountId]);\n const isAuthenticated = useIsAuthenticated(accountIdentifier);\n\n if (isAuthenticated && context.inProgress !== InteractionStatus.Startup) {\n return (\n \n {getChildrenOrFunction(children, context)}\n \n );\n }\n return null;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport React, { PropsWithChildren, useMemo } from \"react\";\nimport { useMsal } from \"../hooks/useMsal.js\";\nimport { useIsAuthenticated } from \"../hooks/useIsAuthenticated.js\";\nimport { getChildrenOrFunction } from \"../utils/utilities.js\";\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { InteractionStatus } from \"@azure/msal-browser\";\n\nexport type UnauthenticatedTemplateProps =\n PropsWithChildren;\n\n/**\n * Renders child components if user is unauthenticated\n * @param props\n */\nexport function UnauthenticatedTemplate({\n username,\n homeAccountId,\n localAccountId,\n children,\n}: UnauthenticatedTemplateProps): React.ReactElement | null {\n const context = useMsal();\n const accountIdentifier: AccountIdentifiers = useMemo(() => {\n return {\n username,\n homeAccountId,\n localAccountId,\n };\n }, [username, homeAccountId, localAccountId]);\n const isAuthenticated = useIsAuthenticated(accountIdentifier);\n\n if (\n !isAuthenticated &&\n context.inProgress !== InteractionStatus.Startup &&\n context.inProgress !== InteractionStatus.HandleRedirect\n ) {\n return (\n \n {getChildrenOrFunction(children, context)}\n \n );\n }\n return null;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { useState, useEffect } from \"react\";\nimport {\n AccountInfo,\n IPublicClientApplication,\n AccountEntity,\n InteractionStatus,\n} from \"@azure/msal-browser\";\nimport { useMsal } from \"./useMsal.js\";\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { getAccountByIdentifiers } from \"../utils/utilities.js\";\n\nfunction getAccount(\n instance: IPublicClientApplication,\n accountIdentifiers?: AccountIdentifiers\n): AccountInfo | null {\n if (\n !accountIdentifiers ||\n (!accountIdentifiers.homeAccountId &&\n !accountIdentifiers.localAccountId &&\n !accountIdentifiers.username)\n ) {\n // If no account identifiers are provided, return active account\n return instance.getActiveAccount();\n }\n\n return getAccountByIdentifiers(\n instance.getAllAccounts(),\n accountIdentifiers\n );\n}\n\n/**\n * Given 1 or more accountIdentifiers, returns the Account object if the user is signed-in\n * @param accountIdentifiers\n */\nexport function useAccount(\n accountIdentifiers?: AccountIdentifiers\n): AccountInfo | null {\n const { instance, inProgress, logger } = useMsal();\n\n const [account, setAccount] = useState(() => {\n if (inProgress === InteractionStatus.Startup) {\n return null;\n } else {\n return getAccount(instance, accountIdentifiers);\n }\n });\n\n useEffect(() => {\n if (inProgress !== InteractionStatus.Startup) {\n setAccount((currentAccount: AccountInfo | null) => {\n const nextAccount = getAccount(instance, accountIdentifiers);\n if (\n !AccountEntity.accountInfoIsEqual(\n currentAccount,\n nextAccount,\n true\n )\n ) {\n logger.info(\"useAccount - Updating account\");\n return nextAccount;\n }\n\n return currentAccount;\n });\n }\n }, [inProgress, accountIdentifiers, instance, logger]);\n\n return account;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"@azure/msal-browser\";\n\nexport const ReactAuthErrorMessage = {\n invalidInteractionType: {\n code: \"invalid_interaction_type\",\n desc: \"The provided interaction type is invalid.\",\n },\n unableToFallbackToInteraction: {\n code: \"unable_to_fallback_to_interaction\",\n desc: \"Interaction is required but another interaction is already in progress. Please try again when the current interaction is complete.\",\n },\n};\n\nexport class ReactAuthError extends AuthError {\n constructor(errorCode: string, errorMessage?: string) {\n super(errorCode, errorMessage);\n\n Object.setPrototypeOf(this, ReactAuthError.prototype);\n this.name = \"ReactAuthError\";\n }\n\n static createInvalidInteractionTypeError(): ReactAuthError {\n return new ReactAuthError(\n ReactAuthErrorMessage.invalidInteractionType.code,\n ReactAuthErrorMessage.invalidInteractionType.desc\n );\n }\n\n static createUnableToFallbackToInteractionError(): ReactAuthError {\n return new ReactAuthError(\n ReactAuthErrorMessage.unableToFallbackToInteraction.code,\n ReactAuthErrorMessage.unableToFallbackToInteraction.desc\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { useCallback, useEffect, useState, useRef } from \"react\";\nimport {\n PopupRequest,\n RedirectRequest,\n SsoSilentRequest,\n InteractionType,\n AuthenticationResult,\n AuthError,\n EventMessage,\n EventType,\n InteractionStatus,\n SilentRequest,\n InteractionRequiredAuthError,\n OIDC_DEFAULT_SCOPES,\n} from \"@azure/msal-browser\";\nimport { useIsAuthenticated } from \"./useIsAuthenticated.js\";\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { useMsal } from \"./useMsal.js\";\nimport { useAccount } from \"./useAccount.js\";\nimport { ReactAuthError } from \"../error/ReactAuthError.js\";\n\nexport type MsalAuthenticationResult = {\n login: (\n callbackInteractionType?: InteractionType | undefined,\n callbackRequest?: PopupRequest | RedirectRequest | SilentRequest\n ) => Promise;\n acquireToken: (\n callbackInteractionType?: InteractionType | undefined,\n callbackRequest?: SilentRequest | undefined\n ) => Promise;\n result: AuthenticationResult | null;\n error: AuthError | null;\n};\n\n/**\n * If a user is not currently signed in this hook invokes a login. Failed logins can be retried using the login callback returned.\n * If a user is currently signed in this hook attempts to acquire a token. Subsequent token requests can use the acquireToken callback returned.\n * Optionally provide a request object to be used in the login/acquireToken call.\n * Optionally provide a specific user that should be logged in.\n * @param interactionType\n * @param authenticationRequest\n * @param accountIdentifiers\n */\nexport function useMsalAuthentication(\n interactionType: InteractionType,\n authenticationRequest?: PopupRequest | RedirectRequest | SsoSilentRequest,\n accountIdentifiers?: AccountIdentifiers\n): MsalAuthenticationResult {\n const { instance, inProgress, logger } = useMsal();\n const isAuthenticated = useIsAuthenticated(accountIdentifiers);\n const account = useAccount(accountIdentifiers);\n const [[result, error], setResponse] = useState<\n [AuthenticationResult | null, AuthError | null]\n >([null, null]);\n\n // Used to prevent state updates after unmount\n const mounted = useRef(true);\n useEffect(() => {\n return () => {\n mounted.current = false;\n };\n }, []);\n\n // Boolean used to check if interaction is in progress in acquireTokenSilent fallback. Use Ref instead of state to prevent acquireToken function from being regenerated on each change to interactionInProgress value\n const interactionInProgress = useRef(inProgress !== InteractionStatus.None);\n useEffect(() => {\n interactionInProgress.current = inProgress !== InteractionStatus.None;\n }, [inProgress]);\n\n // Flag used to control when the hook calls login/acquireToken\n const shouldAcquireToken = useRef(true);\n useEffect(() => {\n if (!!error) {\n // Errors should be handled by consuming component\n shouldAcquireToken.current = false;\n return;\n }\n\n if (!!result) {\n // Token has already been acquired, consuming component/application is responsible for renewing\n shouldAcquireToken.current = false;\n return;\n }\n }, [error, result]);\n\n const login = useCallback(\n async (\n callbackInteractionType?: InteractionType,\n callbackRequest?: PopupRequest | RedirectRequest | SsoSilentRequest\n ): Promise => {\n const loginType = callbackInteractionType || interactionType;\n const loginRequest = callbackRequest || authenticationRequest;\n switch (loginType) {\n case InteractionType.Popup:\n logger.verbose(\n \"useMsalAuthentication - Calling loginPopup\"\n );\n return instance.loginPopup(loginRequest as PopupRequest);\n case InteractionType.Redirect:\n // This promise is not expected to resolve due to full frame redirect\n logger.verbose(\n \"useMsalAuthentication - Calling loginRedirect\"\n );\n return instance\n .loginRedirect(loginRequest as RedirectRequest)\n .then(null);\n case InteractionType.Silent:\n logger.verbose(\"useMsalAuthentication - Calling ssoSilent\");\n return instance.ssoSilent(loginRequest as SsoSilentRequest);\n default:\n throw ReactAuthError.createInvalidInteractionTypeError();\n }\n },\n [instance, interactionType, authenticationRequest, logger]\n );\n\n const acquireToken = useCallback(\n async (\n callbackInteractionType?: InteractionType,\n callbackRequest?: SilentRequest\n ): Promise => {\n const fallbackInteractionType =\n callbackInteractionType || interactionType;\n\n let tokenRequest: SilentRequest;\n\n if (callbackRequest) {\n logger.trace(\n \"useMsalAuthentication - acquireToken - Using request provided in the callback\"\n );\n tokenRequest = {\n ...callbackRequest,\n };\n } else if (authenticationRequest) {\n logger.trace(\n \"useMsalAuthentication - acquireToken - Using request provided in the hook\"\n );\n tokenRequest = {\n ...authenticationRequest,\n scopes: authenticationRequest.scopes || OIDC_DEFAULT_SCOPES,\n };\n } else {\n logger.trace(\n \"useMsalAuthentication - acquireToken - No request object provided, using default request.\"\n );\n tokenRequest = {\n scopes: OIDC_DEFAULT_SCOPES,\n };\n }\n\n if (!tokenRequest.account && account) {\n logger.trace(\n \"useMsalAuthentication - acquireToken - Attaching account to request\"\n );\n tokenRequest.account = account;\n }\n\n const getToken = async (): Promise => {\n logger.verbose(\n \"useMsalAuthentication - Calling acquireTokenSilent\"\n );\n return instance\n .acquireTokenSilent(tokenRequest)\n .catch(async (e: AuthError) => {\n if (e instanceof InteractionRequiredAuthError) {\n if (!interactionInProgress.current) {\n logger.error(\n \"useMsalAuthentication - Interaction required, falling back to interaction\"\n );\n return login(\n fallbackInteractionType,\n tokenRequest\n );\n } else {\n logger.error(\n \"useMsalAuthentication - Interaction required but is already in progress. Please try again, if needed, after interaction completes.\"\n );\n throw ReactAuthError.createUnableToFallbackToInteractionError();\n }\n }\n\n throw e;\n });\n };\n\n return getToken()\n .then((response: AuthenticationResult | null) => {\n if (mounted.current) {\n setResponse([response, null]);\n }\n return response;\n })\n .catch((e: AuthError) => {\n if (mounted.current) {\n setResponse([null, e]);\n }\n throw e;\n });\n },\n [\n instance,\n interactionType,\n authenticationRequest,\n logger,\n account,\n login,\n ]\n );\n\n useEffect(() => {\n const callbackId = instance.addEventCallback(\n (message: EventMessage) => {\n switch (message.eventType) {\n case EventType.LOGIN_SUCCESS:\n case EventType.SSO_SILENT_SUCCESS:\n if (message.payload) {\n setResponse([\n message.payload as AuthenticationResult,\n null,\n ]);\n }\n break;\n case EventType.LOGIN_FAILURE:\n case EventType.SSO_SILENT_FAILURE:\n if (message.error) {\n setResponse([null, message.error as AuthError]);\n }\n break;\n }\n }\n );\n logger.verbose(\n `useMsalAuthentication - Registered event callback with id: ${callbackId}`\n );\n\n return () => {\n if (callbackId) {\n logger.verbose(\n `useMsalAuthentication - Removing event callback ${callbackId}`\n );\n instance.removeEventCallback(callbackId);\n }\n };\n }, [instance, logger]);\n\n useEffect(() => {\n if (\n shouldAcquireToken.current &&\n inProgress === InteractionStatus.None\n ) {\n if (!isAuthenticated) {\n shouldAcquireToken.current = false;\n logger.info(\n \"useMsalAuthentication - No user is authenticated, attempting to login\"\n );\n login().catch(() => {\n // Errors are saved in state above\n return;\n });\n } else if (account) {\n shouldAcquireToken.current = false;\n logger.info(\n \"useMsalAuthentication - User is authenticated, attempting to acquire token\"\n );\n acquireToken().catch(() => {\n // Errors are saved in state above\n return;\n });\n }\n }\n }, [isAuthenticated, account, inProgress, login, acquireToken, logger]);\n\n return {\n login,\n acquireToken,\n result,\n error,\n };\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport React, { PropsWithChildren, useMemo } from \"react\";\nimport { AccountIdentifiers } from \"../types/AccountIdentifiers.js\";\nimport { getChildrenOrFunction } from \"../utils/utilities.js\";\nimport { useMsal } from \"../hooks/useMsal.js\";\nimport {\n MsalAuthenticationResult,\n useMsalAuthentication,\n} from \"../hooks/useMsalAuthentication.js\";\nimport { useIsAuthenticated } from \"../hooks/useIsAuthenticated.js\";\nimport {\n InteractionType,\n PopupRequest,\n RedirectRequest,\n SsoSilentRequest,\n InteractionStatus,\n} from \"@azure/msal-browser\";\nimport { IMsalContext } from \"../MsalContext.js\";\n\nexport type MsalAuthenticationProps = PropsWithChildren<\n AccountIdentifiers & {\n interactionType: InteractionType;\n authenticationRequest?:\n | PopupRequest\n | RedirectRequest\n | SsoSilentRequest;\n loadingComponent?: React.ElementType;\n errorComponent?: React.ElementType;\n }\n>;\n\n/**\n * Attempts to authenticate user if not already authenticated, then renders child components\n * @param props\n */\nexport function MsalAuthenticationTemplate({\n interactionType,\n username,\n homeAccountId,\n localAccountId,\n authenticationRequest,\n loadingComponent: LoadingComponent,\n errorComponent: ErrorComponent,\n children,\n}: MsalAuthenticationProps): React.ReactElement | null {\n const accountIdentifier: AccountIdentifiers = useMemo(() => {\n return {\n username,\n homeAccountId,\n localAccountId,\n };\n }, [username, homeAccountId, localAccountId]);\n const context = useMsal();\n const msalAuthResult = useMsalAuthentication(\n interactionType,\n authenticationRequest,\n accountIdentifier\n );\n const isAuthenticated = useIsAuthenticated(accountIdentifier);\n\n if (msalAuthResult.error && context.inProgress === InteractionStatus.None) {\n if (!!ErrorComponent) {\n return ;\n }\n\n throw msalAuthResult.error;\n }\n\n if (isAuthenticated) {\n return (\n \n {getChildrenOrFunction(children, msalAuthResult)}\n \n );\n }\n\n if (!!LoadingComponent && context.inProgress !== InteractionStatus.None) {\n return ;\n }\n\n return null;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport React from \"react\";\nimport { IMsalContext } from \"../MsalContext.js\";\nimport { useMsal } from \"../hooks/useMsal.js\";\nimport { Subtract } from \"../utils/utilities.js\";\n\nexport type WithMsalProps = {\n msalContext: IMsalContext;\n};\n\n/**\n * Higher order component wraps provided component with msal by injecting msal context values into the component's props\n * @param Component\n */\nexport const withMsal =

(\n Component: React.ComponentType

\n): React.FunctionComponent> => {\n const ComponentWithMsal: React.FunctionComponent<\n Subtract\n > = (props) => {\n const msal = useMsal();\n return ;\n };\n\n const componentName =\n Component.displayName || Component.name || \"Component\";\n ComponentWithMsal.displayName = `withMsal(${componentName})`;\n\n return ComponentWithMsal;\n};\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAyBA,IAAM,qBAAmC;EACrC,UAAU;EACV,YAAY,kBAAkB;EAC9B,UAAU,CAAA;EACV,QAAQ,IAAI,OAAO,CAAA,CAAE;;AAGZ,IAAA,cACH,oBAA4B,kBAAkB;AAC3C,IAAA,eAAe,YAAY;;;;;;ACxBxB,SAAA,sBACZ,UACA,MAAO;AAEP,MAAI,OAAO,aAAa,YAAY;AAChC,WAAO,SAAS,IAAI;EACvB;AACD,SAAO;AACX;AAmBgB,SAAA,sBACZ,QACA,QAAiC;AAEjC,MAAI,OAAO,WAAW,OAAO,QAAQ;AACjC,WAAO;EACV;AAED,QAAM,kBAAkB,CAAC,GAAG,MAAM;AAElC,SAAO,OAAO,MAAM,CAAC,aAAY;AAC7B,UAAM,WAAW,gBAAgB,MAAK;AACtC,QAAI,CAAC,YAAY,CAAC,UAAU;AACxB,aAAO;IACV;AAED,WACI,SAAS,kBAAkB,SAAS,iBACpC,SAAS,mBAAmB,SAAS,kBACrC,SAAS,aAAa,SAAS;EAEvC,CAAC;AACL;AAEgB,SAAA,wBACZ,aACA,oBAAsC;AAEtC,MACI,YAAY,SAAS,MACpB,mBAAmB,iBAChB,mBAAmB,kBACnB,mBAAmB,WACzB;AACE,UAAM,kBAAkB,YAAY,OAAO,CAAC,eAAc;AACtD,UACI,mBAAmB,YACnB,mBAAmB,SAAS,YAAW,MACnC,WAAW,SAAS,YAAW,GACrC;AACE,eAAO;MACV;AACD,UACI,mBAAmB,iBACnB,mBAAmB,cAAc,YAAW,MACxC,WAAW,cAAc,YAAW,GAC1C;AACE,eAAO;MACV;AACD,UACI,mBAAmB,kBACnB,mBAAmB,eAAe,YAAW,MACzC,WAAW,eAAe,YAAW,GAC3C;AACE,eAAO;MACV;AAED,aAAO;IACX,CAAC;AAED,WAAO,gBAAgB,CAAC,KAAK;EAChC,OAAM;AACH,WAAO;EACV;AACL;;;ACpGO,IAAM,OAAO;AACb,IAAM,UAAU;;;AC+BvB,IAAM,yBAAyB;EAC3B,oBAAoB;EACpB,OAAO;;AAmBX,IAAM,UAAU,CACZ,eACA,WACW;AACX,QAAM,EAAE,MAAM,QAAO,IAAK;AAC1B,MAAI,gBAAgB,cAAc;AAElC,UAAQ,MAAI;IACR,KAAK,uBAAuB;AACxB,UAAI,cAAc,eAAe,kBAAkB,SAAS;AACxD,wBAAgB,kBAAkB;AAClC,gBAAQ,OAAO,KACX,6EAA6E;MAEpF;AACD;IACJ,KAAK,uBAAuB;AACxB,YAAM,UAAU,QAAQ;AACxB,YAAM,SAAS,kBAAkB,8BAC7B,SACA,cAAc,UAAU;AAE5B,UAAI,QAAQ;AACR,gBAAQ,OAAO,KACX,kBAAkB,QAAQ,SAAS,uCAAuC,cAAc,UAAU,OAAO,MAAM,EAAE;AAErH,wBAAgB;MACnB;AACD;IACJ;AACI,YAAM,IAAI,MAAM,wBAAwB,IAAI,EAAE;EACrD;AAED,MAAI,kBAAkB,kBAAkB,SAAS;AAE7C,WAAO;EACV;AAED,QAAM,kBAAkB,QAAQ,SAAS,eAAc;AACvD,MACI,kBAAkB,cAAc,cAChC,CAAC,sBAAsB,iBAAiB,cAAc,QAAQ,GAChE;AAEE,WAAO;MACH,GAAG;MACH,YAAY;MACZ,UAAU;;EAEjB,WAAU,kBAAkB,cAAc,YAAY;AAEnD,WAAO;MACH,GAAG;MACH,YAAY;;EAEnB,WACG,CAAC,sBAAsB,iBAAiB,cAAc,QAAQ,GAChE;AAEE,WAAO;MACH,GAAG;MACH,UAAU;;EAEjB,OAAM;AAEH,WAAO;EACV;AACL;SAKgB,aAAa,EACzB,UACA,SAAQ,GACQ;AAChB,8BAAU,MAAK;AACX,aAAS,yBAAyB,WAAW,OAAO,OAAO;EAC/D,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,aAAS,sBAAQ,MAAK;AACxB,WAAO,SAAS,UAAS,EAAG,MAAMA,MAAK,OAAO;EAClD,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,CAAC,OAAO,WAAW,QAAI,yBAAW,SAAS,QAAW,MAAK;AAE7D,WAAO;MACH,YAAY,kBAAkB;MAC9B,UAAU,CAAA;;EAElB,CAAC;AAED,8BAAU,MAAK;AACX,UAAM,aAAa,SAAS,iBACxB,CAAC,YAAyB;AACtB,kBAAY;QACR,SAAS;UACL;UACA;UACA;QACH;QACD,MAAM,uBAAuB;MAChC,CAAA;IACL,CAAC;AAEL,WAAO,QACH,qDAAqD,UAAU,EAAE;AAGrE,aACK,WAAU,EACV,KAAK,MAAK;AACP,eACK,sBAAqB,EACrB,MAAM,MAAK;AAER;MACJ,CAAC,EACA,QAAQ,MAAK;AAKV,oBAAY;UACR,SAAS;YACL;YACA;UACH;UACD,MAAM,uBAAuB;QAChC,CAAA;MACL,CAAC;IACT,CAAC,EACA,MAAM,MAAK;AAER;IACJ,CAAC;AAEL,WAAO,MAAK;AAER,UAAI,YAAY;AACZ,eAAO,QACH,0CAA0C,UAAU,EAAE;AAE1D,iBAAS,oBAAoB,UAAU;MAC1C;IACL;EACJ,GAAG,CAAC,UAAU,MAAM,CAAC;AAErB,QAAM,eAA6B;IAC/B;IACA,YAAY,MAAM;IAClB,UAAU,MAAM;IAChB;;AAGJ,SACIC,aAAAA,QAAA,cAAC,YAAY,UAAQ,EAAC,OAAO,aAAY,GACpC,QAAQ;AAGrB;;;;;;;AC3Ma,IAAA,UAAU,UAAoB,0BAAW,WAAW;;;;ACAjE,SAAS,gBACL,aACA,cAAiC;AAEjC,MACI,iBACC,aAAa,YACV,aAAa,iBACb,aAAa,iBACnB;AACE,WAAO,CAAC,CAAC,wBAAwB,aAAa,YAAY;EAC7D;AAED,SAAO,YAAY,SAAS;AAChC;AAMM,SAAU,mBAAmB,cAAiC;AAChE,QAAM,EAAE,UAAU,aAAa,WAAU,IAAK,QAAO;AAErD,QAAM,0BAAsB,uBAAQ,MAAK;AACrC,QAAI,eAAe,kBAAkB,SAAS;AAC1C,aAAO;IACV;AACD,WAAO,gBAAgB,aAAa,YAAY;KACjD,CAAC,aAAa,YAAY,YAAY,CAAC;AAE1C,SAAO;AACX;;;ACxBM,SAAU,sBAAsB,EAClC,UACA,eACA,gBACA,SAAQ,GACiB;AACzB,QAAM,UAAU,QAAO;AACvB,QAAM,wBAAwC,uBAAQ,MAAK;AACvD,WAAO;MACH;MACA;MACA;;KAEL,CAAC,UAAU,eAAe,cAAc,CAAC;AAC5C,QAAMC,mBAAkB,mBAAmB,iBAAiB;AAE5D,MAAIA,oBAAmB,QAAQ,eAAe,kBAAkB,SAAS;AACrE,WACIC,cAAAA,QAAA,cAACA,cAAAA,QAAM,UACF,MAAA,sBAAsB,UAAU,OAAO,CAAC;EAGpD;AACD,SAAO;AACX;;;;ACvBM,SAAU,wBAAwB,EACpC,UACA,eACA,gBACA,SAAQ,GACmB;AAC3B,QAAM,UAAU,QAAO;AACvB,QAAM,wBAAwC,uBAAQ,MAAK;AACvD,WAAO;MACH;MACA;MACA;;KAEL,CAAC,UAAU,eAAe,cAAc,CAAC;AAC5C,QAAMC,mBAAkB,mBAAmB,iBAAiB;AAE5D,MACI,CAACA,oBACD,QAAQ,eAAe,kBAAkB,WACzC,QAAQ,eAAe,kBAAkB,gBAC3C;AACE,WACIC,cAAAA,QAAA,cAACA,cAAAA,QAAM,UACF,MAAA,sBAAsB,UAAU,OAAO,CAAC;EAGpD;AACD,SAAO;AACX;;;;;;;;;;AC/BA,SAAS,WACL,UACA,oBAAuC;AAEvC,MACI,CAAC,sBACA,CAAC,mBAAmB,iBACjB,CAAC,mBAAmB,kBACpB,CAAC,mBAAmB,UAC1B;AAEE,WAAO,SAAS,iBAAgB;EACnC;AAED,SAAO,wBACH,SAAS,eAAc,GACvB,kBAAkB;AAE1B;AAMM,SAAU,WACZ,oBAAuC;AAEvC,QAAM,EAAE,UAAU,YAAY,OAAM,IAAK,QAAO;AAEhD,QAAM,CAAC,SAAS,UAAU,QAAI,wBAA6B,MAAK;AAC5D,QAAI,eAAe,kBAAkB,SAAS;AAC1C,aAAO;IACV,OAAM;AACH,aAAO,WAAW,UAAU,kBAAkB;IACjD;EACL,CAAC;AAED,+BAAU,MAAK;AACX,QAAI,eAAe,kBAAkB,SAAS;AAC1C,iBAAW,CAAC,mBAAsC;AAC9C,cAAM,cAAc,WAAW,UAAU,kBAAkB;AAC3D,YACI,CAAC,cAAc,mBACX,gBACA,aACA,IAAI,GAEV;AACE,iBAAO,KAAK,+BAA+B;AAC3C,iBAAO;QACV;AAED,eAAO;MACX,CAAC;IACJ;KACF,CAAC,YAAY,oBAAoB,UAAU,MAAM,CAAC;AAErD,SAAO;AACX;;;ACnEa,IAAA,wBAAwB;EACjC,wBAAwB;IACpB,MAAM;IACN,MAAM;EACT;EACD,+BAA+B;IAC3B,MAAM;IACN,MAAM;EACT;;AAGC,IAAO,iBAAP,MAAO,wBAAuB,UAAS;EACzC,YAAY,WAAmB,cAAqB;AAChD,UAAM,WAAW,YAAY;AAE7B,WAAO,eAAe,MAAM,gBAAe,SAAS;AACpD,SAAK,OAAO;;EAGhB,OAAO,oCAAiC;AACpC,WAAO,IAAI,gBACP,sBAAsB,uBAAuB,MAC7C,sBAAsB,uBAAuB,IAAI;;EAIzD,OAAO,2CAAwC;AAC3C,WAAO,IAAI,gBACP,sBAAsB,8BAA8B,MACpD,sBAAsB,8BAA8B,IAAI;;AAGnE;;;SCSe,sBACZ,iBACA,uBACA,oBAAuC;AAEvC,QAAM,EAAE,UAAU,YAAY,OAAM,IAAK,QAAO;AAChD,QAAMC,mBAAkB,mBAAmB,kBAAkB;AAC7D,QAAM,UAAU,WAAW,kBAAkB;AAC7C,QAAM,CAAC,CAAC,QAAQ,KAAK,GAAG,WAAW,QAAI,wBAErC,CAAC,MAAM,IAAI,CAAC;AAGd,QAAM,cAAU,sBAAO,IAAI;AAC3B,+BAAU,MAAK;AACX,WAAO,MAAK;AACR,cAAQ,UAAU;IACtB;KACD,CAAA,CAAE;AAGL,QAAM,4BAAwB,sBAAO,eAAe,kBAAkB,IAAI;AAC1E,+BAAU,MAAK;AACX,0BAAsB,UAAU,eAAe,kBAAkB;EACrE,GAAG,CAAC,UAAU,CAAC;AAGf,QAAM,yBAAqB,sBAAO,IAAI;AACtC,+BAAU,MAAK;AACX,QAAI,CAAC,CAAC,OAAO;AAET,yBAAmB,UAAU;AAC7B;IACH;AAED,QAAI,CAAC,CAAC,QAAQ;AAEV,yBAAmB,UAAU;AAC7B;IACH;EACL,GAAG,CAAC,OAAO,MAAM,CAAC;AAElB,QAAM,YAAQ,2BACV,OACI,yBACA,oBACsC;AACtC,UAAM,YAAY,2BAA2B;AAC7C,UAAM,eAAe,mBAAmB;AACxC,YAAQ,WAAS;MACb,KAAK,gBAAgB;AACjB,eAAO,QACH,4CAA4C;AAEhD,eAAO,SAAS,WAAW,YAA4B;MAC3D,KAAK,gBAAgB;AAEjB,eAAO,QACH,+CAA+C;AAEnD,eAAO,SACF,cAAc,YAA+B,EAC7C,KAAK,IAAI;MAClB,KAAK,gBAAgB;AACjB,eAAO,QAAQ,2CAA2C;AAC1D,eAAO,SAAS,UAAU,YAAgC;MAC9D;AACI,cAAM,eAAe,kCAAiC;IAC7D;KAEL,CAAC,UAAU,iBAAiB,uBAAuB,MAAM,CAAC;AAG9D,QAAM,mBAAe,2BACjB,OACI,yBACA,oBACsC;AACtC,UAAM,0BACF,2BAA2B;AAE/B,QAAI;AAEJ,QAAI,iBAAiB;AACjB,aAAO,MACH,+EAA+E;AAEnF,qBAAe;QACX,GAAG;;IAEV,WAAU,uBAAuB;AAC9B,aAAO,MACH,2EAA2E;AAE/E,qBAAe;QACX,GAAG;QACH,QAAQ,sBAAsB,UAAU;;IAE/C,OAAM;AACH,aAAO,MACH,2FAA2F;AAE/F,qBAAe;QACX,QAAQ;;IAEf;AAED,QAAI,CAAC,aAAa,WAAW,SAAS;AAClC,aAAO,MACH,qEAAqE;AAEzE,mBAAa,UAAU;IAC1B;AAED,UAAM,WAAW,YAAiD;AAC9D,aAAO,QACH,oDAAoD;AAExD,aAAO,SACF,mBAAmB,YAAY,EAC/B,MAAM,OAAO,MAAgB;AAC1B,YAAI,aAAa,8BAA8B;AAC3C,cAAI,CAAC,sBAAsB,SAAS;AAChC,mBAAO,MACH,2EAA2E;AAE/E,mBAAO,MACH,yBACA,YAAY;UAEnB,OAAM;AACH,mBAAO,MACH,oIAAoI;AAExI,kBAAM,eAAe,yCAAwC;UAChE;QACJ;AAED,cAAM;MACV,CAAC;IACT;AAEA,WAAO,SAAQ,EACV,KAAK,CAAC,aAAyC;AAC5C,UAAI,QAAQ,SAAS;AACjB,oBAAY,CAAC,UAAU,IAAI,CAAC;MAC/B;AACD,aAAO;IACX,CAAC,EACA,MAAM,CAAC,MAAgB;AACpB,UAAI,QAAQ,SAAS;AACjB,oBAAY,CAAC,MAAM,CAAC,CAAC;MACxB;AACD,YAAM;IACV,CAAC;EACT,GACA;IACI;IACA;IACA;IACA;IACA;IACA;EACH,CAAA;AAGL,+BAAU,MAAK;AACX,UAAM,aAAa,SAAS,iBACxB,CAAC,YAAyB;AACtB,cAAQ,QAAQ,WAAS;QACrB,KAAK,UAAU;QACf,KAAK,UAAU;AACX,cAAI,QAAQ,SAAS;AACjB,wBAAY;cACR,QAAQ;cACR;YACH,CAAA;UACJ;AACD;QACJ,KAAK,UAAU;QACf,KAAK,UAAU;AACX,cAAI,QAAQ,OAAO;AACf,wBAAY,CAAC,MAAM,QAAQ,KAAkB,CAAC;UACjD;AACD;MACP;IACL,CAAC;AAEL,WAAO,QACH,8DAA8D,UAAU,EAAE;AAG9E,WAAO,MAAK;AACR,UAAI,YAAY;AACZ,eAAO,QACH,mDAAmD,UAAU,EAAE;AAEnE,iBAAS,oBAAoB,UAAU;MAC1C;IACL;EACJ,GAAG,CAAC,UAAU,MAAM,CAAC;AAErB,+BAAU,MAAK;AACX,QACI,mBAAmB,WACnB,eAAe,kBAAkB,MACnC;AACE,UAAI,CAACA,kBAAiB;AAClB,2BAAmB,UAAU;AAC7B,eAAO,KACH,uEAAuE;AAE3E,cAAK,EAAG,MAAM,MAAK;AAEf;QACJ,CAAC;MACJ,WAAU,SAAS;AAChB,2BAAmB,UAAU;AAC7B,eAAO,KACH,4EAA4E;AAEhF,qBAAY,EAAG,MAAM,MAAK;AAEtB;QACJ,CAAC;MACJ;IACJ;EACL,GAAG,CAACA,kBAAiB,SAAS,YAAY,OAAO,cAAc,MAAM,CAAC;AAEtE,SAAO;IACH;IACA;IACA;IACA;;AAER;;;ACpPM,SAAU,2BAA2B,EACvC,iBACA,UACA,eACA,gBACA,uBACA,kBAAkB,kBAClB,gBAAgB,gBAChB,SAAQ,GACc;AACtB,QAAM,wBAAwC,uBAAQ,MAAK;AACvD,WAAO;MACH;MACA;MACA;;KAEL,CAAC,UAAU,eAAe,cAAc,CAAC;AAC5C,QAAM,UAAU,QAAO;AACvB,QAAM,iBAAiB,sBACnB,iBACA,uBACA,iBAAiB;AAErB,QAAMC,mBAAkB,mBAAmB,iBAAiB;AAE5D,MAAI,eAAe,SAAS,QAAQ,eAAe,kBAAkB,MAAM;AACvE,QAAI,CAAC,CAAC,gBAAgB;AAClB,aAAOC,cAAAA,QAAC,cAAA,gBAAmB,EAAA,GAAA,eAAc,CAAA;IAC5C;AAED,UAAM,eAAe;EACxB;AAED,MAAID,kBAAiB;AACjB,WACIC,cAAAA,QAAA,cAACA,cAAAA,QAAM,UACF,MAAA,sBAAsB,UAAU,cAAc,CAAC;EAG3D;AAED,MAAI,CAAC,CAAC,oBAAoB,QAAQ,eAAe,kBAAkB,MAAM;AACrE,WAAOA,cAAAA,QAAC,cAAA,kBAAqB,EAAA,GAAA,QAAO,CAAA;EACvC;AAED,SAAO;AACX;;;;ACnEa,IAAA,WAAW,CACpB,cACqD;AACrD,QAAM,oBAEF,CAAC,UAAS;AACV,UAAM,OAAO,QAAO;AACpB,WAAOC,cAAAA,QAAA,cAAC,WAAe,EAAA,GAAA,OAAa,aAAa,KAAI,CAAA;EACzD;AAEA,QAAM,gBACF,UAAU,eAAe,UAAU,QAAQ;AAC/C,oBAAkB,cAAc,YAAY,aAAa;AAEzD,SAAO;AACX;", + "names": ["SKU", "React", "isAuthenticated", "React", "isAuthenticated", "React", "isAuthenticated", "isAuthenticated", "React", "React"] +} diff --git a/node_modules/.vite/deps/@dnd-kit_core.js b/node_modules/.vite/deps/@dnd-kit_core.js new file mode 100644 index 00000000..c277fb0c --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_core.js @@ -0,0 +1,71 @@ +import { + AutoScrollActivator, + DndContext, + DragOverlay, + KeyboardCode, + KeyboardSensor, + MeasuringFrequency, + MeasuringStrategy, + MouseSensor, + PointerSensor, + TouchSensor, + TraversalOrder, + applyModifiers, + closestCenter, + closestCorners, + defaultAnnouncements, + defaultCoordinates, + defaultDropAnimationConfiguration, + defaultDropAnimationSideEffects, + defaultKeyboardCoordinateGetter, + defaultScreenReaderInstructions, + getClientRect, + getFirstCollision, + getScrollableAncestors, + pointerWithin, + rectIntersection, + useDndContext, + useDndMonitor, + useDraggable, + useDroppable, + useSensor, + useSensors +} from "./chunk-V27RRWZQ.js"; +import "./chunk-BAWHRVBE.js"; +import "./chunk-R6S4VRB5.js"; +import "./chunk-3TFVT2CW.js"; +import "./chunk-4MBMRILA.js"; +export { + AutoScrollActivator, + DndContext, + DragOverlay, + KeyboardCode, + KeyboardSensor, + MeasuringFrequency, + MeasuringStrategy, + MouseSensor, + PointerSensor, + TouchSensor, + TraversalOrder, + applyModifiers, + closestCenter, + closestCorners, + defaultAnnouncements, + defaultCoordinates, + defaultDropAnimationConfiguration as defaultDropAnimation, + defaultDropAnimationSideEffects, + defaultKeyboardCoordinateGetter, + defaultScreenReaderInstructions, + getClientRect, + getFirstCollision, + getScrollableAncestors, + pointerWithin, + rectIntersection, + useDndContext, + useDndMonitor, + useDraggable, + useDroppable, + useSensor, + useSensors +}; +//# sourceMappingURL=@dnd-kit_core.js.map diff --git a/node_modules/.vite/deps/@dnd-kit_core.js.map b/node_modules/.vite/deps/@dnd-kit_core.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_core.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/node_modules/.vite/deps/@dnd-kit_modifiers.js b/node_modules/.vite/deps/@dnd-kit_modifiers.js new file mode 100644 index 00000000..c2d7a801 --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_modifiers.js @@ -0,0 +1,118 @@ +import { + getEventCoordinates +} from "./chunk-BAWHRVBE.js"; +import "./chunk-3TFVT2CW.js"; +import "./chunk-4MBMRILA.js"; + +// node_modules/@dnd-kit/modifiers/dist/modifiers.esm.js +function createSnapModifier(gridSize) { + return (_ref) => { + let { + transform + } = _ref; + return { + ...transform, + x: Math.ceil(transform.x / gridSize) * gridSize, + y: Math.ceil(transform.y / gridSize) * gridSize + }; + }; +} +var restrictToHorizontalAxis = (_ref) => { + let { + transform + } = _ref; + return { + ...transform, + y: 0 + }; +}; +function restrictToBoundingRect(transform, rect, boundingRect) { + const value = { + ...transform + }; + if (rect.top + transform.y <= boundingRect.top) { + value.y = boundingRect.top - rect.top; + } else if (rect.bottom + transform.y >= boundingRect.top + boundingRect.height) { + value.y = boundingRect.top + boundingRect.height - rect.bottom; + } + if (rect.left + transform.x <= boundingRect.left) { + value.x = boundingRect.left - rect.left; + } else if (rect.right + transform.x >= boundingRect.left + boundingRect.width) { + value.x = boundingRect.left + boundingRect.width - rect.right; + } + return value; +} +var restrictToParentElement = (_ref) => { + let { + containerNodeRect, + draggingNodeRect, + transform + } = _ref; + if (!draggingNodeRect || !containerNodeRect) { + return transform; + } + return restrictToBoundingRect(transform, draggingNodeRect, containerNodeRect); +}; +var restrictToFirstScrollableAncestor = (_ref) => { + let { + draggingNodeRect, + transform, + scrollableAncestorRects + } = _ref; + const firstScrollableAncestorRect = scrollableAncestorRects[0]; + if (!draggingNodeRect || !firstScrollableAncestorRect) { + return transform; + } + return restrictToBoundingRect(transform, draggingNodeRect, firstScrollableAncestorRect); +}; +var restrictToVerticalAxis = (_ref) => { + let { + transform + } = _ref; + return { + ...transform, + x: 0 + }; +}; +var restrictToWindowEdges = (_ref) => { + let { + transform, + draggingNodeRect, + windowRect + } = _ref; + if (!draggingNodeRect || !windowRect) { + return transform; + } + return restrictToBoundingRect(transform, draggingNodeRect, windowRect); +}; +var snapCenterToCursor = (_ref) => { + let { + activatorEvent, + draggingNodeRect, + transform + } = _ref; + if (draggingNodeRect && activatorEvent) { + const activatorCoordinates = getEventCoordinates(activatorEvent); + if (!activatorCoordinates) { + return transform; + } + const offsetX = activatorCoordinates.x - draggingNodeRect.left; + const offsetY = activatorCoordinates.y - draggingNodeRect.top; + return { + ...transform, + x: transform.x + offsetX - draggingNodeRect.width / 2, + y: transform.y + offsetY - draggingNodeRect.height / 2 + }; + } + return transform; +}; +export { + createSnapModifier, + restrictToFirstScrollableAncestor, + restrictToHorizontalAxis, + restrictToParentElement, + restrictToVerticalAxis, + restrictToWindowEdges, + snapCenterToCursor +}; +//# sourceMappingURL=@dnd-kit_modifiers.js.map diff --git a/node_modules/.vite/deps/@dnd-kit_modifiers.js.map b/node_modules/.vite/deps/@dnd-kit_modifiers.js.map new file mode 100644 index 00000000..4a690763 --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_modifiers.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@dnd-kit/modifiers/src/createSnapModifier.ts", "../../@dnd-kit/modifiers/src/restrictToHorizontalAxis.ts", "../../@dnd-kit/modifiers/src/utilities/restrictToBoundingRect.ts", "../../@dnd-kit/modifiers/src/restrictToParentElement.ts", "../../@dnd-kit/modifiers/src/restrictToFirstScrollableAncestor.ts", "../../@dnd-kit/modifiers/src/restrictToVerticalAxis.ts", "../../@dnd-kit/modifiers/src/restrictToWindowEdges.ts", "../../@dnd-kit/modifiers/src/snapCenterToCursor.ts"], + "sourcesContent": ["import type {Modifier} from '@dnd-kit/core';\n\nexport function createSnapModifier(gridSize: number): Modifier {\n return ({transform}) => ({\n ...transform,\n x: Math.ceil(transform.x / gridSize) * gridSize,\n y: Math.ceil(transform.y / gridSize) * gridSize,\n });\n}\n", "import type {Modifier} from '@dnd-kit/core';\n\nexport const restrictToHorizontalAxis: Modifier = ({transform}) => {\n return {\n ...transform,\n y: 0,\n };\n};\n", "import type {ClientRect} from '@dnd-kit/core';\nimport type {Transform} from '@dnd-kit/utilities';\n\nexport function restrictToBoundingRect(\n transform: Transform,\n rect: ClientRect,\n boundingRect: ClientRect\n): Transform {\n const value = {\n ...transform,\n };\n\n if (rect.top + transform.y <= boundingRect.top) {\n value.y = boundingRect.top - rect.top;\n } else if (\n rect.bottom + transform.y >=\n boundingRect.top + boundingRect.height\n ) {\n value.y = boundingRect.top + boundingRect.height - rect.bottom;\n }\n\n if (rect.left + transform.x <= boundingRect.left) {\n value.x = boundingRect.left - rect.left;\n } else if (\n rect.right + transform.x >=\n boundingRect.left + boundingRect.width\n ) {\n value.x = boundingRect.left + boundingRect.width - rect.right;\n }\n\n return value;\n}\n", "import type {Modifier} from '@dnd-kit/core';\nimport {restrictToBoundingRect} from './utilities';\n\nexport const restrictToParentElement: Modifier = ({\n containerNodeRect,\n draggingNodeRect,\n transform,\n}) => {\n if (!draggingNodeRect || !containerNodeRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, containerNodeRect);\n};\n", "import type {Modifier} from '@dnd-kit/core';\nimport {restrictToBoundingRect} from './utilities';\n\nexport const restrictToFirstScrollableAncestor: Modifier = ({\n draggingNodeRect,\n transform,\n scrollableAncestorRects,\n}) => {\n const firstScrollableAncestorRect = scrollableAncestorRects[0];\n\n if (!draggingNodeRect || !firstScrollableAncestorRect) {\n return transform;\n }\n\n return restrictToBoundingRect(\n transform,\n draggingNodeRect,\n firstScrollableAncestorRect\n );\n};\n", "import type {Modifier} from '@dnd-kit/core';\n\nexport const restrictToVerticalAxis: Modifier = ({transform}) => {\n return {\n ...transform,\n x: 0,\n };\n};\n", "import type {Modifier} from '@dnd-kit/core';\n\nimport {restrictToBoundingRect} from './utilities';\n\nexport const restrictToWindowEdges: Modifier = ({\n transform,\n draggingNodeRect,\n windowRect,\n}) => {\n if (!draggingNodeRect || !windowRect) {\n return transform;\n }\n\n return restrictToBoundingRect(transform, draggingNodeRect, windowRect);\n};\n", "import type {Modifier} from '@dnd-kit/core';\nimport {getEventCoordinates} from '@dnd-kit/utilities';\n\nexport const snapCenterToCursor: Modifier = ({\n activatorEvent,\n draggingNodeRect,\n transform,\n}) => {\n if (draggingNodeRect && activatorEvent) {\n const activatorCoordinates = getEventCoordinates(activatorEvent);\n\n if (!activatorCoordinates) {\n return transform;\n }\n\n const offsetX = activatorCoordinates.x - draggingNodeRect.left;\n const offsetY = activatorCoordinates.y - draggingNodeRect.top;\n\n return {\n ...transform,\n x: transform.x + offsetX - draggingNodeRect.width / 2,\n y: transform.y + offsetY - draggingNodeRect.height / 2,\n };\n }\n\n return transform;\n};\n"], + "mappings": ";;;;;;;SAEgBA,mBAAmBC,UAAAA;AACjC,SAAO,UAAA;AAAA,QAAC;MAACC;QAAF;AAAA,WAAkB;MACvB,GAAGA;MACHC,GAAGC,KAAKC,KAAKH,UAAUC,IAAIF,QAAxB,IAAoCA;MACvCK,GAAGF,KAAKC,KAAKH,UAAUI,IAAIL,QAAxB,IAAoCA;;;AAE1C;ICNYM,2BAAqC,UAAA;MAAC;IAACL;;AAClD,SAAO;IACL,GAAGA;IACHI,GAAG;;AAEN;SCJeE,uBACdN,WACAO,MACAC,cAAAA;AAEA,QAAMC,QAAQ;IACZ,GAAGT;;AAGL,MAAIO,KAAKG,MAAMV,UAAUI,KAAKI,aAAaE,KAAK;AAC9CD,UAAML,IAAII,aAAaE,MAAMH,KAAKG;aAElCH,KAAKI,SAASX,UAAUI,KACxBI,aAAaE,MAAMF,aAAaI,QAChC;AACAH,UAAML,IAAII,aAAaE,MAAMF,aAAaI,SAASL,KAAKI;;AAG1D,MAAIJ,KAAKM,OAAOb,UAAUC,KAAKO,aAAaK,MAAM;AAChDJ,UAAMR,IAAIO,aAAaK,OAAON,KAAKM;aAEnCN,KAAKO,QAAQd,UAAUC,KACvBO,aAAaK,OAAOL,aAAaO,OACjC;AACAN,UAAMR,IAAIO,aAAaK,OAAOL,aAAaO,QAAQR,KAAKO;;AAG1D,SAAOL;AACR;IC5BYO,0BAAoC,UAAA;MAAC;IAChDC;IACAC;IACAlB;;AAEA,MAAI,CAACkB,oBAAoB,CAACD,mBAAmB;AAC3C,WAAOjB;;AAGT,SAAOM,uBAAuBN,WAAWkB,kBAAkBD,iBAA9B;AAC9B;ICVYE,oCAA8C,UAAA;MAAC;IAC1DD;IACAlB;IACAoB;;AAEA,QAAMC,8BAA8BD,wBAAwB,CAAD;AAE3D,MAAI,CAACF,oBAAoB,CAACG,6BAA6B;AACrD,WAAOrB;;AAGT,SAAOM,uBACLN,WACAkB,kBACAG,2BAH2B;AAK9B;ICjBYC,yBAAmC,UAAA;MAAC;IAACtB;;AAChD,SAAO;IACL,GAAGA;IACHC,GAAG;;AAEN;ICHYsB,wBAAkC,UAAA;MAAC;IAC9CvB;IACAkB;IACAM;;AAEA,MAAI,CAACN,oBAAoB,CAACM,YAAY;AACpC,WAAOxB;;AAGT,SAAOM,uBAAuBN,WAAWkB,kBAAkBM,UAA9B;AAC9B;ICXYC,qBAA+B,UAAA;MAAC;IAC3CC;IACAR;IACAlB;;AAEA,MAAIkB,oBAAoBQ,gBAAgB;AACtC,UAAMC,uBAAuBC,oBAAoBF,cAAD;AAEhD,QAAI,CAACC,sBAAsB;AACzB,aAAO3B;;AAGT,UAAM6B,UAAUF,qBAAqB1B,IAAIiB,iBAAiBL;AAC1D,UAAMiB,UAAUH,qBAAqBvB,IAAIc,iBAAiBR;AAE1D,WAAO;MACL,GAAGV;MACHC,GAAGD,UAAUC,IAAI4B,UAAUX,iBAAiBH,QAAQ;MACpDX,GAAGJ,UAAUI,IAAI0B,UAAUZ,iBAAiBN,SAAS;;;AAIzD,SAAOZ;AACR;", + "names": ["createSnapModifier", "gridSize", "transform", "x", "Math", "ceil", "y", "restrictToHorizontalAxis", "restrictToBoundingRect", "rect", "boundingRect", "value", "top", "bottom", "height", "left", "right", "width", "restrictToParentElement", "containerNodeRect", "draggingNodeRect", "restrictToFirstScrollableAncestor", "scrollableAncestorRects", "firstScrollableAncestorRect", "restrictToVerticalAxis", "restrictToWindowEdges", "windowRect", "snapCenterToCursor", "activatorEvent", "activatorCoordinates", "getEventCoordinates", "offsetX", "offsetY"] +} diff --git a/node_modules/.vite/deps/@dnd-kit_sortable.js b/node_modules/.vite/deps/@dnd-kit_sortable.js new file mode 100644 index 00000000..83239c76 --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_sortable.js @@ -0,0 +1,717 @@ +import { + KeyboardCode, + closestCorners, + getClientRect, + getFirstCollision, + getScrollableAncestors, + useDndContext, + useDraggable, + useDroppable +} from "./chunk-V27RRWZQ.js"; +import { + CSS, + isKeyboardEvent, + subtract, + useCombinedRefs, + useIsomorphicLayoutEffect, + useUniqueId +} from "./chunk-BAWHRVBE.js"; +import "./chunk-R6S4VRB5.js"; +import { + require_react +} from "./chunk-3TFVT2CW.js"; +import { + __toESM +} from "./chunk-4MBMRILA.js"; + +// node_modules/@dnd-kit/sortable/dist/sortable.esm.js +var import_react = __toESM(require_react()); +function arrayMove(array, from, to) { + const newArray = array.slice(); + newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]); + return newArray; +} +function arraySwap(array, from, to) { + const newArray = array.slice(); + newArray[from] = array[to]; + newArray[to] = array[from]; + return newArray; +} +function getSortedRects(items, rects) { + return items.reduce((accumulator, id, index) => { + const rect = rects.get(id); + if (rect) { + accumulator[index] = rect; + } + return accumulator; + }, Array(items.length)); +} +function isValidIndex(index) { + return index !== null && index >= 0; +} +function itemsEqual(a, b) { + if (a === b) { + return true; + } + if (a.length !== b.length) { + return false; + } + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) { + return false; + } + } + return true; +} +function normalizeDisabled(disabled) { + if (typeof disabled === "boolean") { + return { + draggable: disabled, + droppable: disabled + }; + } + return disabled; +} +var defaultScale = { + scaleX: 1, + scaleY: 1 +}; +var horizontalListSortingStrategy = (_ref) => { + var _rects$activeIndex; + let { + rects, + activeNodeRect: fallbackActiveRect, + activeIndex, + overIndex, + index + } = _ref; + const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; + if (!activeNodeRect) { + return null; + } + const itemGap = getItemGap(rects, index, activeIndex); + if (index === activeIndex) { + const newIndexRect = rects[overIndex]; + if (!newIndexRect) { + return null; + } + return { + x: activeIndex < overIndex ? newIndexRect.left + newIndexRect.width - (activeNodeRect.left + activeNodeRect.width) : newIndexRect.left - activeNodeRect.left, + y: 0, + ...defaultScale + }; + } + if (index > activeIndex && index <= overIndex) { + return { + x: -activeNodeRect.width - itemGap, + y: 0, + ...defaultScale + }; + } + if (index < activeIndex && index >= overIndex) { + return { + x: activeNodeRect.width + itemGap, + y: 0, + ...defaultScale + }; + } + return { + x: 0, + y: 0, + ...defaultScale + }; +}; +function getItemGap(rects, index, activeIndex) { + const currentRect = rects[index]; + const previousRect = rects[index - 1]; + const nextRect = rects[index + 1]; + if (!currentRect || !previousRect && !nextRect) { + return 0; + } + if (activeIndex < index) { + return previousRect ? currentRect.left - (previousRect.left + previousRect.width) : nextRect.left - (currentRect.left + currentRect.width); + } + return nextRect ? nextRect.left - (currentRect.left + currentRect.width) : currentRect.left - (previousRect.left + previousRect.width); +} +var rectSortingStrategy = (_ref) => { + let { + rects, + activeIndex, + overIndex, + index + } = _ref; + const newRects = arrayMove(rects, overIndex, activeIndex); + const oldRect = rects[index]; + const newRect = newRects[index]; + if (!newRect || !oldRect) { + return null; + } + return { + x: newRect.left - oldRect.left, + y: newRect.top - oldRect.top, + scaleX: newRect.width / oldRect.width, + scaleY: newRect.height / oldRect.height + }; +}; +var rectSwappingStrategy = (_ref) => { + let { + activeIndex, + index, + rects, + overIndex + } = _ref; + let oldRect; + let newRect; + if (index === activeIndex) { + oldRect = rects[index]; + newRect = rects[overIndex]; + } + if (index === overIndex) { + oldRect = rects[index]; + newRect = rects[activeIndex]; + } + if (!newRect || !oldRect) { + return null; + } + return { + x: newRect.left - oldRect.left, + y: newRect.top - oldRect.top, + scaleX: newRect.width / oldRect.width, + scaleY: newRect.height / oldRect.height + }; +}; +var defaultScale$1 = { + scaleX: 1, + scaleY: 1 +}; +var verticalListSortingStrategy = (_ref) => { + var _rects$activeIndex; + let { + activeIndex, + activeNodeRect: fallbackActiveRect, + index, + rects, + overIndex + } = _ref; + const activeNodeRect = (_rects$activeIndex = rects[activeIndex]) != null ? _rects$activeIndex : fallbackActiveRect; + if (!activeNodeRect) { + return null; + } + if (index === activeIndex) { + const overIndexRect = rects[overIndex]; + if (!overIndexRect) { + return null; + } + return { + x: 0, + y: activeIndex < overIndex ? overIndexRect.top + overIndexRect.height - (activeNodeRect.top + activeNodeRect.height) : overIndexRect.top - activeNodeRect.top, + ...defaultScale$1 + }; + } + const itemGap = getItemGap$1(rects, index, activeIndex); + if (index > activeIndex && index <= overIndex) { + return { + x: 0, + y: -activeNodeRect.height - itemGap, + ...defaultScale$1 + }; + } + if (index < activeIndex && index >= overIndex) { + return { + x: 0, + y: activeNodeRect.height + itemGap, + ...defaultScale$1 + }; + } + return { + x: 0, + y: 0, + ...defaultScale$1 + }; +}; +function getItemGap$1(clientRects, index, activeIndex) { + const currentRect = clientRects[index]; + const previousRect = clientRects[index - 1]; + const nextRect = clientRects[index + 1]; + if (!currentRect) { + return 0; + } + if (activeIndex < index) { + return previousRect ? currentRect.top - (previousRect.top + previousRect.height) : nextRect ? nextRect.top - (currentRect.top + currentRect.height) : 0; + } + return nextRect ? nextRect.top - (currentRect.top + currentRect.height) : previousRect ? currentRect.top - (previousRect.top + previousRect.height) : 0; +} +var ID_PREFIX = "Sortable"; +var Context = import_react.default.createContext({ + activeIndex: -1, + containerId: ID_PREFIX, + disableTransforms: false, + items: [], + overIndex: -1, + useDragOverlay: false, + sortedRects: [], + strategy: rectSortingStrategy, + disabled: { + draggable: false, + droppable: false + } +}); +function SortableContext(_ref) { + let { + children, + id, + items: userDefinedItems, + strategy = rectSortingStrategy, + disabled: disabledProp = false + } = _ref; + const { + active, + dragOverlay, + droppableRects, + over, + measureDroppableContainers + } = useDndContext(); + const containerId = useUniqueId(ID_PREFIX, id); + const useDragOverlay = Boolean(dragOverlay.rect !== null); + const items = (0, import_react.useMemo)(() => userDefinedItems.map((item) => typeof item === "object" && "id" in item ? item.id : item), [userDefinedItems]); + const isDragging = active != null; + const activeIndex = active ? items.indexOf(active.id) : -1; + const overIndex = over ? items.indexOf(over.id) : -1; + const previousItemsRef = (0, import_react.useRef)(items); + const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current); + const disableTransforms = overIndex !== -1 && activeIndex === -1 || itemsHaveChanged; + const disabled = normalizeDisabled(disabledProp); + useIsomorphicLayoutEffect(() => { + if (itemsHaveChanged && isDragging) { + measureDroppableContainers(items); + } + }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]); + (0, import_react.useEffect)(() => { + previousItemsRef.current = items; + }, [items]); + const contextValue = (0, import_react.useMemo)( + () => ({ + activeIndex, + containerId, + disabled, + disableTransforms, + items, + overIndex, + useDragOverlay, + sortedRects: getSortedRects(items, droppableRects), + strategy + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [activeIndex, containerId, disabled.draggable, disabled.droppable, disableTransforms, items, overIndex, droppableRects, useDragOverlay, strategy] + ); + return import_react.default.createElement(Context.Provider, { + value: contextValue + }, children); +} +var defaultNewIndexGetter = (_ref) => { + let { + id, + items, + activeIndex, + overIndex + } = _ref; + return arrayMove(items, activeIndex, overIndex).indexOf(id); +}; +var defaultAnimateLayoutChanges = (_ref2) => { + let { + containerId, + isSorting, + wasDragging, + index, + items, + newIndex, + previousItems, + previousContainerId, + transition + } = _ref2; + if (!transition || !wasDragging) { + return false; + } + if (previousItems !== items && index === newIndex) { + return false; + } + if (isSorting) { + return true; + } + return newIndex !== index && containerId === previousContainerId; +}; +var defaultTransition = { + duration: 200, + easing: "ease" +}; +var transitionProperty = "transform"; +var disabledTransition = CSS.Transition.toString({ + property: transitionProperty, + duration: 0, + easing: "linear" +}); +var defaultAttributes = { + roleDescription: "sortable" +}; +function useDerivedTransform(_ref) { + let { + disabled, + index, + node, + rect + } = _ref; + const [derivedTransform, setDerivedtransform] = (0, import_react.useState)(null); + const previousIndex = (0, import_react.useRef)(index); + useIsomorphicLayoutEffect(() => { + if (!disabled && index !== previousIndex.current && node.current) { + const initial = rect.current; + if (initial) { + const current = getClientRect(node.current, { + ignoreTransform: true + }); + const delta = { + x: initial.left - current.left, + y: initial.top - current.top, + scaleX: initial.width / current.width, + scaleY: initial.height / current.height + }; + if (delta.x || delta.y) { + setDerivedtransform(delta); + } + } + } + if (index !== previousIndex.current) { + previousIndex.current = index; + } + }, [disabled, index, node, rect]); + (0, import_react.useEffect)(() => { + if (derivedTransform) { + setDerivedtransform(null); + } + }, [derivedTransform]); + return derivedTransform; +} +function useSortable(_ref) { + let { + animateLayoutChanges = defaultAnimateLayoutChanges, + attributes: userDefinedAttributes, + disabled: localDisabled, + data: customData, + getNewIndex = defaultNewIndexGetter, + id, + strategy: localStrategy, + resizeObserverConfig, + transition = defaultTransition + } = _ref; + const { + items, + containerId, + activeIndex, + disabled: globalDisabled, + disableTransforms, + sortedRects, + overIndex, + useDragOverlay, + strategy: globalStrategy + } = (0, import_react.useContext)(Context); + const disabled = normalizeLocalDisabled(localDisabled, globalDisabled); + const index = items.indexOf(id); + const data = (0, import_react.useMemo)(() => ({ + sortable: { + containerId, + index, + items + }, + ...customData + }), [containerId, customData, index, items]); + const itemsAfterCurrentSortable = (0, import_react.useMemo)(() => items.slice(items.indexOf(id)), [items, id]); + const { + rect, + node, + isOver, + setNodeRef: setDroppableNodeRef + } = useDroppable({ + id, + data, + disabled: disabled.droppable, + resizeObserverConfig: { + updateMeasurementsFor: itemsAfterCurrentSortable, + ...resizeObserverConfig + } + }); + const { + active, + activatorEvent, + activeNodeRect, + attributes, + setNodeRef: setDraggableNodeRef, + listeners, + isDragging, + over, + setActivatorNodeRef, + transform + } = useDraggable({ + id, + data, + attributes: { + ...defaultAttributes, + ...userDefinedAttributes + }, + disabled: disabled.draggable + }); + const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef); + const isSorting = Boolean(active); + const displaceItem = isSorting && !disableTransforms && isValidIndex(activeIndex) && isValidIndex(overIndex); + const shouldDisplaceDragSource = !useDragOverlay && isDragging; + const dragSourceDisplacement = shouldDisplaceDragSource && displaceItem ? transform : null; + const strategy = localStrategy != null ? localStrategy : globalStrategy; + const finalTransform = displaceItem ? dragSourceDisplacement != null ? dragSourceDisplacement : strategy({ + rects: sortedRects, + activeNodeRect, + activeIndex, + overIndex, + index + }) : null; + const newIndex = isValidIndex(activeIndex) && isValidIndex(overIndex) ? getNewIndex({ + id, + items, + activeIndex, + overIndex + }) : index; + const activeId = active == null ? void 0 : active.id; + const previous = (0, import_react.useRef)({ + activeId, + items, + newIndex, + containerId + }); + const itemsHaveChanged = items !== previous.current.items; + const shouldAnimateLayoutChanges = animateLayoutChanges({ + active, + containerId, + isDragging, + isSorting, + id, + index, + items, + newIndex: previous.current.newIndex, + previousItems: previous.current.items, + previousContainerId: previous.current.containerId, + transition, + wasDragging: previous.current.activeId != null + }); + const derivedTransform = useDerivedTransform({ + disabled: !shouldAnimateLayoutChanges, + index, + node, + rect + }); + (0, import_react.useEffect)(() => { + if (isSorting && previous.current.newIndex !== newIndex) { + previous.current.newIndex = newIndex; + } + if (containerId !== previous.current.containerId) { + previous.current.containerId = containerId; + } + if (items !== previous.current.items) { + previous.current.items = items; + } + }, [isSorting, newIndex, containerId, items]); + (0, import_react.useEffect)(() => { + if (activeId === previous.current.activeId) { + return; + } + if (activeId != null && previous.current.activeId == null) { + previous.current.activeId = activeId; + return; + } + const timeoutId = setTimeout(() => { + previous.current.activeId = activeId; + }, 50); + return () => clearTimeout(timeoutId); + }, [activeId]); + return { + active, + activeIndex, + attributes, + data, + rect, + index, + newIndex, + items, + isOver, + isSorting, + isDragging, + listeners, + node, + overIndex, + over, + setNodeRef, + setActivatorNodeRef, + setDroppableNodeRef, + setDraggableNodeRef, + transform: derivedTransform != null ? derivedTransform : finalTransform, + transition: getTransition() + }; + function getTransition() { + if ( + // Temporarily disable transitions for a single frame to set up derived transforms + derivedTransform || // Or to prevent items jumping to back to their "new" position when items change + itemsHaveChanged && previous.current.newIndex === index + ) { + return disabledTransition; + } + if (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent) || !transition) { + return void 0; + } + if (isSorting || shouldAnimateLayoutChanges) { + return CSS.Transition.toString({ + ...transition, + property: transitionProperty + }); + } + return void 0; + } +} +function normalizeLocalDisabled(localDisabled, globalDisabled) { + var _localDisabled$dragga, _localDisabled$droppa; + if (typeof localDisabled === "boolean") { + return { + draggable: localDisabled, + // Backwards compatibility + droppable: false + }; + } + return { + draggable: (_localDisabled$dragga = localDisabled == null ? void 0 : localDisabled.draggable) != null ? _localDisabled$dragga : globalDisabled.draggable, + droppable: (_localDisabled$droppa = localDisabled == null ? void 0 : localDisabled.droppable) != null ? _localDisabled$droppa : globalDisabled.droppable + }; +} +function hasSortableData(entry) { + if (!entry) { + return false; + } + const data = entry.data.current; + if (data && "sortable" in data && typeof data.sortable === "object" && "containerId" in data.sortable && "items" in data.sortable && "index" in data.sortable) { + return true; + } + return false; +} +var directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left]; +var sortableKeyboardCoordinates = (event, _ref) => { + let { + context: { + active, + collisionRect, + droppableRects, + droppableContainers, + over, + scrollableAncestors + } + } = _ref; + if (directions.includes(event.code)) { + event.preventDefault(); + if (!active || !collisionRect) { + return; + } + const filteredContainers = []; + droppableContainers.getEnabled().forEach((entry) => { + if (!entry || entry != null && entry.disabled) { + return; + } + const rect = droppableRects.get(entry.id); + if (!rect) { + return; + } + switch (event.code) { + case KeyboardCode.Down: + if (collisionRect.top < rect.top) { + filteredContainers.push(entry); + } + break; + case KeyboardCode.Up: + if (collisionRect.top > rect.top) { + filteredContainers.push(entry); + } + break; + case KeyboardCode.Left: + if (collisionRect.left > rect.left) { + filteredContainers.push(entry); + } + break; + case KeyboardCode.Right: + if (collisionRect.left < rect.left) { + filteredContainers.push(entry); + } + break; + } + }); + const collisions = closestCorners({ + active, + collisionRect, + droppableRects, + droppableContainers: filteredContainers, + pointerCoordinates: null + }); + let closestId = getFirstCollision(collisions, "id"); + if (closestId === (over == null ? void 0 : over.id) && collisions.length > 1) { + closestId = collisions[1].id; + } + if (closestId != null) { + const activeDroppable = droppableContainers.get(active.id); + const newDroppable = droppableContainers.get(closestId); + const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null; + const newNode = newDroppable == null ? void 0 : newDroppable.node.current; + if (newNode && newRect && activeDroppable && newDroppable) { + const newScrollAncestors = getScrollableAncestors(newNode); + const hasDifferentScrollAncestors = newScrollAncestors.some((element, index) => scrollableAncestors[index] !== element); + const hasSameContainer = isSameContainer(activeDroppable, newDroppable); + const isAfterActive = isAfter(activeDroppable, newDroppable); + const offset = hasDifferentScrollAncestors || !hasSameContainer ? { + x: 0, + y: 0 + } : { + x: isAfterActive ? collisionRect.width - newRect.width : 0, + y: isAfterActive ? collisionRect.height - newRect.height : 0 + }; + const rectCoordinates = { + x: newRect.left, + y: newRect.top + }; + const newCoordinates = offset.x && offset.y ? rectCoordinates : subtract(rectCoordinates, offset); + return newCoordinates; + } + } + } + return void 0; +}; +function isSameContainer(a, b) { + if (!hasSortableData(a) || !hasSortableData(b)) { + return false; + } + return a.data.current.sortable.containerId === b.data.current.sortable.containerId; +} +function isAfter(a, b) { + if (!hasSortableData(a) || !hasSortableData(b)) { + return false; + } + if (!isSameContainer(a, b)) { + return false; + } + return a.data.current.sortable.index < b.data.current.sortable.index; +} +export { + SortableContext, + arrayMove, + arraySwap, + defaultAnimateLayoutChanges, + defaultNewIndexGetter, + hasSortableData, + horizontalListSortingStrategy, + rectSortingStrategy, + rectSwappingStrategy, + sortableKeyboardCoordinates, + useSortable, + verticalListSortingStrategy +}; +//# sourceMappingURL=@dnd-kit_sortable.js.map diff --git a/node_modules/.vite/deps/@dnd-kit_sortable.js.map b/node_modules/.vite/deps/@dnd-kit_sortable.js.map new file mode 100644 index 00000000..98839ecc --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_sortable.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@dnd-kit/sortable/src/utilities/arrayMove.ts", "../../@dnd-kit/sortable/src/utilities/arraySwap.ts", "../../@dnd-kit/sortable/src/utilities/getSortedRects.ts", "../../@dnd-kit/sortable/src/utilities/isValidIndex.ts", "../../@dnd-kit/sortable/src/utilities/itemsEqual.ts", "../../@dnd-kit/sortable/src/utilities/normalizeDisabled.ts", "../../@dnd-kit/sortable/src/strategies/horizontalListSorting.ts", "../../@dnd-kit/sortable/src/strategies/rectSorting.ts", "../../@dnd-kit/sortable/src/strategies/rectSwapping.ts", "../../@dnd-kit/sortable/src/strategies/verticalListSorting.ts", "../../@dnd-kit/sortable/src/components/SortableContext.tsx", "../../@dnd-kit/sortable/src/hooks/defaults.ts", "../../@dnd-kit/sortable/src/hooks/utilities/useDerivedTransform.ts", "../../@dnd-kit/sortable/src/hooks/useSortable.ts", "../../@dnd-kit/sortable/src/types/type-guard.ts", "../../@dnd-kit/sortable/src/sensors/keyboard/sortableKeyboardCoordinates.ts"], + "sourcesContent": ["/**\n * Move an array item to a different position. Returns a new array with the item moved to the new position.\n */\nexport function arrayMove(array: T[], from: number, to: number): T[] {\n const newArray = array.slice();\n newArray.splice(\n to < 0 ? newArray.length + to : to,\n 0,\n newArray.splice(from, 1)[0]\n );\n\n return newArray;\n}\n", "/**\n * Swap an array item to a different position. Returns a new array with the item swapped to the new position.\n */\nexport function arraySwap(array: T[], from: number, to: number): T[] {\n const newArray = array.slice();\n\n newArray[from] = array[to];\n newArray[to] = array[from];\n\n return newArray;\n}\n", "import type {\n ClientRect,\n UniqueIdentifier,\n UseDndContextReturnValue,\n} from '@dnd-kit/core';\n\nexport function getSortedRects(\n items: UniqueIdentifier[],\n rects: UseDndContextReturnValue['droppableRects']\n) {\n return items.reduce((accumulator, id, index) => {\n const rect = rects.get(id);\n\n if (rect) {\n accumulator[index] = rect;\n }\n\n return accumulator;\n }, Array(items.length));\n}\n", "export function isValidIndex(index: number | null): index is number {\n return index !== null && index >= 0;\n}\n", "import type {UniqueIdentifier} from '@dnd-kit/core';\n\nexport function itemsEqual(a: UniqueIdentifier[], b: UniqueIdentifier[]) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n", "import type {Disabled} from '../types';\n\nexport function normalizeDisabled(disabled: boolean | Disabled): Disabled {\n if (typeof disabled === 'boolean') {\n return {\n draggable: disabled,\n droppable: disabled,\n };\n }\n\n return disabled;\n}\n", "import type {ClientRect} from '@dnd-kit/core';\nimport type {SortingStrategy} from '../types';\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n scaleX: 1,\n scaleY: 1,\n};\n\nexport const horizontalListSortingStrategy: SortingStrategy = ({\n rects,\n activeNodeRect: fallbackActiveRect,\n activeIndex,\n overIndex,\n index,\n}) => {\n const activeNodeRect = rects[activeIndex] ?? fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n const itemGap = getItemGap(rects, index, activeIndex);\n\n if (index === activeIndex) {\n const newIndexRect = rects[overIndex];\n\n if (!newIndexRect) {\n return null;\n }\n\n return {\n x:\n activeIndex < overIndex\n ? newIndexRect.left +\n newIndexRect.width -\n (activeNodeRect.left + activeNodeRect.width)\n : newIndexRect.left - activeNodeRect.left,\n y: 0,\n ...defaultScale,\n };\n }\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: -activeNodeRect.width - itemGap,\n y: 0,\n ...defaultScale,\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: activeNodeRect.width + itemGap,\n y: 0,\n ...defaultScale,\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale,\n };\n};\n\nfunction getItemGap(rects: ClientRect[], index: number, activeIndex: number) {\n const currentRect: ClientRect | undefined = rects[index];\n const previousRect: ClientRect | undefined = rects[index - 1];\n const nextRect: ClientRect | undefined = rects[index + 1];\n\n if (!currentRect || (!previousRect && !nextRect)) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect\n ? currentRect.left - (previousRect.left + previousRect.width)\n : nextRect.left - (currentRect.left + currentRect.width);\n }\n\n return nextRect\n ? nextRect.left - (currentRect.left + currentRect.width)\n : currentRect.left - (previousRect.left + previousRect.width);\n}\n", "import {arrayMove} from '../utilities';\nimport type {SortingStrategy} from '../types';\n\nexport const rectSortingStrategy: SortingStrategy = ({\n rects,\n activeIndex,\n overIndex,\n index,\n}) => {\n const newRects = arrayMove(rects, overIndex, activeIndex);\n\n const oldRect = rects[index];\n const newRect = newRects[index];\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height,\n };\n};\n", "import type {SortingStrategy} from '../types';\n\nexport const rectSwappingStrategy: SortingStrategy = ({\n activeIndex,\n index,\n rects,\n overIndex,\n}) => {\n let oldRect;\n let newRect;\n\n if (index === activeIndex) {\n oldRect = rects[index];\n newRect = rects[overIndex];\n }\n\n if (index === overIndex) {\n oldRect = rects[index];\n newRect = rects[activeIndex];\n }\n\n if (!newRect || !oldRect) {\n return null;\n }\n\n return {\n x: newRect.left - oldRect.left,\n y: newRect.top - oldRect.top,\n scaleX: newRect.width / oldRect.width,\n scaleY: newRect.height / oldRect.height,\n };\n};\n", "import type {ClientRect} from '@dnd-kit/core';\nimport type {SortingStrategy} from '../types';\n\n// To-do: We should be calculating scale transformation\nconst defaultScale = {\n scaleX: 1,\n scaleY: 1,\n};\n\nexport const verticalListSortingStrategy: SortingStrategy = ({\n activeIndex,\n activeNodeRect: fallbackActiveRect,\n index,\n rects,\n overIndex,\n}) => {\n const activeNodeRect = rects[activeIndex] ?? fallbackActiveRect;\n\n if (!activeNodeRect) {\n return null;\n }\n\n if (index === activeIndex) {\n const overIndexRect = rects[overIndex];\n\n if (!overIndexRect) {\n return null;\n }\n\n return {\n x: 0,\n y:\n activeIndex < overIndex\n ? overIndexRect.top +\n overIndexRect.height -\n (activeNodeRect.top + activeNodeRect.height)\n : overIndexRect.top - activeNodeRect.top,\n ...defaultScale,\n };\n }\n\n const itemGap = getItemGap(rects, index, activeIndex);\n\n if (index > activeIndex && index <= overIndex) {\n return {\n x: 0,\n y: -activeNodeRect.height - itemGap,\n ...defaultScale,\n };\n }\n\n if (index < activeIndex && index >= overIndex) {\n return {\n x: 0,\n y: activeNodeRect.height + itemGap,\n ...defaultScale,\n };\n }\n\n return {\n x: 0,\n y: 0,\n ...defaultScale,\n };\n};\n\nfunction getItemGap(\n clientRects: ClientRect[],\n index: number,\n activeIndex: number\n) {\n const currentRect: ClientRect | undefined = clientRects[index];\n const previousRect: ClientRect | undefined = clientRects[index - 1];\n const nextRect: ClientRect | undefined = clientRects[index + 1];\n\n if (!currentRect) {\n return 0;\n }\n\n if (activeIndex < index) {\n return previousRect\n ? currentRect.top - (previousRect.top + previousRect.height)\n : nextRect\n ? nextRect.top - (currentRect.top + currentRect.height)\n : 0;\n }\n\n return nextRect\n ? nextRect.top - (currentRect.top + currentRect.height)\n : previousRect\n ? currentRect.top - (previousRect.top + previousRect.height)\n : 0;\n}\n", "import React, {useEffect, useMemo, useRef} from 'react';\nimport {useDndContext, ClientRect, UniqueIdentifier} from '@dnd-kit/core';\nimport {useIsomorphicLayoutEffect, useUniqueId} from '@dnd-kit/utilities';\n\nimport type {Disabled, SortingStrategy} from '../types';\nimport {getSortedRects, itemsEqual, normalizeDisabled} from '../utilities';\nimport {rectSortingStrategy} from '../strategies';\n\nexport interface Props {\n children: React.ReactNode;\n items: (UniqueIdentifier | {id: UniqueIdentifier})[];\n strategy?: SortingStrategy;\n id?: string;\n disabled?: boolean | Disabled;\n}\n\nconst ID_PREFIX = 'Sortable';\n\ninterface ContextDescriptor {\n activeIndex: number;\n containerId: string;\n disabled: Disabled;\n disableTransforms: boolean;\n items: UniqueIdentifier[];\n overIndex: number;\n useDragOverlay: boolean;\n sortedRects: ClientRect[];\n strategy: SortingStrategy;\n}\n\nexport const Context = React.createContext({\n activeIndex: -1,\n containerId: ID_PREFIX,\n disableTransforms: false,\n items: [],\n overIndex: -1,\n useDragOverlay: false,\n sortedRects: [],\n strategy: rectSortingStrategy,\n disabled: {\n draggable: false,\n droppable: false,\n },\n});\n\nexport function SortableContext({\n children,\n id,\n items: userDefinedItems,\n strategy = rectSortingStrategy,\n disabled: disabledProp = false,\n}: Props) {\n const {\n active,\n dragOverlay,\n droppableRects,\n over,\n measureDroppableContainers,\n } = useDndContext();\n const containerId = useUniqueId(ID_PREFIX, id);\n const useDragOverlay = Boolean(dragOverlay.rect !== null);\n const items = useMemo(\n () =>\n userDefinedItems.map((item) =>\n typeof item === 'object' && 'id' in item ? item.id : item\n ),\n [userDefinedItems]\n );\n const isDragging = active != null;\n const activeIndex = active ? items.indexOf(active.id) : -1;\n const overIndex = over ? items.indexOf(over.id) : -1;\n const previousItemsRef = useRef(items);\n const itemsHaveChanged = !itemsEqual(items, previousItemsRef.current);\n const disableTransforms =\n (overIndex !== -1 && activeIndex === -1) || itemsHaveChanged;\n const disabled = normalizeDisabled(disabledProp);\n\n useIsomorphicLayoutEffect(() => {\n if (itemsHaveChanged && isDragging) {\n measureDroppableContainers(items);\n }\n }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);\n\n useEffect(() => {\n previousItemsRef.current = items;\n }, [items]);\n\n const contextValue = useMemo(\n (): ContextDescriptor => ({\n activeIndex,\n containerId,\n disabled,\n disableTransforms,\n items,\n overIndex,\n useDragOverlay,\n sortedRects: getSortedRects(items, droppableRects),\n strategy,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n activeIndex,\n containerId,\n disabled.draggable,\n disabled.droppable,\n disableTransforms,\n items,\n overIndex,\n droppableRects,\n useDragOverlay,\n strategy,\n ]\n );\n\n return {children};\n}\n", "import {CSS} from '@dnd-kit/utilities';\n\nimport {arrayMove} from '../utilities';\n\nimport type {\n AnimateLayoutChanges,\n NewIndexGetter,\n SortableTransition,\n} from './types';\n\nexport const defaultNewIndexGetter: NewIndexGetter = ({\n id,\n items,\n activeIndex,\n overIndex,\n}) => arrayMove(items, activeIndex, overIndex).indexOf(id);\n\nexport const defaultAnimateLayoutChanges: AnimateLayoutChanges = ({\n containerId,\n isSorting,\n wasDragging,\n index,\n items,\n newIndex,\n previousItems,\n previousContainerId,\n transition,\n}) => {\n if (!transition || !wasDragging) {\n return false;\n }\n\n if (previousItems !== items && index === newIndex) {\n return false;\n }\n\n if (isSorting) {\n return true;\n }\n\n return newIndex !== index && containerId === previousContainerId;\n};\n\nexport const defaultTransition: SortableTransition = {\n duration: 200,\n easing: 'ease',\n};\n\nexport const transitionProperty = 'transform';\n\nexport const disabledTransition = CSS.Transition.toString({\n property: transitionProperty,\n duration: 0,\n easing: 'linear',\n});\n\nexport const defaultAttributes = {\n roleDescription: 'sortable',\n};\n", "import {useEffect, useRef, useState} from 'react';\nimport {getClientRect, ClientRect} from '@dnd-kit/core';\nimport {Transform, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\ninterface Arguments {\n rect: React.MutableRefObject;\n disabled: boolean;\n index: number;\n node: React.MutableRefObject;\n}\n\n/*\n * When the index of an item changes while sorting,\n * we need to temporarily disable the transforms\n */\nexport function useDerivedTransform({disabled, index, node, rect}: Arguments) {\n const [derivedTransform, setDerivedtransform] = useState(\n null\n );\n const previousIndex = useRef(index);\n\n useIsomorphicLayoutEffect(() => {\n if (!disabled && index !== previousIndex.current && node.current) {\n const initial = rect.current;\n\n if (initial) {\n const current = getClientRect(node.current, {\n ignoreTransform: true,\n });\n\n const delta = {\n x: initial.left - current.left,\n y: initial.top - current.top,\n scaleX: initial.width / current.width,\n scaleY: initial.height / current.height,\n };\n\n if (delta.x || delta.y) {\n setDerivedtransform(delta);\n }\n }\n }\n\n if (index !== previousIndex.current) {\n previousIndex.current = index;\n }\n }, [disabled, index, node, rect]);\n\n useEffect(() => {\n if (derivedTransform) {\n setDerivedtransform(null);\n }\n }, [derivedTransform]);\n\n return derivedTransform;\n}\n", "import {useContext, useEffect, useMemo, useRef} from 'react';\nimport {\n useDraggable,\n useDroppable,\n UseDraggableArguments,\n UseDroppableArguments,\n} from '@dnd-kit/core';\nimport type {Data} from '@dnd-kit/core';\nimport {CSS, isKeyboardEvent, useCombinedRefs} from '@dnd-kit/utilities';\n\nimport {Context} from '../components';\nimport type {Disabled, SortableData, SortingStrategy} from '../types';\nimport {isValidIndex} from '../utilities';\nimport {\n defaultAnimateLayoutChanges,\n defaultAttributes,\n defaultNewIndexGetter,\n defaultTransition,\n disabledTransition,\n transitionProperty,\n} from './defaults';\nimport type {\n AnimateLayoutChanges,\n NewIndexGetter,\n SortableTransition,\n} from './types';\nimport {useDerivedTransform} from './utilities';\n\nexport interface Arguments\n extends Omit,\n Pick {\n animateLayoutChanges?: AnimateLayoutChanges;\n disabled?: boolean | Disabled;\n getNewIndex?: NewIndexGetter;\n strategy?: SortingStrategy;\n transition?: SortableTransition | null;\n}\n\nexport function useSortable({\n animateLayoutChanges = defaultAnimateLayoutChanges,\n attributes: userDefinedAttributes,\n disabled: localDisabled,\n data: customData,\n getNewIndex = defaultNewIndexGetter,\n id,\n strategy: localStrategy,\n resizeObserverConfig,\n transition = defaultTransition,\n}: Arguments) {\n const {\n items,\n containerId,\n activeIndex,\n disabled: globalDisabled,\n disableTransforms,\n sortedRects,\n overIndex,\n useDragOverlay,\n strategy: globalStrategy,\n } = useContext(Context);\n const disabled: Disabled = normalizeLocalDisabled(\n localDisabled,\n globalDisabled\n );\n const index = items.indexOf(id);\n const data = useMemo(\n () => ({sortable: {containerId, index, items}, ...customData}),\n [containerId, customData, index, items]\n );\n const itemsAfterCurrentSortable = useMemo(\n () => items.slice(items.indexOf(id)),\n [items, id]\n );\n const {\n rect,\n node,\n isOver,\n setNodeRef: setDroppableNodeRef,\n } = useDroppable({\n id,\n data,\n disabled: disabled.droppable,\n resizeObserverConfig: {\n updateMeasurementsFor: itemsAfterCurrentSortable,\n ...resizeObserverConfig,\n },\n });\n const {\n active,\n activatorEvent,\n activeNodeRect,\n attributes,\n setNodeRef: setDraggableNodeRef,\n listeners,\n isDragging,\n over,\n setActivatorNodeRef,\n transform,\n } = useDraggable({\n id,\n data,\n attributes: {\n ...defaultAttributes,\n ...userDefinedAttributes,\n },\n disabled: disabled.draggable,\n });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const isSorting = Boolean(active);\n const displaceItem =\n isSorting &&\n !disableTransforms &&\n isValidIndex(activeIndex) &&\n isValidIndex(overIndex);\n const shouldDisplaceDragSource = !useDragOverlay && isDragging;\n const dragSourceDisplacement =\n shouldDisplaceDragSource && displaceItem ? transform : null;\n const strategy = localStrategy ?? globalStrategy;\n const finalTransform = displaceItem\n ? dragSourceDisplacement ??\n strategy({\n rects: sortedRects,\n activeNodeRect,\n activeIndex,\n overIndex,\n index,\n })\n : null;\n const newIndex =\n isValidIndex(activeIndex) && isValidIndex(overIndex)\n ? getNewIndex({id, items, activeIndex, overIndex})\n : index;\n const activeId = active?.id;\n const previous = useRef({\n activeId,\n items,\n newIndex,\n containerId,\n });\n const itemsHaveChanged = items !== previous.current.items;\n const shouldAnimateLayoutChanges = animateLayoutChanges({\n active,\n containerId,\n isDragging,\n isSorting,\n id,\n index,\n items,\n newIndex: previous.current.newIndex,\n previousItems: previous.current.items,\n previousContainerId: previous.current.containerId,\n transition,\n wasDragging: previous.current.activeId != null,\n });\n\n const derivedTransform = useDerivedTransform({\n disabled: !shouldAnimateLayoutChanges,\n index,\n node,\n rect,\n });\n\n useEffect(() => {\n if (isSorting && previous.current.newIndex !== newIndex) {\n previous.current.newIndex = newIndex;\n }\n\n if (containerId !== previous.current.containerId) {\n previous.current.containerId = containerId;\n }\n\n if (items !== previous.current.items) {\n previous.current.items = items;\n }\n }, [isSorting, newIndex, containerId, items]);\n\n useEffect(() => {\n if (activeId === previous.current.activeId) {\n return;\n }\n\n if (activeId != null && previous.current.activeId == null) {\n previous.current.activeId = activeId;\n return;\n }\n\n const timeoutId = setTimeout(() => {\n previous.current.activeId = activeId;\n }, 50);\n\n return () => clearTimeout(timeoutId);\n }, [activeId]);\n\n return {\n active,\n activeIndex,\n attributes,\n data,\n rect,\n index,\n newIndex,\n items,\n isOver,\n isSorting,\n isDragging,\n listeners,\n node,\n overIndex,\n over,\n setNodeRef,\n setActivatorNodeRef,\n setDroppableNodeRef,\n setDraggableNodeRef,\n transform: derivedTransform ?? finalTransform,\n transition: getTransition(),\n };\n\n function getTransition() {\n if (\n // Temporarily disable transitions for a single frame to set up derived transforms\n derivedTransform ||\n // Or to prevent items jumping to back to their \"new\" position when items change\n (itemsHaveChanged && previous.current.newIndex === index)\n ) {\n return disabledTransition;\n }\n\n if (\n (shouldDisplaceDragSource && !isKeyboardEvent(activatorEvent)) ||\n !transition\n ) {\n return undefined;\n }\n\n if (isSorting || shouldAnimateLayoutChanges) {\n return CSS.Transition.toString({\n ...transition,\n property: transitionProperty,\n });\n }\n\n return undefined;\n }\n}\n\nfunction normalizeLocalDisabled(\n localDisabled: Arguments['disabled'],\n globalDisabled: Disabled\n) {\n if (typeof localDisabled === 'boolean') {\n return {\n draggable: localDisabled,\n // Backwards compatibility\n droppable: false,\n };\n }\n\n return {\n draggable: localDisabled?.draggable ?? globalDisabled.draggable,\n droppable: localDisabled?.droppable ?? globalDisabled.droppable,\n };\n}\n", "import type {\n Active,\n Data,\n DroppableContainer,\n DraggableNode,\n Over,\n} from '@dnd-kit/core';\n\nimport type {SortableData} from './data';\n\nexport function hasSortableData<\n T extends Active | Over | DraggableNode | DroppableContainer\n>(\n entry: T | null | undefined\n): entry is T & {data: {current: Data}} {\n if (!entry) {\n return false;\n }\n\n const data = entry.data.current;\n\n if (\n data &&\n 'sortable' in data &&\n typeof data.sortable === 'object' &&\n 'containerId' in data.sortable &&\n 'items' in data.sortable &&\n 'index' in data.sortable\n ) {\n return true;\n }\n\n return false;\n}\n", "import {\n closestCorners,\n getScrollableAncestors,\n getFirstCollision,\n KeyboardCode,\n DroppableContainer,\n KeyboardCoordinateGetter,\n} from '@dnd-kit/core';\nimport {subtract} from '@dnd-kit/utilities';\n\nimport {hasSortableData} from '../../types';\n\nconst directions: string[] = [\n KeyboardCode.Down,\n KeyboardCode.Right,\n KeyboardCode.Up,\n KeyboardCode.Left,\n];\n\nexport const sortableKeyboardCoordinates: KeyboardCoordinateGetter = (\n event,\n {\n context: {\n active,\n collisionRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors,\n },\n }\n) => {\n if (directions.includes(event.code)) {\n event.preventDefault();\n\n if (!active || !collisionRect) {\n return;\n }\n\n const filteredContainers: DroppableContainer[] = [];\n\n droppableContainers.getEnabled().forEach((entry) => {\n if (!entry || entry?.disabled) {\n return;\n }\n\n const rect = droppableRects.get(entry.id);\n\n if (!rect) {\n return;\n }\n\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Left:\n if (collisionRect.left > rect.left) {\n filteredContainers.push(entry);\n }\n break;\n case KeyboardCode.Right:\n if (collisionRect.left < rect.left) {\n filteredContainers.push(entry);\n }\n break;\n }\n });\n\n const collisions = closestCorners({\n active,\n collisionRect: collisionRect,\n droppableRects,\n droppableContainers: filteredContainers,\n pointerCoordinates: null,\n });\n let closestId = getFirstCollision(collisions, 'id');\n\n if (closestId === over?.id && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n\n if (closestId != null) {\n const activeDroppable = droppableContainers.get(active.id);\n const newDroppable = droppableContainers.get(closestId);\n const newRect = newDroppable ? droppableRects.get(newDroppable.id) : null;\n const newNode = newDroppable?.node.current;\n\n if (newNode && newRect && activeDroppable && newDroppable) {\n const newScrollAncestors = getScrollableAncestors(newNode);\n const hasDifferentScrollAncestors = newScrollAncestors.some(\n (element, index) => scrollableAncestors[index] !== element\n );\n const hasSameContainer = isSameContainer(activeDroppable, newDroppable);\n const isAfterActive = isAfter(activeDroppable, newDroppable);\n const offset =\n hasDifferentScrollAncestors || !hasSameContainer\n ? {\n x: 0,\n y: 0,\n }\n : {\n x: isAfterActive ? collisionRect.width - newRect.width : 0,\n y: isAfterActive ? collisionRect.height - newRect.height : 0,\n };\n const rectCoordinates = {\n x: newRect.left,\n y: newRect.top,\n };\n\n const newCoordinates =\n offset.x && offset.y\n ? rectCoordinates\n : subtract(rectCoordinates, offset);\n\n return newCoordinates;\n }\n }\n }\n\n return undefined;\n};\n\nfunction isSameContainer(a: DroppableContainer, b: DroppableContainer) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n return (\n a.data.current.sortable.containerId === b.data.current.sortable.containerId\n );\n}\n\nfunction isAfter(a: DroppableContainer, b: DroppableContainer) {\n if (!hasSortableData(a) || !hasSortableData(b)) {\n return false;\n }\n\n if (!isSameContainer(a, b)) {\n return false;\n }\n\n return a.data.current.sortable.index < b.data.current.sortable.index;\n}\n"], + "mappings": "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", + "names": ["arrayMove", "array", "from", "to", "newArray", "slice", "splice", "length", "arraySwap", "getSortedRects", "items", "rects", "reduce", "accumulator", "id", "index", "rect", "get", "Array", "isValidIndex", "itemsEqual", "a", "b", "i", "normalizeDisabled", "disabled", "draggable", "droppable", "defaultScale", "scaleX", "scaleY", "horizontalListSortingStrategy", "activeNodeRect", "fallbackActiveRect", "activeIndex", "overIndex", "itemGap", "getItemGap", "newIndexRect", "x", "left", "width", "y", "currentRect", "previousRect", "nextRect", "rectSortingStrategy", "newRects", "oldRect", "newRect", "top", "height", "rectSwappingStrategy", "verticalListSortingStrategy", "overIndexRect", "clientRects", "ID_PREFIX", "Context", "React", "createContext", "containerId", "disableTransforms", "useDragOverlay", "sortedRects", "strategy", "SortableContext", "children", "userDefinedItems", "disabledProp", "active", "dragOverlay", "droppableRects", "over", "measureDroppableContainers", "useDndContext", "useUniqueId", "Boolean", "useMemo", "map", "item", "isDragging", "indexOf", "previousItemsRef", "useRef", "itemsHaveChanged", "current", "useIsomorphicLayoutEffect", "useEffect", "contextValue", "Provider", "value", "defaultNewIndexGetter", "defaultAnimateLayoutChanges", "isSorting", "wasDragging", "newIndex", "previousItems", "previousContainerId", "transition", "defaultTransition", "duration", "easing", "transitionProperty", "disabledTransition", "CSS", "Transition", "toString", "property", "defaultAttributes", "roleDescription", "useDerivedTransform", "node", "derivedTransform", "setDerivedtransform", "useState", "previousIndex", "initial", "getClientRect", "ignoreTransform", "delta", "useSortable", "animateLayoutChanges", "attributes", "userDefinedAttributes", "localDisabled", "data", "customData", "getNewIndex", "localStrategy", "resizeObserverConfig", "globalDisabled", "globalStrategy", "useContext", "normalizeLocalDisabled", "sortable", "itemsAfterCurrentSortable", "isOver", "setNodeRef", "setDroppableNodeRef", "useDroppable", "updateMeasurementsFor", "activatorEvent", "setDraggableNodeRef", "listeners", "setActivatorNodeRef", "transform", "useDraggable", "useCombinedRefs", "displaceItem", "shouldDisplaceDragSource", "dragSourceDisplacement", "finalTransform", "activeId", "previous", "shouldAnimateLayoutChanges", "timeoutId", "setTimeout", "clearTimeout", "getTransition", "isKeyboardEvent", "undefined", "hasSortableData", "entry", "directions", "KeyboardCode", "Down", "Right", "Up", "Left", "sortableKeyboardCoordinates", "event", "context", "collisionRect", "droppableContainers", "scrollableAncestors", "includes", "code", "preventDefault", "filteredContainers", "getEnabled", "forEach", "push", "collisions", "closestCorners", "pointerCoordinates", "closestId", "getFirstCollision", "activeDroppable", "newDroppable", "newNode", "newScrollAncestors", "getScrollableAncestors", "hasDifferentScrollAncestors", "some", "element", "hasSameContainer", "isSameContainer", "isAfterActive", "isAfter", "offset", "rectCoordinates", "newCoordinates", "subtract"] +} diff --git a/node_modules/.vite/deps/@dnd-kit_utilities.js b/node_modules/.vite/deps/@dnd-kit_utilities.js new file mode 100644 index 00000000..16b7ba1f --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_utilities.js @@ -0,0 +1,57 @@ +import { + CSS, + add, + canUseDOM, + findFirstFocusableNode, + getEventCoordinates, + getOwnerDocument, + getWindow, + hasViewportRelativeCoordinates, + isDocument, + isHTMLElement, + isKeyboardEvent, + isNode, + isSVGElement, + isTouchEvent, + isWindow, + subtract, + useCombinedRefs, + useEvent, + useInterval, + useIsomorphicLayoutEffect, + useLatestValue, + useLazyMemo, + useNodeRef, + usePrevious, + useUniqueId +} from "./chunk-BAWHRVBE.js"; +import "./chunk-3TFVT2CW.js"; +import "./chunk-4MBMRILA.js"; +export { + CSS, + add, + canUseDOM, + findFirstFocusableNode, + getEventCoordinates, + getOwnerDocument, + getWindow, + hasViewportRelativeCoordinates, + isDocument, + isHTMLElement, + isKeyboardEvent, + isNode, + isSVGElement, + isTouchEvent, + isWindow, + subtract, + useCombinedRefs, + useEvent, + useInterval, + useIsomorphicLayoutEffect, + useLatestValue, + useLazyMemo, + useNodeRef, + usePrevious, + useUniqueId +}; +//# sourceMappingURL=@dnd-kit_utilities.js.map diff --git a/node_modules/.vite/deps/@dnd-kit_utilities.js.map b/node_modules/.vite/deps/@dnd-kit_utilities.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/node_modules/.vite/deps/@dnd-kit_utilities.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/node_modules/.vite/deps/@hookform_resolvers_zod.js b/node_modules/.vite/deps/@hookform_resolvers_zod.js index 1896d9ab..e5d767be 100644 --- a/node_modules/.vite/deps/@hookform_resolvers_zod.js +++ b/node_modules/.vite/deps/@hookform_resolvers_zod.js @@ -2,7 +2,7 @@ import { appendErrors, get, set -} from "./chunk-HQGJFDI6.js"; +} from "./chunk-RBMNEPGM.js"; import "./chunk-3TFVT2CW.js"; import "./chunk-4MBMRILA.js"; diff --git a/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js b/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js index a55e4146..57e4d0e9 100644 --- a/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js +++ b/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js @@ -1,48 +1,28 @@ "use client"; import { - FocusScope, - RemoveScrollBar, - __assign, - __rest, - __spreadArray, - createSidecarMedium, - exportSidecar, - fullWidthClassName, - hideOthers, - styleSingleton, - useMergeRefs, - zeroRightClassName -} from "./chunk-QYKEMCE4.js"; -import { - useEscapeKeydown -} from "./chunk-J3JCCWF4.js"; -import { - useId -} from "./chunk-5I6CIHEW.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; -import { - Presence -} from "./chunk-TZDCYJOT.js"; -import { - createContext2, - createContextScope -} from "./chunk-OAV3HHWW.js"; + Close, + Content, + Description, + Overlay, + Portal, + Root, + Title, + Trigger, + WarningProvider, + createDialogScope +} from "./chunk-HD7ZGEUK.js"; +import "./chunk-3PHEZ67U.js"; +import "./chunk-CSR2432P.js"; +import "./chunk-ZZUMGTHG.js"; +import "./chunk-MZLEVI2I.js"; +import "./chunk-I6MWER2B.js"; import { composeEventHandlers, - useCallbackRef, - useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; + createContextScope +} from "./chunk-ILYE3ZA7.js"; +import "./chunk-H55D7VYG.js"; +import "./chunk-R6S4VRB5.js"; import { - Primitive, - dispatchDiscreteCustomEvent -} from "./chunk-H55D7VYG.js"; -import { - require_react_dom -} from "./chunk-R6S4VRB5.js"; -import { - Slot, Slottable, useComposedRefs } from "./chunk-4WIT4MX7.js"; @@ -57,901 +37,8 @@ import { } from "./chunk-4MBMRILA.js"; // node_modules/@radix-ui/react-alert-dialog/dist/index.mjs -var React8 = __toESM(require_react(), 1); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/dist/index.mjs -var React7 = __toESM(require_react(), 1); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs var React = __toESM(require_react(), 1); var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); -var DISMISSABLE_LAYER_NAME = "DismissableLayer"; -var CONTEXT_UPDATE = "dismissableLayer.update"; -var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside"; -var FOCUS_OUTSIDE = "dismissableLayer.focusOutside"; -var originalBodyPointerEvents; -var DismissableLayerContext = React.createContext({ - layers: /* @__PURE__ */ new Set(), - layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), - branches: /* @__PURE__ */ new Set() -}); -var DismissableLayer = React.forwardRef( - (props, forwardedRef) => { - const { - disableOutsidePointerEvents = false, - onEscapeKeyDown, - onPointerDownOutside, - onFocusOutside, - onInteractOutside, - onDismiss, - ...layerProps - } = props; - const context = React.useContext(DismissableLayerContext); - const [node, setNode] = React.useState(null); - const ownerDocument = (node == null ? void 0 : node.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document); - const [, force] = React.useState({}); - const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)); - const layers = Array.from(context.layers); - const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); - const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); - const index = node ? layers.indexOf(node) : -1; - const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0; - const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex; - const pointerDownOutside = usePointerDownOutside((event) => { - const target = event.target; - const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target)); - if (!isPointerEventsEnabled || isPointerDownOnBranch) return; - onPointerDownOutside == null ? void 0 : onPointerDownOutside(event); - onInteractOutside == null ? void 0 : onInteractOutside(event); - if (!event.defaultPrevented) onDismiss == null ? void 0 : onDismiss(); - }, ownerDocument); - const focusOutside = useFocusOutside((event) => { - const target = event.target; - const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target)); - if (isFocusInBranch) return; - onFocusOutside == null ? void 0 : onFocusOutside(event); - onInteractOutside == null ? void 0 : onInteractOutside(event); - if (!event.defaultPrevented) onDismiss == null ? void 0 : onDismiss(); - }, ownerDocument); - useEscapeKeydown((event) => { - const isHighestLayer = index === context.layers.size - 1; - if (!isHighestLayer) return; - onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(event); - if (!event.defaultPrevented && onDismiss) { - event.preventDefault(); - onDismiss(); - } - }, ownerDocument); - React.useEffect(() => { - if (!node) return; - if (disableOutsidePointerEvents) { - if (context.layersWithOutsidePointerEventsDisabled.size === 0) { - originalBodyPointerEvents = ownerDocument.body.style.pointerEvents; - ownerDocument.body.style.pointerEvents = "none"; - } - context.layersWithOutsidePointerEventsDisabled.add(node); - } - context.layers.add(node); - dispatchUpdate(); - return () => { - if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) { - ownerDocument.body.style.pointerEvents = originalBodyPointerEvents; - } - }; - }, [node, ownerDocument, disableOutsidePointerEvents, context]); - React.useEffect(() => { - return () => { - if (!node) return; - context.layers.delete(node); - context.layersWithOutsidePointerEventsDisabled.delete(node); - dispatchUpdate(); - }; - }, [node, context]); - React.useEffect(() => { - const handleUpdate = () => force({}); - document.addEventListener(CONTEXT_UPDATE, handleUpdate); - return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate); - }, []); - return (0, import_jsx_runtime.jsx)( - Primitive.div, - { - ...layerProps, - ref: composedRefs, - style: { - pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0, - ...props.style - }, - onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture), - onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture), - onPointerDownCapture: composeEventHandlers( - props.onPointerDownCapture, - pointerDownOutside.onPointerDownCapture - ) - } - ); - } -); -DismissableLayer.displayName = DISMISSABLE_LAYER_NAME; -var BRANCH_NAME = "DismissableLayerBranch"; -var DismissableLayerBranch = React.forwardRef((props, forwardedRef) => { - const context = React.useContext(DismissableLayerContext); - const ref = React.useRef(null); - const composedRefs = useComposedRefs(forwardedRef, ref); - React.useEffect(() => { - const node = ref.current; - if (node) { - context.branches.add(node); - return () => { - context.branches.delete(node); - }; - } - }, [context.branches]); - return (0, import_jsx_runtime.jsx)(Primitive.div, { ...props, ref: composedRefs }); -}); -DismissableLayerBranch.displayName = BRANCH_NAME; -function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const handlePointerDownOutside = useCallbackRef(onPointerDownOutside); - const isPointerInsideReactTreeRef = React.useRef(false); - const handleClickRef = React.useRef(() => { - }); - React.useEffect(() => { - const handlePointerDown = (event) => { - if (event.target && !isPointerInsideReactTreeRef.current) { - let handleAndDispatchPointerDownOutsideEvent2 = function() { - handleAndDispatchCustomEvent( - POINTER_DOWN_OUTSIDE, - handlePointerDownOutside, - eventDetail, - { discrete: true } - ); - }; - var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2; - const eventDetail = { originalEvent: event }; - if (event.pointerType === "touch") { - ownerDocument.removeEventListener("click", handleClickRef.current); - handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2; - ownerDocument.addEventListener("click", handleClickRef.current, { once: true }); - } else { - handleAndDispatchPointerDownOutsideEvent2(); - } - } else { - ownerDocument.removeEventListener("click", handleClickRef.current); - } - isPointerInsideReactTreeRef.current = false; - }; - const timerId = window.setTimeout(() => { - ownerDocument.addEventListener("pointerdown", handlePointerDown); - }, 0); - return () => { - window.clearTimeout(timerId); - ownerDocument.removeEventListener("pointerdown", handlePointerDown); - ownerDocument.removeEventListener("click", handleClickRef.current); - }; - }, [ownerDocument, handlePointerDownOutside]); - return { - // ensures we check React component tree (not just DOM tree) - onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true - }; -} -function useFocusOutside(onFocusOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const handleFocusOutside = useCallbackRef(onFocusOutside); - const isFocusInsideReactTreeRef = React.useRef(false); - React.useEffect(() => { - const handleFocus = (event) => { - if (event.target && !isFocusInsideReactTreeRef.current) { - const eventDetail = { originalEvent: event }; - handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, { - discrete: false - }); - } - }; - ownerDocument.addEventListener("focusin", handleFocus); - return () => ownerDocument.removeEventListener("focusin", handleFocus); - }, [ownerDocument, handleFocusOutside]); - return { - onFocusCapture: () => isFocusInsideReactTreeRef.current = true, - onBlurCapture: () => isFocusInsideReactTreeRef.current = false - }; -} -function dispatchUpdate() { - const event = new CustomEvent(CONTEXT_UPDATE); - document.dispatchEvent(event); -} -function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) { - const target = detail.originalEvent.target; - const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail }); - if (handler) target.addEventListener(name, handler, { once: true }); - if (discrete) { - dispatchDiscreteCustomEvent(target, event); - } else { - target.dispatchEvent(event); - } -} - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal/dist/index.mjs -var React2 = __toESM(require_react(), 1); -var import_react_dom = __toESM(require_react_dom(), 1); -var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); -var PORTAL_NAME = "Portal"; -var Portal = React2.forwardRef((props, forwardedRef) => { - var _a; - const { container: containerProp, ...portalProps } = props; - const [mounted, setMounted] = React2.useState(false); - useLayoutEffect2(() => setMounted(true), []); - const container = containerProp || mounted && ((_a = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a.body); - return container ? import_react_dom.default.createPortal((0, import_jsx_runtime2.jsx)(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null; -}); -Portal.displayName = PORTAL_NAME; - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-guards/dist/index.mjs -var React3 = __toESM(require_react(), 1); -var count = 0; -function useFocusGuards() { - React3.useEffect(() => { - const edgeGuards = document.querySelectorAll("[data-radix-focus-guard]"); - document.body.insertAdjacentElement("afterbegin", edgeGuards[0] ?? createFocusGuard()); - document.body.insertAdjacentElement("beforeend", edgeGuards[1] ?? createFocusGuard()); - count++; - return () => { - if (count === 1) { - document.querySelectorAll("[data-radix-focus-guard]").forEach((node) => node.remove()); - } - count--; - }; - }, []); -} -function createFocusGuard() { - const element = document.createElement("span"); - element.setAttribute("data-radix-focus-guard", ""); - element.tabIndex = 0; - element.style.cssText = "outline: none; opacity: 0; position: fixed; pointer-events: none"; - return element; -} - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js -var React6 = __toESM(require_react()); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js -var React4 = __toESM(require_react()); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/medium.js -var effectCar = createSidecarMedium(); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js -var nothing = function() { - return; -}; -var RemoveScroll = React4.forwardRef(function(props, parentRef) { - var ref = React4.useRef(null); - var _a = React4.useState({ - onScrollCapture: nothing, - onWheelCapture: nothing, - onTouchMoveCapture: nothing - }), callbacks = _a[0], setCallbacks = _a[1]; - var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]); - var SideCar = sideCar; - var containerRef = useMergeRefs([ref, parentRef]); - var containerProps = __assign(__assign({}, rest), callbacks); - return React4.createElement( - React4.Fragment, - null, - enabled && React4.createElement(SideCar, { sideCar: effectCar, removeScrollBar, shards, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }), - forwardProps ? React4.cloneElement(React4.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React4.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children) - ); -}); -RemoveScroll.defaultProps = { - enabled: true, - removeScrollBar: true, - inert: false -}; -RemoveScroll.classNames = { - fullWidth: fullWidthClassName, - zeroRight: zeroRightClassName -}; - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js -var React5 = __toESM(require_react()); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js -var passiveSupported = false; -if (typeof window !== "undefined") { - try { - options = Object.defineProperty({}, "passive", { - get: function() { - passiveSupported = true; - return true; - } - }); - window.addEventListener("test", options, options); - window.removeEventListener("test", options, options); - } catch (err) { - passiveSupported = false; - } -} -var options; -var nonPassive = passiveSupported ? { passive: false } : false; - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/handleScroll.js -var alwaysContainsScroll = function(node) { - return node.tagName === "TEXTAREA"; -}; -var elementCanBeScrolled = function(node, overflow) { - var styles = window.getComputedStyle(node); - return ( - // not-not-scrollable - styles[overflow] !== "hidden" && // contains scroll inside self - !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === "visible") - ); -}; -var elementCouldBeVScrolled = function(node) { - return elementCanBeScrolled(node, "overflowY"); -}; -var elementCouldBeHScrolled = function(node) { - return elementCanBeScrolled(node, "overflowX"); -}; -var locationCouldBeScrolled = function(axis, node) { - var ownerDocument = node.ownerDocument; - var current = node; - do { - if (typeof ShadowRoot !== "undefined" && current instanceof ShadowRoot) { - current = current.host; - } - var isScrollable = elementCouldBeScrolled(axis, current); - if (isScrollable) { - var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2]; - if (s > d) { - return true; - } - } - current = current.parentNode; - } while (current && current !== ownerDocument.body); - return false; -}; -var getVScrollVariables = function(_a) { - var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight; - return [ - scrollTop, - scrollHeight, - clientHeight - ]; -}; -var getHScrollVariables = function(_a) { - var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth; - return [ - scrollLeft, - scrollWidth, - clientWidth - ]; -}; -var elementCouldBeScrolled = function(axis, node) { - return axis === "v" ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node); -}; -var getScrollVariables = function(axis, node) { - return axis === "v" ? getVScrollVariables(node) : getHScrollVariables(node); -}; -var getDirectionFactor = function(axis, direction) { - return axis === "h" && direction === "rtl" ? -1 : 1; -}; -var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) { - var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction); - var delta = directionFactor * sourceDelta; - var target = event.target; - var targetInLock = endTarget.contains(target); - var shouldCancelScroll = false; - var isDeltaPositive = delta > 0; - var availableScroll = 0; - var availableScrollTop = 0; - do { - var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2]; - var elementScroll = scroll_1 - capacity - directionFactor * position; - if (position || elementScroll) { - if (elementCouldBeScrolled(axis, target)) { - availableScroll += elementScroll; - availableScrollTop += position; - } - } - if (target instanceof ShadowRoot) { - target = target.host; - } else { - target = target.parentNode; - } - } while ( - // portaled content - !targetInLock && target !== document.body || // self content - targetInLock && (endTarget.contains(target) || endTarget === target) - ); - if (isDeltaPositive && (noOverscroll && Math.abs(availableScroll) < 1 || !noOverscroll && delta > availableScroll)) { - shouldCancelScroll = true; - } else if (!isDeltaPositive && (noOverscroll && Math.abs(availableScrollTop) < 1 || !noOverscroll && -delta > availableScrollTop)) { - shouldCancelScroll = true; - } - return shouldCancelScroll; -}; - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js -var getTouchXY = function(event) { - return "changedTouches" in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0]; -}; -var getDeltaXY = function(event) { - return [event.deltaX, event.deltaY]; -}; -var extractRef = function(ref) { - return ref && "current" in ref ? ref.current : ref; -}; -var deltaCompare = function(x, y) { - return x[0] === y[0] && x[1] === y[1]; -}; -var generateStyle = function(id) { - return "\n .block-interactivity-".concat(id, " {pointer-events: none;}\n .allow-interactivity-").concat(id, " {pointer-events: all;}\n"); -}; -var idCounter = 0; -var lockStack = []; -function RemoveScrollSideCar(props) { - var shouldPreventQueue = React5.useRef([]); - var touchStartRef = React5.useRef([0, 0]); - var activeAxis = React5.useRef(); - var id = React5.useState(idCounter++)[0]; - var Style = React5.useState(styleSingleton)[0]; - var lastProps = React5.useRef(props); - React5.useEffect(function() { - lastProps.current = props; - }, [props]); - React5.useEffect(function() { - if (props.inert) { - document.body.classList.add("block-interactivity-".concat(id)); - var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean); - allow_1.forEach(function(el) { - return el.classList.add("allow-interactivity-".concat(id)); - }); - return function() { - document.body.classList.remove("block-interactivity-".concat(id)); - allow_1.forEach(function(el) { - return el.classList.remove("allow-interactivity-".concat(id)); - }); - }; - } - return; - }, [props.inert, props.lockRef.current, props.shards]); - var shouldCancelEvent = React5.useCallback(function(event, parent) { - if ("touches" in event && event.touches.length === 2) { - return !lastProps.current.allowPinchZoom; - } - var touch = getTouchXY(event); - var touchStart = touchStartRef.current; - var deltaX = "deltaX" in event ? event.deltaX : touchStart[0] - touch[0]; - var deltaY = "deltaY" in event ? event.deltaY : touchStart[1] - touch[1]; - var currentAxis; - var target = event.target; - var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? "h" : "v"; - if ("touches" in event && moveDirection === "h" && target.type === "range") { - return false; - } - var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); - if (!canBeScrolledInMainDirection) { - return true; - } - if (canBeScrolledInMainDirection) { - currentAxis = moveDirection; - } else { - currentAxis = moveDirection === "v" ? "h" : "v"; - canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); - } - if (!canBeScrolledInMainDirection) { - return false; - } - if (!activeAxis.current && "changedTouches" in event && (deltaX || deltaY)) { - activeAxis.current = currentAxis; - } - if (!currentAxis) { - return true; - } - var cancelingAxis = activeAxis.current || currentAxis; - return handleScroll(cancelingAxis, parent, event, cancelingAxis === "h" ? deltaX : deltaY, true); - }, []); - var shouldPrevent = React5.useCallback(function(_event) { - var event = _event; - if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) { - return; - } - var delta = "deltaY" in event ? getDeltaXY(event) : getTouchXY(event); - var sourceEvent = shouldPreventQueue.current.filter(function(e) { - return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); - })[0]; - if (sourceEvent && sourceEvent.should) { - if (event.cancelable) { - event.preventDefault(); - } - return; - } - if (!sourceEvent) { - var shardNodes = (lastProps.current.shards || []).map(extractRef).filter(Boolean).filter(function(node) { - return node.contains(event.target); - }); - var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation; - if (shouldStop) { - if (event.cancelable) { - event.preventDefault(); - } - } - } - }, []); - var shouldCancel = React5.useCallback(function(name, delta, target, should) { - var event = { name, delta, target, should, shadowParent: getOutermostShadowParent(target) }; - shouldPreventQueue.current.push(event); - setTimeout(function() { - shouldPreventQueue.current = shouldPreventQueue.current.filter(function(e) { - return e !== event; - }); - }, 1); - }, []); - var scrollTouchStart = React5.useCallback(function(event) { - touchStartRef.current = getTouchXY(event); - activeAxis.current = void 0; - }, []); - var scrollWheel = React5.useCallback(function(event) { - shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); - }, []); - var scrollTouchMove = React5.useCallback(function(event) { - shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); - }, []); - React5.useEffect(function() { - lockStack.push(Style); - props.setCallbacks({ - onScrollCapture: scrollWheel, - onWheelCapture: scrollWheel, - onTouchMoveCapture: scrollTouchMove - }); - document.addEventListener("wheel", shouldPrevent, nonPassive); - document.addEventListener("touchmove", shouldPrevent, nonPassive); - document.addEventListener("touchstart", scrollTouchStart, nonPassive); - return function() { - lockStack = lockStack.filter(function(inst) { - return inst !== Style; - }); - document.removeEventListener("wheel", shouldPrevent, nonPassive); - document.removeEventListener("touchmove", shouldPrevent, nonPassive); - document.removeEventListener("touchstart", scrollTouchStart, nonPassive); - }; - }, []); - var removeScrollBar = props.removeScrollBar, inert = props.inert; - return React5.createElement( - React5.Fragment, - null, - inert ? React5.createElement(Style, { styles: generateStyle(id) }) : null, - removeScrollBar ? React5.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null - ); -} -function getOutermostShadowParent(node) { - var shadowParent = null; - while (node !== null) { - if (node instanceof ShadowRoot) { - shadowParent = node.host; - node = node.host; - } - node = node.parentNode; - } - return shadowParent; -} - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/sidecar.js -var sidecar_default = exportSidecar(effectCar, RemoveScrollSideCar); - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js -var ReactRemoveScroll = React6.forwardRef(function(props, ref) { - return React6.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default })); -}); -ReactRemoveScroll.classNames = RemoveScroll.classNames; -var Combination_default = ReactRemoveScroll; - -// node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/dist/index.mjs -var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); -var DIALOG_NAME = "Dialog"; -var [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME); -var [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME); -var Dialog = (props) => { - const { - __scopeDialog, - children, - open: openProp, - defaultOpen, - onOpenChange, - modal = true - } = props; - const triggerRef = React7.useRef(null); - const contentRef = React7.useRef(null); - const [open = false, setOpen] = useControllableState({ - prop: openProp, - defaultProp: defaultOpen, - onChange: onOpenChange - }); - return (0, import_jsx_runtime3.jsx)( - DialogProvider, - { - scope: __scopeDialog, - triggerRef, - contentRef, - contentId: useId(), - titleId: useId(), - descriptionId: useId(), - open, - onOpenChange: setOpen, - onOpenToggle: React7.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), - modal, - children - } - ); -}; -Dialog.displayName = DIALOG_NAME; -var TRIGGER_NAME = "DialogTrigger"; -var DialogTrigger = React7.forwardRef( - (props, forwardedRef) => { - const { __scopeDialog, ...triggerProps } = props; - const context = useDialogContext(TRIGGER_NAME, __scopeDialog); - const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef); - return (0, import_jsx_runtime3.jsx)( - Primitive.button, - { - type: "button", - "aria-haspopup": "dialog", - "aria-expanded": context.open, - "aria-controls": context.contentId, - "data-state": getState(context.open), - ...triggerProps, - ref: composedTriggerRef, - onClick: composeEventHandlers(props.onClick, context.onOpenToggle) - } - ); - } -); -DialogTrigger.displayName = TRIGGER_NAME; -var PORTAL_NAME2 = "DialogPortal"; -var [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME2, { - forceMount: void 0 -}); -var DialogPortal = (props) => { - const { __scopeDialog, forceMount, children, container } = props; - const context = useDialogContext(PORTAL_NAME2, __scopeDialog); - return (0, import_jsx_runtime3.jsx)(PortalProvider, { scope: __scopeDialog, forceMount, children: React7.Children.map(children, (child) => (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime3.jsx)(Portal, { asChild: true, container, children: child }) })) }); -}; -DialogPortal.displayName = PORTAL_NAME2; -var OVERLAY_NAME = "DialogOverlay"; -var DialogOverlay = React7.forwardRef( - (props, forwardedRef) => { - const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog); - const { forceMount = portalContext.forceMount, ...overlayProps } = props; - const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog); - return context.modal ? (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime3.jsx)(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null; - } -); -DialogOverlay.displayName = OVERLAY_NAME; -var DialogOverlayImpl = React7.forwardRef( - (props, forwardedRef) => { - const { __scopeDialog, ...overlayProps } = props; - const context = useDialogContext(OVERLAY_NAME, __scopeDialog); - return ( - // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll` - // ie. when `Overlay` and `Content` are siblings - (0, import_jsx_runtime3.jsx)(Combination_default, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: (0, import_jsx_runtime3.jsx)( - Primitive.div, - { - "data-state": getState(context.open), - ...overlayProps, - ref: forwardedRef, - style: { pointerEvents: "auto", ...overlayProps.style } - } - ) }) - ); - } -); -var CONTENT_NAME = "DialogContent"; -var DialogContent = React7.forwardRef( - (props, forwardedRef) => { - const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog); - const { forceMount = portalContext.forceMount, ...contentProps } = props; - const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); - return (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || context.open, children: context.modal ? (0, import_jsx_runtime3.jsx)(DialogContentModal, { ...contentProps, ref: forwardedRef }) : (0, import_jsx_runtime3.jsx)(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) }); - } -); -DialogContent.displayName = CONTENT_NAME; -var DialogContentModal = React7.forwardRef( - (props, forwardedRef) => { - const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); - const contentRef = React7.useRef(null); - const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef); - React7.useEffect(() => { - const content = contentRef.current; - if (content) return hideOthers(content); - }, []); - return (0, import_jsx_runtime3.jsx)( - DialogContentImpl, - { - ...props, - ref: composedRefs, - trapFocus: context.open, - disableOutsidePointerEvents: true, - onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => { - var _a; - event.preventDefault(); - (_a = context.triggerRef.current) == null ? void 0 : _a.focus(); - }), - onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => { - const originalEvent = event.detail.originalEvent; - const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; - const isRightClick = originalEvent.button === 2 || ctrlLeftClick; - if (isRightClick) event.preventDefault(); - }), - onFocusOutside: composeEventHandlers( - props.onFocusOutside, - (event) => event.preventDefault() - ) - } - ); - } -); -var DialogContentNonModal = React7.forwardRef( - (props, forwardedRef) => { - const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); - const hasInteractedOutsideRef = React7.useRef(false); - const hasPointerDownOutsideRef = React7.useRef(false); - return (0, import_jsx_runtime3.jsx)( - DialogContentImpl, - { - ...props, - ref: forwardedRef, - trapFocus: false, - disableOutsidePointerEvents: false, - onCloseAutoFocus: (event) => { - var _a, _b; - (_a = props.onCloseAutoFocus) == null ? void 0 : _a.call(props, event); - if (!event.defaultPrevented) { - if (!hasInteractedOutsideRef.current) (_b = context.triggerRef.current) == null ? void 0 : _b.focus(); - event.preventDefault(); - } - hasInteractedOutsideRef.current = false; - hasPointerDownOutsideRef.current = false; - }, - onInteractOutside: (event) => { - var _a, _b; - (_a = props.onInteractOutside) == null ? void 0 : _a.call(props, event); - if (!event.defaultPrevented) { - hasInteractedOutsideRef.current = true; - if (event.detail.originalEvent.type === "pointerdown") { - hasPointerDownOutsideRef.current = true; - } - } - const target = event.target; - const targetIsTrigger = (_b = context.triggerRef.current) == null ? void 0 : _b.contains(target); - if (targetIsTrigger) event.preventDefault(); - if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) { - event.preventDefault(); - } - } - } - ); - } -); -var DialogContentImpl = React7.forwardRef( - (props, forwardedRef) => { - const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props; - const context = useDialogContext(CONTENT_NAME, __scopeDialog); - const contentRef = React7.useRef(null); - const composedRefs = useComposedRefs(forwardedRef, contentRef); - useFocusGuards(); - return (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [ - (0, import_jsx_runtime3.jsx)( - FocusScope, - { - asChild: true, - loop: true, - trapped: trapFocus, - onMountAutoFocus: onOpenAutoFocus, - onUnmountAutoFocus: onCloseAutoFocus, - children: (0, import_jsx_runtime3.jsx)( - DismissableLayer, - { - role: "dialog", - id: context.contentId, - "aria-describedby": context.descriptionId, - "aria-labelledby": context.titleId, - "data-state": getState(context.open), - ...contentProps, - ref: composedRefs, - onDismiss: () => context.onOpenChange(false) - } - ) - } - ), - (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [ - (0, import_jsx_runtime3.jsx)(TitleWarning, { titleId: context.titleId }), - (0, import_jsx_runtime3.jsx)(DescriptionWarning, { contentRef, descriptionId: context.descriptionId }) - ] }) - ] }); - } -); -var TITLE_NAME = "DialogTitle"; -var DialogTitle = React7.forwardRef( - (props, forwardedRef) => { - const { __scopeDialog, ...titleProps } = props; - const context = useDialogContext(TITLE_NAME, __scopeDialog); - return (0, import_jsx_runtime3.jsx)(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef }); - } -); -DialogTitle.displayName = TITLE_NAME; -var DESCRIPTION_NAME = "DialogDescription"; -var DialogDescription = React7.forwardRef( - (props, forwardedRef) => { - const { __scopeDialog, ...descriptionProps } = props; - const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog); - return (0, import_jsx_runtime3.jsx)(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef }); - } -); -DialogDescription.displayName = DESCRIPTION_NAME; -var CLOSE_NAME = "DialogClose"; -var DialogClose = React7.forwardRef( - (props, forwardedRef) => { - const { __scopeDialog, ...closeProps } = props; - const context = useDialogContext(CLOSE_NAME, __scopeDialog); - return (0, import_jsx_runtime3.jsx)( - Primitive.button, - { - type: "button", - ...closeProps, - ref: forwardedRef, - onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false)) - } - ); - } -); -DialogClose.displayName = CLOSE_NAME; -function getState(open) { - return open ? "open" : "closed"; -} -var TITLE_WARNING_NAME = "DialogTitleWarning"; -var [WarningProvider, useWarningContext] = createContext2(TITLE_WARNING_NAME, { - contentName: CONTENT_NAME, - titleName: TITLE_NAME, - docsSlug: "dialog" -}); -var TitleWarning = ({ titleId }) => { - const titleWarningContext = useWarningContext(TITLE_WARNING_NAME); - const MESSAGE = `\`${titleWarningContext.contentName}\` requires a \`${titleWarningContext.titleName}\` for the component to be accessible for screen reader users. - -If you want to hide the \`${titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component. - -For more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`; - React7.useEffect(() => { - if (titleId) { - const hasTitle = document.getElementById(titleId); - if (!hasTitle) console.error(MESSAGE); - } - }, [MESSAGE, titleId]); - return null; -}; -var DESCRIPTION_WARNING_NAME = "DialogDescriptionWarning"; -var DescriptionWarning = ({ contentRef, descriptionId }) => { - const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME); - const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${descriptionWarningContext.contentName}}.`; - React7.useEffect(() => { - var _a; - const describedById = (_a = contentRef.current) == null ? void 0 : _a.getAttribute("aria-describedby"); - if (descriptionId && describedById) { - const hasDescription = document.getElementById(descriptionId); - if (!hasDescription) console.warn(MESSAGE); - } - }, [MESSAGE, contentRef, descriptionId]); - return null; -}; -var Root = Dialog; -var Trigger = DialogTrigger; -var Portal2 = DialogPortal; -var Overlay = DialogOverlay; -var Content = DialogContent; -var Title = DialogTitle; -var Description = DialogDescription; -var Close = DialogClose; - -// node_modules/@radix-ui/react-alert-dialog/dist/index.mjs -var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); var ROOT_NAME = "AlertDialog"; var [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [ createDialogScope @@ -960,50 +47,50 @@ var useDialogScope = createDialogScope(); var AlertDialog = (props) => { const { __scopeAlertDialog, ...alertDialogProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Root, { ...dialogScope, ...alertDialogProps, modal: true }); + return (0, import_jsx_runtime.jsx)(Root, { ...dialogScope, ...alertDialogProps, modal: true }); }; AlertDialog.displayName = ROOT_NAME; -var TRIGGER_NAME2 = "AlertDialogTrigger"; -var AlertDialogTrigger = React8.forwardRef( +var TRIGGER_NAME = "AlertDialogTrigger"; +var AlertDialogTrigger = React.forwardRef( (props, forwardedRef) => { const { __scopeAlertDialog, ...triggerProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef }); } ); -AlertDialogTrigger.displayName = TRIGGER_NAME2; -var PORTAL_NAME3 = "AlertDialogPortal"; +AlertDialogTrigger.displayName = TRIGGER_NAME; +var PORTAL_NAME = "AlertDialogPortal"; var AlertDialogPortal = (props) => { const { __scopeAlertDialog, ...portalProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Portal2, { ...dialogScope, ...portalProps }); + return (0, import_jsx_runtime.jsx)(Portal, { ...dialogScope, ...portalProps }); }; -AlertDialogPortal.displayName = PORTAL_NAME3; -var OVERLAY_NAME2 = "AlertDialogOverlay"; -var AlertDialogOverlay = React8.forwardRef( +AlertDialogPortal.displayName = PORTAL_NAME; +var OVERLAY_NAME = "AlertDialogOverlay"; +var AlertDialogOverlay = React.forwardRef( (props, forwardedRef) => { const { __scopeAlertDialog, ...overlayProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef }); } ); -AlertDialogOverlay.displayName = OVERLAY_NAME2; -var CONTENT_NAME2 = "AlertDialogContent"; -var [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME2); -var AlertDialogContent = React8.forwardRef( +AlertDialogOverlay.displayName = OVERLAY_NAME; +var CONTENT_NAME = "AlertDialogContent"; +var [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME); +var AlertDialogContent = React.forwardRef( (props, forwardedRef) => { const { __scopeAlertDialog, children, ...contentProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - const contentRef = React8.useRef(null); + const contentRef = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, contentRef); - const cancelRef = React8.useRef(null); - return (0, import_jsx_runtime4.jsx)( + const cancelRef = React.useRef(null); + return (0, import_jsx_runtime.jsx)( WarningProvider, { - contentName: CONTENT_NAME2, - titleName: TITLE_NAME2, + contentName: CONTENT_NAME, + titleName: TITLE_NAME, docsSlug: "alert-dialog", - children: (0, import_jsx_runtime4.jsx)(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: (0, import_jsx_runtime4.jsxs)( + children: (0, import_jsx_runtime.jsx)(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: (0, import_jsx_runtime.jsxs)( Content, { role: "alertdialog", @@ -1018,8 +105,8 @@ var AlertDialogContent = React8.forwardRef( onPointerDownOutside: (event) => event.preventDefault(), onInteractOutside: (event) => event.preventDefault(), children: [ - (0, import_jsx_runtime4.jsx)(Slottable, { children }), - (0, import_jsx_runtime4.jsx)(DescriptionWarning2, { contentRef }) + (0, import_jsx_runtime.jsx)(Slottable, { children }), + (0, import_jsx_runtime.jsx)(DescriptionWarning, { contentRef }) ] } ) }) @@ -1027,52 +114,52 @@ var AlertDialogContent = React8.forwardRef( ); } ); -AlertDialogContent.displayName = CONTENT_NAME2; -var TITLE_NAME2 = "AlertDialogTitle"; -var AlertDialogTitle = React8.forwardRef( +AlertDialogContent.displayName = CONTENT_NAME; +var TITLE_NAME = "AlertDialogTitle"; +var AlertDialogTitle = React.forwardRef( (props, forwardedRef) => { const { __scopeAlertDialog, ...titleProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Title, { ...dialogScope, ...titleProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Title, { ...dialogScope, ...titleProps, ref: forwardedRef }); } ); -AlertDialogTitle.displayName = TITLE_NAME2; -var DESCRIPTION_NAME2 = "AlertDialogDescription"; -var AlertDialogDescription = React8.forwardRef((props, forwardedRef) => { +AlertDialogTitle.displayName = TITLE_NAME; +var DESCRIPTION_NAME = "AlertDialogDescription"; +var AlertDialogDescription = React.forwardRef((props, forwardedRef) => { const { __scopeAlertDialog, ...descriptionProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef }); }); -AlertDialogDescription.displayName = DESCRIPTION_NAME2; +AlertDialogDescription.displayName = DESCRIPTION_NAME; var ACTION_NAME = "AlertDialogAction"; -var AlertDialogAction = React8.forwardRef( +var AlertDialogAction = React.forwardRef( (props, forwardedRef) => { const { __scopeAlertDialog, ...actionProps } = props; const dialogScope = useDialogScope(__scopeAlertDialog); - return (0, import_jsx_runtime4.jsx)(Close, { ...dialogScope, ...actionProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Close, { ...dialogScope, ...actionProps, ref: forwardedRef }); } ); AlertDialogAction.displayName = ACTION_NAME; var CANCEL_NAME = "AlertDialogCancel"; -var AlertDialogCancel = React8.forwardRef( +var AlertDialogCancel = React.forwardRef( (props, forwardedRef) => { const { __scopeAlertDialog, ...cancelProps } = props; const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog); const dialogScope = useDialogScope(__scopeAlertDialog); const ref = useComposedRefs(forwardedRef, cancelRef); - return (0, import_jsx_runtime4.jsx)(Close, { ...dialogScope, ...cancelProps, ref }); + return (0, import_jsx_runtime.jsx)(Close, { ...dialogScope, ...cancelProps, ref }); } ); AlertDialogCancel.displayName = CANCEL_NAME; -var DescriptionWarning2 = ({ contentRef }) => { - const MESSAGE = `\`${CONTENT_NAME2}\` requires a description for the component to be accessible for screen reader users. +var DescriptionWarning = ({ contentRef }) => { + const MESSAGE = `\`${CONTENT_NAME}\` requires a description for the component to be accessible for screen reader users. -You can add a description to the \`${CONTENT_NAME2}\` by passing a \`${DESCRIPTION_NAME2}\` component as a child, which also benefits sighted users by adding visible context to the dialog. +You can add a description to the \`${CONTENT_NAME}\` by passing a \`${DESCRIPTION_NAME}\` component as a child, which also benefits sighted users by adding visible context to the dialog. -Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${CONTENT_NAME2}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. +Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${CONTENT_NAME}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component. For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`; - React8.useEffect(() => { + React.useEffect(() => { var _a; const hasDescription = document.getElementById( (_a = contentRef.current) == null ? void 0 : _a.getAttribute("aria-describedby") @@ -1083,7 +170,7 @@ For more information, see https://radix-ui.com/primitives/docs/components/alert- }; var Root2 = AlertDialog; var Trigger2 = AlertDialogTrigger; -var Portal22 = AlertDialogPortal; +var Portal2 = AlertDialogPortal; var Overlay2 = AlertDialogOverlay; var Content2 = AlertDialogContent; var Action = AlertDialogAction; @@ -1105,7 +192,7 @@ export { Content2 as Content, Description2 as Description, Overlay2 as Overlay, - Portal22 as Portal, + Portal2 as Portal, Root2 as Root, Title2 as Title, Trigger2 as Trigger, diff --git a/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js.map b/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js.map index 53ea25be..53e6192b 100644 --- a/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-alert-dialog.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../@radix-ui/react-alert-dialog/src/AlertDialog.tsx", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/src/Dialog.tsx", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal/src/Portal.tsx", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-guards/src/FocusGuards.tsx", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/medium.js", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/handleScroll.js", "../../@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/sidecar.js"], - "sourcesContent": ["import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Slottable } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst ROOT_NAME = 'AlertDialog';\n\ntype ScopedProps

= P & { __scopeAlertDialog?: Scope };\nconst [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope,\n]);\nconst useDialogScope = createDialogScope();\n\ntype DialogProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogProps extends Omit {}\n\nconst AlertDialog: React.FC = (props: ScopedProps) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n};\n\nAlertDialog.displayName = ROOT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTrigger\n * -----------------------------------------------------------------------------------------------*/\nconst TRIGGER_NAME = 'AlertDialogTrigger';\n\ntype AlertDialogTriggerElement = React.ElementRef;\ntype DialogTriggerProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogTriggerProps extends DialogTriggerProps {}\n\nconst AlertDialogTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'AlertDialogPortal';\n\ntype DialogPortalProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogPortalProps extends DialogPortalProps {}\n\nconst AlertDialogPortal: React.FC = (\n props: ScopedProps\n) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n};\n\nAlertDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'AlertDialogOverlay';\n\ntype AlertDialogOverlayElement = React.ElementRef;\ntype DialogOverlayProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogOverlayProps extends DialogOverlayProps {}\n\nconst AlertDialogOverlay = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogOverlay.displayName = OVERLAY_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AlertDialogContent';\n\ntype AlertDialogContentContextValue = {\n cancelRef: React.MutableRefObject;\n};\n\nconst [AlertDialogContentProvider, useAlertDialogContentContext] =\n createAlertDialogContext(CONTENT_NAME);\n\ntype AlertDialogContentElement = React.ElementRef;\ntype DialogContentProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogContentProps\n extends Omit {}\n\nconst AlertDialogContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n\n return (\n \n \n {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n })}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n >\n {/**\n * We have to use `Slottable` here as we cannot wrap the `AlertDialogContentProvider`\n * around everything, otherwise the `DescriptionWarning` would be rendered straight away.\n * This is because we want the accessibility checks to run only once the content is actually\n * open and that behaviour is already encapsulated in `DialogContent`.\n */}\n {children}\n {process.env.NODE_ENV === 'development' && (\n \n )}\n \n \n \n );\n }\n);\n\nAlertDialogContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'AlertDialogTitle';\n\ntype AlertDialogTitleElement = React.ElementRef;\ntype DialogTitleProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogTitleProps extends DialogTitleProps {}\n\nconst AlertDialogTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'AlertDialogDescription';\n\ntype AlertDialogDescriptionElement = React.ElementRef;\ntype DialogDescriptionProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogDescriptionProps extends DialogDescriptionProps {}\n\nconst AlertDialogDescription = React.forwardRef<\n AlertDialogDescriptionElement,\n AlertDialogDescriptionProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n});\n\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'AlertDialogAction';\n\ntype AlertDialogActionElement = React.ElementRef;\ntype DialogCloseProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogActionProps extends DialogCloseProps {}\n\nconst AlertDialogAction = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogAction.displayName = ACTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogCancel\n * -----------------------------------------------------------------------------------------------*/\n\nconst CANCEL_NAME = 'AlertDialogCancel';\n\ntype AlertDialogCancelElement = React.ElementRef;\ninterface AlertDialogCancelProps extends DialogCloseProps {}\n\nconst AlertDialogCancel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return ;\n }\n);\n\nAlertDialogCancel.displayName = CANCEL_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject;\n};\n\nconst DescriptionWarning: React.FC = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute('aria-describedby')!\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n\n return null;\n};\n\nconst Root = AlertDialog;\nconst Trigger = AlertDialogTrigger;\nconst Portal = AlertDialogPortal;\nconst Overlay = AlertDialogOverlay;\nconst Content = AlertDialogContent;\nconst Action = AlertDialogAction;\nconst Cancel = AlertDialogCancel;\nconst Title = AlertDialogTitle;\nconst Description = AlertDialogDescription;\n\nexport {\n createAlertDialogScope,\n //\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogTitle,\n AlertDialogDescription,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Action,\n Cancel,\n Title,\n Description,\n};\nexport type {\n AlertDialogProps,\n AlertDialogTriggerProps,\n AlertDialogPortalProps,\n AlertDialogOverlayProps,\n AlertDialogContentProps,\n AlertDialogActionProps,\n AlertDialogCancelProps,\n AlertDialogTitleProps,\n AlertDialogDescriptionProps,\n};\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContext, createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { hideOthers } from 'aria-hidden';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps

= P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject;\n contentRef: React.RefObject;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC = (props: ScopedProps) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n \n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n \n );\n }\n);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC = (props: ScopedProps) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n \n {React.Children.map(children, (child) => (\n \n \n {child}\n \n \n ))}\n \n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n \n \n \n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst DialogOverlayImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n \n \n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n \n {context.modal ? (\n \n ) : (\n \n )}\n \n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit {}\n\nconst DialogContentModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\ninterface DialogContentImplProps extends Omit {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (beacuse of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n \n context.onOpenChange(false)}\n />\n \n {process.env.NODE_ENV !== 'production' && (\n <>\n \n \n \n )}\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ElementRef;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ElementRef;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ElementRef;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set(),\n layersWithOutsidePointerEventsDisabled: new Set(),\n branches: new Set(),\n});\n\ntype DismissableLayerElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n \n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return ;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n", "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | null;\n}\n\nconst Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n", "import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n", "import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n", "import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if ('touches' in event && event.touches.length === 2) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n", "var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n", "var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2];\n if (s > d) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n if (target instanceof ShadowRoot) {\n target = target.host;\n }\n else {\n target = target.parentNode;\n }\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n", "import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n"], - "mappings": "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", - "names": ["React", "React", "node", "handleAndDispatchPointerDownOutsideEvent", "React", "import_jsx_runtime", "ReactDOM", "React", "React", "React", "React", "import_jsx_runtime", "PORTAL_NAME", "Portal", "import_jsx_runtime", "TRIGGER_NAME", "PORTAL_NAME", "Portal", "OVERLAY_NAME", "CONTENT_NAME", "TITLE_NAME", "DescriptionWarning", "DESCRIPTION_NAME", "Root", "Trigger", "Overlay", "Content", "Title", "Description"] + "sources": ["../../@radix-ui/react-alert-dialog/src/AlertDialog.tsx"], + "sourcesContent": ["import * as React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { createDialogScope } from '@radix-ui/react-dialog';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Slottable } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst ROOT_NAME = 'AlertDialog';\n\ntype ScopedProps

= P & { __scopeAlertDialog?: Scope };\nconst [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope,\n]);\nconst useDialogScope = createDialogScope();\n\ntype DialogProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogProps extends Omit {}\n\nconst AlertDialog: React.FC = (props: ScopedProps) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n};\n\nAlertDialog.displayName = ROOT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTrigger\n * -----------------------------------------------------------------------------------------------*/\nconst TRIGGER_NAME = 'AlertDialogTrigger';\n\ntype AlertDialogTriggerElement = React.ElementRef;\ntype DialogTriggerProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogTriggerProps extends DialogTriggerProps {}\n\nconst AlertDialogTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'AlertDialogPortal';\n\ntype DialogPortalProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogPortalProps extends DialogPortalProps {}\n\nconst AlertDialogPortal: React.FC = (\n props: ScopedProps\n) => {\n const { __scopeAlertDialog, ...portalProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n};\n\nAlertDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'AlertDialogOverlay';\n\ntype AlertDialogOverlayElement = React.ElementRef;\ntype DialogOverlayProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogOverlayProps extends DialogOverlayProps {}\n\nconst AlertDialogOverlay = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogOverlay.displayName = OVERLAY_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AlertDialogContent';\n\ntype AlertDialogContentContextValue = {\n cancelRef: React.MutableRefObject;\n};\n\nconst [AlertDialogContentProvider, useAlertDialogContentContext] =\n createAlertDialogContext(CONTENT_NAME);\n\ntype AlertDialogContentElement = React.ElementRef;\ntype DialogContentProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogContentProps\n extends Omit {}\n\nconst AlertDialogContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const cancelRef = React.useRef(null);\n\n return (\n \n \n {\n event.preventDefault();\n cancelRef.current?.focus({ preventScroll: true });\n })}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n >\n {/**\n * We have to use `Slottable` here as we cannot wrap the `AlertDialogContentProvider`\n * around everything, otherwise the `DescriptionWarning` would be rendered straight away.\n * This is because we want the accessibility checks to run only once the content is actually\n * open and that behaviour is already encapsulated in `DialogContent`.\n */}\n {children}\n {process.env.NODE_ENV === 'development' && (\n \n )}\n \n \n \n );\n }\n);\n\nAlertDialogContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'AlertDialogTitle';\n\ntype AlertDialogTitleElement = React.ElementRef;\ntype DialogTitleProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogTitleProps extends DialogTitleProps {}\n\nconst AlertDialogTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'AlertDialogDescription';\n\ntype AlertDialogDescriptionElement = React.ElementRef;\ntype DialogDescriptionProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogDescriptionProps extends DialogDescriptionProps {}\n\nconst AlertDialogDescription = React.forwardRef<\n AlertDialogDescriptionElement,\n AlertDialogDescriptionProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n});\n\nAlertDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'AlertDialogAction';\n\ntype AlertDialogActionElement = React.ElementRef;\ntype DialogCloseProps = React.ComponentPropsWithoutRef;\ninterface AlertDialogActionProps extends DialogCloseProps {}\n\nconst AlertDialogAction = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props;\n const dialogScope = useDialogScope(__scopeAlertDialog);\n return ;\n }\n);\n\nAlertDialogAction.displayName = ACTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogCancel\n * -----------------------------------------------------------------------------------------------*/\n\nconst CANCEL_NAME = 'AlertDialogCancel';\n\ntype AlertDialogCancelElement = React.ElementRef;\ninterface AlertDialogCancelProps extends DialogCloseProps {}\n\nconst AlertDialogCancel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props;\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);\n const dialogScope = useDialogScope(__scopeAlertDialog);\n const ref = useComposedRefs(forwardedRef, cancelRef);\n return ;\n }\n);\n\nAlertDialogCancel.displayName = CANCEL_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject;\n};\n\nconst DescriptionWarning: React.FC = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou can add a description to the \\`${CONTENT_NAME}\\` by passing a \\`${DESCRIPTION_NAME}\\` component as a child, which also benefits sighted users by adding visible context to the dialog.\n\nAlternatively, you can use your own component as a description by assigning it an \\`id\\` and passing the same value to the \\`aria-describedby\\` prop in \\`${CONTENT_NAME}\\`. If the description is confusing or duplicative for sighted users, you can use the \\`@radix-ui/react-visually-hidden\\` primitive as a wrapper around your description component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;\n\n React.useEffect(() => {\n const hasDescription = document.getElementById(\n contentRef.current?.getAttribute('aria-describedby')!\n );\n if (!hasDescription) console.warn(MESSAGE);\n }, [MESSAGE, contentRef]);\n\n return null;\n};\n\nconst Root = AlertDialog;\nconst Trigger = AlertDialogTrigger;\nconst Portal = AlertDialogPortal;\nconst Overlay = AlertDialogOverlay;\nconst Content = AlertDialogContent;\nconst Action = AlertDialogAction;\nconst Cancel = AlertDialogCancel;\nconst Title = AlertDialogTitle;\nconst Description = AlertDialogDescription;\n\nexport {\n createAlertDialogScope,\n //\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogTitle,\n AlertDialogDescription,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Action,\n Cancel,\n Title,\n Description,\n};\nexport type {\n AlertDialogProps,\n AlertDialogTriggerProps,\n AlertDialogPortalProps,\n AlertDialogOverlayProps,\n AlertDialogContentProps,\n AlertDialogActionProps,\n AlertDialogCancelProps,\n AlertDialogTitleProps,\n AlertDialogDescriptionProps,\n};\n"], + "mappings": "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", + "names": ["Root", "Trigger", "Portal", "Overlay", "Content", "Title", "Description"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-checkbox.js b/node_modules/.vite/deps/@radix-ui_react-checkbox.js index ba9a603e..eedf7a98 100644 --- a/node_modules/.vite/deps/@radix-ui_react-checkbox.js +++ b/node_modules/.vite/deps/@radix-ui_react-checkbox.js @@ -4,19 +4,17 @@ import { } from "./chunk-DDW565K2.js"; import { useSize -} from "./chunk-MR3TNHRB.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; +} from "./chunk-AJMUNMLZ.js"; import { Presence -} from "./chunk-TZDCYJOT.js"; +} from "./chunk-MZLEVI2I.js"; import { + useControllableState +} from "./chunk-I6MWER2B.js"; +import { + composeEventHandlers, createContextScope -} from "./chunk-OAV3HHWW.js"; -import { - composeEventHandlers -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -51,12 +49,13 @@ var Checkbox = React.forwardRef( disabled, value = "on", onCheckedChange, + form, ...checkboxProps } = props; const [button, setButton] = React.useState(null); const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node)); const hasConsumerStoppedPropagationRef = React.useRef(false); - const isFormControl = button ? Boolean(button.closest("form")) : true; + const isFormControl = button ? form || !!button.closest("form") : true; const [checked = false, setChecked] = useControllableState({ prop: checkedProp, defaultProp: defaultChecked, @@ -64,11 +63,11 @@ var Checkbox = React.forwardRef( }); const initialCheckedStateRef = React.useRef(checked); React.useEffect(() => { - const form = button == null ? void 0 : button.form; - if (form) { + const form2 = button == null ? void 0 : button.form; + if (form2) { const reset = () => setChecked(initialCheckedStateRef.current); - form.addEventListener("reset", reset); - return () => form.removeEventListener("reset", reset); + form2.addEventListener("reset", reset); + return () => form2.removeEventListener("reset", reset); } }, [button, setChecked]); return (0, import_jsx_runtime.jsxs)(CheckboxProvider, { scope: __scopeCheckbox, state: checked, disabled, children: [ @@ -107,7 +106,9 @@ var Checkbox = React.forwardRef( checked, required, disabled, - style: { transform: "translateX(-100%)" } + form, + style: { transform: "translateX(-100%)" }, + defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked } ) ] }); @@ -133,7 +134,7 @@ var CheckboxIndicator = React.forwardRef( ); CheckboxIndicator.displayName = INDICATOR_NAME; var BubbleInput = (props) => { - const { control, checked, bubbles = true, ...inputProps } = props; + const { control, checked, bubbles = true, defaultChecked, ...inputProps } = props; const ref = React.useRef(null); const prevChecked = usePrevious(checked); const controlSize = useSize(control); @@ -149,12 +150,13 @@ var BubbleInput = (props) => { input.dispatchEvent(event); } }, [prevChecked, checked, bubbles]); + const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked); return (0, import_jsx_runtime.jsx)( "input", { type: "checkbox", "aria-hidden": true, - defaultChecked: isIndeterminate(checked) ? false : checked, + defaultChecked: defaultChecked ?? defaultCheckedRef.current, ...inputProps, tabIndex: -1, ref, diff --git a/node_modules/.vite/deps/@radix-ui_react-checkbox.js.map b/node_modules/.vite/deps/@radix-ui_react-checkbox.js.map index f349e2a0..32fe6b1c 100644 --- a/node_modules/.vite/deps/@radix-ui_react-checkbox.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-checkbox.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../@radix-ui/react-checkbox/src/Checkbox.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Checkbox\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_NAME = 'Checkbox';\n\ntype ScopedProps

= P & { __scopeCheckbox?: Scope };\nconst [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\n\ntype CheckedState = boolean | 'indeterminate';\n\ntype CheckboxContextValue = {\n state: CheckedState;\n disabled?: boolean;\n};\n\nconst [CheckboxProvider, useCheckboxContext] =\n createCheckboxContext(CHECKBOX_NAME);\n\ntype CheckboxElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface CheckboxProps extends Omit {\n checked?: CheckedState;\n defaultChecked?: CheckedState;\n required?: boolean;\n onCheckedChange?(checked: CheckedState): void;\n}\n\nconst Checkbox = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = 'on',\n onCheckedChange,\n ...checkboxProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? Boolean(button.closest('form')) : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange,\n });\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = button?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener('reset', reset);\n return () => form.removeEventListener('reset', reset);\n }\n }, [button, setChecked]);\n\n return (\n \n {\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n })}\n onClick={composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => (isIndeterminate(prevChecked) ? true : !prevChecked));\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if checkbox is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect checkbox updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n \n )}\n \n );\n }\n);\n\nCheckbox.displayName = CHECKBOX_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'CheckboxIndicator';\n\ntype CheckboxIndicatorElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface CheckboxIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst CheckboxIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return (\n \n \n \n );\n }\n);\n\nCheckboxIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit {\n checked: CheckedState;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n const setChecked = descriptor.set;\n\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n \n );\n};\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Checkbox;\nconst Indicator = CheckboxIndicator;\n\nexport {\n createCheckboxScope,\n //\n Checkbox,\n CheckboxIndicator,\n //\n Root,\n Indicator,\n};\nexport type { CheckboxProps, CheckboxIndicatorProps, CheckedState };\n"], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAuB;AA0EjB,yBAAA;AA1DN,IAAM,gBAAgB;AAGtB,IAAM,CAAC,uBAAuB,mBAAmB,IAAI,mBAAmB,aAAa;AASrF,IAAM,CAAC,kBAAkB,kBAAkB,IACzC,sBAA4C,aAAa;AAW3D,IAAM,WAAiB;EACrB,CAAC,OAAmC,iBAAiB;AACnD,UAAM;MACJ;MACA;MACA,SAAS;MACT;MACA;MACA;MACA,QAAQ;MACR;MACA,GAAG;IACL,IAAI;AACJ,UAAM,CAAC,QAAQ,SAAS,IAAU,eAAmC,IAAI;AACzE,UAAM,eAAe,gBAAgB,cAAc,CAAC,SAAS,UAAU,IAAI,CAAC;AAC5E,UAAM,mCAAyC,aAAO,KAAK;AAE3D,UAAM,gBAAgB,SAAS,QAAQ,OAAO,QAAQ,MAAM,CAAC,IAAI;AACjE,UAAM,CAAC,UAAU,OAAO,UAAU,IAAI,qBAAqB;MACzD,MAAM;MACN,aAAa;MACb,UAAU;IACZ,CAAC;AACD,UAAM,yBAA+B,aAAO,OAAO;AAC7C,IAAA,gBAAU,MAAM;AACpB,YAAM,OAAO,iCAAQ;AACrB,UAAI,MAAM;AACR,cAAM,QAAQ,MAAM,WAAW,uBAAuB,OAAO;AAC7D,aAAK,iBAAiB,SAAS,KAAK;AACpC,eAAO,MAAM,KAAK,oBAAoB,SAAS,KAAK;MACtD;IACF,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,eACE,yBAAC,kBAAA,EAAiB,OAAO,iBAAiB,OAAO,SAAS,UACxD,UAAA;UAAA;QAAC,UAAU;QAAV;UACC,MAAK;UACL,MAAK;UACL,gBAAc,gBAAgB,OAAO,IAAI,UAAU;UACnD,iBAAe;UACf,cAAY,SAAS,OAAO;UAC5B,iBAAe,WAAW,KAAK;UAC/B;UACA;UACC,GAAG;UACJ,KAAK;UACL,WAAW,qBAAqB,MAAM,WAAW,CAAC,UAAU;AAE1D,gBAAI,MAAM,QAAQ,QAAS,OAAM,eAAe;UAClD,CAAC;UACD,SAAS,qBAAqB,MAAM,SAAS,CAAC,UAAU;AACtD,uBAAW,CAAC,gBAAiB,gBAAgB,WAAW,IAAI,OAAO,CAAC,WAAY;AAChF,gBAAI,eAAe;AACjB,+CAAiC,UAAU,MAAM,qBAAqB;AAItE,kBAAI,CAAC,iCAAiC,QAAS,OAAM,gBAAgB;YACvE;UACF,CAAC;QAAA;MACH;MACC,qBACC;QAAC;QAAA;UACC,SAAS;UACT,SAAS,CAAC,iCAAiC;UAC3C;UACA;UACA;UACA;UACA;UAIA,OAAO,EAAE,WAAW,oBAAoB;QAAA;MAC1C;IAAA,EAAA,CAEJ;EAEJ;AACF;AAEA,SAAS,cAAc;AAMvB,IAAM,iBAAiB;AAYvB,IAAM,oBAA0B;EAC9B,CAAC,OAA4C,iBAAiB;AAC5D,UAAM,EAAE,iBAAiB,YAAY,GAAG,eAAe,IAAI;AAC3D,UAAM,UAAU,mBAAmB,gBAAgB,eAAe;AAClE,eACE,wBAAC,UAAA,EAAS,SAAS,cAAc,gBAAgB,QAAQ,KAAK,KAAK,QAAQ,UAAU,MACnF,cAAA;MAAC,UAAU;MAAV;QACC,cAAY,SAAS,QAAQ,KAAK;QAClC,iBAAe,QAAQ,WAAW,KAAK;QACtC,GAAG;QACJ,KAAK;QACL,OAAO,EAAE,eAAe,QAAQ,GAAG,MAAM,MAAM;MAAA;IACjD,EAAA,CACF;EAEJ;AACF;AAEA,kBAAkB,cAAc;AAWhC,IAAM,cAAc,CAAC,UAA4B;AAC/C,QAAM,EAAE,SAAS,SAAS,UAAU,MAAM,GAAG,WAAW,IAAI;AAC5D,QAAM,MAAY,aAAyB,IAAI;AAC/C,QAAM,cAAc,YAAY,OAAO;AACvC,QAAM,cAAc,QAAQ,OAAO;AAG7B,EAAA,gBAAU,MAAM;AACpB,UAAM,QAAQ,IAAI;AAClB,UAAM,aAAa,OAAO,iBAAiB;AAC3C,UAAM,aAAa,OAAO,yBAAyB,YAAY,SAAS;AACxE,UAAM,aAAa,WAAW;AAE9B,QAAI,gBAAgB,WAAW,YAAY;AACzC,YAAM,QAAQ,IAAI,MAAM,SAAS,EAAE,QAAQ,CAAC;AAC5C,YAAM,gBAAgB,gBAAgB,OAAO;AAC7C,iBAAW,KAAK,OAAO,gBAAgB,OAAO,IAAI,QAAQ,OAAO;AACjE,YAAM,cAAc,KAAK;IAC3B;EACF,GAAG,CAAC,aAAa,SAAS,OAAO,CAAC;AAElC,aACE;IAAC;IAAA;MACC,MAAK;MACL,eAAW;MACX,gBAAgB,gBAAgB,OAAO,IAAI,QAAQ;MAClD,GAAG;MACJ,UAAU;MACV;MACA,OAAO;QACL,GAAG,MAAM;QACT,GAAG;QACH,UAAU;QACV,eAAe;QACf,SAAS;QACT,QAAQ;MACV;IAAA;EACF;AAEJ;AAEA,SAAS,gBAAgB,SAAoD;AAC3E,SAAO,YAAY;AACrB;AAEA,SAAS,SAAS,SAAuB;AACvC,SAAO,gBAAgB,OAAO,IAAI,kBAAkB,UAAU,YAAY;AAC5E;AAEA,IAAM,OAAO;AACb,IAAM,YAAY;", - "names": [] + "sourcesContent": ["import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Checkbox\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_NAME = 'Checkbox';\n\ntype ScopedProps

= P & { __scopeCheckbox?: Scope };\nconst [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\n\ntype CheckedState = boolean | 'indeterminate';\n\ntype CheckboxContextValue = {\n state: CheckedState;\n disabled?: boolean;\n};\n\nconst [CheckboxProvider, useCheckboxContext] =\n createCheckboxContext(CHECKBOX_NAME);\n\ntype CheckboxElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface CheckboxProps extends Omit {\n checked?: CheckedState;\n defaultChecked?: CheckedState;\n required?: boolean;\n onCheckedChange?(checked: CheckedState): void;\n}\n\nconst Checkbox = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = 'on',\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? form || !!button.closest('form') : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange,\n });\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = button?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener('reset', reset);\n return () => form.removeEventListener('reset', reset);\n }\n }, [button, setChecked]);\n\n return (\n \n {\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n })}\n onClick={composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => (isIndeterminate(prevChecked) ? true : !prevChecked));\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if checkbox is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect checkbox updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n \n )}\n \n );\n }\n);\n\nCheckbox.displayName = CHECKBOX_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'CheckboxIndicator';\n\ntype CheckboxIndicatorElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface CheckboxIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst CheckboxIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return (\n \n \n \n );\n }\n);\n\nCheckboxIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit {\n checked: CheckedState;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n const { control, checked, bubbles = true, defaultChecked, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n const setChecked = descriptor.set;\n\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return (\n \n );\n};\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Checkbox;\nconst Indicator = CheckboxIndicator;\n\nexport {\n createCheckboxScope,\n //\n Checkbox,\n CheckboxIndicator,\n //\n Root,\n Indicator,\n};\nexport type { CheckboxProps, CheckboxIndicatorProps, CheckedState };\n"], + "mappings": "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", + "names": ["form"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-collapsible.js b/node_modules/.vite/deps/@radix-ui_react-collapsible.js index a0316df1..45bcf9f9 100644 --- a/node_modules/.vite/deps/@radix-ui_react-collapsible.js +++ b/node_modules/.vite/deps/@radix-ui_react-collapsible.js @@ -1,20 +1,18 @@ "use client"; import { useId -} from "./chunk-5I6CIHEW.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; +} from "./chunk-ZZUMGTHG.js"; import { Presence -} from "./chunk-TZDCYJOT.js"; +} from "./chunk-MZLEVI2I.js"; import { - createContextScope -} from "./chunk-OAV3HHWW.js"; + useControllableState +} from "./chunk-I6MWER2B.js"; import { composeEventHandlers, + createContextScope, useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; diff --git a/node_modules/.vite/deps/@radix-ui_react-collapsible.js.map b/node_modules/.vite/deps/@radix-ui_react-collapsible.js.map index 3fabdae2..0852e196 100644 --- a/node_modules/.vite/deps/@radix-ui_react-collapsible.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-collapsible.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../@radix-ui/react-collapsible/src/Collapsible.tsx"], "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Collapsible\n * -----------------------------------------------------------------------------------------------*/\n\nconst COLLAPSIBLE_NAME = 'Collapsible';\n\ntype ScopedProps

= P & { __scopeCollapsible?: Scope };\nconst [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\n\ntype CollapsibleContextValue = {\n contentId: string;\n disabled?: boolean;\n open: boolean;\n onOpenToggle(): void;\n};\n\nconst [CollapsibleProvider, useCollapsibleContext] =\n createCollapsibleContext(COLLAPSIBLE_NAME);\n\ntype CollapsibleElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface CollapsibleProps extends PrimitiveDivProps {\n defaultOpen?: boolean;\n open?: boolean;\n disabled?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst Collapsible = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n >\n \n \n );\n }\n);\n\nCollapsible.displayName = COLLAPSIBLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'CollapsibleTrigger';\n\ntype CollapsibleTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface CollapsibleTriggerProps extends PrimitiveButtonProps {}\n\nconst CollapsibleTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return (\n \n );\n }\n);\n\nCollapsibleTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsibleContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'CollapsibleContent';\n\ntype CollapsibleContentElement = CollapsibleContentImplElement;\ninterface CollapsibleContentProps extends Omit {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst CollapsibleContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return (\n \n {({ present }) => (\n \n )}\n \n );\n }\n);\n\nCollapsibleContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype CollapsibleContentImplElement = React.ElementRef;\ninterface CollapsibleContentImplProps extends PrimitiveDivProps {\n present: boolean;\n}\n\nconst CollapsibleContentImpl = React.forwardRef<\n CollapsibleContentImplElement,\n CollapsibleContentImplProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n // when opening we want it to immediately open to retrieve dimensions\n // when closing we delay `present` to retrieve dimensions before closing\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef>();\n\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n return () => cancelAnimationFrame(rAF);\n }, []);\n\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName,\n };\n // block any animations/transitions so the element renders at its full dimensions\n node.style.transitionDuration = '0s';\n node.style.animationName = 'none';\n\n // get width and height from full dimensions\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n\n // kick off any animations/transitions that were originally set up if it isn't the initial mount\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n\n setIsPresent(present);\n }\n /**\n * depends on `context.open` because it will change to `false`\n * when a close is triggered but `present` will be `false` on\n * animation end (so when close finishes). This allows us to\n * retrieve the dimensions *before* closing.\n */\n }, [context.open, present]);\n\n return (\n

= P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject;\n contentRef: React.RefObject;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC = (props: ScopedProps) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n \n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n \n );\n }\n);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC = (props: ScopedProps) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n \n {React.Children.map(children, (child) => (\n \n \n {child}\n \n \n ))}\n \n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n \n \n \n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst DialogOverlayImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n \n \n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n \n {context.modal ? (\n \n ) : (\n \n )}\n \n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit {}\n\nconst DialogContentModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\ninterface DialogContentImplProps extends Omit {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n \n context.onOpenChange(false)}\n />\n \n {process.env.NODE_ENV !== 'production' && (\n <>\n \n \n \n )}\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ElementRef;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ElementRef;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ElementRef;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n", "import * as React from 'react';\n\nfunction createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext(defaultContext);\n\n const Provider: React.FC = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope = { [scopeName: string]: React.Context[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n", "import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState();\n const stylesRef = React.useRef({} as any);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nexport { Presence };\nexport type { PresenceProps };\n", "import * as React from 'react';\n\ntype Machine = { [k: string]: { [k: string]: S } };\ntype MachineState = keyof T;\ntype MachineEvent = keyof UnionToIntersection;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine(\n initialState: MachineState,\n machine: M & Machine>\n) {\n return React.useReducer((state: MachineState, event: MachineEvent): MachineState => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n", "import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.outline = 'none';\n element.style.opacity = '0';\n element.style.position = 'fixed';\n element.style.pointerEvents = 'none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n", "import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n", "import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n", "var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n", "var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n if (target instanceof ShadowRoot) {\n target = target.host;\n }\n else {\n target = target.parentNode;\n }\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n", "import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n"], - "mappings": "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", - "names": ["React", "createContext", "useContext", "createScope", "nextScopes", "React", "node", "React", "React", "React", "React", "import_jsx_runtime", "Portal"] + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] } diff --git a/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js b/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js index bcb9230b..65d06e15 100644 --- a/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js +++ b/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js @@ -1,64 +1,52 @@ "use client"; -import { - FocusScope, - RemoveScrollBar, - __assign, - __rest, - __spreadArray, - createSidecarMedium, - exportSidecar, - fullWidthClassName, - hideOthers, - styleSingleton, - useMergeRefs, - zeroRightClassName -} from "./chunk-QYKEMCE4.js"; -import { - Item, - Root, - createRovingFocusGroupScope -} from "./chunk-ENGL2KVA.js"; -import { - createCollection -} from "./chunk-6SPNF6KQ.js"; import { Anchor, Arrow, Content, Root2, createPopperScope -} from "./chunk-6UE7W7QM.js"; -import "./chunk-MR3TNHRB.js"; +} from "./chunk-HUHORXLV.js"; import { - useEscapeKeydown -} from "./chunk-J3JCCWF4.js"; + Item, + Root, + createRovingFocusGroupScope +} from "./chunk-5ZUJRVG4.js"; import { - useId -} from "./chunk-5I6CIHEW.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; + createCollection +} from "./chunk-6SPNF6KQ.js"; import { useDirection } from "./chunk-O2UA4OQB.js"; +import "./chunk-AJMUNMLZ.js"; +import { + Combination_default, + FocusScope, + hideOthers, + useFocusGuards +} from "./chunk-3PHEZ67U.js"; +import { + DismissableLayer, + Portal +} from "./chunk-CSR2432P.js"; +import { + useId +} from "./chunk-ZZUMGTHG.js"; import { Presence -} from "./chunk-TZDCYJOT.js"; +} from "./chunk-MZLEVI2I.js"; import { - createContextScope -} from "./chunk-OAV3HHWW.js"; + useControllableState +} from "./chunk-I6MWER2B.js"; import { composeEventHandlers, - useCallbackRef, - useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; + createContextScope, + useCallbackRef +} from "./chunk-ILYE3ZA7.js"; import { Primitive, dispatchDiscreteCustomEvent } from "./chunk-H55D7VYG.js"; -import { - require_react_dom -} from "./chunk-R6S4VRB5.js"; +import "./chunk-R6S4VRB5.js"; import { Slot, composeRefs, @@ -75,594 +63,11 @@ import { } from "./chunk-4MBMRILA.js"; // node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs -var React8 = __toESM(require_react(), 1); +var React2 = __toESM(require_react(), 1); // node_modules/@radix-ui/react-menu/dist/index.mjs -var React7 = __toESM(require_react(), 1); - -// node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs var React = __toESM(require_react(), 1); var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); -var DISMISSABLE_LAYER_NAME = "DismissableLayer"; -var CONTEXT_UPDATE = "dismissableLayer.update"; -var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside"; -var FOCUS_OUTSIDE = "dismissableLayer.focusOutside"; -var originalBodyPointerEvents; -var DismissableLayerContext = React.createContext({ - layers: /* @__PURE__ */ new Set(), - layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), - branches: /* @__PURE__ */ new Set() -}); -var DismissableLayer = React.forwardRef( - (props, forwardedRef) => { - const { - disableOutsidePointerEvents = false, - onEscapeKeyDown, - onPointerDownOutside, - onFocusOutside, - onInteractOutside, - onDismiss, - ...layerProps - } = props; - const context = React.useContext(DismissableLayerContext); - const [node, setNode] = React.useState(null); - const ownerDocument = (node == null ? void 0 : node.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document); - const [, force] = React.useState({}); - const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)); - const layers = Array.from(context.layers); - const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); - const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); - const index = node ? layers.indexOf(node) : -1; - const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0; - const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex; - const pointerDownOutside = usePointerDownOutside((event) => { - const target = event.target; - const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target)); - if (!isPointerEventsEnabled || isPointerDownOnBranch) return; - onPointerDownOutside == null ? void 0 : onPointerDownOutside(event); - onInteractOutside == null ? void 0 : onInteractOutside(event); - if (!event.defaultPrevented) onDismiss == null ? void 0 : onDismiss(); - }, ownerDocument); - const focusOutside = useFocusOutside((event) => { - const target = event.target; - const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target)); - if (isFocusInBranch) return; - onFocusOutside == null ? void 0 : onFocusOutside(event); - onInteractOutside == null ? void 0 : onInteractOutside(event); - if (!event.defaultPrevented) onDismiss == null ? void 0 : onDismiss(); - }, ownerDocument); - useEscapeKeydown((event) => { - const isHighestLayer = index === context.layers.size - 1; - if (!isHighestLayer) return; - onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(event); - if (!event.defaultPrevented && onDismiss) { - event.preventDefault(); - onDismiss(); - } - }, ownerDocument); - React.useEffect(() => { - if (!node) return; - if (disableOutsidePointerEvents) { - if (context.layersWithOutsidePointerEventsDisabled.size === 0) { - originalBodyPointerEvents = ownerDocument.body.style.pointerEvents; - ownerDocument.body.style.pointerEvents = "none"; - } - context.layersWithOutsidePointerEventsDisabled.add(node); - } - context.layers.add(node); - dispatchUpdate(); - return () => { - if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) { - ownerDocument.body.style.pointerEvents = originalBodyPointerEvents; - } - }; - }, [node, ownerDocument, disableOutsidePointerEvents, context]); - React.useEffect(() => { - return () => { - if (!node) return; - context.layers.delete(node); - context.layersWithOutsidePointerEventsDisabled.delete(node); - dispatchUpdate(); - }; - }, [node, context]); - React.useEffect(() => { - const handleUpdate = () => force({}); - document.addEventListener(CONTEXT_UPDATE, handleUpdate); - return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate); - }, []); - return (0, import_jsx_runtime.jsx)( - Primitive.div, - { - ...layerProps, - ref: composedRefs, - style: { - pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0, - ...props.style - }, - onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture), - onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture), - onPointerDownCapture: composeEventHandlers( - props.onPointerDownCapture, - pointerDownOutside.onPointerDownCapture - ) - } - ); - } -); -DismissableLayer.displayName = DISMISSABLE_LAYER_NAME; -var BRANCH_NAME = "DismissableLayerBranch"; -var DismissableLayerBranch = React.forwardRef((props, forwardedRef) => { - const context = React.useContext(DismissableLayerContext); - const ref = React.useRef(null); - const composedRefs = useComposedRefs(forwardedRef, ref); - React.useEffect(() => { - const node = ref.current; - if (node) { - context.branches.add(node); - return () => { - context.branches.delete(node); - }; - } - }, [context.branches]); - return (0, import_jsx_runtime.jsx)(Primitive.div, { ...props, ref: composedRefs }); -}); -DismissableLayerBranch.displayName = BRANCH_NAME; -function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const handlePointerDownOutside = useCallbackRef(onPointerDownOutside); - const isPointerInsideReactTreeRef = React.useRef(false); - const handleClickRef = React.useRef(() => { - }); - React.useEffect(() => { - const handlePointerDown = (event) => { - if (event.target && !isPointerInsideReactTreeRef.current) { - let handleAndDispatchPointerDownOutsideEvent2 = function() { - handleAndDispatchCustomEvent( - POINTER_DOWN_OUTSIDE, - handlePointerDownOutside, - eventDetail, - { discrete: true } - ); - }; - var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2; - const eventDetail = { originalEvent: event }; - if (event.pointerType === "touch") { - ownerDocument.removeEventListener("click", handleClickRef.current); - handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2; - ownerDocument.addEventListener("click", handleClickRef.current, { once: true }); - } else { - handleAndDispatchPointerDownOutsideEvent2(); - } - } else { - ownerDocument.removeEventListener("click", handleClickRef.current); - } - isPointerInsideReactTreeRef.current = false; - }; - const timerId = window.setTimeout(() => { - ownerDocument.addEventListener("pointerdown", handlePointerDown); - }, 0); - return () => { - window.clearTimeout(timerId); - ownerDocument.removeEventListener("pointerdown", handlePointerDown); - ownerDocument.removeEventListener("click", handleClickRef.current); - }; - }, [ownerDocument, handlePointerDownOutside]); - return { - // ensures we check React component tree (not just DOM tree) - onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true - }; -} -function useFocusOutside(onFocusOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const handleFocusOutside = useCallbackRef(onFocusOutside); - const isFocusInsideReactTreeRef = React.useRef(false); - React.useEffect(() => { - const handleFocus = (event) => { - if (event.target && !isFocusInsideReactTreeRef.current) { - const eventDetail = { originalEvent: event }; - handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, { - discrete: false - }); - } - }; - ownerDocument.addEventListener("focusin", handleFocus); - return () => ownerDocument.removeEventListener("focusin", handleFocus); - }, [ownerDocument, handleFocusOutside]); - return { - onFocusCapture: () => isFocusInsideReactTreeRef.current = true, - onBlurCapture: () => isFocusInsideReactTreeRef.current = false - }; -} -function dispatchUpdate() { - const event = new CustomEvent(CONTEXT_UPDATE); - document.dispatchEvent(event); -} -function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) { - const target = detail.originalEvent.target; - const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail }); - if (handler) target.addEventListener(name, handler, { once: true }); - if (discrete) { - dispatchDiscreteCustomEvent(target, event); - } else { - target.dispatchEvent(event); - } -} - -// node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-guards/dist/index.mjs -var React2 = __toESM(require_react(), 1); -var count = 0; -function useFocusGuards() { - React2.useEffect(() => { - const edgeGuards = document.querySelectorAll("[data-radix-focus-guard]"); - document.body.insertAdjacentElement("afterbegin", edgeGuards[0] ?? createFocusGuard()); - document.body.insertAdjacentElement("beforeend", edgeGuards[1] ?? createFocusGuard()); - count++; - return () => { - if (count === 1) { - document.querySelectorAll("[data-radix-focus-guard]").forEach((node) => node.remove()); - } - count--; - }; - }, []); -} -function createFocusGuard() { - const element = document.createElement("span"); - element.setAttribute("data-radix-focus-guard", ""); - element.tabIndex = 0; - element.style.cssText = "outline: none; opacity: 0; position: fixed; pointer-events: none"; - return element; -} - -// node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal/dist/index.mjs -var React3 = __toESM(require_react(), 1); -var import_react_dom = __toESM(require_react_dom(), 1); -var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); -var PORTAL_NAME = "Portal"; -var Portal = React3.forwardRef((props, forwardedRef) => { - var _a; - const { container: containerProp, ...portalProps } = props; - const [mounted, setMounted] = React3.useState(false); - useLayoutEffect2(() => setMounted(true), []); - const container = containerProp || mounted && ((_a = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a.body); - return container ? import_react_dom.default.createPortal((0, import_jsx_runtime2.jsx)(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null; -}); -Portal.displayName = PORTAL_NAME; - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/Combination.js -var React6 = __toESM(require_react()); - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/UI.js -var React4 = __toESM(require_react()); - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/medium.js -var effectCar = createSidecarMedium(); - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/UI.js -var nothing = function() { - return; -}; -var RemoveScroll = React4.forwardRef(function(props, parentRef) { - var ref = React4.useRef(null); - var _a = React4.useState({ - onScrollCapture: nothing, - onWheelCapture: nothing, - onTouchMoveCapture: nothing - }), callbacks = _a[0], setCallbacks = _a[1]; - var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]); - var SideCar = sideCar; - var containerRef = useMergeRefs([ref, parentRef]); - var containerProps = __assign(__assign({}, rest), callbacks); - return React4.createElement( - React4.Fragment, - null, - enabled && React4.createElement(SideCar, { sideCar: effectCar, removeScrollBar, shards, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }), - forwardProps ? React4.cloneElement(React4.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React4.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children) - ); -}); -RemoveScroll.defaultProps = { - enabled: true, - removeScrollBar: true, - inert: false -}; -RemoveScroll.classNames = { - fullWidth: fullWidthClassName, - zeroRight: zeroRightClassName -}; - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/SideEffect.js -var React5 = __toESM(require_react()); - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js -var passiveSupported = false; -if (typeof window !== "undefined") { - try { - options = Object.defineProperty({}, "passive", { - get: function() { - passiveSupported = true; - return true; - } - }); - window.addEventListener("test", options, options); - window.removeEventListener("test", options, options); - } catch (err) { - passiveSupported = false; - } -} -var options; -var nonPassive = passiveSupported ? { passive: false } : false; - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/handleScroll.js -var alwaysContainsScroll = function(node) { - return node.tagName === "TEXTAREA"; -}; -var elementCanBeScrolled = function(node, overflow) { - var styles = window.getComputedStyle(node); - return ( - // not-not-scrollable - styles[overflow] !== "hidden" && // contains scroll inside self - !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === "visible") - ); -}; -var elementCouldBeVScrolled = function(node) { - return elementCanBeScrolled(node, "overflowY"); -}; -var elementCouldBeHScrolled = function(node) { - return elementCanBeScrolled(node, "overflowX"); -}; -var locationCouldBeScrolled = function(axis, node) { - var ownerDocument = node.ownerDocument; - var current = node; - do { - if (typeof ShadowRoot !== "undefined" && current instanceof ShadowRoot) { - current = current.host; - } - var isScrollable = elementCouldBeScrolled(axis, current); - if (isScrollable) { - var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2]; - if (s > d) { - return true; - } - } - current = current.parentNode; - } while (current && current !== ownerDocument.body); - return false; -}; -var getVScrollVariables = function(_a) { - var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight; - return [ - scrollTop, - scrollHeight, - clientHeight - ]; -}; -var getHScrollVariables = function(_a) { - var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth; - return [ - scrollLeft, - scrollWidth, - clientWidth - ]; -}; -var elementCouldBeScrolled = function(axis, node) { - return axis === "v" ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node); -}; -var getScrollVariables = function(axis, node) { - return axis === "v" ? getVScrollVariables(node) : getHScrollVariables(node); -}; -var getDirectionFactor = function(axis, direction) { - return axis === "h" && direction === "rtl" ? -1 : 1; -}; -var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) { - var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction); - var delta = directionFactor * sourceDelta; - var target = event.target; - var targetInLock = endTarget.contains(target); - var shouldCancelScroll = false; - var isDeltaPositive = delta > 0; - var availableScroll = 0; - var availableScrollTop = 0; - do { - var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2]; - var elementScroll = scroll_1 - capacity - directionFactor * position; - if (position || elementScroll) { - if (elementCouldBeScrolled(axis, target)) { - availableScroll += elementScroll; - availableScrollTop += position; - } - } - if (target instanceof ShadowRoot) { - target = target.host; - } else { - target = target.parentNode; - } - } while ( - // portaled content - !targetInLock && target !== document.body || // self content - targetInLock && (endTarget.contains(target) || endTarget === target) - ); - if (isDeltaPositive && (noOverscroll && Math.abs(availableScroll) < 1 || !noOverscroll && delta > availableScroll)) { - shouldCancelScroll = true; - } else if (!isDeltaPositive && (noOverscroll && Math.abs(availableScrollTop) < 1 || !noOverscroll && -delta > availableScrollTop)) { - shouldCancelScroll = true; - } - return shouldCancelScroll; -}; - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/SideEffect.js -var getTouchXY = function(event) { - return "changedTouches" in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0]; -}; -var getDeltaXY = function(event) { - return [event.deltaX, event.deltaY]; -}; -var extractRef = function(ref) { - return ref && "current" in ref ? ref.current : ref; -}; -var deltaCompare = function(x, y) { - return x[0] === y[0] && x[1] === y[1]; -}; -var generateStyle = function(id) { - return "\n .block-interactivity-".concat(id, " {pointer-events: none;}\n .allow-interactivity-").concat(id, " {pointer-events: all;}\n"); -}; -var idCounter = 0; -var lockStack = []; -function RemoveScrollSideCar(props) { - var shouldPreventQueue = React5.useRef([]); - var touchStartRef = React5.useRef([0, 0]); - var activeAxis = React5.useRef(); - var id = React5.useState(idCounter++)[0]; - var Style = React5.useState(styleSingleton)[0]; - var lastProps = React5.useRef(props); - React5.useEffect(function() { - lastProps.current = props; - }, [props]); - React5.useEffect(function() { - if (props.inert) { - document.body.classList.add("block-interactivity-".concat(id)); - var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean); - allow_1.forEach(function(el) { - return el.classList.add("allow-interactivity-".concat(id)); - }); - return function() { - document.body.classList.remove("block-interactivity-".concat(id)); - allow_1.forEach(function(el) { - return el.classList.remove("allow-interactivity-".concat(id)); - }); - }; - } - return; - }, [props.inert, props.lockRef.current, props.shards]); - var shouldCancelEvent = React5.useCallback(function(event, parent) { - if ("touches" in event && event.touches.length === 2) { - return !lastProps.current.allowPinchZoom; - } - var touch = getTouchXY(event); - var touchStart = touchStartRef.current; - var deltaX = "deltaX" in event ? event.deltaX : touchStart[0] - touch[0]; - var deltaY = "deltaY" in event ? event.deltaY : touchStart[1] - touch[1]; - var currentAxis; - var target = event.target; - var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? "h" : "v"; - if ("touches" in event && moveDirection === "h" && target.type === "range") { - return false; - } - var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); - if (!canBeScrolledInMainDirection) { - return true; - } - if (canBeScrolledInMainDirection) { - currentAxis = moveDirection; - } else { - currentAxis = moveDirection === "v" ? "h" : "v"; - canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); - } - if (!canBeScrolledInMainDirection) { - return false; - } - if (!activeAxis.current && "changedTouches" in event && (deltaX || deltaY)) { - activeAxis.current = currentAxis; - } - if (!currentAxis) { - return true; - } - var cancelingAxis = activeAxis.current || currentAxis; - return handleScroll(cancelingAxis, parent, event, cancelingAxis === "h" ? deltaX : deltaY, true); - }, []); - var shouldPrevent = React5.useCallback(function(_event) { - var event = _event; - if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) { - return; - } - var delta = "deltaY" in event ? getDeltaXY(event) : getTouchXY(event); - var sourceEvent = shouldPreventQueue.current.filter(function(e) { - return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); - })[0]; - if (sourceEvent && sourceEvent.should) { - if (event.cancelable) { - event.preventDefault(); - } - return; - } - if (!sourceEvent) { - var shardNodes = (lastProps.current.shards || []).map(extractRef).filter(Boolean).filter(function(node) { - return node.contains(event.target); - }); - var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation; - if (shouldStop) { - if (event.cancelable) { - event.preventDefault(); - } - } - } - }, []); - var shouldCancel = React5.useCallback(function(name, delta, target, should) { - var event = { name, delta, target, should, shadowParent: getOutermostShadowParent(target) }; - shouldPreventQueue.current.push(event); - setTimeout(function() { - shouldPreventQueue.current = shouldPreventQueue.current.filter(function(e) { - return e !== event; - }); - }, 1); - }, []); - var scrollTouchStart = React5.useCallback(function(event) { - touchStartRef.current = getTouchXY(event); - activeAxis.current = void 0; - }, []); - var scrollWheel = React5.useCallback(function(event) { - shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); - }, []); - var scrollTouchMove = React5.useCallback(function(event) { - shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); - }, []); - React5.useEffect(function() { - lockStack.push(Style); - props.setCallbacks({ - onScrollCapture: scrollWheel, - onWheelCapture: scrollWheel, - onTouchMoveCapture: scrollTouchMove - }); - document.addEventListener("wheel", shouldPrevent, nonPassive); - document.addEventListener("touchmove", shouldPrevent, nonPassive); - document.addEventListener("touchstart", scrollTouchStart, nonPassive); - return function() { - lockStack = lockStack.filter(function(inst) { - return inst !== Style; - }); - document.removeEventListener("wheel", shouldPrevent, nonPassive); - document.removeEventListener("touchmove", shouldPrevent, nonPassive); - document.removeEventListener("touchstart", scrollTouchStart, nonPassive); - }; - }, []); - var removeScrollBar = props.removeScrollBar, inert = props.inert; - return React5.createElement( - React5.Fragment, - null, - inert ? React5.createElement(Style, { styles: generateStyle(id) }) : null, - removeScrollBar ? React5.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null - ); -} -function getOutermostShadowParent(node) { - var shadowParent = null; - while (node !== null) { - if (node instanceof ShadowRoot) { - shadowParent = node.host; - node = node.host; - } - node = node.parentNode; - } - return shadowParent; -} - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/sidecar.js -var sidecar_default = exportSidecar(effectCar, RemoveScrollSideCar); - -// node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/Combination.js -var ReactRemoveScroll = React6.forwardRef(function(props, ref) { - return React6.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default })); -}); -ReactRemoveScroll.classNames = RemoveScroll.classNames; -var Combination_default = ReactRemoveScroll; - -// node_modules/@radix-ui/react-menu/dist/index.mjs -var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); var SELECTION_KEYS = ["Enter", " "]; var FIRST_KEYS = ["ArrowDown", "PageUp", "Home"]; var LAST_KEYS = ["ArrowUp", "PageDown", "End"]; @@ -689,11 +94,11 @@ var [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME); var Menu = (props) => { const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props; const popperScope = usePopperScope(__scopeMenu); - const [content, setContent] = React7.useState(null); - const isUsingKeyboardRef = React7.useRef(false); + const [content, setContent] = React.useState(null); + const isUsingKeyboardRef = React.useRef(false); const handleOpenChange = useCallbackRef(onOpenChange); const direction = useDirection(dir); - React7.useEffect(() => { + React.useEffect(() => { const handleKeyDown = () => { isUsingKeyboardRef.current = true; document.addEventListener("pointerdown", handlePointer, { capture: true, once: true }); @@ -707,7 +112,7 @@ var Menu = (props) => { document.removeEventListener("pointermove", handlePointer, { capture: true }); }; }, []); - return (0, import_jsx_runtime3.jsx)(Root2, { ...popperScope, children: (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)(Root2, { ...popperScope, children: (0, import_jsx_runtime.jsx)( MenuProvider, { scope: __scopeMenu, @@ -715,11 +120,11 @@ var Menu = (props) => { onOpenChange: handleOpenChange, content, onContentChange: setContent, - children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)( MenuRootProvider, { scope: __scopeMenu, - onClose: React7.useCallback(() => handleOpenChange(false), [handleOpenChange]), + onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]), isUsingKeyboardRef, dir: direction, modal, @@ -731,45 +136,45 @@ var Menu = (props) => { }; Menu.displayName = MENU_NAME; var ANCHOR_NAME = "MenuAnchor"; -var MenuAnchor = React7.forwardRef( +var MenuAnchor = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, ...anchorProps } = props; const popperScope = usePopperScope(__scopeMenu); - return (0, import_jsx_runtime3.jsx)(Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef }); } ); MenuAnchor.displayName = ANCHOR_NAME; -var PORTAL_NAME2 = "MenuPortal"; -var [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME2, { +var PORTAL_NAME = "MenuPortal"; +var [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, { forceMount: void 0 }); var MenuPortal = (props) => { const { __scopeMenu, forceMount, children, container } = props; - const context = useMenuContext(PORTAL_NAME2, __scopeMenu); - return (0, import_jsx_runtime3.jsx)(PortalProvider, { scope: __scopeMenu, forceMount, children: (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime3.jsx)(Portal, { asChild: true, container, children }) }) }); + const context = useMenuContext(PORTAL_NAME, __scopeMenu); + return (0, import_jsx_runtime.jsx)(PortalProvider, { scope: __scopeMenu, forceMount, children: (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime.jsx)(Portal, { asChild: true, container, children }) }) }); }; -MenuPortal.displayName = PORTAL_NAME2; +MenuPortal.displayName = PORTAL_NAME; var CONTENT_NAME = "MenuContent"; var [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME); -var MenuContent = React7.forwardRef( +var MenuContent = React.forwardRef( (props, forwardedRef) => { const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu); const { forceMount = portalContext.forceMount, ...contentProps } = props; const context = useMenuContext(CONTENT_NAME, props.__scopeMenu); const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu); - return (0, import_jsx_runtime3.jsx)(Collection.Provider, { scope: props.__scopeMenu, children: (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime3.jsx)(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? (0, import_jsx_runtime3.jsx)(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : (0, import_jsx_runtime3.jsx)(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) }); + return (0, import_jsx_runtime.jsx)(Collection.Provider, { scope: props.__scopeMenu, children: (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime.jsx)(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? (0, import_jsx_runtime.jsx)(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : (0, import_jsx_runtime.jsx)(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) }); } ); -var MenuRootContentModal = React7.forwardRef( +var MenuRootContentModal = React.forwardRef( (props, forwardedRef) => { const context = useMenuContext(CONTENT_NAME, props.__scopeMenu); - const ref = React7.useRef(null); + const ref = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref); - React7.useEffect(() => { + React.useEffect(() => { const content = ref.current; if (content) return hideOthers(content); }, []); - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( MenuContentImpl, { ...props, @@ -787,9 +192,9 @@ var MenuRootContentModal = React7.forwardRef( ); } ); -var MenuRootContentNonModal = React7.forwardRef((props, forwardedRef) => { +var MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => { const context = useMenuContext(CONTENT_NAME, props.__scopeMenu); - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( MenuContentImpl, { ...props, @@ -801,7 +206,7 @@ var MenuRootContentNonModal = React7.forwardRef((props, forwardedRef) => { } ); }); -var MenuContentImpl = React7.forwardRef( +var MenuContentImpl = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, @@ -824,16 +229,16 @@ var MenuContentImpl = React7.forwardRef( const popperScope = usePopperScope(__scopeMenu); const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu); const getItems = useCollection(__scopeMenu); - const [currentItemId, setCurrentItemId] = React7.useState(null); - const contentRef = React7.useRef(null); + const [currentItemId, setCurrentItemId] = React.useState(null); + const contentRef = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange); - const timerRef = React7.useRef(0); - const searchRef = React7.useRef(""); - const pointerGraceTimerRef = React7.useRef(0); - const pointerGraceIntentRef = React7.useRef(null); - const pointerDirRef = React7.useRef("right"); - const lastPointerXRef = React7.useRef(0); - const ScrollLockWrapper = disableOutsideScroll ? Combination_default : React7.Fragment; + const timerRef = React.useRef(0); + const searchRef = React.useRef(""); + const pointerGraceTimerRef = React.useRef(0); + const pointerGraceIntentRef = React.useRef(null); + const pointerDirRef = React.useRef("right"); + const lastPointerXRef = React.useRef(0); + const ScrollLockWrapper = disableOutsideScroll ? Combination_default : React.Fragment; const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0; const handleTypeaheadSearch = (key) => { var _a, _b; @@ -853,27 +258,27 @@ var MenuContentImpl = React7.forwardRef( setTimeout(() => newItem.focus()); } }; - React7.useEffect(() => { + React.useEffect(() => { return () => window.clearTimeout(timerRef.current); }, []); useFocusGuards(); - const isPointerMovingToSubmenu = React7.useCallback((event) => { + const isPointerMovingToSubmenu = React.useCallback((event) => { var _a, _b; const isMovingTowards = pointerDirRef.current === ((_a = pointerGraceIntentRef.current) == null ? void 0 : _a.side); return isMovingTowards && isPointerInGraceArea(event, (_b = pointerGraceIntentRef.current) == null ? void 0 : _b.area); }, []); - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( MenuContentProvider, { scope: __scopeMenu, searchRef, - onItemEnter: React7.useCallback( + onItemEnter: React.useCallback( (event) => { if (isPointerMovingToSubmenu(event)) event.preventDefault(); }, [isPointerMovingToSubmenu] ), - onItemLeave: React7.useCallback( + onItemLeave: React.useCallback( (event) => { var _a; if (isPointerMovingToSubmenu(event)) return; @@ -882,17 +287,17 @@ var MenuContentImpl = React7.forwardRef( }, [isPointerMovingToSubmenu] ), - onTriggerLeave: React7.useCallback( + onTriggerLeave: React.useCallback( (event) => { if (isPointerMovingToSubmenu(event)) event.preventDefault(); }, [isPointerMovingToSubmenu] ), pointerGraceTimerRef, - onPointerGraceIntentChange: React7.useCallback((intent) => { + onPointerGraceIntentChange: React.useCallback((intent) => { pointerGraceIntentRef.current = intent; }, []), - children: (0, import_jsx_runtime3.jsx)(ScrollLockWrapper, { ...scrollLockWrapperProps, children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)(ScrollLockWrapper, { ...scrollLockWrapperProps, children: (0, import_jsx_runtime.jsx)( FocusScope, { asChild: true, @@ -903,7 +308,7 @@ var MenuContentImpl = React7.forwardRef( (_a = contentRef.current) == null ? void 0 : _a.focus({ preventScroll: true }); }), onUnmountAutoFocus: onCloseAutoFocus, - children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)( DismissableLayer, { asChild: true, @@ -913,7 +318,7 @@ var MenuContentImpl = React7.forwardRef( onFocusOutside, onInteractOutside, onDismiss, - children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)( Root, { asChild: true, @@ -927,7 +332,7 @@ var MenuContentImpl = React7.forwardRef( if (!rootContext.isUsingKeyboardRef.current) event.preventDefault(); }), preventScrollOnEntryFocus: true, - children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)( Content, { role: "menu", @@ -989,31 +394,31 @@ var MenuContentImpl = React7.forwardRef( ); MenuContent.displayName = CONTENT_NAME; var GROUP_NAME = "MenuGroup"; -var MenuGroup = React7.forwardRef( +var MenuGroup = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, ...groupProps } = props; - return (0, import_jsx_runtime3.jsx)(Primitive.div, { role: "group", ...groupProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Primitive.div, { role: "group", ...groupProps, ref: forwardedRef }); } ); MenuGroup.displayName = GROUP_NAME; var LABEL_NAME = "MenuLabel"; -var MenuLabel = React7.forwardRef( +var MenuLabel = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, ...labelProps } = props; - return (0, import_jsx_runtime3.jsx)(Primitive.div, { ...labelProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Primitive.div, { ...labelProps, ref: forwardedRef }); } ); MenuLabel.displayName = LABEL_NAME; var ITEM_NAME = "MenuItem"; var ITEM_SELECT = "menu.itemSelect"; -var MenuItem = React7.forwardRef( +var MenuItem = React.forwardRef( (props, forwardedRef) => { const { disabled = false, onSelect, ...itemProps } = props; - const ref = React7.useRef(null); + const ref = React.useRef(null); const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu); const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu); const composedRefs = useComposedRefs(forwardedRef, ref); - const isPointerDownRef = React7.useRef(false); + const isPointerDownRef = React.useRef(false); const handleSelect = () => { const menuItem = ref.current; if (!disabled && menuItem) { @@ -1027,7 +432,7 @@ var MenuItem = React7.forwardRef( } } }; - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( MenuItemImpl, { ...itemProps, @@ -1056,28 +461,28 @@ var MenuItem = React7.forwardRef( } ); MenuItem.displayName = ITEM_NAME; -var MenuItemImpl = React7.forwardRef( +var MenuItemImpl = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, disabled = false, textValue, ...itemProps } = props; const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu); const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu); - const ref = React7.useRef(null); + const ref = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref); - const [isFocused, setIsFocused] = React7.useState(false); - const [textContent, setTextContent] = React7.useState(""); - React7.useEffect(() => { + const [isFocused, setIsFocused] = React.useState(false); + const [textContent, setTextContent] = React.useState(""); + React.useEffect(() => { const menuItem = ref.current; if (menuItem) { setTextContent((menuItem.textContent ?? "").trim()); } }, [itemProps.children]); - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( Collection.ItemSlot, { scope: __scopeMenu, disabled, textValue: textValue ?? textContent, - children: (0, import_jsx_runtime3.jsx)(Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)(Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: (0, import_jsx_runtime.jsx)( Primitive.div, { role: "menuitem", @@ -1113,10 +518,10 @@ var MenuItemImpl = React7.forwardRef( } ); var CHECKBOX_ITEM_NAME = "MenuCheckboxItem"; -var MenuCheckboxItem = React7.forwardRef( +var MenuCheckboxItem = React.forwardRef( (props, forwardedRef) => { const { checked = false, onCheckedChange, ...checkboxItemProps } = props; - return (0, import_jsx_runtime3.jsx)(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: (0, import_jsx_runtime.jsx)( MenuItem, { role: "menuitemcheckbox", @@ -1140,21 +545,21 @@ var [RadioGroupProvider, useRadioGroupContext] = createMenuContext( { value: void 0, onValueChange: () => { } } ); -var MenuRadioGroup = React7.forwardRef( +var MenuRadioGroup = React.forwardRef( (props, forwardedRef) => { const { value, onValueChange, ...groupProps } = props; const handleValueChange = useCallbackRef(onValueChange); - return (0, import_jsx_runtime3.jsx)(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: (0, import_jsx_runtime3.jsx)(MenuGroup, { ...groupProps, ref: forwardedRef }) }); + return (0, import_jsx_runtime.jsx)(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: (0, import_jsx_runtime.jsx)(MenuGroup, { ...groupProps, ref: forwardedRef }) }); } ); MenuRadioGroup.displayName = RADIO_GROUP_NAME; var RADIO_ITEM_NAME = "MenuRadioItem"; -var MenuRadioItem = React7.forwardRef( +var MenuRadioItem = React.forwardRef( (props, forwardedRef) => { const { value, ...radioItemProps } = props; const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu); const checked = value === context.value; - return (0, import_jsx_runtime3.jsx)(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: (0, import_jsx_runtime.jsx)( MenuItem, { role: "menuitemradio", @@ -1180,15 +585,15 @@ var [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext( ITEM_INDICATOR_NAME, { checked: false } ); -var MenuItemIndicator = React7.forwardRef( +var MenuItemIndicator = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, forceMount, ...itemIndicatorProps } = props; const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu); - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( Presence, { present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true, - children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)( Primitive.span, { ...itemIndicatorProps, @@ -1202,10 +607,10 @@ var MenuItemIndicator = React7.forwardRef( ); MenuItemIndicator.displayName = ITEM_INDICATOR_NAME; var SEPARATOR_NAME = "MenuSeparator"; -var MenuSeparator = React7.forwardRef( +var MenuSeparator = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, ...separatorProps } = props; - return (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)( Primitive.div, { role: "separator", @@ -1218,11 +623,11 @@ var MenuSeparator = React7.forwardRef( ); MenuSeparator.displayName = SEPARATOR_NAME; var ARROW_NAME = "MenuArrow"; -var MenuArrow = React7.forwardRef( +var MenuArrow = React.forwardRef( (props, forwardedRef) => { const { __scopeMenu, ...arrowProps } = props; const popperScope = usePopperScope(__scopeMenu); - return (0, import_jsx_runtime3.jsx)(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }); + return (0, import_jsx_runtime.jsx)(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }); } ); MenuArrow.displayName = ARROW_NAME; @@ -1232,14 +637,14 @@ var MenuSub = (props) => { const { __scopeMenu, children, open = false, onOpenChange } = props; const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu); const popperScope = usePopperScope(__scopeMenu); - const [trigger, setTrigger] = React7.useState(null); - const [content, setContent] = React7.useState(null); + const [trigger, setTrigger] = React.useState(null); + const [content, setContent] = React.useState(null); const handleOpenChange = useCallbackRef(onOpenChange); - React7.useEffect(() => { + React.useEffect(() => { if (parentMenuContext.open === false) handleOpenChange(false); return () => handleOpenChange(false); }, [parentMenuContext.open, handleOpenChange]); - return (0, import_jsx_runtime3.jsx)(Root2, { ...popperScope, children: (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)(Root2, { ...popperScope, children: (0, import_jsx_runtime.jsx)( MenuProvider, { scope: __scopeMenu, @@ -1247,7 +652,7 @@ var MenuSub = (props) => { onOpenChange: handleOpenChange, content, onContentChange: setContent, - children: (0, import_jsx_runtime3.jsx)( + children: (0, import_jsx_runtime.jsx)( MenuSubProvider, { scope: __scopeMenu, @@ -1263,28 +668,28 @@ var MenuSub = (props) => { }; MenuSub.displayName = SUB_NAME; var SUB_TRIGGER_NAME = "MenuSubTrigger"; -var MenuSubTrigger = React7.forwardRef( +var MenuSubTrigger = React.forwardRef( (props, forwardedRef) => { const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu); const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu); const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu); const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu); - const openTimerRef = React7.useRef(null); + const openTimerRef = React.useRef(null); const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext; const scope = { __scopeMenu: props.__scopeMenu }; - const clearOpenTimer = React7.useCallback(() => { + const clearOpenTimer = React.useCallback(() => { if (openTimerRef.current) window.clearTimeout(openTimerRef.current); openTimerRef.current = null; }, []); - React7.useEffect(() => clearOpenTimer, [clearOpenTimer]); - React7.useEffect(() => { + React.useEffect(() => clearOpenTimer, [clearOpenTimer]); + React.useEffect(() => { const pointerGraceTimer = pointerGraceTimerRef.current; return () => { window.clearTimeout(pointerGraceTimer); onPointerGraceIntentChange(null); }; }, [pointerGraceTimerRef, onPointerGraceIntentChange]); - return (0, import_jsx_runtime3.jsx)(MenuAnchor, { asChild: true, ...scope, children: (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)(MenuAnchor, { asChild: true, ...scope, children: (0, import_jsx_runtime.jsx)( MenuItemImpl, { id: subContext.triggerId, @@ -1367,16 +772,16 @@ var MenuSubTrigger = React7.forwardRef( ); MenuSubTrigger.displayName = SUB_TRIGGER_NAME; var SUB_CONTENT_NAME = "MenuSubContent"; -var MenuSubContent = React7.forwardRef( +var MenuSubContent = React.forwardRef( (props, forwardedRef) => { const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu); const { forceMount = portalContext.forceMount, ...subContentProps } = props; const context = useMenuContext(CONTENT_NAME, props.__scopeMenu); const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu); const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu); - const ref = React7.useRef(null); + const ref = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref); - return (0, import_jsx_runtime3.jsx)(Collection.Provider, { scope: props.__scopeMenu, children: (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime3.jsx)(Collection.Slot, { scope: props.__scopeMenu, children: (0, import_jsx_runtime3.jsx)( + return (0, import_jsx_runtime.jsx)(Collection.Provider, { scope: props.__scopeMenu, children: (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime.jsx)(Collection.Slot, { scope: props.__scopeMenu, children: (0, import_jsx_runtime.jsx)( MenuContentImpl, { id: subContext.contentId, @@ -1487,7 +892,7 @@ var SubTrigger = MenuSubTrigger; var SubContent = MenuSubContent; // node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs -var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); +var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var DROPDOWN_MENU_NAME = "DropdownMenu"; var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope( DROPDOWN_MENU_NAME, @@ -1506,13 +911,13 @@ var DropdownMenu = (props) => { modal = true } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - const triggerRef = React8.useRef(null); + const triggerRef = React2.useRef(null); const [open = false, setOpen] = useControllableState({ prop: openProp, defaultProp: defaultOpen, onChange: onOpenChange }); - return (0, import_jsx_runtime4.jsx)( + return (0, import_jsx_runtime2.jsx)( DropdownMenuProvider, { scope: __scopeDropdownMenu, @@ -1521,20 +926,20 @@ var DropdownMenu = (props) => { contentId: useId(), open, onOpenChange: setOpen, - onOpenToggle: React8.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), + onOpenToggle: React2.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), modal, - children: (0, import_jsx_runtime4.jsx)(Root3, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children }) + children: (0, import_jsx_runtime2.jsx)(Root3, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children }) } ); }; DropdownMenu.displayName = DROPDOWN_MENU_NAME; var TRIGGER_NAME = "DropdownMenuTrigger"; -var DropdownMenuTrigger = React8.forwardRef( +var DropdownMenuTrigger = React2.forwardRef( (props, forwardedRef) => { const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props; const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu); const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Anchor2, { asChild: true, ...menuScope, children: (0, import_jsx_runtime4.jsx)( + return (0, import_jsx_runtime2.jsx)(Anchor2, { asChild: true, ...menuScope, children: (0, import_jsx_runtime2.jsx)( Primitive.button, { type: "button", @@ -1564,21 +969,21 @@ var DropdownMenuTrigger = React8.forwardRef( } ); DropdownMenuTrigger.displayName = TRIGGER_NAME; -var PORTAL_NAME3 = "DropdownMenuPortal"; +var PORTAL_NAME2 = "DropdownMenuPortal"; var DropdownMenuPortal = (props) => { const { __scopeDropdownMenu, ...portalProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Portal2, { ...menuScope, ...portalProps }); + return (0, import_jsx_runtime2.jsx)(Portal2, { ...menuScope, ...portalProps }); }; -DropdownMenuPortal.displayName = PORTAL_NAME3; +DropdownMenuPortal.displayName = PORTAL_NAME2; var CONTENT_NAME2 = "DropdownMenuContent"; -var DropdownMenuContent = React8.forwardRef( +var DropdownMenuContent = React2.forwardRef( (props, forwardedRef) => { const { __scopeDropdownMenu, ...contentProps } = props; const context = useDropdownMenuContext(CONTENT_NAME2, __scopeDropdownMenu); const menuScope = useMenuScope(__scopeDropdownMenu); - const hasInteractedOutsideRef = React8.useRef(false); - return (0, import_jsx_runtime4.jsx)( + const hasInteractedOutsideRef = React2.useRef(false); + return (0, import_jsx_runtime2.jsx)( Content2, { id: context.contentId, @@ -1615,73 +1020,73 @@ var DropdownMenuContent = React8.forwardRef( ); DropdownMenuContent.displayName = CONTENT_NAME2; var GROUP_NAME2 = "DropdownMenuGroup"; -var DropdownMenuGroup = React8.forwardRef( +var DropdownMenuGroup = React2.forwardRef( (props, forwardedRef) => { const { __scopeDropdownMenu, ...groupProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Group, { ...menuScope, ...groupProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(Group, { ...menuScope, ...groupProps, ref: forwardedRef }); } ); DropdownMenuGroup.displayName = GROUP_NAME2; var LABEL_NAME2 = "DropdownMenuLabel"; -var DropdownMenuLabel = React8.forwardRef( +var DropdownMenuLabel = React2.forwardRef( (props, forwardedRef) => { const { __scopeDropdownMenu, ...labelProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Label, { ...menuScope, ...labelProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(Label, { ...menuScope, ...labelProps, ref: forwardedRef }); } ); DropdownMenuLabel.displayName = LABEL_NAME2; var ITEM_NAME2 = "DropdownMenuItem"; -var DropdownMenuItem = React8.forwardRef( +var DropdownMenuItem = React2.forwardRef( (props, forwardedRef) => { const { __scopeDropdownMenu, ...itemProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Item2, { ...menuScope, ...itemProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(Item2, { ...menuScope, ...itemProps, ref: forwardedRef }); } ); DropdownMenuItem.displayName = ITEM_NAME2; var CHECKBOX_ITEM_NAME2 = "DropdownMenuCheckboxItem"; -var DropdownMenuCheckboxItem = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuCheckboxItem = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...checkboxItemProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef }); }); DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME2; var RADIO_GROUP_NAME2 = "DropdownMenuRadioGroup"; -var DropdownMenuRadioGroup = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuRadioGroup = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...radioGroupProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef }); }); DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME2; var RADIO_ITEM_NAME2 = "DropdownMenuRadioItem"; -var DropdownMenuRadioItem = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuRadioItem = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...radioItemProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef }); }); DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME2; var INDICATOR_NAME = "DropdownMenuItemIndicator"; -var DropdownMenuItemIndicator = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuItemIndicator = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...itemIndicatorProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef }); }); DropdownMenuItemIndicator.displayName = INDICATOR_NAME; var SEPARATOR_NAME2 = "DropdownMenuSeparator"; -var DropdownMenuSeparator = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuSeparator = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...separatorProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef }); }); DropdownMenuSeparator.displayName = SEPARATOR_NAME2; var ARROW_NAME2 = "DropdownMenuArrow"; -var DropdownMenuArrow = React8.forwardRef( +var DropdownMenuArrow = React2.forwardRef( (props, forwardedRef) => { const { __scopeDropdownMenu, ...arrowProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(Arrow2, { ...menuScope, ...arrowProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(Arrow2, { ...menuScope, ...arrowProps, ref: forwardedRef }); } ); DropdownMenuArrow.displayName = ARROW_NAME2; @@ -1693,20 +1098,20 @@ var DropdownMenuSub = (props) => { defaultProp: defaultOpen, onChange: onOpenChange }); - return (0, import_jsx_runtime4.jsx)(Sub, { ...menuScope, open, onOpenChange: setOpen, children }); + return (0, import_jsx_runtime2.jsx)(Sub, { ...menuScope, open, onOpenChange: setOpen, children }); }; var SUB_TRIGGER_NAME2 = "DropdownMenuSubTrigger"; -var DropdownMenuSubTrigger = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuSubTrigger = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...subTriggerProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)(SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef }); + return (0, import_jsx_runtime2.jsx)(SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef }); }); DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME2; var SUB_CONTENT_NAME2 = "DropdownMenuSubContent"; -var DropdownMenuSubContent = React8.forwardRef((props, forwardedRef) => { +var DropdownMenuSubContent = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...subContentProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); - return (0, import_jsx_runtime4.jsx)( + return (0, import_jsx_runtime2.jsx)( SubContent, { ...menuScope, diff --git a/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js.map b/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js.map index 19736854..622d9f4c 100644 --- a/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-dropdown-menu.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../@radix-ui/react-dropdown-menu/src/DropdownMenu.tsx", "../../@radix-ui/react-menu/src/Menu.tsx", "../../@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx", "../../@radix-ui/react-menu/node_modules/@radix-ui/react-focus-guards/src/FocusGuards.tsx", "../../@radix-ui/react-menu/node_modules/@radix-ui/react-portal/src/Portal.tsx", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/Combination.js", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/UI.js", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/medium.js", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/SideEffect.js", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/handleScroll.js", "../../@radix-ui/react-menu/node_modules/react-remove-scroll/dist/es2015/sidecar.js"], - "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as MenuPrimitive from '@radix-ui/react-menu';\nimport { createMenuScope } from '@radix-ui/react-menu';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenu\n * -----------------------------------------------------------------------------------------------*/\n\nconst DROPDOWN_MENU_NAME = 'DropdownMenu';\n\ntype ScopedProps

= P & { __scopeDropdownMenu?: Scope };\nconst [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nconst useMenuScope = createMenuScope();\n\ntype DropdownMenuContextValue = {\n triggerId: string;\n triggerRef: React.RefObject;\n contentId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DropdownMenuProvider, useDropdownMenuContext] =\n createDropdownMenuContext(DROPDOWN_MENU_NAME);\n\ninterface DropdownMenuProps {\n children?: React.ReactNode;\n dir?: Direction;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst DropdownMenu: React.FC = (props: ScopedProps) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n \n {children}\n \n \n );\n};\n\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DropdownMenuTrigger';\n\ntype DropdownMenuTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuTriggerProps extends PrimitiveButtonProps {}\n\nconst DropdownMenuTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return (\n \n {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\n if (!context.open) event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if (['Enter', ' '].includes(event.key)) context.onOpenToggle();\n if (event.key === 'ArrowDown') context.onOpenChange(true);\n // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key)) event.preventDefault();\n })}\n />\n \n );\n }\n);\n\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DropdownMenuPortal';\n\ntype MenuPortalProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuPortalProps extends MenuPortalProps {}\n\nconst DropdownMenuPortal: React.FC = (\n props: ScopedProps\n) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n};\n\nDropdownMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DropdownMenuContent';\n\ntype DropdownMenuContentElement = React.ElementRef;\ntype MenuContentProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuContentProps extends Omit {}\n\nconst DropdownMenuContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n\n return (\n {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n })}\n onInteractOutside={composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent as PointerEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n })}\n style={{\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-dropdown-menu-content-transform-origin':\n 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height':\n 'var(--radix-popper-available-height)',\n '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n }\n);\n\nDropdownMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'DropdownMenuGroup';\n\ntype DropdownMenuGroupElement = React.ElementRef;\ntype MenuGroupProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuGroupProps extends MenuGroupProps {}\n\nconst DropdownMenuGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'DropdownMenuLabel';\n\ntype DropdownMenuLabelElement = React.ElementRef;\ntype MenuLabelProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuLabelProps extends MenuLabelProps {}\n\nconst DropdownMenuLabel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'DropdownMenuItem';\n\ntype DropdownMenuItemElement = React.ElementRef;\ntype MenuItemProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuItemProps extends MenuItemProps {}\n\nconst DropdownMenuItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef;\ntype MenuCheckboxItemProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuCheckboxItemProps extends MenuCheckboxItemProps {}\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef;\ntype MenuRadioGroupProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuRadioGroupProps extends MenuRadioGroupProps {}\n\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'DropdownMenuRadioItem';\n\ntype DropdownMenuRadioItemElement = React.ElementRef;\ntype MenuRadioItemProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuRadioItemProps extends MenuRadioItemProps {}\n\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'DropdownMenuItemIndicator';\n\ntype DropdownMenuItemIndicatorElement = React.ElementRef;\ntype MenuItemIndicatorProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuItemIndicatorProps extends MenuItemIndicatorProps {}\n\nconst DropdownMenuItemIndicator = React.forwardRef<\n DropdownMenuItemIndicatorElement,\n DropdownMenuItemIndicatorProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'DropdownMenuSeparator';\n\ntype DropdownMenuSeparatorElement = React.ElementRef;\ntype MenuSeparatorProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'DropdownMenuArrow';\n\ntype DropdownMenuArrowElement = React.ElementRef;\ntype MenuArrowProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuArrowProps extends MenuArrowProps {}\n\nconst DropdownMenuArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSub\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropdownMenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst DropdownMenuSub: React.FC = (\n props: ScopedProps\n) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n \n {children}\n \n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef;\ntype MenuSubTriggerProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuSubTriggerProps extends MenuSubTriggerProps {}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'DropdownMenuSubContent';\n\ntype DropdownMenuSubContentElement = React.ElementRef;\ntype MenuSubContentProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuSubContentProps extends MenuSubContentProps {}\n\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n\n return (\n \n );\n});\n\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = DropdownMenu;\nconst Trigger = DropdownMenuTrigger;\nconst Portal = DropdownMenuPortal;\nconst Content = DropdownMenuContent;\nconst Group = DropdownMenuGroup;\nconst Label = DropdownMenuLabel;\nconst Item = DropdownMenuItem;\nconst CheckboxItem = DropdownMenuCheckboxItem;\nconst RadioGroup = DropdownMenuRadioGroup;\nconst RadioItem = DropdownMenuRadioItem;\nconst ItemIndicator = DropdownMenuItemIndicator;\nconst Separator = DropdownMenuSeparator;\nconst Arrow = DropdownMenuArrow;\nconst Sub = DropdownMenuSub;\nconst SubTrigger = DropdownMenuSubTrigger;\nconst SubContent = DropdownMenuSubContent;\n\nexport {\n createDropdownMenuScope,\n //\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuItemIndicator,\n DropdownMenuSeparator,\n DropdownMenuArrow,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n //\n Root,\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n DropdownMenuProps,\n DropdownMenuTriggerProps,\n DropdownMenuPortalProps,\n DropdownMenuContentProps,\n DropdownMenuGroupProps,\n DropdownMenuLabelProps,\n DropdownMenuItemProps,\n DropdownMenuCheckboxItemProps,\n DropdownMenuRadioGroupProps,\n DropdownMenuRadioItemProps,\n DropdownMenuItemIndicatorProps,\n DropdownMenuSeparatorProps,\n DropdownMenuArrowProps,\n DropdownMenuSubProps,\n DropdownMenuSubTriggerProps,\n DropdownMenuSubContentProps,\n};\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs, composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { Slot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst SELECTION_KEYS = ['Enter', ' '];\nconst FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home'];\nconst LAST_KEYS = ['ArrowUp', 'PageDown', 'End'];\nconst FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nconst SUB_OPEN_KEYS: Record = {\n ltr: [...SELECTION_KEYS, 'ArrowRight'],\n rtl: [...SELECTION_KEYS, 'ArrowLeft'],\n};\nconst SUB_CLOSE_KEYS: Record = {\n ltr: ['ArrowLeft'],\n rtl: ['ArrowRight'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Menu\n * -----------------------------------------------------------------------------------------------*/\n\nconst MENU_NAME = 'Menu';\n\ntype ItemData = { disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n MenuItemElement,\n ItemData\n>(MENU_NAME);\n\ntype ScopedProps

= P & { __scopeMenu?: Scope };\nconst [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope,\n]);\nconst usePopperScope = createPopperScope();\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype MenuContextValue = {\n open: boolean;\n onOpenChange(open: boolean): void;\n content: MenuContentElement | null;\n onContentChange(content: MenuContentElement | null): void;\n};\n\nconst [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\n\ntype MenuRootContextValue = {\n onClose(): void;\n isUsingKeyboardRef: React.RefObject;\n dir: Direction;\n modal: boolean;\n};\n\nconst [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\n\ninterface MenuProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n modal?: boolean;\n}\n\nconst Menu: React.FC = (props: ScopedProps) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n\n React.useEffect(() => {\n // Capture phase ensures we set the boolean before any side effects execute\n // in response to the key or pointer event as they might depend on this value.\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener('pointerdown', handlePointer, { capture: true, once: true });\n document.addEventListener('pointermove', handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => (isUsingKeyboardRef.current = false);\n document.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', handleKeyDown, { capture: true });\n document.removeEventListener('pointerdown', handlePointer, { capture: true });\n document.removeEventListener('pointermove', handlePointer, { capture: true });\n };\n }, []);\n\n return (\n \n \n handleOpenChange(false), [handleOpenChange])}\n isUsingKeyboardRef={isUsingKeyboardRef}\n dir={direction}\n modal={modal}\n >\n {children}\n \n \n \n );\n};\n\nMenu.displayName = MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'MenuAnchor';\n\ntype MenuAnchorElement = React.ElementRef;\ntype PopperAnchorProps = React.ComponentPropsWithoutRef;\ninterface MenuAnchorProps extends PopperAnchorProps {}\n\nconst MenuAnchor = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return ;\n }\n);\n\nMenuAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'MenuPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface MenuPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuPortal: React.FC = (props: ScopedProps) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'MenuContent';\n\ntype MenuContentContextValue = {\n onItemEnter(event: React.PointerEvent): void;\n onItemLeave(event: React.PointerEvent): void;\n onTriggerLeave(event: React.PointerEvent): void;\n searchRef: React.RefObject;\n pointerGraceTimerRef: React.MutableRefObject;\n onPointerGraceIntentChange(intent: GraceIntent | null): void;\n};\nconst [MenuContentProvider, useMenuContentContext] =\n createMenuContext(CONTENT_NAME);\n\ntype MenuContentElement = MenuRootContentTypeElement;\n/**\n * We purposefully don't union MenuRootContent and MenuSubContent props here because\n * they have conflicting prop types. We agreed that we would allow MenuSubContent to\n * accept props that it would just ignore.\n */\ninterface MenuContentProps extends MenuRootContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n\n return (\n \n \n \n {rootContext.modal ? (\n \n ) : (\n \n )}\n \n \n \n );\n }\n);\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuRootContentTypeElement = MenuContentImplElement;\ninterface MenuRootContentTypeProps\n extends Omit {}\n\nconst MenuRootContentModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n // Hide everything from ARIA except the `MenuContent`\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n event.preventDefault(),\n { checkForDefaultPrevented: false }\n )}\n onDismiss={() => context.onOpenChange(false)}\n />\n );\n }\n);\n\nconst MenuRootContentNonModal = React.forwardRef<\n MenuRootContentTypeElement,\n MenuRootContentTypeProps\n>((props: ScopedProps, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return (\n context.onOpenChange(false)}\n />\n );\n});\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuContentImplElement = React.ElementRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef;\ntype PopperContentProps = React.ComponentPropsWithoutRef;\ntype MenuContentImplPrivateProps = {\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n onDismiss?: DismissableLayerProps['onDismiss'];\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents'];\n\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * (default: `false`)\n */\n disableOutsideScroll?: boolean;\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped'];\n};\ninterface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: RovingFocusGroupProps['loop'];\n\n onEntryFocus?: RovingFocusGroupProps['onEntryFocus'];\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n onFocusOutside?: DismissableLayerProps['onFocusOutside'];\n onInteractOutside?: DismissableLayerProps['onInteractOutside'];\n}\n\nconst MenuContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef('');\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef('right');\n const lastPointerXRef = React.useRef(0);\n\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll\n ? { as: Slot, allowPinchZoom: true }\n : undefined;\n\n const handleTypeaheadSearch = (key: string) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n\n // Reset `searchRef` 1 second after it was last updated\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n\n if (newItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (newItem as HTMLElement).focus());\n }\n };\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n // Make sure the whole tree has focus guards as our `MenuContent` may be\n // the last element in the DOM (beacuse of the `Portal`)\n useFocusGuards();\n\n const isPointerMovingToSubmenu = React.useCallback((event: React.PointerEvent) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n\n return (\n {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n )}\n onItemLeave={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n )}\n onTriggerLeave={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n )}\n pointerGraceTimerRef={pointerGraceTimerRef}\n onPointerGraceIntentChange={React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, [])}\n >\n \n {\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n })}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n \n {\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n })}\n preventScrollOnEntryFocus\n >\n {\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement;\n const isKeyDownInside =\n target.closest('[data-radix-menu-content]') === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n // focus first/last item based on key pressed\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current!);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n })}\n onBlur={composeEventHandlers(props.onBlur, (event) => {\n // clear search buffer when leaving the menu\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = '';\n }\n })}\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target as HTMLElement;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left';\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )}\n />\n \n \n \n \n \n );\n }\n);\n\nMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'MenuGroup';\n\ntype MenuGroupElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface MenuGroupProps extends PrimitiveDivProps {}\n\nconst MenuGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return ;\n }\n);\n\nMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'MenuLabel';\n\ntype MenuLabelElement = React.ElementRef;\ninterface MenuLabelProps extends PrimitiveDivProps {}\n\nconst MenuLabel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return ;\n }\n);\n\nMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'MenuItem';\nconst ITEM_SELECT = 'menu.itemSelect';\n\ntype MenuItemElement = MenuItemImplElement;\ninterface MenuItemProps extends Omit {\n onSelect?: (event: Event) => void;\n}\n\nconst MenuItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n\n return (\n {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n }}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n // Pointer down can move to a different menu item which should activate it on pointer up.\n // We dispatch a click for selection to allow composition with click based triggers and to\n // prevent Firefox from getting stuck in text selection mode when the menu closes.\n if (!isPointerDownRef.current) event.currentTarget?.click();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== '';\n if (disabled || (isTypingAhead && event.key === ' ')) return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n /**\n * We prevent default browser behaviour for selection keys as they should trigger\n * a selection only:\n * - prevents space from scrolling the page.\n * - if keydown causes focus to move, prevents keydown from firing on the new target.\n */\n event.preventDefault();\n }\n })}\n />\n );\n }\n);\n\nMenuItem.displayName = ITEM_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuItemImplElement = React.ElementRef;\ninterface MenuItemImplProps extends PrimitiveDivProps {\n disabled?: boolean;\n textValue?: string;\n}\n\nconst MenuItemImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n\n // get the item's `.textContent` as default strategy for typeahead `textValue`\n const [textContent, setTextContent] = React.useState('');\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? '').trim());\n }\n }, [itemProps.children]);\n\n return (\n \n \n {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n )}\n onPointerLeave={composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n )}\n onFocus={composeEventHandlers(props.onFocus, () => setIsFocused(true))}\n onBlur={composeEventHandlers(props.onBlur, () => setIsFocused(false))}\n />\n \n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * MenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'MenuCheckboxItem';\n\ntype MenuCheckboxItemElement = MenuItemElement;\n\ntype CheckedState = boolean | 'indeterminate';\n\ninterface MenuCheckboxItemProps extends MenuItemProps {\n checked?: CheckedState;\n // `onCheckedChange` can never be called with `\"indeterminate\"` from the inside\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst MenuCheckboxItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return (\n \n onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )}\n />\n \n );\n }\n);\n\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'MenuRadioGroup';\n\nconst [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: undefined, onValueChange: () => {} }\n);\n\ntype MenuRadioGroupElement = React.ElementRef;\ninterface MenuRadioGroupProps extends MenuGroupProps {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst MenuRadioGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return (\n \n \n \n );\n }\n);\n\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'MenuRadioItem';\n\ntype MenuRadioItemElement = React.ElementRef;\ninterface MenuRadioItemProps extends MenuItemProps {\n value: string;\n}\n\nconst MenuRadioItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return (\n \n context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )}\n />\n \n );\n }\n);\n\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'MenuItemIndicator';\n\ntype CheckboxContextValue = { checked: CheckedState };\n\nconst [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\n\ntype MenuItemIndicatorElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface MenuItemIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuItemIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return (\n \n \n \n );\n }\n);\n\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'MenuSeparator';\n\ntype MenuSeparatorElement = React.ElementRef;\ninterface MenuSeparatorProps extends PrimitiveDivProps {}\n\nconst MenuSeparator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return (\n \n );\n }\n);\n\nMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'MenuArrow';\n\ntype MenuArrowElement = React.ElementRef;\ntype PopperArrowProps = React.ComponentPropsWithoutRef;\ninterface MenuArrowProps extends PopperArrowProps {}\n\nconst MenuArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return ;\n }\n);\n\nMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSub\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_NAME = 'MenuSub';\n\ntype MenuSubContextValue = {\n contentId: string;\n triggerId: string;\n trigger: MenuSubTriggerElement | null;\n onTriggerChange(trigger: MenuSubTriggerElement | null): void;\n};\n\nconst [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\n\ninterface MenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst MenuSub: React.FC = (props: ScopedProps) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n\n // Prevent the parent menu from reopening with open submenus.\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nMenuSub.displayName = SUB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'MenuSubTrigger';\n\ntype MenuSubTriggerElement = MenuItemImplElement;\ninterface MenuSubTriggerProps extends MenuItemImplProps {}\n\nconst MenuSubTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n\n return (\n \n {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n }}\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n )}\n onPointerLeave={composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n // TODO: make sure to update this when we change positioning logic\n const side = context.content?.dataset.side as Side;\n const rightSide = side === 'right';\n const bleed = rightSide ? -5 : +5;\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n });\n\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n )}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== '';\n if (props.disabled || (isTypingAhead && event.key === ' ')) return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n context.content?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n \n );\n }\n);\n\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'MenuSubContent';\n\ntype MenuSubContentElement = MenuContentImplElement;\ninterface MenuSubContentProps\n extends Omit<\n MenuContentImplProps,\n keyof MenuContentImplPrivateProps | 'onCloseAutoFocus' | 'onEntryFocus' | 'side' | 'align'\n > {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuSubContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return (\n \n \n \n {\n // when opening a submenu, focus content for keyboard users only\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n }}\n // The menu might close because of focusing another menu item in the parent menu. We\n // don't want it to refocus the trigger in that case so we handle trigger focus ourselves.\n onCloseAutoFocus={(event) => event.preventDefault()}\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) => {\n // We prevent closing when the trigger is focused to avoid triggering a re-open animation\n // on pointer interaction.\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n })}\n onEscapeKeyDown={composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n // ensure pressing escape in submenu doesn't escape full screen mode\n event.preventDefault();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n // Submenu key events bubble through portals. We only care about keys in this menu.\n const isKeyDownInside = event.currentTarget.contains(event.target as HTMLElement);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n // We focus manually because we prevented it in `onCloseAutoFocus`\n subContext.trigger?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n \n \n \n );\n }\n);\n\nMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getOpenState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getCheckedState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nfunction focusFirst(candidates: HTMLElement[]) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in all the values,\n * the search and the current match, and returns the next match (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through options starting with that character)\n *\n * We also reorder the values by wrapping the array around the current match.\n * This is so we always look forward from the current match, and picking the first\n * match will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current match from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current match still matches.\n */\nfunction getNextMatch(values: string[], search: string, currentMatch?: string) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find((value) =>\n value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : undefined;\n}\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\ntype Side = 'left' | 'right';\ntype GraceIntent = { area: Polygon; side: Side };\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\nfunction isPointerInGraceArea(event: React.PointerEvent, area?: Polygon) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\n\nfunction whenMouse(handler: React.PointerEventHandler): React.PointerEventHandler {\n return (event) => (event.pointerType === 'mouse' ? handler(event) : undefined);\n}\n\nconst Root = Menu;\nconst Anchor = MenuAnchor;\nconst Portal = MenuPortal;\nconst Content = MenuContent;\nconst Group = MenuGroup;\nconst Label = MenuLabel;\nconst Item = MenuItem;\nconst CheckboxItem = MenuCheckboxItem;\nconst RadioGroup = MenuRadioGroup;\nconst RadioItem = MenuRadioItem;\nconst ItemIndicator = MenuItemIndicator;\nconst Separator = MenuSeparator;\nconst Arrow = MenuArrow;\nconst Sub = MenuSub;\nconst SubTrigger = MenuSubTrigger;\nconst SubContent = MenuSubContent;\n\nexport {\n createMenuScope,\n //\n Menu,\n MenuAnchor,\n MenuPortal,\n MenuContent,\n MenuGroup,\n MenuLabel,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuItemIndicator,\n MenuSeparator,\n MenuArrow,\n MenuSub,\n MenuSubTrigger,\n MenuSubContent,\n //\n Root,\n Anchor,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n MenuProps,\n MenuAnchorProps,\n MenuPortalProps,\n MenuContentProps,\n MenuGroupProps,\n MenuLabelProps,\n MenuItemProps,\n MenuCheckboxItemProps,\n MenuRadioGroupProps,\n MenuRadioItemProps,\n MenuItemIndicatorProps,\n MenuSeparatorProps,\n MenuArrowProps,\n MenuSubProps,\n MenuSubTriggerProps,\n MenuSubContentProps,\n};\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set(),\n layersWithOutsidePointerEventsDisabled: new Set(),\n branches: new Set(),\n});\n\ntype DismissableLayerElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n \n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return ;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n", "import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.cssText = 'outline: none; opacity: 0; position: fixed; pointer-events: none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n", "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | null;\n}\n\nconst Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n", "import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n", "import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if ('touches' in event && event.touches.length === 2) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n", "var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n", "var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), s = _a[1], d = _a[2];\n if (s > d) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n if (target instanceof ShadowRoot) {\n target = target.host;\n }\n else {\n target = target.parentNode;\n }\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n", "import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n"], - "mappings": "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", - "names": ["React", "React", "node", "handleAndDispatchPointerDownOutsideEvent", "React", "React", "import_jsx_runtime", "ReactDOM", "React", "React", "React", "import_jsx_runtime", "PORTAL_NAME", "Root", "Anchor", "Portal", "Content", "Item", "Arrow", "import_jsx_runtime", "PORTAL_NAME", "Portal", "CONTENT_NAME", "GROUP_NAME", "LABEL_NAME", "ITEM_NAME", "CHECKBOX_ITEM_NAME", "RADIO_GROUP_NAME", "RADIO_ITEM_NAME", "SEPARATOR_NAME", "ARROW_NAME", "SUB_TRIGGER_NAME", "SUB_CONTENT_NAME", "Root", "Content", "Group", "Label", "Item", "CheckboxItem", "RadioGroup", "RadioItem", "ItemIndicator", "Separator", "Arrow", "Sub", "SubTrigger", "SubContent"] + "sources": ["../../@radix-ui/react-dropdown-menu/src/DropdownMenu.tsx", "../../@radix-ui/react-menu/src/Menu.tsx"], + "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as MenuPrimitive from '@radix-ui/react-menu';\nimport { createMenuScope } from '@radix-ui/react-menu';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenu\n * -----------------------------------------------------------------------------------------------*/\n\nconst DROPDOWN_MENU_NAME = 'DropdownMenu';\n\ntype ScopedProps

= P & { __scopeDropdownMenu?: Scope };\nconst [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nconst useMenuScope = createMenuScope();\n\ntype DropdownMenuContextValue = {\n triggerId: string;\n triggerRef: React.RefObject;\n contentId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DropdownMenuProvider, useDropdownMenuContext] =\n createDropdownMenuContext(DROPDOWN_MENU_NAME);\n\ninterface DropdownMenuProps {\n children?: React.ReactNode;\n dir?: Direction;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst DropdownMenu: React.FC = (props: ScopedProps) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n \n {children}\n \n \n );\n};\n\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DropdownMenuTrigger';\n\ntype DropdownMenuTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuTriggerProps extends PrimitiveButtonProps {}\n\nconst DropdownMenuTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return (\n \n {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n // prevent trigger focusing when opening\n // this allows the content to be given focus without competition\n if (!context.open) event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if (['Enter', ' '].includes(event.key)) context.onOpenToggle();\n if (event.key === 'ArrowDown') context.onOpenChange(true);\n // prevent keydown from scrolling window / first focused item to execute\n // that keydown (inadvertently closing the menu)\n if (['Enter', ' ', 'ArrowDown'].includes(event.key)) event.preventDefault();\n })}\n />\n \n );\n }\n);\n\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DropdownMenuPortal';\n\ntype MenuPortalProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuPortalProps extends MenuPortalProps {}\n\nconst DropdownMenuPortal: React.FC = (\n props: ScopedProps\n) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n};\n\nDropdownMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DropdownMenuContent';\n\ntype DropdownMenuContentElement = React.ElementRef;\ntype MenuContentProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuContentProps extends Omit {}\n\nconst DropdownMenuContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n\n return (\n {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n })}\n onInteractOutside={composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent as PointerEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n })}\n style={{\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-dropdown-menu-content-transform-origin':\n 'var(--radix-popper-transform-origin)',\n '--radix-dropdown-menu-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-dropdown-menu-content-available-height':\n 'var(--radix-popper-available-height)',\n '--radix-dropdown-menu-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-dropdown-menu-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n }\n);\n\nDropdownMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'DropdownMenuGroup';\n\ntype DropdownMenuGroupElement = React.ElementRef;\ntype MenuGroupProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuGroupProps extends MenuGroupProps {}\n\nconst DropdownMenuGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'DropdownMenuLabel';\n\ntype DropdownMenuLabelElement = React.ElementRef;\ntype MenuLabelProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuLabelProps extends MenuLabelProps {}\n\nconst DropdownMenuLabel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'DropdownMenuItem';\n\ntype DropdownMenuItemElement = React.ElementRef;\ntype MenuItemProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuItemProps extends MenuItemProps {}\n\nconst DropdownMenuItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef;\ntype MenuCheckboxItemProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuCheckboxItemProps extends MenuCheckboxItemProps {}\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef;\ntype MenuRadioGroupProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuRadioGroupProps extends MenuRadioGroupProps {}\n\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'DropdownMenuRadioItem';\n\ntype DropdownMenuRadioItemElement = React.ElementRef;\ntype MenuRadioItemProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuRadioItemProps extends MenuRadioItemProps {}\n\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'DropdownMenuItemIndicator';\n\ntype DropdownMenuItemIndicatorElement = React.ElementRef;\ntype MenuItemIndicatorProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuItemIndicatorProps extends MenuItemIndicatorProps {}\n\nconst DropdownMenuItemIndicator = React.forwardRef<\n DropdownMenuItemIndicatorElement,\n DropdownMenuItemIndicatorProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'DropdownMenuSeparator';\n\ntype DropdownMenuSeparatorElement = React.ElementRef;\ntype MenuSeparatorProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'DropdownMenuArrow';\n\ntype DropdownMenuArrowElement = React.ElementRef;\ntype MenuArrowProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuArrowProps extends MenuArrowProps {}\n\nconst DropdownMenuArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n }\n);\n\nDropdownMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSub\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DropdownMenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst DropdownMenuSub: React.FC = (\n props: ScopedProps\n) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n \n {children}\n \n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef;\ntype MenuSubTriggerProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuSubTriggerProps extends MenuSubTriggerProps {}\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return ;\n});\n\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DropdownMenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'DropdownMenuSubContent';\n\ntype DropdownMenuSubContentElement = React.ElementRef;\ntype MenuSubContentProps = React.ComponentPropsWithoutRef;\ninterface DropdownMenuSubContentProps extends MenuSubContentProps {}\n\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n\n return (\n \n );\n});\n\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = DropdownMenu;\nconst Trigger = DropdownMenuTrigger;\nconst Portal = DropdownMenuPortal;\nconst Content = DropdownMenuContent;\nconst Group = DropdownMenuGroup;\nconst Label = DropdownMenuLabel;\nconst Item = DropdownMenuItem;\nconst CheckboxItem = DropdownMenuCheckboxItem;\nconst RadioGroup = DropdownMenuRadioGroup;\nconst RadioItem = DropdownMenuRadioItem;\nconst ItemIndicator = DropdownMenuItemIndicator;\nconst Separator = DropdownMenuSeparator;\nconst Arrow = DropdownMenuArrow;\nconst Sub = DropdownMenuSub;\nconst SubTrigger = DropdownMenuSubTrigger;\nconst SubContent = DropdownMenuSubContent;\n\nexport {\n createDropdownMenuScope,\n //\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuPortal,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuItemIndicator,\n DropdownMenuSeparator,\n DropdownMenuArrow,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n //\n Root,\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n DropdownMenuProps,\n DropdownMenuTriggerProps,\n DropdownMenuPortalProps,\n DropdownMenuContentProps,\n DropdownMenuGroupProps,\n DropdownMenuLabelProps,\n DropdownMenuItemProps,\n DropdownMenuCheckboxItemProps,\n DropdownMenuRadioGroupProps,\n DropdownMenuRadioItemProps,\n DropdownMenuItemIndicatorProps,\n DropdownMenuSeparatorProps,\n DropdownMenuArrowProps,\n DropdownMenuSubProps,\n DropdownMenuSubTriggerProps,\n DropdownMenuSubContentProps,\n};\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs, composeRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { Slot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst SELECTION_KEYS = ['Enter', ' '];\nconst FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home'];\nconst LAST_KEYS = ['ArrowUp', 'PageDown', 'End'];\nconst FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nconst SUB_OPEN_KEYS: Record = {\n ltr: [...SELECTION_KEYS, 'ArrowRight'],\n rtl: [...SELECTION_KEYS, 'ArrowLeft'],\n};\nconst SUB_CLOSE_KEYS: Record = {\n ltr: ['ArrowLeft'],\n rtl: ['ArrowRight'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Menu\n * -----------------------------------------------------------------------------------------------*/\n\nconst MENU_NAME = 'Menu';\n\ntype ItemData = { disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n MenuItemElement,\n ItemData\n>(MENU_NAME);\n\ntype ScopedProps

= P & { __scopeMenu?: Scope };\nconst [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope,\n]);\nconst usePopperScope = createPopperScope();\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype MenuContextValue = {\n open: boolean;\n onOpenChange(open: boolean): void;\n content: MenuContentElement | null;\n onContentChange(content: MenuContentElement | null): void;\n};\n\nconst [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\n\ntype MenuRootContextValue = {\n onClose(): void;\n isUsingKeyboardRef: React.RefObject;\n dir: Direction;\n modal: boolean;\n};\n\nconst [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\n\ninterface MenuProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n modal?: boolean;\n}\n\nconst Menu: React.FC = (props: ScopedProps) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n\n React.useEffect(() => {\n // Capture phase ensures we set the boolean before any side effects execute\n // in response to the key or pointer event as they might depend on this value.\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener('pointerdown', handlePointer, { capture: true, once: true });\n document.addEventListener('pointermove', handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => (isUsingKeyboardRef.current = false);\n document.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener('keydown', handleKeyDown, { capture: true });\n document.removeEventListener('pointerdown', handlePointer, { capture: true });\n document.removeEventListener('pointermove', handlePointer, { capture: true });\n };\n }, []);\n\n return (\n \n \n handleOpenChange(false), [handleOpenChange])}\n isUsingKeyboardRef={isUsingKeyboardRef}\n dir={direction}\n modal={modal}\n >\n {children}\n \n \n \n );\n};\n\nMenu.displayName = MENU_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'MenuAnchor';\n\ntype MenuAnchorElement = React.ElementRef;\ntype PopperAnchorProps = React.ComponentPropsWithoutRef;\ninterface MenuAnchorProps extends PopperAnchorProps {}\n\nconst MenuAnchor = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return ;\n }\n);\n\nMenuAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'MenuPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface MenuPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuPortal: React.FC = (props: ScopedProps) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nMenuPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'MenuContent';\n\ntype MenuContentContextValue = {\n onItemEnter(event: React.PointerEvent): void;\n onItemLeave(event: React.PointerEvent): void;\n onTriggerLeave(event: React.PointerEvent): void;\n searchRef: React.RefObject;\n pointerGraceTimerRef: React.MutableRefObject;\n onPointerGraceIntentChange(intent: GraceIntent | null): void;\n};\nconst [MenuContentProvider, useMenuContentContext] =\n createMenuContext(CONTENT_NAME);\n\ntype MenuContentElement = MenuRootContentTypeElement;\n/**\n * We purposefully don't union MenuRootContent and MenuSubContent props here because\n * they have conflicting prop types. We agreed that we would allow MenuSubContent to\n * accept props that it would just ignore.\n */\ninterface MenuContentProps extends MenuRootContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n\n return (\n \n \n \n {rootContext.modal ? (\n \n ) : (\n \n )}\n \n \n \n );\n }\n);\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuRootContentTypeElement = MenuContentImplElement;\ninterface MenuRootContentTypeProps\n extends Omit {}\n\nconst MenuRootContentModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n // Hide everything from ARIA except the `MenuContent`\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n event.preventDefault(),\n { checkForDefaultPrevented: false }\n )}\n onDismiss={() => context.onOpenChange(false)}\n />\n );\n }\n);\n\nconst MenuRootContentNonModal = React.forwardRef<\n MenuRootContentTypeElement,\n MenuRootContentTypeProps\n>((props: ScopedProps, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return (\n context.onOpenChange(false)}\n />\n );\n});\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuContentImplElement = React.ElementRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef;\ntype PopperContentProps = React.ComponentPropsWithoutRef;\ntype MenuContentImplPrivateProps = {\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n onDismiss?: DismissableLayerProps['onDismiss'];\n disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents'];\n\n /**\n * Whether scrolling outside the `MenuContent` should be prevented\n * (default: `false`)\n */\n disableOutsideScroll?: boolean;\n\n /**\n * Whether focus should be trapped within the `MenuContent`\n * (default: false)\n */\n trapFocus?: FocusScopeProps['trapped'];\n};\ninterface MenuContentImplProps\n extends MenuContentImplPrivateProps,\n Omit {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: RovingFocusGroupProps['loop'];\n\n onEntryFocus?: RovingFocusGroupProps['onEntryFocus'];\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n onFocusOutside?: DismissableLayerProps['onFocusOutside'];\n onInteractOutside?: DismissableLayerProps['onInteractOutside'];\n}\n\nconst MenuContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef('');\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef('right');\n const lastPointerXRef = React.useRef(0);\n\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll\n ? { as: Slot, allowPinchZoom: true }\n : undefined;\n\n const handleTypeaheadSearch = (key: string) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n\n // Reset `searchRef` 1 second after it was last updated\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n\n if (newItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (newItem as HTMLElement).focus());\n }\n };\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n // Make sure the whole tree has focus guards as our `MenuContent` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n const isPointerMovingToSubmenu = React.useCallback((event: React.PointerEvent) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n\n return (\n {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n )}\n onItemLeave={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n )}\n onTriggerLeave={React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n )}\n pointerGraceTimerRef={pointerGraceTimerRef}\n onPointerGraceIntentChange={React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, [])}\n >\n \n {\n // when opening, explicitly focus the content area only and leave\n // `onEntryFocus` in control of focusing first item\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n })}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n \n {\n // only focus first item when using keyboard\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n })}\n preventScrollOnEntryFocus\n >\n {\n // submenu key events bubble through portals. We only care about keys in this menu.\n const target = event.target as HTMLElement;\n const isKeyDownInside =\n target.closest('[data-radix-menu-content]') === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n // menus should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n // focus first/last item based on key pressed\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current!);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n })}\n onBlur={composeEventHandlers(props.onBlur, (event) => {\n // clear search buffer when leaving the menu\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = '';\n }\n })}\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target as HTMLElement;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n\n // We don't use `event.movementX` for this check because Safari will\n // always return `0` on a pointer event.\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left';\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )}\n />\n \n \n \n \n \n );\n }\n);\n\nMenuContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'MenuGroup';\n\ntype MenuGroupElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface MenuGroupProps extends PrimitiveDivProps {}\n\nconst MenuGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return ;\n }\n);\n\nMenuGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'MenuLabel';\n\ntype MenuLabelElement = React.ElementRef;\ninterface MenuLabelProps extends PrimitiveDivProps {}\n\nconst MenuLabel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return ;\n }\n);\n\nMenuLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'MenuItem';\nconst ITEM_SELECT = 'menu.itemSelect';\n\ntype MenuItemElement = MenuItemImplElement;\ninterface MenuItemProps extends Omit {\n onSelect?: (event: Event) => void;\n}\n\nconst MenuItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n\n return (\n {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n }}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n // Pointer down can move to a different menu item which should activate it on pointer up.\n // We dispatch a click for selection to allow composition with click based triggers and to\n // prevent Firefox from getting stuck in text selection mode when the menu closes.\n if (!isPointerDownRef.current) event.currentTarget?.click();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== '';\n if (disabled || (isTypingAhead && event.key === ' ')) return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n /**\n * We prevent default browser behaviour for selection keys as they should trigger\n * a selection only:\n * - prevents space from scrolling the page.\n * - if keydown causes focus to move, prevents keydown from firing on the new target.\n */\n event.preventDefault();\n }\n })}\n />\n );\n }\n);\n\nMenuItem.displayName = ITEM_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype MenuItemImplElement = React.ElementRef;\ninterface MenuItemImplProps extends PrimitiveDivProps {\n disabled?: boolean;\n textValue?: string;\n}\n\nconst MenuItemImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n\n // get the item's `.textContent` as default strategy for typeahead `textValue`\n const [textContent, setTextContent] = React.useState('');\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? '').trim());\n }\n }, [itemProps.children]);\n\n return (\n \n \n {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n )}\n onPointerLeave={composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n )}\n onFocus={composeEventHandlers(props.onFocus, () => setIsFocused(true))}\n onBlur={composeEventHandlers(props.onBlur, () => setIsFocused(false))}\n />\n \n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * MenuCheckboxItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst CHECKBOX_ITEM_NAME = 'MenuCheckboxItem';\n\ntype MenuCheckboxItemElement = MenuItemElement;\n\ntype CheckedState = boolean | 'indeterminate';\n\ninterface MenuCheckboxItemProps extends MenuItemProps {\n checked?: CheckedState;\n // `onCheckedChange` can never be called with `\"indeterminate\"` from the inside\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst MenuCheckboxItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return (\n \n onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )}\n />\n \n );\n }\n);\n\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_GROUP_NAME = 'MenuRadioGroup';\n\nconst [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: undefined, onValueChange: () => {} }\n);\n\ntype MenuRadioGroupElement = React.ElementRef;\ninterface MenuRadioGroupProps extends MenuGroupProps {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst MenuRadioGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return (\n \n \n \n );\n }\n);\n\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuRadioItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_ITEM_NAME = 'MenuRadioItem';\n\ntype MenuRadioItemElement = React.ElementRef;\ninterface MenuRadioItemProps extends MenuItemProps {\n value: string;\n}\n\nconst MenuRadioItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return (\n \n context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )}\n />\n \n );\n }\n);\n\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'MenuItemIndicator';\n\ntype CheckboxContextValue = { checked: CheckedState };\n\nconst [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\n\ntype MenuItemIndicatorElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface MenuItemIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuItemIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return (\n \n \n \n );\n }\n);\n\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'MenuSeparator';\n\ntype MenuSeparatorElement = React.ElementRef;\ninterface MenuSeparatorProps extends PrimitiveDivProps {}\n\nconst MenuSeparator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return (\n \n );\n }\n);\n\nMenuSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'MenuArrow';\n\ntype MenuArrowElement = React.ElementRef;\ntype PopperArrowProps = React.ComponentPropsWithoutRef;\ninterface MenuArrowProps extends PopperArrowProps {}\n\nconst MenuArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return ;\n }\n);\n\nMenuArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSub\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_NAME = 'MenuSub';\n\ntype MenuSubContextValue = {\n contentId: string;\n triggerId: string;\n trigger: MenuSubTriggerElement | null;\n onTriggerChange(trigger: MenuSubTriggerElement | null): void;\n};\n\nconst [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\n\ninterface MenuSubProps {\n children?: React.ReactNode;\n open?: boolean;\n onOpenChange?(open: boolean): void;\n}\n\nconst MenuSub: React.FC = (props: ScopedProps) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n\n // Prevent the parent menu from reopening with open submenus.\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nMenuSub.displayName = SUB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_TRIGGER_NAME = 'MenuSubTrigger';\n\ntype MenuSubTriggerElement = MenuItemImplElement;\ninterface MenuSubTriggerProps extends MenuItemImplProps {}\n\nconst MenuSubTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n\n return (\n \n {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n /**\n * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n * and we rely heavily on `onFocusOutside` for submenus to close when switching\n * between separate submenus.\n */\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n }}\n onPointerMove={composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n )}\n onPointerLeave={composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n // TODO: make sure to update this when we change positioning logic\n const side = context.content?.dataset.side as Side;\n const rightSide = side === 'right';\n const bleed = rightSide ? -5 : +5;\n const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];\n const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];\n\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom },\n ],\n side,\n });\n\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n\n // There's 100ms where the user may leave an item before the submenu was opened.\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n )}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== '';\n if (props.disabled || (isTypingAhead && event.key === ' ')) return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n // The trigger may hold focus if opened via pointer interaction\n // so we ensure content is given focus again when switching to keyboard.\n context.content?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n \n );\n }\n);\n\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * MenuSubContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SUB_CONTENT_NAME = 'MenuSubContent';\n\ntype MenuSubContentElement = MenuContentImplElement;\ninterface MenuSubContentProps\n extends Omit<\n MenuContentImplProps,\n keyof MenuContentImplPrivateProps | 'onCloseAutoFocus' | 'onEntryFocus' | 'side' | 'align'\n > {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst MenuSubContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return (\n \n \n \n {\n // when opening a submenu, focus content for keyboard users only\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n }}\n // The menu might close because of focusing another menu item in the parent menu. We\n // don't want it to refocus the trigger in that case so we handle trigger focus ourselves.\n onCloseAutoFocus={(event) => event.preventDefault()}\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) => {\n // We prevent closing when the trigger is focused to avoid triggering a re-open animation\n // on pointer interaction.\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n })}\n onEscapeKeyDown={composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n // ensure pressing escape in submenu doesn't escape full screen mode\n event.preventDefault();\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n // Submenu key events bubble through portals. We only care about keys in this menu.\n const isKeyDownInside = event.currentTarget.contains(event.target as HTMLElement);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n // We focus manually because we prevented it in `onCloseAutoFocus`\n subContext.trigger?.focus();\n // prevent window from scrolling\n event.preventDefault();\n }\n })}\n />\n \n \n \n );\n }\n);\n\nMenuSubContent.displayName = SUB_CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getOpenState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getCheckedState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nfunction focusFirst(candidates: HTMLElement[]) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in all the values,\n * the search and the current match, and returns the next match (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through options starting with that character)\n *\n * We also reorder the values by wrapping the array around the current match.\n * This is so we always look forward from the current match, and picking the first\n * match will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current match from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current match still matches.\n */\nfunction getNextMatch(values: string[], search: string, currentMatch?: string) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find((value) =>\n value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : undefined;\n}\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\ntype Side = 'left' | 'right';\ntype GraceIntent = { area: Polygon; side: Side };\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\nfunction isPointerInGraceArea(event: React.PointerEvent, area?: Polygon) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\n\nfunction whenMouse(handler: React.PointerEventHandler): React.PointerEventHandler {\n return (event) => (event.pointerType === 'mouse' ? handler(event) : undefined);\n}\n\nconst Root = Menu;\nconst Anchor = MenuAnchor;\nconst Portal = MenuPortal;\nconst Content = MenuContent;\nconst Group = MenuGroup;\nconst Label = MenuLabel;\nconst Item = MenuItem;\nconst CheckboxItem = MenuCheckboxItem;\nconst RadioGroup = MenuRadioGroup;\nconst RadioItem = MenuRadioItem;\nconst ItemIndicator = MenuItemIndicator;\nconst Separator = MenuSeparator;\nconst Arrow = MenuArrow;\nconst Sub = MenuSub;\nconst SubTrigger = MenuSubTrigger;\nconst SubContent = MenuSubContent;\n\nexport {\n createMenuScope,\n //\n Menu,\n MenuAnchor,\n MenuPortal,\n MenuContent,\n MenuGroup,\n MenuLabel,\n MenuItem,\n MenuCheckboxItem,\n MenuRadioGroup,\n MenuRadioItem,\n MenuItemIndicator,\n MenuSeparator,\n MenuArrow,\n MenuSub,\n MenuSubTrigger,\n MenuSubContent,\n //\n Root,\n Anchor,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n};\nexport type {\n MenuProps,\n MenuAnchorProps,\n MenuPortalProps,\n MenuContentProps,\n MenuGroupProps,\n MenuLabelProps,\n MenuItemProps,\n MenuCheckboxItemProps,\n MenuRadioGroupProps,\n MenuRadioItemProps,\n MenuItemIndicatorProps,\n MenuSeparatorProps,\n MenuArrowProps,\n MenuSubProps,\n MenuSubTriggerProps,\n MenuSubContentProps,\n};\n"], + "mappings": "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", + "names": ["React", "Root", "Anchor", "Portal", "Content", "Item", "Arrow", "import_jsx_runtime", "PORTAL_NAME", "Portal", "CONTENT_NAME", "GROUP_NAME", "LABEL_NAME", "ITEM_NAME", "CHECKBOX_ITEM_NAME", "RADIO_GROUP_NAME", "RADIO_ITEM_NAME", "SEPARATOR_NAME", "ARROW_NAME", "SUB_TRIGGER_NAME", "SUB_CONTENT_NAME", "Root", "Content", "Group", "Label", "Item", "CheckboxItem", "RadioGroup", "RadioItem", "ItemIndicator", "Separator", "Arrow", "Sub", "SubTrigger", "SubContent"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-radio-group.js b/node_modules/.vite/deps/@radix-ui_react-radio-group.js index eb4e763a..235e30e4 100644 --- a/node_modules/.vite/deps/@radix-ui_react-radio-group.js +++ b/node_modules/.vite/deps/@radix-ui_react-radio-group.js @@ -6,27 +6,25 @@ import { Item, Root, createRovingFocusGroupScope -} from "./chunk-ENGL2KVA.js"; +} from "./chunk-5ZUJRVG4.js"; import "./chunk-6SPNF6KQ.js"; -import { - useSize -} from "./chunk-MR3TNHRB.js"; -import "./chunk-5I6CIHEW.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; import { useDirection } from "./chunk-O2UA4OQB.js"; +import { + useSize +} from "./chunk-AJMUNMLZ.js"; +import "./chunk-ZZUMGTHG.js"; import { Presence -} from "./chunk-TZDCYJOT.js"; +} from "./chunk-MZLEVI2I.js"; import { + useControllableState +} from "./chunk-I6MWER2B.js"; +import { + composeEventHandlers, createContextScope -} from "./chunk-OAV3HHWW.js"; -import { - composeEventHandlers -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -62,12 +60,13 @@ var Radio = React.forwardRef( disabled, value = "on", onCheck, + form, ...radioProps } = props; const [button, setButton] = React.useState(null); const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node)); const hasConsumerStoppedPropagationRef = React.useRef(false); - const isFormControl = button ? Boolean(button.closest("form")) : true; + const isFormControl = button ? form || !!button.closest("form") : true; return (0, import_jsx_runtime.jsxs)(RadioProvider, { scope: __scopeRadio, checked, disabled, children: [ (0, import_jsx_runtime.jsx)( Primitive.button, @@ -100,6 +99,7 @@ var Radio = React.forwardRef( checked, required, disabled, + form, style: { transform: "translateX(-100%)" } } ) diff --git a/node_modules/.vite/deps/@radix-ui_react-radio-group.js.map b/node_modules/.vite/deps/@radix-ui_react-radio-group.js.map index 1b61423e..d913d1b2 100644 --- a/node_modules/.vite/deps/@radix-ui_react-radio-group.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-radio-group.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../@radix-ui/react-radio-group/src/RadioGroup.tsx", "../../@radix-ui/react-radio-group/src/Radio.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { Radio, RadioIndicator, createRadioScope } from './Radio';\n\nimport type { Scope } from '@radix-ui/react-context';\n\nconst ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\n/* -------------------------------------------------------------------------------------------------\n * RadioGroup\n * -----------------------------------------------------------------------------------------------*/\nconst RADIO_GROUP_NAME = 'RadioGroup';\n\ntype ScopedProps

= P & { __scopeRadioGroup?: Scope };\nconst [createRadioGroupContext, createRadioGroupScope] = createContextScope(RADIO_GROUP_NAME, [\n createRovingFocusGroupScope,\n createRadioScope,\n]);\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\nconst useRadioScope = createRadioScope();\n\ntype RadioGroupContextValue = {\n name?: string;\n required: boolean;\n disabled: boolean;\n value?: string;\n onValueChange(value: string): void;\n};\n\nconst [RadioGroupProvider, useRadioGroupContext] =\n createRadioGroupContext(RADIO_GROUP_NAME);\n\ntype RadioGroupElement = React.ElementRef;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface RadioGroupProps extends PrimitiveDivProps {\n name?: RadioGroupContextValue['name'];\n required?: React.ComponentPropsWithoutRef['required'];\n disabled?: React.ComponentPropsWithoutRef['disabled'];\n dir?: RovingFocusGroupProps['dir'];\n orientation?: RovingFocusGroupProps['orientation'];\n loop?: RovingFocusGroupProps['loop'];\n defaultValue?: string;\n value?: RadioGroupContextValue['value'];\n onValueChange?: RadioGroupContextValue['onValueChange'];\n}\n\nconst RadioGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeRadioGroup,\n name,\n defaultValue,\n value: valueProp,\n required = false,\n disabled = false,\n orientation,\n dir,\n loop = true,\n onValueChange,\n ...groupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n return (\n \n \n \n \n \n );\n }\n);\n\nRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * RadioGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'RadioGroupItem';\n\ntype RadioGroupItemElement = React.ElementRef;\ntype RadioProps = React.ComponentPropsWithoutRef;\ninterface RadioGroupItemProps extends Omit {\n value: string;\n}\n\nconst RadioGroupItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeRadioGroup, disabled, ...itemProps } = props;\n const context = useRadioGroupContext(ITEM_NAME, __scopeRadioGroup);\n const isDisabled = context.disabled || disabled;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const radioScope = useRadioScope(__scopeRadioGroup);\n const ref = React.useRef>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const checked = context.value === itemProps.value;\n const isArrowKeyPressedRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n };\n const handleKeyUp = () => (isArrowKeyPressedRef.current = false);\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('keyup', handleKeyUp);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('keyup', handleKeyUp);\n };\n }, []);\n\n return (\n \n context.onValueChange(itemProps.value)}\n onKeyDown={composeEventHandlers((event) => {\n // According to WAI ARIA, radio groups don't activate items on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n })}\n onFocus={composeEventHandlers(itemProps.onFocus, () => {\n /**\n * Our `RovingFocusGroup` will focus the radio when navigating with arrow keys\n * and we need to \"check\" it in that case. We click it to \"check\" it (instead\n * of updating `context.value`) so that the radio change event fires.\n */\n if (isArrowKeyPressedRef.current) ref.current?.click();\n })}\n />\n \n );\n }\n);\n\nRadioGroupItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * RadioGroupIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'RadioGroupIndicator';\n\ntype RadioGroupIndicatorElement = React.ElementRef;\ntype RadioIndicatorProps = React.ComponentPropsWithoutRef;\ninterface RadioGroupIndicatorProps extends RadioIndicatorProps {}\n\nconst RadioGroupIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeRadioGroup, ...indicatorProps } = props;\n const radioScope = useRadioScope(__scopeRadioGroup);\n return ;\n }\n);\n\nRadioGroupIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nconst Root = RadioGroup;\nconst Item = RadioGroupItem;\nconst Indicator = RadioGroupIndicator;\n\nexport {\n createRadioGroupScope,\n //\n RadioGroup,\n RadioGroupItem,\n RadioGroupIndicator,\n //\n Root,\n Item,\n Indicator,\n};\nexport type { RadioGroupProps, RadioGroupItemProps, RadioGroupIndicatorProps };\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Radio\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_NAME = 'Radio';\n\ntype ScopedProps

= P & { __scopeRadio?: Scope };\nconst [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\n\ntype RadioContextValue = { checked: boolean; disabled?: boolean };\nconst [RadioProvider, useRadioContext] = createRadioContext(RADIO_NAME);\n\ntype RadioElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface RadioProps extends PrimitiveButtonProps {\n checked?: boolean;\n required?: boolean;\n onCheck?(): void;\n}\n\nconst Radio = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeRadio,\n name,\n checked = false,\n required,\n disabled,\n value = 'on',\n onCheck,\n ...radioProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? Boolean(button.closest('form')) : true;\n\n return (\n \n {\n // radios cannot be unchecked so we only communicate a checked state\n if (!checked) onCheck?.();\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if radio is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect radio updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n \n )}\n \n );\n }\n);\n\nRadio.displayName = RADIO_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * RadioIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'RadioIndicator';\n\ntype RadioIndicatorElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\nexport interface RadioIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst RadioIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeRadio, forceMount, ...indicatorProps } = props;\n const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n return (\n \n \n \n );\n }\n);\n\nRadioIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit {\n checked: boolean;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n \n );\n};\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nexport {\n createRadioScope,\n //\n Radio,\n RadioIndicator,\n};\nexport type { RadioProps };\n"], - "mappings": "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", + "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { Radio, RadioIndicator, createRadioScope } from './Radio';\n\nimport type { Scope } from '@radix-ui/react-context';\n\nconst ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\n/* -------------------------------------------------------------------------------------------------\n * RadioGroup\n * -----------------------------------------------------------------------------------------------*/\nconst RADIO_GROUP_NAME = 'RadioGroup';\n\ntype ScopedProps

= P & { __scopeRadioGroup?: Scope };\nconst [createRadioGroupContext, createRadioGroupScope] = createContextScope(RADIO_GROUP_NAME, [\n createRovingFocusGroupScope,\n createRadioScope,\n]);\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\nconst useRadioScope = createRadioScope();\n\ntype RadioGroupContextValue = {\n name?: string;\n required: boolean;\n disabled: boolean;\n value?: string;\n onValueChange(value: string): void;\n};\n\nconst [RadioGroupProvider, useRadioGroupContext] =\n createRadioGroupContext(RADIO_GROUP_NAME);\n\ntype RadioGroupElement = React.ElementRef;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface RadioGroupProps extends PrimitiveDivProps {\n name?: RadioGroupContextValue['name'];\n required?: React.ComponentPropsWithoutRef['required'];\n disabled?: React.ComponentPropsWithoutRef['disabled'];\n dir?: RovingFocusGroupProps['dir'];\n orientation?: RovingFocusGroupProps['orientation'];\n loop?: RovingFocusGroupProps['loop'];\n defaultValue?: string;\n value?: RadioGroupContextValue['value'];\n onValueChange?: RadioGroupContextValue['onValueChange'];\n}\n\nconst RadioGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeRadioGroup,\n name,\n defaultValue,\n value: valueProp,\n required = false,\n disabled = false,\n orientation,\n dir,\n loop = true,\n onValueChange,\n ...groupProps\n } = props;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n return (\n \n \n \n \n \n );\n }\n);\n\nRadioGroup.displayName = RADIO_GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * RadioGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'RadioGroupItem';\n\ntype RadioGroupItemElement = React.ElementRef;\ntype RadioProps = React.ComponentPropsWithoutRef;\ninterface RadioGroupItemProps extends Omit {\n value: string;\n}\n\nconst RadioGroupItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeRadioGroup, disabled, ...itemProps } = props;\n const context = useRadioGroupContext(ITEM_NAME, __scopeRadioGroup);\n const isDisabled = context.disabled || disabled;\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeRadioGroup);\n const radioScope = useRadioScope(__scopeRadioGroup);\n const ref = React.useRef>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const checked = context.value === itemProps.value;\n const isArrowKeyPressedRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n };\n const handleKeyUp = () => (isArrowKeyPressedRef.current = false);\n document.addEventListener('keydown', handleKeyDown);\n document.addEventListener('keyup', handleKeyUp);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('keyup', handleKeyUp);\n };\n }, []);\n\n return (\n \n context.onValueChange(itemProps.value)}\n onKeyDown={composeEventHandlers((event) => {\n // According to WAI ARIA, radio groups don't activate items on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n })}\n onFocus={composeEventHandlers(itemProps.onFocus, () => {\n /**\n * Our `RovingFocusGroup` will focus the radio when navigating with arrow keys\n * and we need to \"check\" it in that case. We click it to \"check\" it (instead\n * of updating `context.value`) so that the radio change event fires.\n */\n if (isArrowKeyPressedRef.current) ref.current?.click();\n })}\n />\n \n );\n }\n);\n\nRadioGroupItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * RadioGroupIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'RadioGroupIndicator';\n\ntype RadioGroupIndicatorElement = React.ElementRef;\ntype RadioIndicatorProps = React.ComponentPropsWithoutRef;\ninterface RadioGroupIndicatorProps extends RadioIndicatorProps {}\n\nconst RadioGroupIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeRadioGroup, ...indicatorProps } = props;\n const radioScope = useRadioScope(__scopeRadioGroup);\n return ;\n }\n);\n\nRadioGroupIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nconst Root = RadioGroup;\nconst Item = RadioGroupItem;\nconst Indicator = RadioGroupIndicator;\n\nexport {\n createRadioGroupScope,\n //\n RadioGroup,\n RadioGroupItem,\n RadioGroupIndicator,\n //\n Root,\n Item,\n Indicator,\n};\nexport type { RadioGroupProps, RadioGroupItemProps, RadioGroupIndicatorProps };\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Radio\n * -----------------------------------------------------------------------------------------------*/\n\nconst RADIO_NAME = 'Radio';\n\ntype ScopedProps

= P & { __scopeRadio?: Scope };\nconst [createRadioContext, createRadioScope] = createContextScope(RADIO_NAME);\n\ntype RadioContextValue = { checked: boolean; disabled?: boolean };\nconst [RadioProvider, useRadioContext] = createRadioContext(RADIO_NAME);\n\ntype RadioElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface RadioProps extends PrimitiveButtonProps {\n checked?: boolean;\n required?: boolean;\n onCheck?(): void;\n}\n\nconst Radio = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeRadio,\n name,\n checked = false,\n required,\n disabled,\n value = 'on',\n onCheck,\n form,\n ...radioProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? form || !!button.closest('form') : true;\n\n return (\n \n {\n // radios cannot be unchecked so we only communicate a checked state\n if (!checked) onCheck?.();\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if radio is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect radio updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n \n )}\n \n );\n }\n);\n\nRadio.displayName = RADIO_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * RadioIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'RadioIndicator';\n\ntype RadioIndicatorElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\nexport interface RadioIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst RadioIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeRadio, forceMount, ...indicatorProps } = props;\n const context = useRadioContext(INDICATOR_NAME, __scopeRadio);\n return (\n \n \n \n );\n }\n);\n\nRadioIndicator.displayName = INDICATOR_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit {\n checked: boolean;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n \n );\n};\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nexport {\n createRadioScope,\n //\n Radio,\n RadioIndicator,\n};\nexport type { RadioProps };\n"], + "mappings": "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", "names": ["import_jsx_runtime", "createContextScope", "jsx", "Primitive", "useComposedRefs", "composeEventHandlers", "INDICATOR_NAME", "Root", "Item"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-scroll-area.js b/node_modules/.vite/deps/@radix-ui_react-scroll-area.js index 3e5990ee..f438585c 100644 --- a/node_modules/.vite/deps/@radix-ui_react-scroll-area.js +++ b/node_modules/.vite/deps/@radix-ui_react-scroll-area.js @@ -7,15 +7,13 @@ import { } from "./chunk-O2UA4OQB.js"; import { Presence -} from "./chunk-TZDCYJOT.js"; -import { - createContextScope -} from "./chunk-OAV3HHWW.js"; +} from "./chunk-MZLEVI2I.js"; import { composeEventHandlers, + createContextScope, useCallbackRef, useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -111,7 +109,7 @@ ScrollArea.displayName = SCROLL_AREA_NAME; var VIEWPORT_NAME = "ScrollAreaViewport"; var ScrollAreaViewport = React2.forwardRef( (props, forwardedRef) => { - const { __scopeScrollArea, children, nonce, ...viewportProps } = props; + const { __scopeScrollArea, children, asChild, nonce, ...viewportProps } = props; const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea); const ref = React2.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange); @@ -120,7 +118,24 @@ var ScrollAreaViewport = React2.forwardRef( "style", { dangerouslySetInnerHTML: { - __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}` + __html: ` +[data-radix-scroll-area-viewport] { + scrollbar-width: none; + -ms-overflow-style: none; + -webkit-overflow-scrolling: touch; +} +[data-radix-scroll-area-viewport]::-webkit-scrollbar { + display: none; +} +:where([data-radix-scroll-area-viewport]) { + display: flex; + flex-direction: column; + align-items: stretch; +} +:where([data-radix-scroll-area-content]) { + flex-grow: 1; +} +` }, nonce } @@ -130,12 +145,13 @@ var ScrollAreaViewport = React2.forwardRef( { "data-radix-scroll-area-viewport": "", ...viewportProps, + asChild, ref: composedRefs, style: { /** * We don't support `visible` because the intention is to have at least one scrollbar * if this component is used and `visible` will behave like `auto` in that case - * https://developer.mozilla.org/en-US/docs/Web/CSS/overflowed#description + * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description * * We don't handle `auto` because the intention is for the native implementation * to be hidden if using this component. We just want to ensure the node is scrollable @@ -147,7 +163,15 @@ var ScrollAreaViewport = React2.forwardRef( overflowY: context.scrollbarYEnabled ? "scroll" : "hidden", ...props.style }, - children: (0, import_jsx_runtime.jsx)("div", { ref: context.onContentChange, style: { minWidth: "100%", display: "table" }, children }) + children: getSubtree({ asChild, children }, (children2) => (0, import_jsx_runtime.jsx)( + "div", + { + "data-radix-scroll-area-content": "", + ref: context.onContentChange, + style: { minWidth: context.scrollbarXEnabled ? "fit-content" : void 0 }, + children: children2 + } + )) } ) ] }); @@ -740,6 +764,14 @@ function useResizeObserver(element, onResize) { } }, [element, handleResize]); } +function getSubtree(options, content) { + const { asChild, children } = options; + if (!asChild) return typeof content === "function" ? content(children) : content; + const firstChild = React2.Children.only(children); + return React2.cloneElement(firstChild, { + children: typeof content === "function" ? content(firstChild.props.children) : content + }); +} var Root = ScrollArea; var Viewport = ScrollAreaViewport; var Scrollbar = ScrollAreaScrollbar; diff --git a/node_modules/.vite/deps/@radix-ui_react-scroll-area.js.map b/node_modules/.vite/deps/@radix-ui_react-scroll-area.js.map index 65721539..383ac1c3 100644 --- a/node_modules/.vite/deps/@radix-ui_react-scroll-area.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-scroll-area.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../@radix-ui/react-scroll-area/src/ScrollArea.tsx", "../../@radix-ui/react-scroll-area/src/useStateMachine.ts"], - "sourcesContent": ["/// \n\nimport * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useStateMachine } from './useStateMachine';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\ntype Sizes = {\n content: number;\n viewport: number;\n scrollbar: {\n size: number;\n paddingStart: number;\n paddingEnd: number;\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollArea\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_AREA_NAME = 'ScrollArea';\n\ntype ScopedProps

= P & { __scopeScrollArea?: Scope };\nconst [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\n\ntype ScrollAreaContextValue = {\n type: 'auto' | 'always' | 'scroll' | 'hover';\n dir: Direction;\n scrollHideDelay: number;\n scrollArea: ScrollAreaElement | null;\n viewport: ScrollAreaViewportElement | null;\n onViewportChange(viewport: ScrollAreaViewportElement | null): void;\n content: HTMLDivElement | null;\n onContentChange(content: HTMLDivElement): void;\n scrollbarX: ScrollAreaScrollbarElement | null;\n onScrollbarXChange(scrollbar: ScrollAreaScrollbarElement | null): void;\n scrollbarXEnabled: boolean;\n onScrollbarXEnabledChange(rendered: boolean): void;\n scrollbarY: ScrollAreaScrollbarElement | null;\n onScrollbarYChange(scrollbar: ScrollAreaScrollbarElement | null): void;\n scrollbarYEnabled: boolean;\n onScrollbarYEnabledChange(rendered: boolean): void;\n onCornerWidthChange(width: number): void;\n onCornerHeightChange(height: number): void;\n};\n\nconst [ScrollAreaProvider, useScrollAreaContext] =\n createScrollAreaContext(SCROLL_AREA_NAME);\n\ntype ScrollAreaElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface ScrollAreaProps extends PrimitiveDivProps {\n type?: ScrollAreaContextValue['type'];\n dir?: ScrollAreaContextValue['dir'];\n scrollHideDelay?: number;\n}\n\nconst ScrollArea = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = 'hover',\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const [scrollbarX, setScrollbarX] = React.useState(null);\n const [scrollbarY, setScrollbarY] = React.useState(null);\n const [cornerWidth, setCornerWidth] = React.useState(0);\n const [cornerHeight, setCornerHeight] = React.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n const direction = useDirection(dir);\n\n return (\n \n \n \n );\n }\n);\n\nScrollArea.displayName = SCROLL_AREA_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaViewport\n * -----------------------------------------------------------------------------------------------*/\n\nconst VIEWPORT_NAME = 'ScrollAreaViewport';\n\ntype ScrollAreaViewportElement = React.ElementRef;\ninterface ScrollAreaViewportProps extends PrimitiveDivProps {\n nonce?: string;\n}\n\nconst ScrollAreaViewport = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return (\n <>\n {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n \n

\n {children}\n
\n \n \n );\n }\n);\n\nScrollAreaViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaScrollbar\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLLBAR_NAME = 'ScrollAreaScrollbar';\n\ntype ScrollAreaScrollbarElement = ScrollAreaScrollbarVisibleElement;\ninterface ScrollAreaScrollbarProps extends ScrollAreaScrollbarVisibleProps {\n forceMount?: true;\n}\n\nconst ScrollAreaScrollbar = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === 'horizontal';\n\n React.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n\n return context.type === 'hover' ? (\n \n ) : context.type === 'scroll' ? (\n \n ) : context.type === 'auto' ? (\n \n ) : context.type === 'always' ? (\n \n ) : null;\n }\n);\n\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaScrollbarHoverElement = ScrollAreaScrollbarAutoElement;\ninterface ScrollAreaScrollbarHoverProps extends ScrollAreaScrollbarAutoProps {\n forceMount?: true;\n}\n\nconst ScrollAreaScrollbarHover = React.forwardRef<\n ScrollAreaScrollbarHoverElement,\n ScrollAreaScrollbarHoverProps\n>((props: ScopedProps, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener('pointerenter', handlePointerEnter);\n scrollArea.addEventListener('pointerleave', handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener('pointerenter', handlePointerEnter);\n scrollArea.removeEventListener('pointerleave', handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n\n return (\n \n \n \n );\n});\n\ntype ScrollAreaScrollbarScrollElement = ScrollAreaScrollbarVisibleElement;\ninterface ScrollAreaScrollbarScrollProps extends ScrollAreaScrollbarVisibleProps {\n forceMount?: true;\n}\n\nconst ScrollAreaScrollbarScroll = React.forwardRef<\n ScrollAreaScrollbarScrollElement,\n ScrollAreaScrollbarScrollProps\n>((props: ScopedProps, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === 'horizontal';\n const debounceScrollEnd = useDebounceCallback(() => send('SCROLL_END'), 100);\n const [state, send] = useStateMachine('hidden', {\n hidden: {\n SCROLL: 'scrolling',\n },\n scrolling: {\n SCROLL_END: 'idle',\n POINTER_ENTER: 'interacting',\n },\n interacting: {\n SCROLL: 'interacting',\n POINTER_LEAVE: 'idle',\n },\n idle: {\n HIDE: 'hidden',\n SCROLL: 'scrolling',\n POINTER_ENTER: 'interacting',\n },\n });\n\n React.useEffect(() => {\n if (state === 'idle') {\n const hideTimer = window.setTimeout(() => send('HIDE'), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n\n React.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';\n\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = () => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send('SCROLL');\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n\n return (\n \n send('POINTER_ENTER'))}\n onPointerLeave={composeEventHandlers(props.onPointerLeave, () => send('POINTER_LEAVE'))}\n />\n \n );\n});\n\ntype ScrollAreaScrollbarAutoElement = ScrollAreaScrollbarVisibleElement;\ninterface ScrollAreaScrollbarAutoProps extends ScrollAreaScrollbarVisibleProps {\n forceMount?: true;\n}\n\nconst ScrollAreaScrollbarAuto = React.forwardRef<\n ScrollAreaScrollbarAutoElement,\n ScrollAreaScrollbarAutoProps\n>((props: ScopedProps, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React.useState(false);\n const isHorizontal = props.orientation === 'horizontal';\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n\n return (\n \n \n \n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaScrollbarVisibleElement = ScrollAreaScrollbarAxisElement;\ninterface ScrollAreaScrollbarVisibleProps\n extends Omit {\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst ScrollAreaScrollbarVisible = React.forwardRef<\n ScrollAreaScrollbarVisibleElement,\n ScrollAreaScrollbarVisibleProps\n>((props: ScopedProps, forwardedRef) => {\n const { orientation = 'vertical', ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React.useRef(null);\n const pointerOffsetRef = React.useRef(0);\n const [sizes, setSizes] = React.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 },\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n\n type UncommonProps = 'onThumbPositionChange' | 'onDragScroll' | 'onWheelScroll';\n const commonProps: Omit = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => (thumbRef.current = thumb),\n onThumbPointerUp: () => (pointerOffsetRef.current = 0),\n onThumbPointerDown: (pointerPos) => (pointerOffsetRef.current = pointerPos),\n };\n\n function getScrollPosition(pointerPos: number, dir?: Direction) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n\n if (orientation === 'horizontal') {\n return (\n {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n }}\n onWheelScroll={(scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n }}\n onDragScroll={(pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }}\n />\n );\n }\n\n if (orientation === 'vertical') {\n return (\n {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n }}\n onWheelScroll={(scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n }}\n onDragScroll={(pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }}\n />\n );\n }\n\n return null;\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaScrollbarAxisPrivateProps = {\n hasThumb: boolean;\n sizes: Sizes;\n onSizesChange(sizes: Sizes): void;\n onThumbChange(thumb: ScrollAreaThumbElement | null): void;\n onThumbPointerDown(pointerPos: number): void;\n onThumbPointerUp(): void;\n onThumbPositionChange(): void;\n onWheelScroll(scrollPos: number): void;\n onDragScroll(pointerPos: number): void;\n};\n\ntype ScrollAreaScrollbarAxisElement = ScrollAreaScrollbarImplElement;\ninterface ScrollAreaScrollbarAxisProps\n extends Omit,\n ScrollAreaScrollbarAxisPrivateProps {}\n\nconst ScrollAreaScrollbarX = React.forwardRef<\n ScrollAreaScrollbarAxisElement,\n ScrollAreaScrollbarAxisProps\n>((props: ScopedProps, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React.useState();\n const ref = React.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n\n React.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n\n return (\n props.onThumbPointerDown(pointerPos.x)}\n onDragScroll={(pointerPos) => props.onDragScroll(pointerPos.x)}\n onWheelScroll={(event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n // prevent window scroll when wheeling on scrollbar\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n }}\n onResize={() => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight),\n },\n });\n }\n }}\n />\n );\n});\n\nconst ScrollAreaScrollbarY = React.forwardRef<\n ScrollAreaScrollbarAxisElement,\n ScrollAreaScrollbarAxisProps\n>((props: ScopedProps, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React.useState();\n const ref = React.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n\n React.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n\n return (\n props.onThumbPointerDown(pointerPos.y)}\n onDragScroll={(pointerPos) => props.onDragScroll(pointerPos.y)}\n onWheelScroll={(event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n // prevent window scroll when wheeling on scrollbar\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n }}\n onResize={() => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom),\n },\n });\n }\n }}\n />\n );\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollbarContext = {\n hasThumb: boolean;\n scrollbar: ScrollAreaScrollbarElement | null;\n onThumbChange(thumb: ScrollAreaThumbElement | null): void;\n onThumbPointerUp(): void;\n onThumbPointerDown(pointerPos: { x: number; y: number }): void;\n onThumbPositionChange(): void;\n};\n\nconst [ScrollbarProvider, useScrollbarContext] =\n createScrollAreaContext(SCROLLBAR_NAME);\n\ntype ScrollAreaScrollbarImplElement = React.ElementRef;\ntype ScrollAreaScrollbarImplPrivateProps = {\n sizes: Sizes;\n hasThumb: boolean;\n onThumbChange: ScrollbarContext['onThumbChange'];\n onThumbPointerUp: ScrollbarContext['onThumbPointerUp'];\n onThumbPointerDown: ScrollbarContext['onThumbPointerDown'];\n onThumbPositionChange: ScrollbarContext['onThumbPositionChange'];\n onWheelScroll(event: WheelEvent, maxScrollPos: number): void;\n onDragScroll(pointerPos: { x: number; y: number }): void;\n onResize(): void;\n};\ninterface ScrollAreaScrollbarImplProps\n extends Omit,\n ScrollAreaScrollbarImplPrivateProps {}\n\nconst ScrollAreaScrollbarImpl = React.forwardRef<\n ScrollAreaScrollbarImplElement,\n ScrollAreaScrollbarImplProps\n>((props: ScopedProps, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));\n const rectRef = React.useRef(null);\n const prevWebkitUserSelectRef = React.useRef('');\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n\n function handleDragScroll(event: React.PointerEvent) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n\n /**\n * We bind wheel event imperatively so we can switch off passive\n * mode for document wheel event to allow it to be prevented\n */\n React.useEffect(() => {\n const handleWheel = (event: WheelEvent) => {\n const element = event.target as HTMLElement;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener('wheel', handleWheel, { passive: false });\n return () => document.removeEventListener('wheel', handleWheel, { passive: false } as any);\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n\n /**\n * Update thumb position on sizes change\n */\n React.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n\n return (\n \n {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target as HTMLElement;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar!.getBoundingClientRect();\n // pointer capture doesn't prevent text selection in Safari\n // so we remove text selection manually when scrolling\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = 'none';\n if (context.viewport) context.viewport.style.scrollBehavior = 'auto';\n handleDragScroll(event);\n }\n })}\n onPointerMove={composeEventHandlers(props.onPointerMove, handleDragScroll)}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target as HTMLElement;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = '';\n rectRef.current = null;\n })}\n />\n \n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'ScrollAreaThumb';\n\ntype ScrollAreaThumbElement = ScrollAreaThumbImplElement;\ninterface ScrollAreaThumbProps extends ScrollAreaThumbImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst ScrollAreaThumb = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return (\n \n \n \n );\n }\n);\n\ntype ScrollAreaThumbImplElement = React.ElementRef;\ninterface ScrollAreaThumbImplProps extends PrimitiveDivProps {}\n\nconst ScrollAreaThumbImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(forwardedRef, (node) =>\n scrollbarContext.onThumbChange(node)\n );\n const removeUnlinkedScrollListenerRef = React.useRef<() => void>();\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = undefined;\n }\n }, 100);\n\n React.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n /**\n * We only bind to native scroll event so we know when scroll starts and ends.\n * When scroll starts we start a requestAnimationFrame loop that checks for\n * changes to scroll position. That rAF loop triggers our thumb position change\n * when relevant to avoid scroll-linked effects. We cancel the loop when scroll ends.\n * https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects\n */\n const handleScroll = () => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n };\n onThumbPositionChange();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n\n return (\n {\n const thumb = event.target as HTMLElement;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n })}\n onPointerUp={composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)}\n />\n );\n }\n);\n\nScrollAreaThumb.displayName = THUMB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaCorner\n * -----------------------------------------------------------------------------------------------*/\n\nconst CORNER_NAME = 'ScrollAreaCorner';\n\ntype ScrollAreaCornerElement = ScrollAreaCornerImplElement;\ninterface ScrollAreaCornerProps extends ScrollAreaCornerImplProps {}\n\nconst ScrollAreaCorner = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== 'scroll' && hasBothScrollbarsVisible;\n return hasCorner ? : null;\n }\n);\n\nScrollAreaCorner.displayName = CORNER_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype ScrollAreaCornerImplElement = React.ElementRef;\ninterface ScrollAreaCornerImplProps extends PrimitiveDivProps {}\n\nconst ScrollAreaCornerImpl = React.forwardRef<\n ScrollAreaCornerImplElement,\n ScrollAreaCornerImplProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React.useState(0);\n const [height, setHeight] = React.useState(0);\n const hasSize = Boolean(width && height);\n\n useResizeObserver(context.scrollbarX, () => {\n const height = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height);\n setHeight(height);\n });\n\n useResizeObserver(context.scrollbarY, () => {\n const width = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width);\n setWidth(width);\n });\n\n return hasSize ? (\n \n ) : null;\n});\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction toInt(value?: string) {\n return value ? parseInt(value, 10) : 0;\n}\n\nfunction getThumbRatio(viewportSize: number, contentSize: number) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\n\nfunction getThumbSize(sizes: Sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n // minimum of 18 matches macOS minimum\n return Math.max(thumbSize, 18);\n}\n\nfunction getScrollPositionFromPointer(\n pointerPos: number,\n pointerOffset: number,\n sizes: Sizes,\n dir: Direction = 'ltr'\n) {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange as [number, number]);\n return interpolate(pointerPos);\n}\n\nfunction getThumbOffsetFromScroll(scrollPos: number, sizes: Sizes, dir: Direction = 'ltr') {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange as [number, number]);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input: readonly [number, number], output: readonly [number, number]) {\n return (value: number) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\n\nfunction isScrollingWithinScrollbarBounds(scrollPos: number, maxScrollPos: number) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\n\n// Custom scroll handler to avoid scroll-linked effects\n// https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects\nconst addUnlinkedScrollListener = (node: HTMLElement, handler = () => {}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\n\nfunction useDebounceCallback(callback: () => void, delay: number) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React.useRef(0);\n React.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\n\nfunction useResizeObserver(element: HTMLElement | null, onResize: () => void) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n /**\n * Resize Observer will throw an often benign error that says `ResizeObserver loop\n * completed with undelivered notifications`. This means that ResizeObserver was not\n * able to deliver all observations within a single animation frame, so we use\n * `requestAnimationFrame` to ensure we don't deliver unnecessary observations.\n * Further reading: https://github.com/WICG/resize-observer/issues/38\n */\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = ScrollArea;\nconst Viewport = ScrollAreaViewport;\nconst Scrollbar = ScrollAreaScrollbar;\nconst Thumb = ScrollAreaThumb;\nconst Corner = ScrollAreaCorner;\n\nexport {\n createScrollAreaScope,\n //\n ScrollArea,\n ScrollAreaViewport,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaCorner,\n //\n Root,\n Viewport,\n Scrollbar,\n Thumb,\n Corner,\n};\nexport type {\n ScrollAreaProps,\n ScrollAreaViewportProps,\n ScrollAreaScrollbarProps,\n ScrollAreaThumbProps,\n ScrollAreaCornerProps,\n};\n", "import * as React from 'react';\n\ntype Machine = { [k: string]: { [k: string]: S } };\ntype MachineState = keyof T;\ntype MachineEvent = keyof UnionToIntersection;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine(\n initialState: MachineState,\n machine: M & Machine>\n) {\n return React.useReducer((state: MachineState, event: MachineEvent): MachineState => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n"], - "mappings": "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", - "names": ["height", "width"] + "sourcesContent": ["/// \n\nimport * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Presence } from '@radix-ui/react-presence';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useStateMachine } from './useStateMachine';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\ntype Sizes = {\n content: number;\n viewport: number;\n scrollbar: {\n size: number;\n paddingStart: number;\n paddingEnd: number;\n };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollArea\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_AREA_NAME = 'ScrollArea';\n\ntype ScopedProps

= P & { __scopeScrollArea?: Scope };\nconst [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\n\ntype ScrollAreaContextValue = {\n type: 'auto' | 'always' | 'scroll' | 'hover';\n dir: Direction;\n scrollHideDelay: number;\n scrollArea: ScrollAreaElement | null;\n viewport: ScrollAreaViewportElement | null;\n onViewportChange(viewport: ScrollAreaViewportElement | null): void;\n content: HTMLDivElement | null;\n onContentChange(content: HTMLDivElement): void;\n scrollbarX: ScrollAreaScrollbarElement | null;\n onScrollbarXChange(scrollbar: ScrollAreaScrollbarElement | null): void;\n scrollbarXEnabled: boolean;\n onScrollbarXEnabledChange(rendered: boolean): void;\n scrollbarY: ScrollAreaScrollbarElement | null;\n onScrollbarYChange(scrollbar: ScrollAreaScrollbarElement | null): void;\n scrollbarYEnabled: boolean;\n onScrollbarYEnabledChange(rendered: boolean): void;\n onCornerWidthChange(width: number): void;\n onCornerHeightChange(height: number): void;\n};\n\nconst [ScrollAreaProvider, useScrollAreaContext] =\n createScrollAreaContext(SCROLL_AREA_NAME);\n\ntype ScrollAreaElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface ScrollAreaProps extends PrimitiveDivProps {\n type?: ScrollAreaContextValue['type'];\n dir?: ScrollAreaContextValue['dir'];\n scrollHideDelay?: number;\n}\n\nconst ScrollArea = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = 'hover',\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const [scrollbarX, setScrollbarX] = React.useState(null);\n const [scrollbarY, setScrollbarY] = React.useState(null);\n const [cornerWidth, setCornerWidth] = React.useState(0);\n const [cornerHeight, setCornerHeight] = React.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n const direction = useDirection(dir);\n\n return (\n \n \n \n );\n }\n);\n\nScrollArea.displayName = SCROLL_AREA_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ScrollAreaViewport\n * -----------------------------------------------------------------------------------------------*/\n\nconst VIEWPORT_NAME = 'ScrollAreaViewport';\n\ntype ScrollAreaViewportElement = React.ElementRef;\ninterface ScrollAreaViewportProps extends PrimitiveDivProps {\n nonce?: string;\n}\n\nconst ScrollAreaViewport = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeScrollArea, children, asChild, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return (\n <>\n \n

= P & { __scopeSelect?: Scope };\nconst [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\ntype SelectContextValue = {\n trigger: SelectTriggerElement | null;\n onTriggerChange(node: SelectTriggerElement | null): void;\n valueNode: SelectValueElement | null;\n onValueNodeChange(node: SelectValueElement): void;\n valueNodeHasChildren: boolean;\n onValueNodeHasChildrenChange(hasChildren: boolean): void;\n contentId: string;\n value?: string;\n onValueChange(value: string): void;\n open: boolean;\n required?: boolean;\n onOpenChange(open: boolean): void;\n dir: SelectProps['dir'];\n triggerPointerDownPosRef: React.MutableRefObject<{ x: number; y: number } | null>;\n disabled?: boolean;\n};\n\nconst [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\n\ntype NativeOption = React.ReactElement>;\n\ntype SelectNativeOptionsContextValue = {\n onNativeOptionAdd(option: NativeOption): void;\n onNativeOptionRemove(option: NativeOption): void;\n};\nconst [SelectNativeOptionsProvider, useSelectNativeOptionsContext] =\n createSelectContext(SELECT_NAME);\n\ninterface SelectProps {\n children?: React.ReactNode;\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n name?: string;\n autoComplete?: string;\n disabled?: boolean;\n required?: boolean;\n}\n\nconst Select: React.FC = (props: ScopedProps) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n const triggerPointerDownPosRef = React.useRef<{ x: number; y: number } | null>(null);\n\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = trigger ? Boolean(trigger.closest('form')) : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(new Set());\n\n // The native `select` only associates the correct default value if the corresponding\n // `option` is rendered as a child **at the same time** as itself.\n // Because it might take a few renders for our items to gather the information to build\n // the native `option`(s), we generate a key on the `select` to make sure React re-builds it\n // each time the options change.\n const nativeSelectKey = Array.from(nativeOptionsSet)\n .map((option) => option.props.value)\n .join(';');\n\n return (\n \n \n \n {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, [])}\n onNativeOptionRemove={React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, [])}\n >\n {children}\n \n \n\n {isFormControl ? (\n setValue(event.target.value)}\n disabled={disabled}\n >\n {value === undefined ? \n );\n};\n\nSelect.displayName = SELECT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'SelectTrigger';\n\ntype SelectTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface SelectTriggerProps extends PrimitiveButtonProps {}\n\nconst SelectTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== undefined) {\n context.onValueChange(nextItem.value);\n }\n });\n\n const handleOpen = () => {\n if (!isDisabled) {\n context.onOpenChange(true);\n // reset typeahead when we open\n resetTypeahead();\n }\n };\n\n return (\n \n {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label \"click\"\n event.currentTarget.focus();\n })}\n onPointerDown={composeEventHandlers(triggerProps.onPointerDown, (event) => {\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (event.button === 0 && event.ctrlKey === false) {\n handleOpen();\n context.triggerPointerDownPosRef.current = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY),\n };\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === ' ') return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })}\n />\n \n );\n }\n);\n\nSelectTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectValue\n * -----------------------------------------------------------------------------------------------*/\n\nconst VALUE_NAME = 'SelectValue';\n\ntype SelectValueElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface SelectValueProps extends Omit {\n placeholder?: React.ReactNode;\n}\n\nconst SelectValue = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, children, placeholder = '', ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== undefined;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n\n return (\n \n {shouldShowPlaceholder(context.value) ? <>{placeholder} : children}\n \n );\n }\n);\n\nSelectValue.displayName = VALUE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectIcon\n * -----------------------------------------------------------------------------------------------*/\n\nconst ICON_NAME = 'SelectIcon';\n\ntype SelectIconElement = React.ElementRef;\ninterface SelectIconProps extends PrimitiveSpanProps {}\n\nconst SelectIcon = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return (\n \n {children || '\u25BC'}\n \n );\n }\n);\n\nSelectIcon.displayName = ICON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'SelectPortal';\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface SelectPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n}\n\nconst SelectPortal: React.FC = (props: ScopedProps) => {\n return ;\n};\n\nSelectPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'SelectContent';\n\ntype SelectContentElement = SelectContentImplElement;\ninterface SelectContentProps extends SelectContentImplProps {}\n\nconst SelectContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n\n // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n\n if (!context.open) {\n const frag = fragment as Element | undefined;\n return frag\n ? ReactDOM.createPortal(\n \n \n

{props.children}
\n \n ,\n frag\n )\n : null;\n }\n\n return ;\n }\n);\n\nSelectContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContentImpl\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_MARGIN = 10;\n\ntype SelectContentContextValue = {\n content?: SelectContentElement | null;\n viewport?: SelectViewportElement | null;\n onViewportChange?: (node: SelectViewportElement | null) => void;\n itemRefCallback?: (node: SelectItemElement | null, value: string, disabled: boolean) => void;\n selectedItem?: SelectItemElement | null;\n onItemLeave?: () => void;\n itemTextRefCallback?: (\n node: SelectItemTextElement | null,\n value: string,\n disabled: boolean\n ) => void;\n focusSelectedItem?: () => void;\n selectedItemText?: SelectItemTextElement | null;\n position?: SelectContentProps['position'];\n isPositioned?: boolean;\n searchRef?: React.RefObject;\n};\n\nconst [SelectContentProvider, useSelectContentContext] =\n createSelectContext(CONTENT_NAME);\n\nconst CONTENT_IMPL_NAME = 'SelectContentImpl';\n\ntype SelectContentImplElement = SelectPopperPositionElement | SelectItemAlignedPositionElement;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\n\ntype SelectPopperPrivateProps = { onPlaced?: PopperContentProps['onPlaced'] };\n\ninterface SelectContentImplProps\n extends Omit,\n Omit {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n\n position?: 'item-aligned' | 'popper';\n}\n\nconst SelectContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeSelect,\n position = 'item-aligned',\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n\n // Make sure the whole tree has focus guards as our `Select` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n const focusFirst = React.useCallback(\n (candidates: Array) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: 'nearest' });\n // viewport might have padding so scroll to its edges when focusing first/last items.\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n\n // Since this is not dependent on layout, we want to ensure this runs at the same time as\n // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n\n // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n // and close on `pointerup` outside.\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0)),\n };\n };\n const handlePointerUp = (event: PointerEvent) => {\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n // otherwise, if the event was outside the content, close.\n if (!content.contains(event.target as HTMLElement)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener('pointermove', handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp, { capture: true, once: true });\n }\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener('blur', close);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('blur', close);\n window.removeEventListener('resize', close);\n };\n }, [onOpenChange]);\n\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (nextItem.ref.current as HTMLElement).focus());\n }\n });\n\n const itemRefCallback = React.useCallback(\n (node: SelectItemElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node: SelectItemTextElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n\n const SelectPosition = position === 'popper' ? SelectPopperPosition : SelectItemAlignedPosition;\n\n // Silently ignore props that are not supported by `SelectItemAlignedPosition`\n const popperContentProps =\n SelectPosition === SelectPopperPosition\n ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n }\n : {};\n\n return (\n \n \n {\n // we prevent open autofocus because we manually focus the selected item\n event.preventDefault();\n }}\n onUnmountAutoFocus={composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n })}\n >\n event.preventDefault()}\n onDismiss={() => context.onOpenChange(false)}\n >\n event.preventDefault()}\n {...contentProps}\n {...popperContentProps}\n onPlaced={() => setIsPositioned(true)}\n ref={composedRefs}\n style={{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n ...contentProps.style,\n }}\n onKeyDown={composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (['ArrowUp', 'End'].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as SelectItemElement;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n\n event.preventDefault();\n }\n })}\n />\n \n \n \n \n );\n }\n);\n\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemAlignedPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';\n\ntype SelectItemAlignedPositionElement = React.ElementRef;\ninterface SelectItemAlignedPositionProps extends PrimitiveDivProps, SelectPopperPrivateProps {}\n\nconst SelectItemAlignedPosition = React.forwardRef<\n SelectItemAlignedPositionElement,\n SelectItemAlignedPositionProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (\n context.trigger &&\n context.valueNode &&\n contentWrapper &&\n content &&\n viewport &&\n selectedItem &&\n selectedItemText\n ) {\n const triggerRect = context.trigger.getBoundingClientRect();\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n\n if (context.dir !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [CONTENT_MARGIN, rightEdge - contentWidth]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.left = clampedLeft + 'px';\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [CONTENT_MARGIN, leftEdge - contentWidth]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.right = clampedRight + 'px';\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = 0 + 'px';\n const viewportOffsetBottom =\n content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight +\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) +\n viewportOffsetBottom +\n contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + 'px';\n } else {\n const isFirstItem = selectedItem === items[0].ref.current;\n contentWrapper.style.top = 0 + 'px';\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth +\n viewport.offsetTop +\n // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) +\n selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + 'px';\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + 'px';\n contentWrapper.style.maxHeight = availableHeight + 'px';\n // -----------------------------------------------------------------------------------------\n\n onPlaced?.();\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.current = true));\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced,\n ]);\n\n useLayoutEffect(() => position(), [position]);\n\n // copy z-index from content to wrapper\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n // When the viewport becomes scrollable at the top, the scroll up button will mount.\n // Because it is part of the normal flow, it will push down the viewport, thus throwing our\n // trigger => selectedItem alignment off by the amount the viewport was pushed down.\n // We wait for this to happen and then re-run the positining logic one more time to account for it.\n const handleScrollButtonChange = React.useCallback(\n (node: SelectScrollButtonImplElement | null) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n\n return (\n \n \n \n \n \n );\n});\n\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPopperPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_POSITION_NAME = 'SelectPopperPosition';\n\ntype SelectPopperPositionElement = React.ElementRef;\ntype PopperContentProps = React.ComponentPropsWithoutRef;\ninterface SelectPopperPositionProps extends PopperContentProps, SelectPopperPrivateProps {}\n\nconst SelectPopperPosition = React.forwardRef<\n SelectPopperPositionElement,\n SelectPopperPositionProps\n>((props: ScopedProps, forwardedRef) => {\n const {\n __scopeSelect,\n align = 'start',\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n\n return (\n \n );\n});\n\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectViewport\n * -----------------------------------------------------------------------------------------------*/\n\ntype SelectViewportContextValue = {\n contentWrapper?: HTMLDivElement | null;\n shouldExpandOnScrollRef?: React.RefObject;\n onScrollButtonChange?: (node: SelectScrollButtonImplElement | null) => void;\n};\n\nconst [SelectViewportProvider, useSelectViewportContext] =\n createSelectContext(CONTENT_NAME, {});\n\nconst VIEWPORT_NAME = 'SelectViewport';\n\ntype SelectViewportElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface SelectViewportProps extends PrimitiveDivProps {\n nonce?: string;\n}\n\nconst SelectViewport = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return (\n <>\n {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n \n \n {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n\n contentWrapper.style.height = clampedNextHeight + 'px';\n if (contentWrapper.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n // ensure the content stays pinned to the bottom\n contentWrapper.style.justifyContent = 'flex-end';\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })}\n />\n \n \n );\n }\n);\n\nSelectViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'SelectGroup';\n\ntype SelectGroupContextValue = { id: string };\n\nconst [SelectGroupContextProvider, useSelectGroupContext] =\n createSelectContext(GROUP_NAME);\n\ntype SelectGroupElement = React.ElementRef;\ninterface SelectGroupProps extends PrimitiveDivProps {}\n\nconst SelectGroup = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return (\n \n \n \n );\n }\n);\n\nSelectGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'SelectLabel';\n\ntype SelectLabelElement = React.ElementRef;\ninterface SelectLabelProps extends PrimitiveDivProps {}\n\nconst SelectLabel = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return ;\n }\n);\n\nSelectLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'SelectItem';\n\ntype SelectItemContextValue = {\n value: string;\n disabled: boolean;\n textId: string;\n isSelected: boolean;\n onItemTextChange(node: SelectItemTextElement | null): void;\n};\n\nconst [SelectItemContextProvider, useSelectItemContext] =\n createSelectContext(ITEM_NAME);\n\ntype SelectItemElement = React.ElementRef;\ninterface SelectItemProps extends PrimitiveDivProps {\n value: string;\n disabled?: boolean;\n textValue?: string;\n}\n\nconst SelectItem = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? '');\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) =>\n contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n\n if (value === '') {\n throw new Error(\n 'A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.'\n );\n }\n\n return (\n {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? '').trim());\n }, [])}\n >\n \n setIsFocused(true))}\n onBlur={composeEventHandlers(itemProps.onBlur, () => setIsFocused(false))}\n onPointerUp={composeEventHandlers(itemProps.onPointerUp, handleSelect)}\n onPointerMove={composeEventHandlers(itemProps.onPointerMove, (event) => {\n if (disabled) {\n contentContext.onItemLeave?.();\n } else {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n event.currentTarget.focus({ preventScroll: true });\n }\n })}\n onPointerLeave={composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n })}\n onKeyDown={composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== '';\n if (isTypingAhead && event.key === ' ') return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ') event.preventDefault();\n })}\n />\n \n \n );\n }\n);\n\nSelectItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemText\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_TEXT_NAME = 'SelectItemText';\n\ntype SelectItemTextElement = React.ElementRef;\ninterface SelectItemTextProps extends PrimitiveSpanProps {}\n\nconst SelectItemText = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => (\n \n ),\n [itemContext.disabled, itemContext.value, textContent]\n );\n\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n\n return (\n <>\n \n\n {/* Portal the select item text into the trigger value node */}\n {itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren\n ? ReactDOM.createPortal(itemTextProps.children, context.valueNode)\n : null}\n \n );\n }\n);\n\nSelectItemText.displayName = ITEM_TEXT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'SelectItemIndicator';\n\ntype SelectItemIndicatorElement = React.ElementRef;\ninterface SelectItemIndicatorProps extends PrimitiveSpanProps {}\n\nconst SelectItemIndicator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? (\n \n ) : null;\n }\n);\n\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollUpButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';\n\ntype SelectScrollUpButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollUpButtonProps extends Omit {}\n\nconst SelectScrollUpButton = React.forwardRef<\n SelectScrollUpButtonElement,\n SelectScrollUpButtonProps\n>((props: ScopedProps, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const canScrollUp = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollUp ? (\n {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollDownButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';\n\ntype SelectScrollDownButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollDownButtonProps extends Omit {}\n\nconst SelectScrollDownButton = React.forwardRef<\n SelectScrollDownButtonElement,\n SelectScrollDownButtonProps\n>((props: ScopedProps, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n // we use Math.ceil here because if the UI is zoomed-in\n // `scrollTop` is not always reported as an integer\n const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollDown ? (\n {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\n\ntype SelectScrollButtonImplElement = React.ElementRef;\ninterface SelectScrollButtonImplProps extends PrimitiveDivProps {\n onAutoScroll(): void;\n}\n\nconst SelectScrollButtonImpl = React.forwardRef<\n SelectScrollButtonImplElement,\n SelectScrollButtonImplProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext('SelectScrollButton', __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n\n // When the viewport becomes scrollable on either side, the relevant scroll button will mount.\n // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)\n // the viewport, potentially causing the active item to now be partially out of view.\n // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: 'nearest' });\n }, [getItems]);\n\n return (\n {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerMove={composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerLeave={composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })}\n />\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * SelectSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'SelectSeparator';\n\ntype SelectSeparatorElement = React.ElementRef;\ninterface SelectSeparatorProps extends PrimitiveDivProps {}\n\nconst SelectSeparator = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return ;\n }\n);\n\nSelectSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'SelectArrow';\n\ntype SelectArrowElement = React.ElementRef;\ntype PopperArrowProps = React.ComponentPropsWithoutRef;\ninterface SelectArrowProps extends PopperArrowProps {}\n\nconst SelectArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === 'popper' ? (\n \n ) : null;\n }\n);\n\nSelectArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction shouldShowPlaceholder(value?: string) {\n return value === '' || value === undefined;\n}\n\nconst BubbleSelect = React.forwardRef>(\n (props, forwardedRef) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const select = ref.current!;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n 'value'\n ) as PropertyDescriptor;\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event('change', { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully use a `select` here to support form autofill as much\n * as possible.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n *\n * We use `VisuallyHidden` rather than `display: \"none\"` because Safari autofill\n * won't work otherwise.\n */\n return (\n \n \n \n );\n }\n);\n\nBubbleSelect.displayName = 'BubbleSelect';\n\nfunction useTypeaheadSearch(onSearchChange: (search: string) => void) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef('');\n const timerRef = React.useRef(0);\n\n const handleTypeaheadSearch = React.useCallback(\n (key: string) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n // Reset `searchRef` 1 second after it was last updated\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n },\n [handleSearchChange]\n );\n\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = '';\n window.clearTimeout(timerRef.current);\n }, []);\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n return [searchRef, handleTypeaheadSearch, resetTypeahead] as const;\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in a list of items,\n * the search and the current item, and returns the next item (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through items starting with that character)\n *\n * We also reorder the items by wrapping the array around the current item.\n * This is so we always look forward from the current item, and picking the first\n * item will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current item from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current item still matches.\n */\nfunction findNextItem(\n items: T[],\n search: string,\n currentItem?: T\n) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find((item) =>\n item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : undefined;\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray(array: T[], startIndex: number) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nconst Root = Select;\nconst Trigger = SelectTrigger;\nconst Value = SelectValue;\nconst Icon = SelectIcon;\nconst Portal = SelectPortal;\nconst Content = SelectContent;\nconst Viewport = SelectViewport;\nconst Group = SelectGroup;\nconst Label = SelectLabel;\nconst Item = SelectItem;\nconst ItemText = SelectItemText;\nconst ItemIndicator = SelectItemIndicator;\nconst ScrollUpButton = SelectScrollUpButton;\nconst ScrollDownButton = SelectScrollDownButton;\nconst Separator = SelectSeparator;\nconst Arrow = SelectArrow;\n\nexport {\n createSelectScope,\n //\n Select,\n SelectTrigger,\n SelectValue,\n SelectIcon,\n SelectPortal,\n SelectContent,\n SelectViewport,\n SelectGroup,\n SelectLabel,\n SelectItem,\n SelectItemText,\n SelectItemIndicator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n SelectSeparator,\n SelectArrow,\n //\n Root,\n Trigger,\n Value,\n Icon,\n Portal,\n Content,\n Viewport,\n Group,\n Label,\n Item,\n ItemText,\n ItemIndicator,\n ScrollUpButton,\n ScrollDownButton,\n Separator,\n Arrow,\n};\nexport type {\n SelectProps,\n SelectTriggerProps,\n SelectValueProps,\n SelectIconProps,\n SelectPortalProps,\n SelectContentProps,\n SelectViewportProps,\n SelectGroupProps,\n SelectLabelProps,\n SelectItemProps,\n SelectItemTextProps,\n SelectItemIndicatorProps,\n SelectScrollUpButtonProps,\n SelectScrollDownButtonProps,\n SelectSeparatorProps,\n SelectArrowProps,\n};\n"], + "mappings": "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", + "names": ["handleScroll", "canScrollUp", "canScrollDown", "Root", "Portal", "Content", "Arrow"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-separator.js b/node_modules/.vite/deps/@radix-ui_react-separator.js deleted file mode 100644 index 14408b48..00000000 --- a/node_modules/.vite/deps/@radix-ui_react-separator.js +++ /dev/null @@ -1,46 +0,0 @@ -import { - Primitive -} from "./chunk-H55D7VYG.js"; -import "./chunk-R6S4VRB5.js"; -import "./chunk-4WIT4MX7.js"; -import { - require_jsx_runtime -} from "./chunk-S77I6LSE.js"; -import { - require_react -} from "./chunk-3TFVT2CW.js"; -import { - __toESM -} from "./chunk-4MBMRILA.js"; - -// node_modules/@radix-ui/react-separator/dist/index.mjs -var React = __toESM(require_react(), 1); -var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); -var NAME = "Separator"; -var DEFAULT_ORIENTATION = "horizontal"; -var ORIENTATIONS = ["horizontal", "vertical"]; -var Separator = React.forwardRef((props, forwardedRef) => { - const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props; - const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION; - const ariaOrientation = orientation === "vertical" ? orientation : void 0; - const semanticProps = decorative ? { role: "none" } : { "aria-orientation": ariaOrientation, role: "separator" }; - return (0, import_jsx_runtime.jsx)( - Primitive.div, - { - "data-orientation": orientation, - ...semanticProps, - ...domProps, - ref: forwardedRef - } - ); -}); -Separator.displayName = NAME; -function isValidOrientation(orientation) { - return ORIENTATIONS.includes(orientation); -} -var Root = Separator; -export { - Root, - Separator -}; -//# sourceMappingURL=@radix-ui_react-separator.js.map diff --git a/node_modules/.vite/deps/@radix-ui_react-separator.js.map b/node_modules/.vite/deps/@radix-ui_react-separator.js.map deleted file mode 100644 index 1102e1b8..00000000 --- a/node_modules/.vite/deps/@radix-ui_react-separator.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/react-separator/src/Separator.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * Separator\n * -----------------------------------------------------------------------------------------------*/\n\nconst NAME = 'Separator';\nconst DEFAULT_ORIENTATION = 'horizontal';\nconst ORIENTATIONS = ['horizontal', 'vertical'] as const;\n\ntype Orientation = (typeof ORIENTATIONS)[number];\ntype SeparatorElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface SeparatorProps extends PrimitiveDivProps {\n /**\n * Either `vertical` or `horizontal`. Defaults to `horizontal`.\n */\n orientation?: Orientation;\n /**\n * Whether or not the component is purely decorative. When true, accessibility-related attributes\n * are updated so that that the rendered element is removed from the accessibility tree.\n */\n decorative?: boolean;\n}\n\nconst Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n // `aria-orientation` defaults to `horizontal` so we only need it if `orientation` is vertical\n const ariaOrientation = orientation === 'vertical' ? orientation : undefined;\n const semanticProps = decorative\n ? { role: 'none' }\n : { 'aria-orientation': ariaOrientation, role: 'separator' };\n\n return (\n \n );\n});\n\nSeparator.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isValidOrientation(orientation: any): orientation is Orientation {\n return ORIENTATIONS.includes(orientation);\n}\n\nconst Root = Separator;\n\nexport {\n Separator,\n //\n Root,\n};\nexport type { SeparatorProps };\n"], - "mappings": ";;;;;;;;;;;;;;;;AAAA,YAAuB;AAoCnB,yBAAA;AA7BJ,IAAM,OAAO;AACb,IAAM,sBAAsB;AAC5B,IAAM,eAAe,CAAC,cAAc,UAAU;AAiB9C,IAAM,YAAkB,iBAA6C,CAAC,OAAO,iBAAiB;AAC5F,QAAM,EAAE,YAAY,aAAa,kBAAkB,qBAAqB,GAAG,SAAS,IAAI;AACxF,QAAM,cAAc,mBAAmB,eAAe,IAAI,kBAAkB;AAE5E,QAAM,kBAAkB,gBAAgB,aAAa,cAAc;AACnE,QAAM,gBAAgB,aAClB,EAAE,MAAM,OAAO,IACf,EAAE,oBAAoB,iBAAiB,MAAM,YAAY;AAE7D,aACE;IAAC,UAAU;IAAV;MACC,oBAAkB;MACjB,GAAG;MACH,GAAG;MACJ,KAAK;IAAA;EACP;AAEJ,CAAC;AAED,UAAU,cAAc;AAIxB,SAAS,mBAAmB,aAA8C;AACxE,SAAO,aAAa,SAAS,WAAW;AAC1C;AAEA,IAAM,OAAO;", - "names": [] -} diff --git a/node_modules/.vite/deps/@radix-ui_react-slider.js b/node_modules/.vite/deps/@radix-ui_react-slider.js index f13aafb7..e11fdb86 100644 --- a/node_modules/.vite/deps/@radix-ui_react-slider.js +++ b/node_modules/.vite/deps/@radix-ui_react-slider.js @@ -1,28 +1,26 @@ "use client"; +import { + clamp +} from "./chunk-6ZMM2PAV.js"; import { usePrevious } from "./chunk-DDW565K2.js"; import { createCollection } from "./chunk-6SPNF6KQ.js"; -import { - useSize -} from "./chunk-MR3TNHRB.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; -import { - clamp -} from "./chunk-6ZMM2PAV.js"; import { useDirection } from "./chunk-O2UA4OQB.js"; import { - createContextScope -} from "./chunk-OAV3HHWW.js"; + useSize +} from "./chunk-AJMUNMLZ.js"; import { - composeEventHandlers -} from "./chunk-SZRZRZSM.js"; + useControllableState +} from "./chunk-I6MWER2B.js"; +import { + composeEventHandlers, + createContextScope +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -74,6 +72,7 @@ var Slider = React.forwardRef( onValueCommit = () => { }, inverted = false, + form, ...sliderProps } = props; const thumbRefs = React.useRef(/* @__PURE__ */ new Set()); @@ -132,6 +131,7 @@ var Slider = React.forwardRef( thumbs: thumbRefs.current, values, orientation, + form, children: (0, import_jsx_runtime.jsx)(Collection.Provider, { scope: props.__scopeSlider, children: (0, import_jsx_runtime.jsx)(Collection.Slot, { scope: props.__scopeSlider, children: (0, import_jsx_runtime.jsx)( SliderOrientation, { @@ -431,7 +431,7 @@ var SliderThumbImpl = React.forwardRef( const orientation = useSliderOrientationContext(THUMB_NAME, __scopeSlider); const [thumb, setThumb] = React.useState(null); const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node)); - const isFormControl = thumb ? Boolean(thumb.closest("form")) : true; + const isFormControl = thumb ? context.form || !!thumb.closest("form") : true; const size = useSize(thumb); const value = context.values[index]; const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max); @@ -479,6 +479,7 @@ var SliderThumbImpl = React.forwardRef( BubbleInput, { name: name ?? (context.name ? context.name + (context.values.length > 1 ? "[]" : "") : void 0), + form: context.form, value }, index diff --git a/node_modules/.vite/deps/@radix-ui_react-slider.js.map b/node_modules/.vite/deps/@radix-ui_react-slider.js.map index e41c94c5..48cfc00d 100644 --- a/node_modules/.vite/deps/@radix-ui_react-slider.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-slider.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../@radix-ui/react-slider/src/Slider.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { createCollection } from '@radix-ui/react-collection';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\nconst ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\ntype SlideDirection = 'from-left' | 'from-right' | 'from-bottom' | 'from-top';\nconst BACK_KEYS: Record = {\n 'from-left': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n 'from-right': ['Home', 'PageDown', 'ArrowDown', 'ArrowRight'],\n 'from-bottom': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n 'from-top': ['Home', 'PageDown', 'ArrowUp', 'ArrowLeft'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Slider\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLIDER_NAME = 'Slider';\n\nconst [Collection, useCollection, createCollectionScope] =\n createCollection(SLIDER_NAME);\n\ntype ScopedProps

= P & { __scopeSlider?: Scope };\nconst [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope,\n]);\n\ntype SliderContextValue = {\n name?: string;\n disabled?: boolean;\n min: number;\n max: number;\n values: number[];\n valueIndexToChangeRef: React.MutableRefObject;\n thumbs: Set;\n orientation: SliderProps['orientation'];\n};\n\nconst [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\n\ntype SliderElement = SliderHorizontalElement | SliderVerticalElement;\ninterface SliderProps\n extends Omit<\n SliderHorizontalProps | SliderVerticalProps,\n keyof SliderOrientationPrivateProps | 'defaultValue'\n > {\n name?: string;\n disabled?: boolean;\n orientation?: React.AriaAttributes['aria-orientation'];\n dir?: Direction;\n min?: number;\n max?: number;\n step?: number;\n minStepsBetweenThumbs?: number;\n value?: number[];\n defaultValue?: number[];\n onValueChange?(value: number[]): void;\n onValueCommit?(value: number[]): void;\n inverted?: boolean;\n}\n\nconst Slider = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = 'horizontal',\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {},\n onValueCommit = () => {},\n inverted = false,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isHorizontal = orientation === 'horizontal';\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus();\n onValueChange(value);\n },\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n\n function handleSlideStart(value: number) {\n const closestIndex = getClosestValueIndex(values, value);\n updateValues(value, closestIndex);\n }\n\n function handleSlideMove(value: number) {\n updateValues(value, valueIndexToChangeRef.current);\n }\n\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n\n function updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n\n return (\n \n \n \n {\n if (!disabled) valuesBeforeSlideStartRef.current = values;\n })}\n min={min}\n max={max}\n inverted={inverted}\n onSlideStart={disabled ? undefined : handleSlideStart}\n onSlideMove={disabled ? undefined : handleSlideMove}\n onSlideEnd={disabled ? undefined : handleSlideEnd}\n onHomeKeyDown={() => !disabled && updateValues(min, 0, { commit: true })}\n onEndKeyDown={() =>\n !disabled && updateValues(max, values.length - 1, { commit: true })\n }\n onStepKeyDown={({ event, direction: stepDirection }) => {\n if (!disabled) {\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.includes(event.key));\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value = values[atIndex];\n const stepInDirection = step * multiplier * stepDirection;\n updateValues(value + stepInDirection, atIndex, { commit: true });\n }\n }}\n />\n \n \n \n );\n }\n);\n\nSlider.displayName = SLIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderHorizontal\n * -----------------------------------------------------------------------------------------------*/\n\ntype Side = 'top' | 'right' | 'bottom' | 'left';\n\nconst [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext<{\n startEdge: Side;\n endEdge: Side;\n size: keyof NonNullable>;\n direction: number;\n}>(SLIDER_NAME, {\n startEdge: 'left',\n endEdge: 'right',\n size: 'width',\n direction: 1,\n});\n\ntype SliderOrientationPrivateProps = {\n min: number;\n max: number;\n inverted: boolean;\n onSlideStart?(value: number): void;\n onSlideMove?(value: number): void;\n onSlideEnd?(): void;\n onHomeKeyDown(event: React.KeyboardEvent): void;\n onEndKeyDown(event: React.KeyboardEvent): void;\n onStepKeyDown(step: { event: React.KeyboardEvent; direction: number }): void;\n};\ninterface SliderOrientationProps\n extends Omit,\n SliderOrientationPrivateProps {}\n\ntype SliderHorizontalElement = SliderImplElement;\ninterface SliderHorizontalProps extends SliderOrientationProps {\n dir?: Direction;\n}\n\nconst SliderHorizontal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setSlider(node));\n const rectRef = React.useRef();\n const direction = useDirection(dir);\n const isDirectionLTR = direction === 'ltr';\n const isSlidingFromLeft = (isDirectionLTR && !inverted) || (!isDirectionLTR && inverted);\n\n function getValueFromPointer(pointerPosition: number) {\n const rect = rectRef.current || slider!.getBoundingClientRect();\n const input: [number, number] = [0, rect.width];\n const output: [number, number] = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n\n return (\n \n {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n }}\n onSlideMove={(event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n }}\n onSlideEnd={() => {\n rectRef.current = undefined;\n onSlideEnd?.();\n }}\n onStepKeyDown={(event) => {\n const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }}\n />\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderVertical\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderVerticalElement = SliderImplElement;\ninterface SliderVerticalProps extends SliderOrientationProps {}\n\nconst SliderVertical = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef();\n const isSlidingFromBottom = !inverted;\n\n function getValueFromPointer(pointerPosition: number) {\n const rect = rectRef.current || sliderRef.current!.getBoundingClientRect();\n const input: [number, number] = [0, rect.height];\n const output: [number, number] = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n\n return (\n \n {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n }}\n onSlideMove={(event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n }}\n onSlideEnd={() => {\n rectRef.current = undefined;\n onSlideEnd?.();\n }}\n onStepKeyDown={(event) => {\n const slideDirection = isSlidingFromBottom ? 'from-bottom' : 'from-top';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }}\n />\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderImpl\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderImplElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ntype SliderImplPrivateProps = {\n onSlideStart(event: React.PointerEvent): void;\n onSlideMove(event: React.PointerEvent): void;\n onSlideEnd(event: React.PointerEvent): void;\n onHomeKeyDown(event: React.KeyboardEvent): void;\n onEndKeyDown(event: React.KeyboardEvent): void;\n onStepKeyDown(event: React.KeyboardEvent): void;\n};\ninterface SliderImplProps extends PrimitiveDivProps, SliderImplPrivateProps {}\n\nconst SliderImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n\n return (\n {\n if (event.key === 'Home') {\n onHomeKeyDown(event);\n // Prevent scrolling to page start\n event.preventDefault();\n } else if (event.key === 'End') {\n onEndKeyDown(event);\n // Prevent scrolling to page end\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n // Prevent scrolling for directional key presses\n event.preventDefault();\n }\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target as HTMLElement;\n target.setPointerCapture(event.pointerId);\n // Prevent browser focus behaviour because we focus a thumb manually when values change.\n event.preventDefault();\n // Touch devices have a delay before focusing so won't focus if touch immediately moves\n // away from target (sliding). We want thumb to focus regardless.\n if (context.thumbs.has(target)) {\n target.focus();\n } else {\n onSlideStart(event);\n }\n })}\n onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n })}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })}\n />\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderTrack\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRACK_NAME = 'SliderTrack';\n\ntype SliderTrackElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface SliderTrackProps extends PrimitiveSpanProps {}\n\nconst SliderTrack = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return (\n \n );\n }\n);\n\nSliderTrack.displayName = TRACK_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderRange\n * -----------------------------------------------------------------------------------------------*/\n\nconst RANGE_NAME = 'SliderRange';\n\ntype SliderRangeElement = React.ElementRef;\ninterface SliderRangeProps extends PrimitiveSpanProps {}\n\nconst SliderRange = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map((value) =>\n convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n\n return (\n \n );\n }\n);\n\nSliderRange.displayName = RANGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SliderThumb';\n\ntype SliderThumbElement = SliderThumbImplElement;\ninterface SliderThumbProps extends Omit {}\n\nconst SliderThumb = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const getItems = useCollection(props.__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node));\n const index = React.useMemo(\n () => (thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1),\n [getItems, thumb]\n );\n return ;\n }\n);\n\ntype SliderThumbImplElement = React.ElementRef;\ninterface SliderThumbImplProps extends PrimitiveSpanProps {\n index: number;\n name?: string;\n}\n\nconst SliderThumbImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSlider, index, name, ...thumbProps } = props;\n const context = useSliderContext(THUMB_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_NAME, __scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node));\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = thumb ? Boolean(thumb.closest('form')) : true;\n const size = useSize(thumb);\n // We cast because index could be `-1` which would return undefined\n const value = context.values[index] as number | undefined;\n const percent =\n value === undefined ? 0 : convertValueToPercentage(value, context.min, context.max);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize\n ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction)\n : 0;\n\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n\n return (\n \n \n {\n context.valueIndexToChangeRef.current = index;\n })}\n />\n \n\n {isFormControl && (\n 1 ? '[]' : '') : undefined)\n }\n value={value}\n />\n )}\n \n );\n }\n);\n\nSliderThumb.displayName = THUMB_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst BubbleInput = (props: React.ComponentPropsWithoutRef<'input'>) => {\n const { value, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevValue = usePrevious(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor;\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event('input', { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n * wrap it will not be able to access its value via the FormData API.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programatic\n * dispatch a duplicate and it will get swallowed.\n */\n return ;\n};\n\nfunction getNextSortedValues(prevValues: number[] = [], nextValue: number, atIndex: number) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\n\nfunction convertValueToPercentage(value: number, min: number, max: number) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\n\n/**\n * Returns a label for each thumb when there are two or more thumbs\n */\nfunction getLabel(index: number, totalValues: number) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return ['Minimum', 'Maximum'][index];\n } else {\n return undefined;\n }\n}\n\n/**\n * Given a `values` array and a `nextValue`, determine which value in\n * the array is closest to `nextValue` and return its index.\n *\n * @example\n * // returns 1\n * getClosestValueIndex([10, 30], 25);\n */\nfunction getClosestValueIndex(values: number[], nextValue: number) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\n\n/**\n * Offsets the thumb centre point while sliding to ensure it remains\n * within the bounds of the slider when reaching the edges\n */\nfunction getThumbInBoundsOffset(width: number, left: number, direction: number) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\n\n/**\n * Gets an array of steps between each value.\n *\n * @example\n * // returns [1, 9]\n * getStepsBetweenValues([10, 11, 20]);\n */\nfunction getStepsBetweenValues(values: number[]) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\n\n/**\n * Verifies the minimum steps between all values is greater than or equal\n * to the expected minimum steps.\n *\n * @example\n * // returns false\n * hasMinStepsBetweenValues([1,2,3], 2);\n *\n * @example\n * // returns true\n * hasMinStepsBetweenValues([1,2,3], 1);\n */\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input: readonly [number, number], output: readonly [number, number]) {\n return (value: number) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\n\nfunction getDecimalCount(value: number) {\n return (String(value).split('.')[1] || '').length;\n}\n\nfunction roundValue(value: number, decimalCount: number) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\n\nconst Root = Slider;\nconst Track = SliderTrack;\nconst Range = SliderRange;\nconst Thumb = SliderThumb;\n\nexport {\n createSliderScope,\n //\n Slider,\n SliderTrack,\n SliderRange,\n SliderThumb,\n //\n Root,\n Track,\n Range,\n Thumb,\n};\nexport type { SliderProps, SliderTrackProps, SliderRangeProps, SliderThumbProps };\n"], - "mappings": "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", + "sourcesContent": ["import * as React from 'react';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { createCollection } from '@radix-ui/react-collection';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\nconst ARROW_KEYS = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'];\n\ntype SlideDirection = 'from-left' | 'from-right' | 'from-bottom' | 'from-top';\nconst BACK_KEYS: Record = {\n 'from-left': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n 'from-right': ['Home', 'PageDown', 'ArrowDown', 'ArrowRight'],\n 'from-bottom': ['Home', 'PageDown', 'ArrowDown', 'ArrowLeft'],\n 'from-top': ['Home', 'PageDown', 'ArrowUp', 'ArrowLeft'],\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Slider\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLIDER_NAME = 'Slider';\n\nconst [Collection, useCollection, createCollectionScope] =\n createCollection(SLIDER_NAME);\n\ntype ScopedProps

= P & { __scopeSlider?: Scope };\nconst [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope,\n]);\n\ntype SliderContextValue = {\n name: string | undefined;\n disabled: boolean | undefined;\n min: number;\n max: number;\n values: number[];\n valueIndexToChangeRef: React.MutableRefObject;\n thumbs: Set;\n orientation: SliderProps['orientation'];\n form: string | undefined;\n};\n\nconst [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\n\ntype SliderElement = SliderHorizontalElement | SliderVerticalElement;\ninterface SliderProps\n extends Omit<\n SliderHorizontalProps | SliderVerticalProps,\n keyof SliderOrientationPrivateProps | 'defaultValue'\n > {\n name?: string;\n disabled?: boolean;\n orientation?: React.AriaAttributes['aria-orientation'];\n dir?: Direction;\n min?: number;\n max?: number;\n step?: number;\n minStepsBetweenThumbs?: number;\n value?: number[];\n defaultValue?: number[];\n onValueChange?(value: number[]): void;\n onValueCommit?(value: number[]): void;\n inverted?: boolean;\n form?: string;\n}\n\nconst Slider = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = 'horizontal',\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {},\n onValueCommit = () => {},\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isHorizontal = orientation === 'horizontal';\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus();\n onValueChange(value);\n },\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n\n function handleSlideStart(value: number) {\n const closestIndex = getClosestValueIndex(values, value);\n updateValues(value, closestIndex);\n }\n\n function handleSlideMove(value: number) {\n updateValues(value, valueIndexToChangeRef.current);\n }\n\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n\n function updateValues(value: number, atIndex: number, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n\n return (\n \n \n \n {\n if (!disabled) valuesBeforeSlideStartRef.current = values;\n })}\n min={min}\n max={max}\n inverted={inverted}\n onSlideStart={disabled ? undefined : handleSlideStart}\n onSlideMove={disabled ? undefined : handleSlideMove}\n onSlideEnd={disabled ? undefined : handleSlideEnd}\n onHomeKeyDown={() => !disabled && updateValues(min, 0, { commit: true })}\n onEndKeyDown={() =>\n !disabled && updateValues(max, values.length - 1, { commit: true })\n }\n onStepKeyDown={({ event, direction: stepDirection }) => {\n if (!disabled) {\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.includes(event.key));\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value = values[atIndex];\n const stepInDirection = step * multiplier * stepDirection;\n updateValues(value + stepInDirection, atIndex, { commit: true });\n }\n }}\n />\n \n \n \n );\n }\n);\n\nSlider.displayName = SLIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderHorizontal\n * -----------------------------------------------------------------------------------------------*/\n\ntype Side = 'top' | 'right' | 'bottom' | 'left';\n\nconst [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext<{\n startEdge: Side;\n endEdge: Side;\n size: keyof NonNullable>;\n direction: number;\n}>(SLIDER_NAME, {\n startEdge: 'left',\n endEdge: 'right',\n size: 'width',\n direction: 1,\n});\n\ntype SliderOrientationPrivateProps = {\n min: number;\n max: number;\n inverted: boolean;\n onSlideStart?(value: number): void;\n onSlideMove?(value: number): void;\n onSlideEnd?(): void;\n onHomeKeyDown(event: React.KeyboardEvent): void;\n onEndKeyDown(event: React.KeyboardEvent): void;\n onStepKeyDown(step: { event: React.KeyboardEvent; direction: number }): void;\n};\ninterface SliderOrientationProps\n extends Omit,\n SliderOrientationPrivateProps {}\n\ntype SliderHorizontalElement = SliderImplElement;\ninterface SliderHorizontalProps extends SliderOrientationProps {\n dir?: Direction;\n}\n\nconst SliderHorizontal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setSlider(node));\n const rectRef = React.useRef();\n const direction = useDirection(dir);\n const isDirectionLTR = direction === 'ltr';\n const isSlidingFromLeft = (isDirectionLTR && !inverted) || (!isDirectionLTR && inverted);\n\n function getValueFromPointer(pointerPosition: number) {\n const rect = rectRef.current || slider!.getBoundingClientRect();\n const input: [number, number] = [0, rect.width];\n const output: [number, number] = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n\n return (\n \n {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n }}\n onSlideMove={(event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n }}\n onSlideEnd={() => {\n rectRef.current = undefined;\n onSlideEnd?.();\n }}\n onStepKeyDown={(event) => {\n const slideDirection = isSlidingFromLeft ? 'from-left' : 'from-right';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }}\n />\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderVertical\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderVerticalElement = SliderImplElement;\ninterface SliderVerticalProps extends SliderOrientationProps {}\n\nconst SliderVertical = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef();\n const isSlidingFromBottom = !inverted;\n\n function getValueFromPointer(pointerPosition: number) {\n const rect = rectRef.current || sliderRef.current!.getBoundingClientRect();\n const input: [number, number] = [0, rect.height];\n const output: [number, number] = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n\n return (\n \n {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n }}\n onSlideMove={(event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n }}\n onSlideEnd={() => {\n rectRef.current = undefined;\n onSlideEnd?.();\n }}\n onStepKeyDown={(event) => {\n const slideDirection = isSlidingFromBottom ? 'from-bottom' : 'from-top';\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }}\n />\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderImpl\n * -----------------------------------------------------------------------------------------------*/\n\ntype SliderImplElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ntype SliderImplPrivateProps = {\n onSlideStart(event: React.PointerEvent): void;\n onSlideMove(event: React.PointerEvent): void;\n onSlideEnd(event: React.PointerEvent): void;\n onHomeKeyDown(event: React.KeyboardEvent): void;\n onEndKeyDown(event: React.KeyboardEvent): void;\n onStepKeyDown(event: React.KeyboardEvent): void;\n};\ninterface SliderImplProps extends PrimitiveDivProps, SliderImplPrivateProps {}\n\nconst SliderImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n\n return (\n {\n if (event.key === 'Home') {\n onHomeKeyDown(event);\n // Prevent scrolling to page start\n event.preventDefault();\n } else if (event.key === 'End') {\n onEndKeyDown(event);\n // Prevent scrolling to page end\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n // Prevent scrolling for directional key presses\n event.preventDefault();\n }\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target as HTMLElement;\n target.setPointerCapture(event.pointerId);\n // Prevent browser focus behaviour because we focus a thumb manually when values change.\n event.preventDefault();\n // Touch devices have a delay before focusing so won't focus if touch immediately moves\n // away from target (sliding). We want thumb to focus regardless.\n if (context.thumbs.has(target)) {\n target.focus();\n } else {\n onSlideStart(event);\n }\n })}\n onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n })}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })}\n />\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * SliderTrack\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRACK_NAME = 'SliderTrack';\n\ntype SliderTrackElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface SliderTrackProps extends PrimitiveSpanProps {}\n\nconst SliderTrack = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return (\n \n );\n }\n);\n\nSliderTrack.displayName = TRACK_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderRange\n * -----------------------------------------------------------------------------------------------*/\n\nconst RANGE_NAME = 'SliderRange';\n\ntype SliderRangeElement = React.ElementRef;\ninterface SliderRangeProps extends PrimitiveSpanProps {}\n\nconst SliderRange = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map((value) =>\n convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n\n return (\n \n );\n }\n);\n\nSliderRange.displayName = RANGE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SliderThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SliderThumb';\n\ntype SliderThumbElement = SliderThumbImplElement;\ninterface SliderThumbProps extends Omit {}\n\nconst SliderThumb = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const getItems = useCollection(props.__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node));\n const index = React.useMemo(\n () => (thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1),\n [getItems, thumb]\n );\n return ;\n }\n);\n\ntype SliderThumbImplElement = React.ElementRef;\ninterface SliderThumbImplProps extends PrimitiveSpanProps {\n index: number;\n name?: string;\n}\n\nconst SliderThumbImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSlider, index, name, ...thumbProps } = props;\n const context = useSliderContext(THUMB_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_NAME, __scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setThumb(node));\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = thumb ? context.form || !!thumb.closest('form') : true;\n const size = useSize(thumb);\n // We cast because index could be `-1` which would return undefined\n const value = context.values[index] as number | undefined;\n const percent =\n value === undefined ? 0 : convertValueToPercentage(value, context.min, context.max);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize\n ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction)\n : 0;\n\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n\n return (\n \n \n {\n context.valueIndexToChangeRef.current = index;\n })}\n />\n \n\n {isFormControl && (\n 1 ? '[]' : '') : undefined)\n }\n form={context.form}\n value={value}\n />\n )}\n \n );\n }\n);\n\nSliderThumb.displayName = THUMB_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst BubbleInput = (props: React.ComponentPropsWithoutRef<'input'>) => {\n const { value, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevValue = usePrevious(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'value') as PropertyDescriptor;\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event('input', { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully do not use `type=\"hidden\"` here otherwise forms that\n * wrap it will not be able to access its value via the FormData API.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programmatically and bubble to any parent form `onChange` event.\n * Adding the `value` will cause React to consider the programmatic\n * dispatch a duplicate and it will get swallowed.\n */\n return ;\n};\n\nfunction getNextSortedValues(prevValues: number[] = [], nextValue: number, atIndex: number) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\n\nfunction convertValueToPercentage(value: number, min: number, max: number) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\n\n/**\n * Returns a label for each thumb when there are two or more thumbs\n */\nfunction getLabel(index: number, totalValues: number) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return ['Minimum', 'Maximum'][index];\n } else {\n return undefined;\n }\n}\n\n/**\n * Given a `values` array and a `nextValue`, determine which value in\n * the array is closest to `nextValue` and return its index.\n *\n * @example\n * // returns 1\n * getClosestValueIndex([10, 30], 25);\n */\nfunction getClosestValueIndex(values: number[], nextValue: number) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\n\n/**\n * Offsets the thumb centre point while sliding to ensure it remains\n * within the bounds of the slider when reaching the edges\n */\nfunction getThumbInBoundsOffset(width: number, left: number, direction: number) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\n\n/**\n * Gets an array of steps between each value.\n *\n * @example\n * // returns [1, 9]\n * getStepsBetweenValues([10, 11, 20]);\n */\nfunction getStepsBetweenValues(values: number[]) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\n\n/**\n * Verifies the minimum steps between all values is greater than or equal\n * to the expected minimum steps.\n *\n * @example\n * // returns false\n * hasMinStepsBetweenValues([1,2,3], 2);\n *\n * @example\n * // returns true\n * hasMinStepsBetweenValues([1,2,3], 1);\n */\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nfunction linearScale(input: readonly [number, number], output: readonly [number, number]) {\n return (value: number) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\n\nfunction getDecimalCount(value: number) {\n return (String(value).split('.')[1] || '').length;\n}\n\nfunction roundValue(value: number, decimalCount: number) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\n\nconst Root = Slider;\nconst Track = SliderTrack;\nconst Range = SliderRange;\nconst Thumb = SliderThumb;\n\nexport {\n createSliderScope,\n //\n Slider,\n SliderTrack,\n SliderRange,\n SliderThumb,\n //\n Root,\n Track,\n Range,\n Thumb,\n};\nexport type { SliderProps, SliderTrackProps, SliderRangeProps, SliderThumbProps };\n"], + "mappings": "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", "names": ["value"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-switch.js b/node_modules/.vite/deps/@radix-ui_react-switch.js index 4b369ddb..de3b63bd 100644 --- a/node_modules/.vite/deps/@radix-ui_react-switch.js +++ b/node_modules/.vite/deps/@radix-ui_react-switch.js @@ -4,16 +4,14 @@ import { } from "./chunk-DDW565K2.js"; import { useSize -} from "./chunk-MR3TNHRB.js"; +} from "./chunk-AJMUNMLZ.js"; import { useControllableState -} from "./chunk-H4VE5LV5.js"; +} from "./chunk-I6MWER2B.js"; import { + composeEventHandlers, createContextScope -} from "./chunk-OAV3HHWW.js"; -import { - composeEventHandlers -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -48,12 +46,13 @@ var Switch = React.forwardRef( disabled, value = "on", onCheckedChange, + form, ...switchProps } = props; const [button, setButton] = React.useState(null); const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node)); const hasConsumerStoppedPropagationRef = React.useRef(false); - const isFormControl = button ? Boolean(button.closest("form")) : true; + const isFormControl = button ? form || !!button.closest("form") : true; const [checked = false, setChecked] = useControllableState({ prop: checkedProp, defaultProp: defaultChecked, @@ -92,6 +91,7 @@ var Switch = React.forwardRef( checked, required, disabled, + form, style: { transform: "translateX(-100%)" } } ) diff --git a/node_modules/.vite/deps/@radix-ui_react-switch.js.map b/node_modules/.vite/deps/@radix-ui_react-switch.js.map index 936a683e..7b52a6b1 100644 --- a/node_modules/.vite/deps/@radix-ui_react-switch.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-switch.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../@radix-ui/react-switch/src/Switch.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Switch\n * -----------------------------------------------------------------------------------------------*/\n\nconst SWITCH_NAME = 'Switch';\n\ntype ScopedProps

= P & { __scopeSwitch?: Scope };\nconst [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\n\ntype SwitchContextValue = { checked: boolean; disabled?: boolean };\nconst [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\n\ntype SwitchElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface SwitchProps extends PrimitiveButtonProps {\n checked?: boolean;\n defaultChecked?: boolean;\n required?: boolean;\n onCheckedChange?(checked: boolean): void;\n}\n\nconst Switch = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = 'on',\n onCheckedChange,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? Boolean(button.closest('form')) : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange,\n });\n\n return (\n \n {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if switch is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect switch updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n \n )}\n \n );\n }\n);\n\nSwitch.displayName = SWITCH_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SwitchThumb';\n\ntype SwitchThumbElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface SwitchThumbProps extends PrimitiveSpanProps {}\n\nconst SwitchThumb = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return (\n \n );\n }\n);\n\nSwitchThumb.displayName = THUMB_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit {\n checked: boolean;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n \n );\n};\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Switch;\nconst Thumb = SwitchThumb;\n\nexport {\n createSwitchScope,\n //\n Switch,\n SwitchThumb,\n //\n Root,\n Thumb,\n};\nexport type { SwitchProps, SwitchThumbProps };\n"], - "mappings": "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", + "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Switch\n * -----------------------------------------------------------------------------------------------*/\n\nconst SWITCH_NAME = 'Switch';\n\ntype ScopedProps

= P & { __scopeSwitch?: Scope };\nconst [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\n\ntype SwitchContextValue = { checked: boolean; disabled?: boolean };\nconst [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\n\ntype SwitchElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface SwitchProps extends PrimitiveButtonProps {\n checked?: boolean;\n defaultChecked?: boolean;\n required?: boolean;\n onCheckedChange?(checked: boolean): void;\n}\n\nconst Switch = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = 'on',\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? form || !!button.closest('form') : true;\n const [checked = false, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked,\n onChange: onCheckedChange,\n });\n\n return (\n \n {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if switch is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect switch updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n \n )}\n \n );\n }\n);\n\nSwitch.displayName = SWITCH_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SwitchThumb';\n\ntype SwitchThumbElement = React.ElementRef;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef;\ninterface SwitchThumbProps extends PrimitiveSpanProps {}\n\nconst SwitchThumb = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return (\n \n );\n }\n);\n\nSwitchThumb.displayName = THUMB_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype InputProps = React.ComponentPropsWithoutRef<'input'>;\ninterface BubbleInputProps extends Omit {\n checked: boolean;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst BubbleInput = (props: BubbleInputProps) => {\n const { control, checked, bubbles = true, ...inputProps } = props;\n const ref = React.useRef(null);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current!;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, 'checked') as PropertyDescriptor;\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n \n );\n};\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Switch;\nconst Thumb = SwitchThumb;\n\nexport {\n createSwitchScope,\n //\n Switch,\n SwitchThumb,\n //\n Root,\n Thumb,\n};\nexport type { SwitchProps, SwitchThumbProps };\n"], + "mappings": "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", "names": [] } diff --git a/node_modules/.vite/deps/@radix-ui_react-tabs.js b/node_modules/.vite/deps/@radix-ui_react-tabs.js index ccfd37df..0c2683ef 100644 --- a/node_modules/.vite/deps/@radix-ui_react-tabs.js +++ b/node_modules/.vite/deps/@radix-ui_react-tabs.js @@ -3,26 +3,24 @@ import { Item, Root, createRovingFocusGroupScope -} from "./chunk-ENGL2KVA.js"; +} from "./chunk-5ZUJRVG4.js"; import "./chunk-6SPNF6KQ.js"; -import { - useId -} from "./chunk-5I6CIHEW.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; import { useDirection } from "./chunk-O2UA4OQB.js"; +import { + useId +} from "./chunk-ZZUMGTHG.js"; import { Presence -} from "./chunk-TZDCYJOT.js"; +} from "./chunk-MZLEVI2I.js"; import { + useControllableState +} from "./chunk-I6MWER2B.js"; +import { + composeEventHandlers, createContextScope -} from "./chunk-OAV3HHWW.js"; -import { - composeEventHandlers -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; diff --git a/node_modules/.vite/deps/@radix-ui_react-tabs.js.map b/node_modules/.vite/deps/@radix-ui_react-tabs.js.map index 2eabff19..f27b45f9 100644 --- a/node_modules/.vite/deps/@radix-ui_react-tabs.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-tabs.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../@radix-ui/react-tabs/src/Tabs.tsx"], "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Tabs\n * -----------------------------------------------------------------------------------------------*/\n\nconst TABS_NAME = 'Tabs';\n\ntype ScopedProps

= P & { __scopeTabs?: Scope };\nconst [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope,\n]);\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype TabsContextValue = {\n baseId: string;\n value?: string;\n onValueChange: (value: string) => void;\n orientation?: TabsProps['orientation'];\n dir?: TabsProps['dir'];\n activationMode?: TabsProps['activationMode'];\n};\n\nconst [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\n\ntype TabsElement = React.ElementRef;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface TabsProps extends PrimitiveDivProps {\n /** The value for the selected tab, if controlled */\n value?: string;\n /** The value of the tab to select by default, if uncontrolled */\n defaultValue?: string;\n /** A function called when a new tab is selected */\n onValueChange?: (value: string) => void;\n /**\n * The orientation the tabs are layed out.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n * @defaultValue horizontal\n */\n orientation?: RovingFocusGroupProps['orientation'];\n /**\n * The direction of navigation between toolbar items.\n */\n dir?: RovingFocusGroupProps['dir'];\n /**\n * Whether a tab is activated automatically or manually.\n * @defaultValue automatic\n * */\n activationMode?: 'automatic' | 'manual';\n}\n\nconst Tabs = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = 'horizontal',\n dir,\n activationMode = 'automatic',\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue,\n });\n\n return (\n \n \n \n );\n }\n);\n\nTabs.displayName = TABS_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst TAB_LIST_NAME = 'TabsList';\n\ntype TabsListElement = React.ElementRef;\ninterface TabsListProps extends PrimitiveDivProps {\n loop?: RovingFocusGroupProps['loop'];\n}\n\nconst TabsList = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return (\n \n \n \n );\n }\n);\n\nTabsList.displayName = TAB_LIST_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TabsTrigger';\n\ntype TabsTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface TabsTriggerProps extends PrimitiveButtonProps {\n value: string;\n}\n\nconst TabsTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return (\n \n {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n // prevent focus to avoid accidental activation\n event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if ([' ', 'Enter'].includes(event.key)) context.onValueChange(value);\n })}\n onFocus={composeEventHandlers(props.onFocus, () => {\n // handle \"automatic\" activation if necessary\n // ie. activate tab following focus\n const isAutomaticActivation = context.activationMode !== 'manual';\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })}\n />\n \n );\n }\n);\n\nTabsTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TabsContent';\n\ntype TabsContentElement = React.ElementRef;\ninterface TabsContentProps extends PrimitiveDivProps {\n value: string;\n\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TabsContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n return () => cancelAnimationFrame(rAF);\n }, []);\n\n return (\n \n {({ present }) => (\n \n );\n }\n);\n\nTabsContent.displayName = CONTENT_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nfunction makeTriggerId(baseId: string, value: string) {\n return `${baseId}-trigger-${value}`;\n}\n\nfunction makeContentId(baseId: string, value: string) {\n return `${baseId}-content-${value}`;\n}\n\nconst Root = Tabs;\nconst List = TabsList;\nconst Trigger = TabsTrigger;\nconst Content = TabsContent;\n\nexport {\n createTabsScope,\n //\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n //\n Root,\n List,\n Trigger,\n Content,\n};\nexport type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps };\n"], - "mappings": "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", + "mappings": "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", "names": ["Root"] } diff --git a/node_modules/.vite/deps/@radix-ui_react-toast.js b/node_modules/.vite/deps/@radix-ui_react-toast.js deleted file mode 100644 index 714adf39..00000000 --- a/node_modules/.vite/deps/@radix-ui_react-toast.js +++ /dev/null @@ -1,908 +0,0 @@ -"use client"; -import { - VisuallyHidden -} from "./chunk-3GV3KT4M.js"; -import { - createCollection -} from "./chunk-6SPNF6KQ.js"; -import { - useEscapeKeydown -} from "./chunk-J3JCCWF4.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; -import { - Presence -} from "./chunk-TZDCYJOT.js"; -import { - createContextScope -} from "./chunk-OAV3HHWW.js"; -import { - composeEventHandlers, - useCallbackRef, - useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; -import { - Primitive, - dispatchDiscreteCustomEvent -} from "./chunk-H55D7VYG.js"; -import { - require_react_dom -} from "./chunk-R6S4VRB5.js"; -import { - useComposedRefs -} from "./chunk-4WIT4MX7.js"; -import { - require_jsx_runtime -} from "./chunk-S77I6LSE.js"; -import { - require_react -} from "./chunk-3TFVT2CW.js"; -import { - __toESM -} from "./chunk-4MBMRILA.js"; - -// node_modules/@radix-ui/react-toast/dist/index.mjs -var React3 = __toESM(require_react(), 1); -var ReactDOM2 = __toESM(require_react_dom(), 1); - -// node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs -var React = __toESM(require_react(), 1); -var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); -var DISMISSABLE_LAYER_NAME = "DismissableLayer"; -var CONTEXT_UPDATE = "dismissableLayer.update"; -var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside"; -var FOCUS_OUTSIDE = "dismissableLayer.focusOutside"; -var originalBodyPointerEvents; -var DismissableLayerContext = React.createContext({ - layers: /* @__PURE__ */ new Set(), - layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), - branches: /* @__PURE__ */ new Set() -}); -var DismissableLayer = React.forwardRef( - (props, forwardedRef) => { - const { - disableOutsidePointerEvents = false, - onEscapeKeyDown, - onPointerDownOutside, - onFocusOutside, - onInteractOutside, - onDismiss, - ...layerProps - } = props; - const context = React.useContext(DismissableLayerContext); - const [node, setNode] = React.useState(null); - const ownerDocument = (node == null ? void 0 : node.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document); - const [, force] = React.useState({}); - const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)); - const layers = Array.from(context.layers); - const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); - const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); - const index = node ? layers.indexOf(node) : -1; - const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0; - const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex; - const pointerDownOutside = usePointerDownOutside((event) => { - const target = event.target; - const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target)); - if (!isPointerEventsEnabled || isPointerDownOnBranch) return; - onPointerDownOutside == null ? void 0 : onPointerDownOutside(event); - onInteractOutside == null ? void 0 : onInteractOutside(event); - if (!event.defaultPrevented) onDismiss == null ? void 0 : onDismiss(); - }, ownerDocument); - const focusOutside = useFocusOutside((event) => { - const target = event.target; - const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target)); - if (isFocusInBranch) return; - onFocusOutside == null ? void 0 : onFocusOutside(event); - onInteractOutside == null ? void 0 : onInteractOutside(event); - if (!event.defaultPrevented) onDismiss == null ? void 0 : onDismiss(); - }, ownerDocument); - useEscapeKeydown((event) => { - const isHighestLayer = index === context.layers.size - 1; - if (!isHighestLayer) return; - onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(event); - if (!event.defaultPrevented && onDismiss) { - event.preventDefault(); - onDismiss(); - } - }, ownerDocument); - React.useEffect(() => { - if (!node) return; - if (disableOutsidePointerEvents) { - if (context.layersWithOutsidePointerEventsDisabled.size === 0) { - originalBodyPointerEvents = ownerDocument.body.style.pointerEvents; - ownerDocument.body.style.pointerEvents = "none"; - } - context.layersWithOutsidePointerEventsDisabled.add(node); - } - context.layers.add(node); - dispatchUpdate(); - return () => { - if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) { - ownerDocument.body.style.pointerEvents = originalBodyPointerEvents; - } - }; - }, [node, ownerDocument, disableOutsidePointerEvents, context]); - React.useEffect(() => { - return () => { - if (!node) return; - context.layers.delete(node); - context.layersWithOutsidePointerEventsDisabled.delete(node); - dispatchUpdate(); - }; - }, [node, context]); - React.useEffect(() => { - const handleUpdate = () => force({}); - document.addEventListener(CONTEXT_UPDATE, handleUpdate); - return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate); - }, []); - return (0, import_jsx_runtime.jsx)( - Primitive.div, - { - ...layerProps, - ref: composedRefs, - style: { - pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0, - ...props.style - }, - onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture), - onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture), - onPointerDownCapture: composeEventHandlers( - props.onPointerDownCapture, - pointerDownOutside.onPointerDownCapture - ) - } - ); - } -); -DismissableLayer.displayName = DISMISSABLE_LAYER_NAME; -var BRANCH_NAME = "DismissableLayerBranch"; -var DismissableLayerBranch = React.forwardRef((props, forwardedRef) => { - const context = React.useContext(DismissableLayerContext); - const ref = React.useRef(null); - const composedRefs = useComposedRefs(forwardedRef, ref); - React.useEffect(() => { - const node = ref.current; - if (node) { - context.branches.add(node); - return () => { - context.branches.delete(node); - }; - } - }, [context.branches]); - return (0, import_jsx_runtime.jsx)(Primitive.div, { ...props, ref: composedRefs }); -}); -DismissableLayerBranch.displayName = BRANCH_NAME; -function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const handlePointerDownOutside = useCallbackRef(onPointerDownOutside); - const isPointerInsideReactTreeRef = React.useRef(false); - const handleClickRef = React.useRef(() => { - }); - React.useEffect(() => { - const handlePointerDown = (event) => { - if (event.target && !isPointerInsideReactTreeRef.current) { - let handleAndDispatchPointerDownOutsideEvent2 = function() { - handleAndDispatchCustomEvent( - POINTER_DOWN_OUTSIDE, - handlePointerDownOutside, - eventDetail, - { discrete: true } - ); - }; - var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2; - const eventDetail = { originalEvent: event }; - if (event.pointerType === "touch") { - ownerDocument.removeEventListener("click", handleClickRef.current); - handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2; - ownerDocument.addEventListener("click", handleClickRef.current, { once: true }); - } else { - handleAndDispatchPointerDownOutsideEvent2(); - } - } else { - ownerDocument.removeEventListener("click", handleClickRef.current); - } - isPointerInsideReactTreeRef.current = false; - }; - const timerId = window.setTimeout(() => { - ownerDocument.addEventListener("pointerdown", handlePointerDown); - }, 0); - return () => { - window.clearTimeout(timerId); - ownerDocument.removeEventListener("pointerdown", handlePointerDown); - ownerDocument.removeEventListener("click", handleClickRef.current); - }; - }, [ownerDocument, handlePointerDownOutside]); - return { - // ensures we check React component tree (not just DOM tree) - onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true - }; -} -function useFocusOutside(onFocusOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const handleFocusOutside = useCallbackRef(onFocusOutside); - const isFocusInsideReactTreeRef = React.useRef(false); - React.useEffect(() => { - const handleFocus = (event) => { - if (event.target && !isFocusInsideReactTreeRef.current) { - const eventDetail = { originalEvent: event }; - handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, { - discrete: false - }); - } - }; - ownerDocument.addEventListener("focusin", handleFocus); - return () => ownerDocument.removeEventListener("focusin", handleFocus); - }, [ownerDocument, handleFocusOutside]); - return { - onFocusCapture: () => isFocusInsideReactTreeRef.current = true, - onBlurCapture: () => isFocusInsideReactTreeRef.current = false - }; -} -function dispatchUpdate() { - const event = new CustomEvent(CONTEXT_UPDATE); - document.dispatchEvent(event); -} -function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) { - const target = detail.originalEvent.target; - const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail }); - if (handler) target.addEventListener(name, handler, { once: true }); - if (discrete) { - dispatchDiscreteCustomEvent(target, event); - } else { - target.dispatchEvent(event); - } -} -var Root = DismissableLayer; -var Branch = DismissableLayerBranch; - -// node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-portal/dist/index.mjs -var React2 = __toESM(require_react(), 1); -var import_react_dom = __toESM(require_react_dom(), 1); -var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); -var PORTAL_NAME = "Portal"; -var Portal = React2.forwardRef((props, forwardedRef) => { - var _a; - const { container: containerProp, ...portalProps } = props; - const [mounted, setMounted] = React2.useState(false); - useLayoutEffect2(() => setMounted(true), []); - const container = containerProp || mounted && ((_a = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a.body); - return container ? import_react_dom.default.createPortal((0, import_jsx_runtime2.jsx)(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null; -}); -Portal.displayName = PORTAL_NAME; - -// node_modules/@radix-ui/react-toast/dist/index.mjs -var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); -var PROVIDER_NAME = "ToastProvider"; -var [Collection, useCollection, createCollectionScope] = createCollection("Toast"); -var [createToastContext, createToastScope] = createContextScope("Toast", [createCollectionScope]); -var [ToastProviderProvider, useToastProviderContext] = createToastContext(PROVIDER_NAME); -var ToastProvider = (props) => { - const { - __scopeToast, - label = "Notification", - duration = 5e3, - swipeDirection = "right", - swipeThreshold = 50, - children - } = props; - const [viewport, setViewport] = React3.useState(null); - const [toastCount, setToastCount] = React3.useState(0); - const isFocusedToastEscapeKeyDownRef = React3.useRef(false); - const isClosePausedRef = React3.useRef(false); - if (!label.trim()) { - console.error( - `Invalid prop \`label\` supplied to \`${PROVIDER_NAME}\`. Expected non-empty \`string\`.` - ); - } - return (0, import_jsx_runtime3.jsx)(Collection.Provider, { scope: __scopeToast, children: (0, import_jsx_runtime3.jsx)( - ToastProviderProvider, - { - scope: __scopeToast, - label, - duration, - swipeDirection, - swipeThreshold, - toastCount, - viewport, - onViewportChange: setViewport, - onToastAdd: React3.useCallback(() => setToastCount((prevCount) => prevCount + 1), []), - onToastRemove: React3.useCallback(() => setToastCount((prevCount) => prevCount - 1), []), - isFocusedToastEscapeKeyDownRef, - isClosePausedRef, - children - } - ) }); -}; -ToastProvider.displayName = PROVIDER_NAME; -var VIEWPORT_NAME = "ToastViewport"; -var VIEWPORT_DEFAULT_HOTKEY = ["F8"]; -var VIEWPORT_PAUSE = "toast.viewportPause"; -var VIEWPORT_RESUME = "toast.viewportResume"; -var ToastViewport = React3.forwardRef( - (props, forwardedRef) => { - const { - __scopeToast, - hotkey = VIEWPORT_DEFAULT_HOTKEY, - label = "Notifications ({hotkey})", - ...viewportProps - } = props; - const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast); - const getItems = useCollection(__scopeToast); - const wrapperRef = React3.useRef(null); - const headFocusProxyRef = React3.useRef(null); - const tailFocusProxyRef = React3.useRef(null); - const ref = React3.useRef(null); - const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange); - const hotkeyLabel = hotkey.join("+").replace(/Key/g, "").replace(/Digit/g, ""); - const hasToasts = context.toastCount > 0; - React3.useEffect(() => { - const handleKeyDown = (event) => { - var _a; - const isHotkeyPressed = hotkey.every((key) => event[key] || event.code === key); - if (isHotkeyPressed) (_a = ref.current) == null ? void 0 : _a.focus(); - }; - document.addEventListener("keydown", handleKeyDown); - return () => document.removeEventListener("keydown", handleKeyDown); - }, [hotkey]); - React3.useEffect(() => { - const wrapper = wrapperRef.current; - const viewport = ref.current; - if (hasToasts && wrapper && viewport) { - const handlePause = () => { - if (!context.isClosePausedRef.current) { - const pauseEvent = new CustomEvent(VIEWPORT_PAUSE); - viewport.dispatchEvent(pauseEvent); - context.isClosePausedRef.current = true; - } - }; - const handleResume = () => { - if (context.isClosePausedRef.current) { - const resumeEvent = new CustomEvent(VIEWPORT_RESUME); - viewport.dispatchEvent(resumeEvent); - context.isClosePausedRef.current = false; - } - }; - const handleFocusOutResume = (event) => { - const isFocusMovingOutside = !wrapper.contains(event.relatedTarget); - if (isFocusMovingOutside) handleResume(); - }; - const handlePointerLeaveResume = () => { - const isFocusInside = wrapper.contains(document.activeElement); - if (!isFocusInside) handleResume(); - }; - wrapper.addEventListener("focusin", handlePause); - wrapper.addEventListener("focusout", handleFocusOutResume); - wrapper.addEventListener("pointermove", handlePause); - wrapper.addEventListener("pointerleave", handlePointerLeaveResume); - window.addEventListener("blur", handlePause); - window.addEventListener("focus", handleResume); - return () => { - wrapper.removeEventListener("focusin", handlePause); - wrapper.removeEventListener("focusout", handleFocusOutResume); - wrapper.removeEventListener("pointermove", handlePause); - wrapper.removeEventListener("pointerleave", handlePointerLeaveResume); - window.removeEventListener("blur", handlePause); - window.removeEventListener("focus", handleResume); - }; - } - }, [hasToasts, context.isClosePausedRef]); - const getSortedTabbableCandidates = React3.useCallback( - ({ tabbingDirection }) => { - const toastItems = getItems(); - const tabbableCandidates = toastItems.map((toastItem) => { - const toastNode = toastItem.ref.current; - const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)]; - return tabbingDirection === "forwards" ? toastTabbableCandidates : toastTabbableCandidates.reverse(); - }); - return (tabbingDirection === "forwards" ? tabbableCandidates.reverse() : tabbableCandidates).flat(); - }, - [getItems] - ); - React3.useEffect(() => { - const viewport = ref.current; - if (viewport) { - const handleKeyDown = (event) => { - var _a, _b, _c; - const isMetaKey = event.altKey || event.ctrlKey || event.metaKey; - const isTabKey = event.key === "Tab" && !isMetaKey; - if (isTabKey) { - const focusedElement = document.activeElement; - const isTabbingBackwards = event.shiftKey; - const targetIsViewport = event.target === viewport; - if (targetIsViewport && isTabbingBackwards) { - (_a = headFocusProxyRef.current) == null ? void 0 : _a.focus(); - return; - } - const tabbingDirection = isTabbingBackwards ? "backwards" : "forwards"; - const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection }); - const index = sortedCandidates.findIndex((candidate) => candidate === focusedElement); - if (focusFirst(sortedCandidates.slice(index + 1))) { - event.preventDefault(); - } else { - isTabbingBackwards ? (_b = headFocusProxyRef.current) == null ? void 0 : _b.focus() : (_c = tailFocusProxyRef.current) == null ? void 0 : _c.focus(); - } - } - }; - viewport.addEventListener("keydown", handleKeyDown); - return () => viewport.removeEventListener("keydown", handleKeyDown); - } - }, [getItems, getSortedTabbableCandidates]); - return (0, import_jsx_runtime3.jsxs)( - Branch, - { - ref: wrapperRef, - role: "region", - "aria-label": label.replace("{hotkey}", hotkeyLabel), - tabIndex: -1, - style: { pointerEvents: hasToasts ? void 0 : "none" }, - children: [ - hasToasts && (0, import_jsx_runtime3.jsx)( - FocusProxy, - { - ref: headFocusProxyRef, - onFocusFromOutsideViewport: () => { - const tabbableCandidates = getSortedTabbableCandidates({ - tabbingDirection: "forwards" - }); - focusFirst(tabbableCandidates); - } - } - ), - (0, import_jsx_runtime3.jsx)(Collection.Slot, { scope: __scopeToast, children: (0, import_jsx_runtime3.jsx)(Primitive.ol, { tabIndex: -1, ...viewportProps, ref: composedRefs }) }), - hasToasts && (0, import_jsx_runtime3.jsx)( - FocusProxy, - { - ref: tailFocusProxyRef, - onFocusFromOutsideViewport: () => { - const tabbableCandidates = getSortedTabbableCandidates({ - tabbingDirection: "backwards" - }); - focusFirst(tabbableCandidates); - } - } - ) - ] - } - ); - } -); -ToastViewport.displayName = VIEWPORT_NAME; -var FOCUS_PROXY_NAME = "ToastFocusProxy"; -var FocusProxy = React3.forwardRef( - (props, forwardedRef) => { - const { __scopeToast, onFocusFromOutsideViewport, ...proxyProps } = props; - const context = useToastProviderContext(FOCUS_PROXY_NAME, __scopeToast); - return (0, import_jsx_runtime3.jsx)( - VisuallyHidden, - { - "aria-hidden": true, - tabIndex: 0, - ...proxyProps, - ref: forwardedRef, - style: { position: "fixed" }, - onFocus: (event) => { - var _a; - const prevFocusedElement = event.relatedTarget; - const isFocusFromOutsideViewport = !((_a = context.viewport) == null ? void 0 : _a.contains(prevFocusedElement)); - if (isFocusFromOutsideViewport) onFocusFromOutsideViewport(); - } - } - ); - } -); -FocusProxy.displayName = FOCUS_PROXY_NAME; -var TOAST_NAME = "Toast"; -var TOAST_SWIPE_START = "toast.swipeStart"; -var TOAST_SWIPE_MOVE = "toast.swipeMove"; -var TOAST_SWIPE_CANCEL = "toast.swipeCancel"; -var TOAST_SWIPE_END = "toast.swipeEnd"; -var Toast = React3.forwardRef( - (props, forwardedRef) => { - const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props; - const [open = true, setOpen] = useControllableState({ - prop: openProp, - defaultProp: defaultOpen, - onChange: onOpenChange - }); - return (0, import_jsx_runtime3.jsx)(Presence, { present: forceMount || open, children: (0, import_jsx_runtime3.jsx)( - ToastImpl, - { - open, - ...toastProps, - ref: forwardedRef, - onClose: () => setOpen(false), - onPause: useCallbackRef(props.onPause), - onResume: useCallbackRef(props.onResume), - onSwipeStart: composeEventHandlers(props.onSwipeStart, (event) => { - event.currentTarget.setAttribute("data-swipe", "start"); - }), - onSwipeMove: composeEventHandlers(props.onSwipeMove, (event) => { - const { x, y } = event.detail.delta; - event.currentTarget.setAttribute("data-swipe", "move"); - event.currentTarget.style.setProperty("--radix-toast-swipe-move-x", `${x}px`); - event.currentTarget.style.setProperty("--radix-toast-swipe-move-y", `${y}px`); - }), - onSwipeCancel: composeEventHandlers(props.onSwipeCancel, (event) => { - event.currentTarget.setAttribute("data-swipe", "cancel"); - event.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"); - event.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"); - event.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"); - event.currentTarget.style.removeProperty("--radix-toast-swipe-end-y"); - }), - onSwipeEnd: composeEventHandlers(props.onSwipeEnd, (event) => { - const { x, y } = event.detail.delta; - event.currentTarget.setAttribute("data-swipe", "end"); - event.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"); - event.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"); - event.currentTarget.style.setProperty("--radix-toast-swipe-end-x", `${x}px`); - event.currentTarget.style.setProperty("--radix-toast-swipe-end-y", `${y}px`); - setOpen(false); - }) - } - ) }); - } -); -Toast.displayName = TOAST_NAME; -var [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(TOAST_NAME, { - onClose() { - } -}); -var ToastImpl = React3.forwardRef( - (props, forwardedRef) => { - const { - __scopeToast, - type = "foreground", - duration: durationProp, - open, - onClose, - onEscapeKeyDown, - onPause, - onResume, - onSwipeStart, - onSwipeMove, - onSwipeCancel, - onSwipeEnd, - ...toastProps - } = props; - const context = useToastProviderContext(TOAST_NAME, __scopeToast); - const [node, setNode] = React3.useState(null); - const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)); - const pointerStartRef = React3.useRef(null); - const swipeDeltaRef = React3.useRef(null); - const duration = durationProp || context.duration; - const closeTimerStartTimeRef = React3.useRef(0); - const closeTimerRemainingTimeRef = React3.useRef(duration); - const closeTimerRef = React3.useRef(0); - const { onToastAdd, onToastRemove } = context; - const handleClose = useCallbackRef(() => { - var _a; - const isFocusInToast = node == null ? void 0 : node.contains(document.activeElement); - if (isFocusInToast) (_a = context.viewport) == null ? void 0 : _a.focus(); - onClose(); - }); - const startTimer = React3.useCallback( - (duration2) => { - if (!duration2 || duration2 === Infinity) return; - window.clearTimeout(closeTimerRef.current); - closeTimerStartTimeRef.current = (/* @__PURE__ */ new Date()).getTime(); - closeTimerRef.current = window.setTimeout(handleClose, duration2); - }, - [handleClose] - ); - React3.useEffect(() => { - const viewport = context.viewport; - if (viewport) { - const handleResume = () => { - startTimer(closeTimerRemainingTimeRef.current); - onResume == null ? void 0 : onResume(); - }; - const handlePause = () => { - const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef.current; - closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime; - window.clearTimeout(closeTimerRef.current); - onPause == null ? void 0 : onPause(); - }; - viewport.addEventListener(VIEWPORT_PAUSE, handlePause); - viewport.addEventListener(VIEWPORT_RESUME, handleResume); - return () => { - viewport.removeEventListener(VIEWPORT_PAUSE, handlePause); - viewport.removeEventListener(VIEWPORT_RESUME, handleResume); - }; - } - }, [context.viewport, duration, onPause, onResume, startTimer]); - React3.useEffect(() => { - if (open && !context.isClosePausedRef.current) startTimer(duration); - }, [open, duration, context.isClosePausedRef, startTimer]); - React3.useEffect(() => { - onToastAdd(); - return () => onToastRemove(); - }, [onToastAdd, onToastRemove]); - const announceTextContent = React3.useMemo(() => { - return node ? getAnnounceTextContent(node) : null; - }, [node]); - if (!context.viewport) return null; - return (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [ - announceTextContent && (0, import_jsx_runtime3.jsx)( - ToastAnnounce, - { - __scopeToast, - role: "status", - "aria-live": type === "foreground" ? "assertive" : "polite", - "aria-atomic": true, - children: announceTextContent - } - ), - (0, import_jsx_runtime3.jsx)(ToastInteractiveProvider, { scope: __scopeToast, onClose: handleClose, children: ReactDOM2.createPortal( - (0, import_jsx_runtime3.jsx)(Collection.ItemSlot, { scope: __scopeToast, children: (0, import_jsx_runtime3.jsx)( - Root, - { - asChild: true, - onEscapeKeyDown: composeEventHandlers(onEscapeKeyDown, () => { - if (!context.isFocusedToastEscapeKeyDownRef.current) handleClose(); - context.isFocusedToastEscapeKeyDownRef.current = false; - }), - children: (0, import_jsx_runtime3.jsx)( - Primitive.li, - { - role: "status", - "aria-live": "off", - "aria-atomic": true, - tabIndex: 0, - "data-state": open ? "open" : "closed", - "data-swipe-direction": context.swipeDirection, - ...toastProps, - ref: composedRefs, - style: { userSelect: "none", touchAction: "none", ...props.style }, - onKeyDown: composeEventHandlers(props.onKeyDown, (event) => { - if (event.key !== "Escape") return; - onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(event.nativeEvent); - if (!event.nativeEvent.defaultPrevented) { - context.isFocusedToastEscapeKeyDownRef.current = true; - handleClose(); - } - }), - onPointerDown: composeEventHandlers(props.onPointerDown, (event) => { - if (event.button !== 0) return; - pointerStartRef.current = { x: event.clientX, y: event.clientY }; - }), - onPointerMove: composeEventHandlers(props.onPointerMove, (event) => { - if (!pointerStartRef.current) return; - const x = event.clientX - pointerStartRef.current.x; - const y = event.clientY - pointerStartRef.current.y; - const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current); - const isHorizontalSwipe = ["left", "right"].includes(context.swipeDirection); - const clamp = ["left", "up"].includes(context.swipeDirection) ? Math.min : Math.max; - const clampedX = isHorizontalSwipe ? clamp(0, x) : 0; - const clampedY = !isHorizontalSwipe ? clamp(0, y) : 0; - const moveStartBuffer = event.pointerType === "touch" ? 10 : 2; - const delta = { x: clampedX, y: clampedY }; - const eventDetail = { originalEvent: event, delta }; - if (hasSwipeMoveStarted) { - swipeDeltaRef.current = delta; - handleAndDispatchCustomEvent2(TOAST_SWIPE_MOVE, onSwipeMove, eventDetail, { - discrete: false - }); - } else if (isDeltaInDirection(delta, context.swipeDirection, moveStartBuffer)) { - swipeDeltaRef.current = delta; - handleAndDispatchCustomEvent2(TOAST_SWIPE_START, onSwipeStart, eventDetail, { - discrete: false - }); - event.target.setPointerCapture(event.pointerId); - } else if (Math.abs(x) > moveStartBuffer || Math.abs(y) > moveStartBuffer) { - pointerStartRef.current = null; - } - }), - onPointerUp: composeEventHandlers(props.onPointerUp, (event) => { - const delta = swipeDeltaRef.current; - const target = event.target; - if (target.hasPointerCapture(event.pointerId)) { - target.releasePointerCapture(event.pointerId); - } - swipeDeltaRef.current = null; - pointerStartRef.current = null; - if (delta) { - const toast = event.currentTarget; - const eventDetail = { originalEvent: event, delta }; - if (isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)) { - handleAndDispatchCustomEvent2(TOAST_SWIPE_END, onSwipeEnd, eventDetail, { - discrete: true - }); - } else { - handleAndDispatchCustomEvent2( - TOAST_SWIPE_CANCEL, - onSwipeCancel, - eventDetail, - { - discrete: true - } - ); - } - toast.addEventListener("click", (event2) => event2.preventDefault(), { - once: true - }); - } - }) - } - ) - } - ) }), - context.viewport - ) }) - ] }); - } -); -var ToastAnnounce = (props) => { - const { __scopeToast, children, ...announceProps } = props; - const context = useToastProviderContext(TOAST_NAME, __scopeToast); - const [renderAnnounceText, setRenderAnnounceText] = React3.useState(false); - const [isAnnounced, setIsAnnounced] = React3.useState(false); - useNextFrame(() => setRenderAnnounceText(true)); - React3.useEffect(() => { - const timer = window.setTimeout(() => setIsAnnounced(true), 1e3); - return () => window.clearTimeout(timer); - }, []); - return isAnnounced ? null : (0, import_jsx_runtime3.jsx)(Portal, { asChild: true, children: (0, import_jsx_runtime3.jsx)(VisuallyHidden, { ...announceProps, children: renderAnnounceText && (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [ - context.label, - " ", - children - ] }) }) }); -}; -var TITLE_NAME = "ToastTitle"; -var ToastTitle = React3.forwardRef( - (props, forwardedRef) => { - const { __scopeToast, ...titleProps } = props; - return (0, import_jsx_runtime3.jsx)(Primitive.div, { ...titleProps, ref: forwardedRef }); - } -); -ToastTitle.displayName = TITLE_NAME; -var DESCRIPTION_NAME = "ToastDescription"; -var ToastDescription = React3.forwardRef( - (props, forwardedRef) => { - const { __scopeToast, ...descriptionProps } = props; - return (0, import_jsx_runtime3.jsx)(Primitive.div, { ...descriptionProps, ref: forwardedRef }); - } -); -ToastDescription.displayName = DESCRIPTION_NAME; -var ACTION_NAME = "ToastAction"; -var ToastAction = React3.forwardRef( - (props, forwardedRef) => { - const { altText, ...actionProps } = props; - if (!altText.trim()) { - console.error( - `Invalid prop \`altText\` supplied to \`${ACTION_NAME}\`. Expected non-empty \`string\`.` - ); - return null; - } - return (0, import_jsx_runtime3.jsx)(ToastAnnounceExclude, { altText, asChild: true, children: (0, import_jsx_runtime3.jsx)(ToastClose, { ...actionProps, ref: forwardedRef }) }); - } -); -ToastAction.displayName = ACTION_NAME; -var CLOSE_NAME = "ToastClose"; -var ToastClose = React3.forwardRef( - (props, forwardedRef) => { - const { __scopeToast, ...closeProps } = props; - const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast); - return (0, import_jsx_runtime3.jsx)(ToastAnnounceExclude, { asChild: true, children: (0, import_jsx_runtime3.jsx)( - Primitive.button, - { - type: "button", - ...closeProps, - ref: forwardedRef, - onClick: composeEventHandlers(props.onClick, interactiveContext.onClose) - } - ) }); - } -); -ToastClose.displayName = CLOSE_NAME; -var ToastAnnounceExclude = React3.forwardRef((props, forwardedRef) => { - const { __scopeToast, altText, ...announceExcludeProps } = props; - return (0, import_jsx_runtime3.jsx)( - Primitive.div, - { - "data-radix-toast-announce-exclude": "", - "data-radix-toast-announce-alt": altText || void 0, - ...announceExcludeProps, - ref: forwardedRef - } - ); -}); -function getAnnounceTextContent(container) { - const textContent = []; - const childNodes = Array.from(container.childNodes); - childNodes.forEach((node) => { - if (node.nodeType === node.TEXT_NODE && node.textContent) textContent.push(node.textContent); - if (isHTMLElement(node)) { - const isHidden = node.ariaHidden || node.hidden || node.style.display === "none"; - const isExcluded = node.dataset.radixToastAnnounceExclude === ""; - if (!isHidden) { - if (isExcluded) { - const altText = node.dataset.radixToastAnnounceAlt; - if (altText) textContent.push(altText); - } else { - textContent.push(...getAnnounceTextContent(node)); - } - } - } - }); - return textContent; -} -function handleAndDispatchCustomEvent2(name, handler, detail, { discrete }) { - const currentTarget = detail.originalEvent.currentTarget; - const event = new CustomEvent(name, { bubbles: true, cancelable: true, detail }); - if (handler) currentTarget.addEventListener(name, handler, { once: true }); - if (discrete) { - dispatchDiscreteCustomEvent(currentTarget, event); - } else { - currentTarget.dispatchEvent(event); - } -} -var isDeltaInDirection = (delta, direction, threshold = 0) => { - const deltaX = Math.abs(delta.x); - const deltaY = Math.abs(delta.y); - const isDeltaX = deltaX > deltaY; - if (direction === "left" || direction === "right") { - return isDeltaX && deltaX > threshold; - } else { - return !isDeltaX && deltaY > threshold; - } -}; -function useNextFrame(callback = () => { -}) { - const fn = useCallbackRef(callback); - useLayoutEffect2(() => { - let raf1 = 0; - let raf2 = 0; - raf1 = window.requestAnimationFrame(() => raf2 = window.requestAnimationFrame(fn)); - return () => { - window.cancelAnimationFrame(raf1); - window.cancelAnimationFrame(raf2); - }; - }, [fn]); -} -function isHTMLElement(node) { - return node.nodeType === node.ELEMENT_NODE; -} -function getTabbableCandidates(container) { - const nodes = []; - const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, { - acceptNode: (node) => { - const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden"; - if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP; - return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; - } - }); - while (walker.nextNode()) nodes.push(walker.currentNode); - return nodes; -} -function focusFirst(candidates) { - const previouslyFocusedElement = document.activeElement; - return candidates.some((candidate) => { - if (candidate === previouslyFocusedElement) return true; - candidate.focus(); - return document.activeElement !== previouslyFocusedElement; - }); -} -var Provider = ToastProvider; -var Viewport = ToastViewport; -var Root2 = Toast; -var Title = ToastTitle; -var Description = ToastDescription; -var Action = ToastAction; -var Close = ToastClose; -export { - Action, - Close, - Description, - Provider, - Root2 as Root, - Title, - Toast, - ToastAction, - ToastClose, - ToastDescription, - ToastProvider, - ToastTitle, - ToastViewport, - Viewport, - createToastScope -}; -//# sourceMappingURL=@radix-ui_react-toast.js.map diff --git a/node_modules/.vite/deps/@radix-ui_react-toast.js.map b/node_modules/.vite/deps/@radix-ui_react-toast.js.map deleted file mode 100644 index 7c5c3c98..00000000 --- a/node_modules/.vite/deps/@radix-ui_react-toast.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/react-toast/src/Toast.tsx", "../../@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx", "../../@radix-ui/react-toast/node_modules/@radix-ui/react-portal/src/Portal.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { createContextScope } from '@radix-ui/react-context';\nimport * as DismissableLayer from '@radix-ui/react-dismissable-layer';\nimport { Portal } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { VisuallyHidden } from '@radix-ui/react-visually-hidden';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * ToastProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst PROVIDER_NAME = 'ToastProvider';\n\nconst [Collection, useCollection, createCollectionScope] = createCollection('Toast');\n\ntype SwipeDirection = 'up' | 'down' | 'left' | 'right';\ntype ToastProviderContextValue = {\n label: string;\n duration: number;\n swipeDirection: SwipeDirection;\n swipeThreshold: number;\n toastCount: number;\n viewport: ToastViewportElement | null;\n onViewportChange(viewport: ToastViewportElement): void;\n onToastAdd(): void;\n onToastRemove(): void;\n isFocusedToastEscapeKeyDownRef: React.MutableRefObject;\n isClosePausedRef: React.MutableRefObject;\n};\n\ntype ScopedProps

= P & { __scopeToast?: Scope };\nconst [createToastContext, createToastScope] = createContextScope('Toast', [createCollectionScope]);\nconst [ToastProviderProvider, useToastProviderContext] =\n createToastContext(PROVIDER_NAME);\n\ninterface ToastProviderProps {\n children?: React.ReactNode;\n /**\n * An author-localized label for each toast. Used to help screen reader users\n * associate the interruption with a toast.\n * @defaultValue 'Notification'\n */\n label?: string;\n /**\n * Time in milliseconds that each toast should remain visible for.\n * @defaultValue 5000\n */\n duration?: number;\n /**\n * Direction of pointer swipe that should close the toast.\n * @defaultValue 'right'\n */\n swipeDirection?: SwipeDirection;\n /**\n * Distance in pixels that the swipe must pass before a close is triggered.\n * @defaultValue 50\n */\n swipeThreshold?: number;\n}\n\nconst ToastProvider: React.FC = (props: ScopedProps) => {\n const {\n __scopeToast,\n label = 'Notification',\n duration = 5000,\n swipeDirection = 'right',\n swipeThreshold = 50,\n children,\n } = props;\n const [viewport, setViewport] = React.useState(null);\n const [toastCount, setToastCount] = React.useState(0);\n const isFocusedToastEscapeKeyDownRef = React.useRef(false);\n const isClosePausedRef = React.useRef(false);\n\n if (!label.trim()) {\n console.error(\n `Invalid prop \\`label\\` supplied to \\`${PROVIDER_NAME}\\`. Expected non-empty \\`string\\`.`\n );\n }\n\n return (\n \n setToastCount((prevCount) => prevCount + 1), [])}\n onToastRemove={React.useCallback(() => setToastCount((prevCount) => prevCount - 1), [])}\n isFocusedToastEscapeKeyDownRef={isFocusedToastEscapeKeyDownRef}\n isClosePausedRef={isClosePausedRef}\n >\n {children}\n \n \n );\n};\n\nToastProvider.displayName = PROVIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ToastViewport\n * -----------------------------------------------------------------------------------------------*/\n\nconst VIEWPORT_NAME = 'ToastViewport';\nconst VIEWPORT_DEFAULT_HOTKEY = ['F8'];\nconst VIEWPORT_PAUSE = 'toast.viewportPause';\nconst VIEWPORT_RESUME = 'toast.viewportResume';\n\ntype ToastViewportElement = React.ElementRef;\ntype PrimitiveOrderedListProps = React.ComponentPropsWithoutRef;\ninterface ToastViewportProps extends PrimitiveOrderedListProps {\n /**\n * The keys to use as the keyboard shortcut that will move focus to the toast viewport.\n * @defaultValue ['F8']\n */\n hotkey?: string[];\n /**\n * An author-localized label for the toast viewport to provide context for screen reader users\n * when navigating page landmarks. The available `{hotkey}` placeholder will be replaced for you.\n * @defaultValue 'Notifications ({hotkey})'\n */\n label?: string;\n}\n\nconst ToastViewport = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeToast,\n hotkey = VIEWPORT_DEFAULT_HOTKEY,\n label = 'Notifications ({hotkey})',\n ...viewportProps\n } = props;\n const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast);\n const getItems = useCollection(__scopeToast);\n const wrapperRef = React.useRef(null);\n const headFocusProxyRef = React.useRef(null);\n const tailFocusProxyRef = React.useRef(null);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const hasToasts = context.toastCount > 0;\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n // we use `event.code` as it is consistent regardless of meta keys that were pressed.\n // for example, `event.key` for `Control+Alt+t` is `\u2020` and `t !== \u2020`\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n if (isHotkeyPressed) ref.current?.focus();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n const wrapper = wrapperRef.current;\n const viewport = ref.current;\n if (hasToasts && wrapper && viewport) {\n const handlePause = () => {\n if (!context.isClosePausedRef.current) {\n const pauseEvent = new CustomEvent(VIEWPORT_PAUSE);\n viewport.dispatchEvent(pauseEvent);\n context.isClosePausedRef.current = true;\n }\n };\n\n const handleResume = () => {\n if (context.isClosePausedRef.current) {\n const resumeEvent = new CustomEvent(VIEWPORT_RESUME);\n viewport.dispatchEvent(resumeEvent);\n context.isClosePausedRef.current = false;\n }\n };\n\n const handleFocusOutResume = (event: FocusEvent) => {\n const isFocusMovingOutside = !wrapper.contains(event.relatedTarget as HTMLElement);\n if (isFocusMovingOutside) handleResume();\n };\n\n const handlePointerLeaveResume = () => {\n const isFocusInside = wrapper.contains(document.activeElement);\n if (!isFocusInside) handleResume();\n };\n\n // Toasts are not in the viewport React tree so we need to bind DOM events\n wrapper.addEventListener('focusin', handlePause);\n wrapper.addEventListener('focusout', handleFocusOutResume);\n wrapper.addEventListener('pointermove', handlePause);\n wrapper.addEventListener('pointerleave', handlePointerLeaveResume);\n window.addEventListener('blur', handlePause);\n window.addEventListener('focus', handleResume);\n return () => {\n wrapper.removeEventListener('focusin', handlePause);\n wrapper.removeEventListener('focusout', handleFocusOutResume);\n wrapper.removeEventListener('pointermove', handlePause);\n wrapper.removeEventListener('pointerleave', handlePointerLeaveResume);\n window.removeEventListener('blur', handlePause);\n window.removeEventListener('focus', handleResume);\n };\n }\n }, [hasToasts, context.isClosePausedRef]);\n\n const getSortedTabbableCandidates = React.useCallback(\n ({ tabbingDirection }: { tabbingDirection: 'forwards' | 'backwards' }) => {\n const toastItems = getItems();\n const tabbableCandidates = toastItems.map((toastItem) => {\n const toastNode = toastItem.ref.current!;\n const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)];\n return tabbingDirection === 'forwards'\n ? toastTabbableCandidates\n : toastTabbableCandidates.reverse();\n });\n return (\n tabbingDirection === 'forwards' ? tabbableCandidates.reverse() : tabbableCandidates\n ).flat();\n },\n [getItems]\n );\n\n React.useEffect(() => {\n const viewport = ref.current;\n // We programmatically manage tabbing as we are unable to influence\n // the source order with portals, this allows us to reverse the\n // tab order so that it runs from most recent toast to least\n if (viewport) {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isMetaKey = event.altKey || event.ctrlKey || event.metaKey;\n const isTabKey = event.key === 'Tab' && !isMetaKey;\n\n if (isTabKey) {\n const focusedElement = document.activeElement;\n const isTabbingBackwards = event.shiftKey;\n const targetIsViewport = event.target === viewport;\n\n // If we're back tabbing after jumping to the viewport then we simply\n // proxy focus out to the preceding document\n if (targetIsViewport && isTabbingBackwards) {\n headFocusProxyRef.current?.focus();\n return;\n }\n\n const tabbingDirection = isTabbingBackwards ? 'backwards' : 'forwards';\n const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection });\n const index = sortedCandidates.findIndex((candidate) => candidate === focusedElement);\n if (focusFirst(sortedCandidates.slice(index + 1))) {\n event.preventDefault();\n } else {\n // If we can't focus that means we're at the edges so we\n // proxy to the corresponding exit point and let the browser handle\n // tab/shift+tab keypress and implicitly pass focus to the next valid element in the document\n isTabbingBackwards\n ? headFocusProxyRef.current?.focus()\n : tailFocusProxyRef.current?.focus();\n }\n }\n };\n\n // Toasts are not in the viewport React tree so we need to bind DOM events\n viewport.addEventListener('keydown', handleKeyDown);\n return () => viewport.removeEventListener('keydown', handleKeyDown);\n }\n }, [getItems, getSortedTabbableCandidates]);\n\n return (\n \n {hasToasts && (\n {\n const tabbableCandidates = getSortedTabbableCandidates({\n tabbingDirection: 'forwards',\n });\n focusFirst(tabbableCandidates);\n }}\n />\n )}\n {/**\n * tabindex on the the list so that it can be focused when items are removed. we focus\n * the list instead of the viewport so it announces number of items remaining.\n */}\n \n \n \n {hasToasts && (\n {\n const tabbableCandidates = getSortedTabbableCandidates({\n tabbingDirection: 'backwards',\n });\n focusFirst(tabbableCandidates);\n }}\n />\n )}\n \n );\n }\n);\n\nToastViewport.displayName = VIEWPORT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_PROXY_NAME = 'ToastFocusProxy';\n\ntype FocusProxyElement = React.ElementRef;\ntype VisuallyHiddenProps = React.ComponentPropsWithoutRef;\ninterface FocusProxyProps extends VisuallyHiddenProps {\n onFocusFromOutsideViewport(): void;\n}\n\nconst FocusProxy = React.forwardRef>(\n (props, forwardedRef) => {\n const { __scopeToast, onFocusFromOutsideViewport, ...proxyProps } = props;\n const context = useToastProviderContext(FOCUS_PROXY_NAME, __scopeToast);\n\n return (\n {\n const prevFocusedElement = event.relatedTarget as HTMLElement | null;\n const isFocusFromOutsideViewport = !context.viewport?.contains(prevFocusedElement);\n if (isFocusFromOutsideViewport) onFocusFromOutsideViewport();\n }}\n />\n );\n }\n);\n\nFocusProxy.displayName = FOCUS_PROXY_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Toast\n * -----------------------------------------------------------------------------------------------*/\n\nconst TOAST_NAME = 'Toast';\nconst TOAST_SWIPE_START = 'toast.swipeStart';\nconst TOAST_SWIPE_MOVE = 'toast.swipeMove';\nconst TOAST_SWIPE_CANCEL = 'toast.swipeCancel';\nconst TOAST_SWIPE_END = 'toast.swipeEnd';\n\ntype ToastElement = ToastImplElement;\ninterface ToastProps extends Omit {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst Toast = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;\n const [open = true, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n return (\n \n setOpen(false)}\n onPause={useCallbackRef(props.onPause)}\n onResume={useCallbackRef(props.onResume)}\n onSwipeStart={composeEventHandlers(props.onSwipeStart, (event) => {\n event.currentTarget.setAttribute('data-swipe', 'start');\n })}\n onSwipeMove={composeEventHandlers(props.onSwipeMove, (event) => {\n const { x, y } = event.detail.delta;\n event.currentTarget.setAttribute('data-swipe', 'move');\n event.currentTarget.style.setProperty('--radix-toast-swipe-move-x', `${x}px`);\n event.currentTarget.style.setProperty('--radix-toast-swipe-move-y', `${y}px`);\n })}\n onSwipeCancel={composeEventHandlers(props.onSwipeCancel, (event) => {\n event.currentTarget.setAttribute('data-swipe', 'cancel');\n event.currentTarget.style.removeProperty('--radix-toast-swipe-move-x');\n event.currentTarget.style.removeProperty('--radix-toast-swipe-move-y');\n event.currentTarget.style.removeProperty('--radix-toast-swipe-end-x');\n event.currentTarget.style.removeProperty('--radix-toast-swipe-end-y');\n })}\n onSwipeEnd={composeEventHandlers(props.onSwipeEnd, (event) => {\n const { x, y } = event.detail.delta;\n event.currentTarget.setAttribute('data-swipe', 'end');\n event.currentTarget.style.removeProperty('--radix-toast-swipe-move-x');\n event.currentTarget.style.removeProperty('--radix-toast-swipe-move-y');\n event.currentTarget.style.setProperty('--radix-toast-swipe-end-x', `${x}px`);\n event.currentTarget.style.setProperty('--radix-toast-swipe-end-y', `${y}px`);\n setOpen(false);\n })}\n />\n \n );\n }\n);\n\nToast.displayName = TOAST_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype SwipeEvent = { currentTarget: EventTarget & ToastElement } & Omit<\n CustomEvent<{ originalEvent: React.PointerEvent; delta: { x: number; y: number } }>,\n 'currentTarget'\n>;\n\nconst [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(TOAST_NAME, {\n onClose() {},\n});\n\ntype ToastImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype ToastImplPrivateProps = { open: boolean; onClose(): void };\ntype PrimitiveListItemProps = React.ComponentPropsWithoutRef;\ninterface ToastImplProps extends ToastImplPrivateProps, PrimitiveListItemProps {\n type?: 'foreground' | 'background';\n /**\n * Time in milliseconds that toast should remain visible for. Overrides value\n * given to `ToastProvider`.\n */\n duration?: number;\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n onPause?(): void;\n onResume?(): void;\n onSwipeStart?(event: SwipeEvent): void;\n onSwipeMove?(event: SwipeEvent): void;\n onSwipeCancel?(event: SwipeEvent): void;\n onSwipeEnd?(event: SwipeEvent): void;\n}\n\nconst ToastImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeToast,\n type = 'foreground',\n duration: durationProp,\n open,\n onClose,\n onEscapeKeyDown,\n onPause,\n onResume,\n onSwipeStart,\n onSwipeMove,\n onSwipeCancel,\n onSwipeEnd,\n ...toastProps\n } = props;\n const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n const [node, setNode] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const swipeDeltaRef = React.useRef<{ x: number; y: number } | null>(null);\n const duration = durationProp || context.duration;\n const closeTimerStartTimeRef = React.useRef(0);\n const closeTimerRemainingTimeRef = React.useRef(duration);\n const closeTimerRef = React.useRef(0);\n const { onToastAdd, onToastRemove } = context;\n const handleClose = useCallbackRef(() => {\n // focus viewport if focus is within toast to read the remaining toast\n // count to SR users and ensure focus isn't lost\n const isFocusInToast = node?.contains(document.activeElement);\n if (isFocusInToast) context.viewport?.focus();\n onClose();\n });\n\n const startTimer = React.useCallback(\n (duration: number) => {\n if (!duration || duration === Infinity) return;\n window.clearTimeout(closeTimerRef.current);\n closeTimerStartTimeRef.current = new Date().getTime();\n closeTimerRef.current = window.setTimeout(handleClose, duration);\n },\n [handleClose]\n );\n\n React.useEffect(() => {\n const viewport = context.viewport;\n if (viewport) {\n const handleResume = () => {\n startTimer(closeTimerRemainingTimeRef.current);\n onResume?.();\n };\n const handlePause = () => {\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n window.clearTimeout(closeTimerRef.current);\n onPause?.();\n };\n viewport.addEventListener(VIEWPORT_PAUSE, handlePause);\n viewport.addEventListener(VIEWPORT_RESUME, handleResume);\n return () => {\n viewport.removeEventListener(VIEWPORT_PAUSE, handlePause);\n viewport.removeEventListener(VIEWPORT_RESUME, handleResume);\n };\n }\n }, [context.viewport, duration, onPause, onResume, startTimer]);\n\n // start timer when toast opens or duration changes.\n // we include `open` in deps because closed !== unmounted when animating\n // so it could reopen before being completely unmounted\n React.useEffect(() => {\n if (open && !context.isClosePausedRef.current) startTimer(duration);\n }, [open, duration, context.isClosePausedRef, startTimer]);\n\n React.useEffect(() => {\n onToastAdd();\n return () => onToastRemove();\n }, [onToastAdd, onToastRemove]);\n\n const announceTextContent = React.useMemo(() => {\n return node ? getAnnounceTextContent(node) : null;\n }, [node]);\n\n if (!context.viewport) return null;\n\n return (\n <>\n {announceTextContent && (\n \n {announceTextContent}\n \n )}\n\n \n {ReactDOM.createPortal(\n \n {\n if (!context.isFocusedToastEscapeKeyDownRef.current) handleClose();\n context.isFocusedToastEscapeKeyDownRef.current = false;\n })}\n >\n {\n if (event.key !== 'Escape') return;\n onEscapeKeyDown?.(event.nativeEvent);\n if (!event.nativeEvent.defaultPrevented) {\n context.isFocusedToastEscapeKeyDownRef.current = true;\n handleClose();\n }\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, (event) => {\n if (event.button !== 0) return;\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n })}\n onPointerMove={composeEventHandlers(props.onPointerMove, (event) => {\n if (!pointerStartRef.current) return;\n const x = event.clientX - pointerStartRef.current.x;\n const y = event.clientY - pointerStartRef.current.y;\n const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current);\n const isHorizontalSwipe = ['left', 'right'].includes(context.swipeDirection);\n const clamp = ['left', 'up'].includes(context.swipeDirection)\n ? Math.min\n : Math.max;\n const clampedX = isHorizontalSwipe ? clamp(0, x) : 0;\n const clampedY = !isHorizontalSwipe ? clamp(0, y) : 0;\n const moveStartBuffer = event.pointerType === 'touch' ? 10 : 2;\n const delta = { x: clampedX, y: clampedY };\n const eventDetail = { originalEvent: event, delta };\n if (hasSwipeMoveStarted) {\n swipeDeltaRef.current = delta;\n handleAndDispatchCustomEvent(TOAST_SWIPE_MOVE, onSwipeMove, eventDetail, {\n discrete: false,\n });\n } else if (isDeltaInDirection(delta, context.swipeDirection, moveStartBuffer)) {\n swipeDeltaRef.current = delta;\n handleAndDispatchCustomEvent(TOAST_SWIPE_START, onSwipeStart, eventDetail, {\n discrete: false,\n });\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n } else if (Math.abs(x) > moveStartBuffer || Math.abs(y) > moveStartBuffer) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n })}\n onPointerUp={composeEventHandlers(props.onPointerUp, (event) => {\n const delta = swipeDeltaRef.current;\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n swipeDeltaRef.current = null;\n pointerStartRef.current = null;\n if (delta) {\n const toast = event.currentTarget;\n const eventDetail = { originalEvent: event, delta };\n if (\n isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)\n ) {\n handleAndDispatchCustomEvent(TOAST_SWIPE_END, onSwipeEnd, eventDetail, {\n discrete: true,\n });\n } else {\n handleAndDispatchCustomEvent(\n TOAST_SWIPE_CANCEL,\n onSwipeCancel,\n eventDetail,\n {\n discrete: true,\n }\n );\n }\n // Prevent click event from triggering on items within the toast when\n // pointer up is part of a swipe gesture\n toast.addEventListener('click', (event) => event.preventDefault(), {\n once: true,\n });\n }\n })}\n />\n \n ,\n context.viewport\n )}\n \n \n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ninterface ToastAnnounceProps\n extends Omit, 'children'>,\n ScopedProps<{ children: string[] }> {}\n\nconst ToastAnnounce: React.FC = (props: ScopedProps) => {\n const { __scopeToast, children, ...announceProps } = props;\n const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n const [renderAnnounceText, setRenderAnnounceText] = React.useState(false);\n const [isAnnounced, setIsAnnounced] = React.useState(false);\n\n // render text content in the next frame to ensure toast is announced in NVDA\n useNextFrame(() => setRenderAnnounceText(true));\n\n // cleanup after announcing\n React.useEffect(() => {\n const timer = window.setTimeout(() => setIsAnnounced(true), 1000);\n return () => window.clearTimeout(timer);\n }, []);\n\n return isAnnounced ? null : (\n \n \n {renderAnnounceText && (\n <>\n {context.label} {children}\n \n )}\n \n \n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ToastTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'ToastTitle';\n\ntype ToastTitleElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface ToastTitleProps extends PrimitiveDivProps {}\n\nconst ToastTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeToast, ...titleProps } = props;\n return ;\n }\n);\n\nToastTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ToastDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'ToastDescription';\n\ntype ToastDescriptionElement = React.ElementRef;\ninterface ToastDescriptionProps extends PrimitiveDivProps {}\n\nconst ToastDescription = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeToast, ...descriptionProps } = props;\n return ;\n }\n);\n\nToastDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ToastAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'ToastAction';\n\ntype ToastActionElement = ToastCloseElement;\ninterface ToastActionProps extends ToastCloseProps {\n /**\n * A short description for an alternate way to carry out the action. For screen reader users\n * who will not be able to navigate to the button easily/quickly.\n * @example Upgrade\n * @example Undo\n */\n altText: string;\n}\n\nconst ToastAction = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { altText, ...actionProps } = props;\n\n if (!altText.trim()) {\n console.error(\n `Invalid prop \\`altText\\` supplied to \\`${ACTION_NAME}\\`. Expected non-empty \\`string\\`.`\n );\n return null;\n }\n\n return (\n \n \n \n );\n }\n);\n\nToastAction.displayName = ACTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * ToastClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'ToastClose';\n\ntype ToastCloseElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface ToastCloseProps extends PrimitiveButtonProps {}\n\nconst ToastClose = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeToast, ...closeProps } = props;\n const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast);\n\n return (\n \n \n \n );\n }\n);\n\nToastClose.displayName = CLOSE_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype ToastAnnounceExcludeElement = React.ElementRef;\ninterface ToastAnnounceExcludeProps extends PrimitiveDivProps {\n altText?: string;\n}\n\nconst ToastAnnounceExclude = React.forwardRef<\n ToastAnnounceExcludeElement,\n ToastAnnounceExcludeProps\n>((props: ScopedProps, forwardedRef) => {\n const { __scopeToast, altText, ...announceExcludeProps } = props;\n\n return (\n \n );\n});\n\nfunction getAnnounceTextContent(container: HTMLElement) {\n const textContent: string[] = [];\n const childNodes = Array.from(container.childNodes);\n\n childNodes.forEach((node) => {\n if (node.nodeType === node.TEXT_NODE && node.textContent) textContent.push(node.textContent);\n if (isHTMLElement(node)) {\n const isHidden = node.ariaHidden || node.hidden || node.style.display === 'none';\n const isExcluded = node.dataset.radixToastAnnounceExclude === '';\n\n if (!isHidden) {\n if (isExcluded) {\n const altText = node.dataset.radixToastAnnounceAlt;\n if (altText) textContent.push(altText);\n } else {\n textContent.push(...getAnnounceTextContent(node));\n }\n }\n }\n });\n\n // We return a collection of text rather than a single concatenated string.\n // This allows SR VO to naturally pause break between nodes while announcing.\n return textContent;\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\nfunction handleAndDispatchCustomEvent<\n E extends CustomEvent,\n ReactEvent extends React.SyntheticEvent\n>(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: ReactEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const currentTarget = detail.originalEvent.currentTarget as HTMLElement;\n const event = new CustomEvent(name, { bubbles: true, cancelable: true, detail });\n if (handler) currentTarget.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(currentTarget, event);\n } else {\n currentTarget.dispatchEvent(event);\n }\n}\n\nconst isDeltaInDirection = (\n delta: { x: number; y: number },\n direction: SwipeDirection,\n threshold = 0\n) => {\n const deltaX = Math.abs(delta.x);\n const deltaY = Math.abs(delta.y);\n const isDeltaX = deltaX > deltaY;\n if (direction === 'left' || direction === 'right') {\n return isDeltaX && deltaX > threshold;\n } else {\n return !isDeltaX && deltaY > threshold;\n }\n};\n\nfunction useNextFrame(callback = () => {}) {\n const fn = useCallbackRef(callback);\n useLayoutEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n raf1 = window.requestAnimationFrame(() => (raf2 = window.requestAnimationFrame(fn)));\n return () => {\n window.cancelAnimationFrame(raf1);\n window.cancelAnimationFrame(raf2);\n };\n }, [fn]);\n}\n\nfunction isHTMLElement(node: any): node is HTMLElement {\n return node.nodeType === node.ELEMENT_NODE;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\nfunction focusFirst(candidates: HTMLElement[]) {\n const previouslyFocusedElement = document.activeElement;\n return candidates.some((candidate) => {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === previouslyFocusedElement) return true;\n candidate.focus();\n return document.activeElement !== previouslyFocusedElement;\n });\n}\n\nconst Provider = ToastProvider;\nconst Viewport = ToastViewport;\nconst Root = Toast;\nconst Title = ToastTitle;\nconst Description = ToastDescription;\nconst Action = ToastAction;\nconst Close = ToastClose;\n\nexport {\n createToastScope,\n //\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastAction,\n ToastClose,\n //\n Provider,\n Viewport,\n Root,\n Title,\n Description,\n Action,\n Close,\n};\nexport type {\n ToastProviderProps,\n ToastViewportProps,\n ToastProps,\n ToastTitleProps,\n ToastDescriptionProps,\n ToastActionProps,\n ToastCloseProps,\n};\n", "import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set(),\n layersWithOutsidePointerEventsDisabled: new Set(),\n branches: new Set(),\n});\n\ntype DismissableLayerElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n \n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return ;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n", "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | null;\n}\n\nconst Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n"], - "mappings": "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", - "names": ["React", "ReactDOM", "node", "handleAndDispatchPointerDownOutsideEvent", "React", "import_jsx_runtime", "ReactDOM", "import_jsx_runtime", "node", "duration", "handleAndDispatchCustomEvent", "event", "Root"] -} diff --git a/node_modules/.vite/deps/@radix-ui_react-tooltip.js b/node_modules/.vite/deps/@radix-ui_react-tooltip.js index d58df378..f4ea5603 100644 --- a/node_modules/.vite/deps/@radix-ui_react-tooltip.js +++ b/node_modules/.vite/deps/@radix-ui_react-tooltip.js @@ -1,8 +1,4 @@ "use client"; -import { - DismissableLayer, - Portal -} from "./chunk-JV5O627A.js"; import { Root } from "./chunk-3GV3KT4M.js"; @@ -12,19 +8,25 @@ import { Content, Root2, createPopperScope -} from "./chunk-6UE7W7QM.js"; -import "./chunk-MR3TNHRB.js"; -import "./chunk-J3JCCWF4.js"; +} from "./chunk-HUHORXLV.js"; +import "./chunk-AJMUNMLZ.js"; +import { + DismissableLayer, + Portal +} from "./chunk-CSR2432P.js"; import { useId -} from "./chunk-5I6CIHEW.js"; +} from "./chunk-ZZUMGTHG.js"; +import { + Presence +} from "./chunk-MZLEVI2I.js"; import { useControllableState -} from "./chunk-H4VE5LV5.js"; +} from "./chunk-I6MWER2B.js"; import { composeEventHandlers, - useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; + createContextScope +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -44,200 +46,8 @@ import { } from "./chunk-4MBMRILA.js"; // node_modules/@radix-ui/react-tooltip/dist/index.mjs -var React4 = __toESM(require_react(), 1); - -// node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context/dist/index.mjs var React = __toESM(require_react(), 1); var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); -function createContextScope(scopeName, createContextScopeDeps = []) { - let defaultContexts = []; - function createContext3(rootComponentName, defaultContext) { - const BaseContext = React.createContext(defaultContext); - const index = defaultContexts.length; - defaultContexts = [...defaultContexts, defaultContext]; - const Provider2 = (props) => { - var _a; - const { scope, children, ...context } = props; - const Context = ((_a = scope == null ? void 0 : scope[scopeName]) == null ? void 0 : _a[index]) || BaseContext; - const value = React.useMemo(() => context, Object.values(context)); - return (0, import_jsx_runtime.jsx)(Context.Provider, { value, children }); - }; - Provider2.displayName = rootComponentName + "Provider"; - function useContext2(consumerName, scope) { - var _a; - const Context = ((_a = scope == null ? void 0 : scope[scopeName]) == null ? void 0 : _a[index]) || BaseContext; - const context = React.useContext(Context); - if (context) return context; - if (defaultContext !== void 0) return defaultContext; - throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); - } - return [Provider2, useContext2]; - } - const createScope = () => { - const scopeContexts = defaultContexts.map((defaultContext) => { - return React.createContext(defaultContext); - }); - return function useScope(scope) { - const contexts = (scope == null ? void 0 : scope[scopeName]) || scopeContexts; - return React.useMemo( - () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }), - [scope, contexts] - ); - }; - }; - createScope.scopeName = scopeName; - return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)]; -} -function composeContextScopes(...scopes) { - const baseScope = scopes[0]; - if (scopes.length === 1) return baseScope; - const createScope = () => { - const scopeHooks = scopes.map((createScope2) => ({ - useScope: createScope2(), - scopeName: createScope2.scopeName - })); - return function useComposedScopes(overrideScopes) { - const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => { - const scopeProps = useScope(overrideScopes); - const currentScope = scopeProps[`__scope${scopeName}`]; - return { ...nextScopes2, ...currentScope }; - }, {}); - return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]); - }; - }; - createScope.scopeName = baseScope.scopeName; - return createScope; -} - -// node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence/dist/index.mjs -var React2 = __toESM(require_react(), 1); -var React3 = __toESM(require_react(), 1); -function useStateMachine(initialState, machine) { - return React3.useReducer((state, event) => { - const nextState = machine[state][event]; - return nextState ?? state; - }, initialState); -} -var Presence = (props) => { - const { present, children } = props; - const presence = usePresence(present); - const child = typeof children === "function" ? children({ present: presence.isPresent }) : React2.Children.only(children); - const ref = useComposedRefs(presence.ref, getElementRef(child)); - const forceMount = typeof children === "function"; - return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null; -}; -Presence.displayName = "Presence"; -function usePresence(present) { - const [node, setNode] = React2.useState(); - const stylesRef = React2.useRef({}); - const prevPresentRef = React2.useRef(present); - const prevAnimationNameRef = React2.useRef("none"); - const initialState = present ? "mounted" : "unmounted"; - const [state, send] = useStateMachine(initialState, { - mounted: { - UNMOUNT: "unmounted", - ANIMATION_OUT: "unmountSuspended" - }, - unmountSuspended: { - MOUNT: "mounted", - ANIMATION_END: "unmounted" - }, - unmounted: { - MOUNT: "mounted" - } - }); - React2.useEffect(() => { - const currentAnimationName = getAnimationName(stylesRef.current); - prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none"; - }, [state]); - useLayoutEffect2(() => { - const styles = stylesRef.current; - const wasPresent = prevPresentRef.current; - const hasPresentChanged = wasPresent !== present; - if (hasPresentChanged) { - const prevAnimationName = prevAnimationNameRef.current; - const currentAnimationName = getAnimationName(styles); - if (present) { - send("MOUNT"); - } else if (currentAnimationName === "none" || (styles == null ? void 0 : styles.display) === "none") { - send("UNMOUNT"); - } else { - const isAnimating = prevAnimationName !== currentAnimationName; - if (wasPresent && isAnimating) { - send("ANIMATION_OUT"); - } else { - send("UNMOUNT"); - } - } - prevPresentRef.current = present; - } - }, [present, send]); - useLayoutEffect2(() => { - if (node) { - let timeoutId; - const ownerWindow = node.ownerDocument.defaultView ?? window; - const handleAnimationEnd = (event) => { - const currentAnimationName = getAnimationName(stylesRef.current); - const isCurrentAnimation = currentAnimationName.includes(event.animationName); - if (event.target === node && isCurrentAnimation) { - send("ANIMATION_END"); - if (!prevPresentRef.current) { - const currentFillMode = node.style.animationFillMode; - node.style.animationFillMode = "forwards"; - timeoutId = ownerWindow.setTimeout(() => { - if (node.style.animationFillMode === "forwards") { - node.style.animationFillMode = currentFillMode; - } - }); - } - } - }; - const handleAnimationStart = (event) => { - if (event.target === node) { - prevAnimationNameRef.current = getAnimationName(stylesRef.current); - } - }; - node.addEventListener("animationstart", handleAnimationStart); - node.addEventListener("animationcancel", handleAnimationEnd); - node.addEventListener("animationend", handleAnimationEnd); - return () => { - ownerWindow.clearTimeout(timeoutId); - node.removeEventListener("animationstart", handleAnimationStart); - node.removeEventListener("animationcancel", handleAnimationEnd); - node.removeEventListener("animationend", handleAnimationEnd); - }; - } else { - send("ANIMATION_END"); - } - }, [node, send]); - return { - isPresent: ["mounted", "unmountSuspended"].includes(state), - ref: React2.useCallback((node2) => { - if (node2) stylesRef.current = getComputedStyle(node2); - setNode(node2); - }, []) - }; -} -function getAnimationName(styles) { - return (styles == null ? void 0 : styles.animationName) || "none"; -} -function getElementRef(element) { - var _a, _b; - let getter = (_a = Object.getOwnPropertyDescriptor(element.props, "ref")) == null ? void 0 : _a.get; - let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; - if (mayWarn) { - return element.ref; - } - getter = (_b = Object.getOwnPropertyDescriptor(element, "ref")) == null ? void 0 : _b.get; - mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning; - if (mayWarn) { - return element.props.ref; - } - return element.props.ref || element.ref; -} - -// node_modules/@radix-ui/react-tooltip/dist/index.mjs -var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [ createPopperScope ]); @@ -254,24 +64,24 @@ var TooltipProvider = (props) => { disableHoverableContent = false, children } = props; - const [isOpenDelayed, setIsOpenDelayed] = React4.useState(true); - const isPointerInTransitRef = React4.useRef(false); - const skipDelayTimerRef = React4.useRef(0); - React4.useEffect(() => { + const [isOpenDelayed, setIsOpenDelayed] = React.useState(true); + const isPointerInTransitRef = React.useRef(false); + const skipDelayTimerRef = React.useRef(0); + React.useEffect(() => { const skipDelayTimer = skipDelayTimerRef.current; return () => window.clearTimeout(skipDelayTimer); }, []); - return (0, import_jsx_runtime2.jsx)( + return (0, import_jsx_runtime.jsx)( TooltipProviderContextProvider, { scope: __scopeTooltip, isOpenDelayed, delayDuration, - onOpen: React4.useCallback(() => { + onOpen: React.useCallback(() => { window.clearTimeout(skipDelayTimerRef.current); setIsOpenDelayed(false); }, []), - onClose: React4.useCallback(() => { + onClose: React.useCallback(() => { window.clearTimeout(skipDelayTimerRef.current); skipDelayTimerRef.current = window.setTimeout( () => setIsOpenDelayed(true), @@ -279,7 +89,7 @@ var TooltipProvider = (props) => { ); }, [skipDelayDuration]), isPointerInTransitRef, - onPointerInTransitChange: React4.useCallback((inTransit) => { + onPointerInTransitChange: React.useCallback((inTransit) => { isPointerInTransitRef.current = inTransit; }, []), disableHoverableContent, @@ -302,12 +112,12 @@ var Tooltip = (props) => { } = props; const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip); const popperScope = usePopperScope(__scopeTooltip); - const [trigger, setTrigger] = React4.useState(null); + const [trigger, setTrigger] = React.useState(null); const contentId = useId(); - const openTimerRef = React4.useRef(0); + const openTimerRef = React.useRef(0); const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent; const delayDuration = delayDurationProp ?? providerContext.delayDuration; - const wasOpenDelayedRef = React4.useRef(false); + const wasOpenDelayedRef = React.useRef(false); const [open = false, setOpen] = useControllableState({ prop: openProp, defaultProp: defaultOpen, @@ -321,21 +131,21 @@ var Tooltip = (props) => { onOpenChange == null ? void 0 : onOpenChange(open2); } }); - const stateAttribute = React4.useMemo(() => { + const stateAttribute = React.useMemo(() => { return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed"; }, [open]); - const handleOpen = React4.useCallback(() => { + const handleOpen = React.useCallback(() => { window.clearTimeout(openTimerRef.current); openTimerRef.current = 0; wasOpenDelayedRef.current = false; setOpen(true); }, [setOpen]); - const handleClose = React4.useCallback(() => { + const handleClose = React.useCallback(() => { window.clearTimeout(openTimerRef.current); openTimerRef.current = 0; setOpen(false); }, [setOpen]); - const handleDelayedOpen = React4.useCallback(() => { + const handleDelayedOpen = React.useCallback(() => { window.clearTimeout(openTimerRef.current); openTimerRef.current = window.setTimeout(() => { wasOpenDelayedRef.current = true; @@ -343,7 +153,7 @@ var Tooltip = (props) => { openTimerRef.current = 0; }, delayDuration); }, [delayDuration, setOpen]); - React4.useEffect(() => { + React.useEffect(() => { return () => { if (openTimerRef.current) { window.clearTimeout(openTimerRef.current); @@ -351,7 +161,7 @@ var Tooltip = (props) => { } }; }, []); - return (0, import_jsx_runtime2.jsx)(Root2, { ...popperScope, children: (0, import_jsx_runtime2.jsx)( + return (0, import_jsx_runtime.jsx)(Root2, { ...popperScope, children: (0, import_jsx_runtime.jsx)( TooltipContextProvider, { scope: __scopeTooltip, @@ -360,11 +170,11 @@ var Tooltip = (props) => { stateAttribute, trigger, onTriggerChange: setTrigger, - onTriggerEnter: React4.useCallback(() => { + onTriggerEnter: React.useCallback(() => { if (providerContext.isOpenDelayed) handleDelayedOpen(); else handleOpen(); }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen]), - onTriggerLeave: React4.useCallback(() => { + onTriggerLeave: React.useCallback(() => { if (disableHoverableContent) { handleClose(); } else { @@ -381,21 +191,21 @@ var Tooltip = (props) => { }; Tooltip.displayName = TOOLTIP_NAME; var TRIGGER_NAME = "TooltipTrigger"; -var TooltipTrigger = React4.forwardRef( +var TooltipTrigger = React.forwardRef( (props, forwardedRef) => { const { __scopeTooltip, ...triggerProps } = props; const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip); const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip); const popperScope = usePopperScope(__scopeTooltip); - const ref = React4.useRef(null); + const ref = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange); - const isPointerDownRef = React4.useRef(false); - const hasPointerMoveOpenedRef = React4.useRef(false); - const handlePointerUp = React4.useCallback(() => isPointerDownRef.current = false, []); - React4.useEffect(() => { + const isPointerDownRef = React.useRef(false); + const hasPointerMoveOpenedRef = React.useRef(false); + const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []); + React.useEffect(() => { return () => document.removeEventListener("pointerup", handlePointerUp); }, [handlePointerUp]); - return (0, import_jsx_runtime2.jsx)(Anchor, { asChild: true, ...popperScope, children: (0, import_jsx_runtime2.jsx)( + return (0, import_jsx_runtime.jsx)(Anchor, { asChild: true, ...popperScope, children: (0, import_jsx_runtime.jsx)( Primitive.button, { "aria-describedby": context.open ? context.contentId : void 0, @@ -434,32 +244,32 @@ var [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, { var TooltipPortal = (props) => { const { __scopeTooltip, forceMount, children, container } = props; const context = useTooltipContext(PORTAL_NAME, __scopeTooltip); - return (0, import_jsx_runtime2.jsx)(PortalProvider, { scope: __scopeTooltip, forceMount, children: (0, import_jsx_runtime2.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime2.jsx)(Portal, { asChild: true, container, children }) }) }); + return (0, import_jsx_runtime.jsx)(PortalProvider, { scope: __scopeTooltip, forceMount, children: (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime.jsx)(Portal, { asChild: true, container, children }) }) }); }; TooltipPortal.displayName = PORTAL_NAME; var CONTENT_NAME = "TooltipContent"; -var TooltipContent = React4.forwardRef( +var TooltipContent = React.forwardRef( (props, forwardedRef) => { const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip); const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props; const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip); - return (0, import_jsx_runtime2.jsx)(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? (0, import_jsx_runtime2.jsx)(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : (0, import_jsx_runtime2.jsx)(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) }); + return (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? (0, import_jsx_runtime.jsx)(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : (0, import_jsx_runtime.jsx)(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) }); } ); -var TooltipContentHoverable = React4.forwardRef((props, forwardedRef) => { +var TooltipContentHoverable = React.forwardRef((props, forwardedRef) => { const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip); const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip); - const ref = React4.useRef(null); + const ref = React.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref); - const [pointerGraceArea, setPointerGraceArea] = React4.useState(null); + const [pointerGraceArea, setPointerGraceArea] = React.useState(null); const { trigger, onClose } = context; const content = ref.current; const { onPointerInTransitChange } = providerContext; - const handleRemoveGraceArea = React4.useCallback(() => { + const handleRemoveGraceArea = React.useCallback(() => { setPointerGraceArea(null); onPointerInTransitChange(false); }, [onPointerInTransitChange]); - const handleCreateGraceArea = React4.useCallback( + const handleCreateGraceArea = React.useCallback( (event, hoverTarget) => { const currentTarget = event.currentTarget; const exitPoint = { x: event.clientX, y: event.clientY }; @@ -472,10 +282,10 @@ var TooltipContentHoverable = React4.forwardRef((props, forwardedRef) => { }, [onPointerInTransitChange] ); - React4.useEffect(() => { + React.useEffect(() => { return () => handleRemoveGraceArea(); }, [handleRemoveGraceArea]); - React4.useEffect(() => { + React.useEffect(() => { if (trigger && content) { const handleTriggerLeave = (event) => handleCreateGraceArea(event, content); const handleContentLeave = (event) => handleCreateGraceArea(event, trigger); @@ -487,7 +297,7 @@ var TooltipContentHoverable = React4.forwardRef((props, forwardedRef) => { }; } }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]); - React4.useEffect(() => { + React.useEffect(() => { if (pointerGraceArea) { const handleTrackPointerGrace = (event) => { const target = event.target; @@ -505,10 +315,10 @@ var TooltipContentHoverable = React4.forwardRef((props, forwardedRef) => { return () => document.removeEventListener("pointermove", handleTrackPointerGrace); } }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]); - return (0, import_jsx_runtime2.jsx)(TooltipContentImpl, { ...props, ref: composedRefs }); + return (0, import_jsx_runtime.jsx)(TooltipContentImpl, { ...props, ref: composedRefs }); }); var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false }); -var TooltipContentImpl = React4.forwardRef( +var TooltipContentImpl = React.forwardRef( (props, forwardedRef) => { const { __scopeTooltip, @@ -521,11 +331,11 @@ var TooltipContentImpl = React4.forwardRef( const context = useTooltipContext(CONTENT_NAME, __scopeTooltip); const popperScope = usePopperScope(__scopeTooltip); const { onClose } = context; - React4.useEffect(() => { + React.useEffect(() => { document.addEventListener(TOOLTIP_OPEN, onClose); return () => document.removeEventListener(TOOLTIP_OPEN, onClose); }, [onClose]); - React4.useEffect(() => { + React.useEffect(() => { if (context.trigger) { const handleScroll = (event) => { const target = event.target; @@ -535,7 +345,7 @@ var TooltipContentImpl = React4.forwardRef( return () => window.removeEventListener("scroll", handleScroll, { capture: true }); } }, [context.trigger, onClose]); - return (0, import_jsx_runtime2.jsx)( + return (0, import_jsx_runtime.jsx)( DismissableLayer, { asChild: true, @@ -544,7 +354,7 @@ var TooltipContentImpl = React4.forwardRef( onPointerDownOutside, onFocusOutside: (event) => event.preventDefault(), onDismiss: onClose, - children: (0, import_jsx_runtime2.jsxs)( + children: (0, import_jsx_runtime.jsxs)( Content, { "data-state": context.stateAttribute, @@ -563,8 +373,8 @@ var TooltipContentImpl = React4.forwardRef( } }, children: [ - (0, import_jsx_runtime2.jsx)(Slottable, { children }), - (0, import_jsx_runtime2.jsx)(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: (0, import_jsx_runtime2.jsx)(Root, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) }) + (0, import_jsx_runtime.jsx)(Slottable, { children }), + (0, import_jsx_runtime.jsx)(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: (0, import_jsx_runtime.jsx)(Root, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) }) ] } ) @@ -574,7 +384,7 @@ var TooltipContentImpl = React4.forwardRef( ); TooltipContent.displayName = CONTENT_NAME; var ARROW_NAME = "TooltipArrow"; -var TooltipArrow = React4.forwardRef( +var TooltipArrow = React.forwardRef( (props, forwardedRef) => { const { __scopeTooltip, ...arrowProps } = props; const popperScope = usePopperScope(__scopeTooltip); @@ -582,7 +392,7 @@ var TooltipArrow = React4.forwardRef( ARROW_NAME, __scopeTooltip ); - return visuallyHiddenContentContext.isInside ? null : (0, import_jsx_runtime2.jsx)(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }); + return visuallyHiddenContentContext.isInside ? null : (0, import_jsx_runtime.jsx)(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }); } ); TooltipArrow.displayName = ARROW_NAME; diff --git a/node_modules/.vite/deps/@radix-ui_react-tooltip.js.map b/node_modules/.vite/deps/@radix-ui_react-tooltip.js.map index 3895d903..9654ee09 100644 --- a/node_modules/.vite/deps/@radix-ui_react-tooltip.js.map +++ b/node_modules/.vite/deps/@radix-ui_react-tooltip.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../@radix-ui/react-tooltip/src/Tooltip.tsx", "../../@radix-ui/react-tooltip/node_modules/@radix-ui/react-context/src/createContext.tsx", "../../@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence/src/Presence.tsx", "../../@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence/src/useStateMachine.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slottable } from '@radix-ui/react-slot';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype ScopedProps

= P & { __scopeTooltip?: Scope };\nconst [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst PROVIDER_NAME = 'TooltipProvider';\nconst DEFAULT_DELAY_DURATION = 700;\nconst TOOLTIP_OPEN = 'tooltip.open';\n\ntype TooltipProviderContextValue = {\n isOpenDelayed: boolean;\n delayDuration: number;\n onOpen(): void;\n onClose(): void;\n onPointerInTransitChange(inTransit: boolean): void;\n isPointerInTransitRef: React.MutableRefObject;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipProviderContextProvider, useTooltipProviderContext] =\n createTooltipContext(PROVIDER_NAME);\n\ninterface TooltipProviderProps {\n children: React.ReactNode;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * How much time a user has to enter another trigger without incurring a delay again.\n * @defaultValue 300\n */\n skipDelayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst TooltipProvider: React.FC = (\n props: ScopedProps\n) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children,\n } = props;\n const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n\n return (\n {\n window.clearTimeout(skipDelayTimerRef.current);\n setIsOpenDelayed(false);\n }, [])}\n onClose={React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => setIsOpenDelayed(true),\n skipDelayDuration\n );\n }, [skipDelayDuration])}\n isPointerInTransitRef={isPointerInTransitRef}\n onPointerInTransitChange={React.useCallback((inTransit: boolean) => {\n isPointerInTransitRef.current = inTransit;\n }, [])}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n \n );\n};\n\nTooltipProvider.displayName = PROVIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\n\nconst TOOLTIP_NAME = 'Tooltip';\n\ntype TooltipContextValue = {\n contentId: string;\n open: boolean;\n stateAttribute: 'closed' | 'delayed-open' | 'instant-open';\n trigger: TooltipTriggerElement | null;\n onTriggerChange(trigger: TooltipTriggerElement | null): void;\n onTriggerEnter(): void;\n onTriggerLeave(): void;\n onOpen(): void;\n onClose(): void;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipContextProvider, useTooltipContext] =\n createTooltipContext(TOOLTIP_NAME);\n\ninterface TooltipProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n * override the prop with the same name passed to Provider.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst Tooltip: React.FC = (props: ScopedProps) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp,\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent =\n disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: (open) => {\n if (open) {\n providerContext.onOpen();\n\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open);\n },\n });\n const stateAttribute = React.useMemo(() => {\n return open ? (wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open') : 'closed';\n }, [open]);\n\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n\n return (\n \n {\n if (providerContext.isOpenDelayed) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen])}\n onTriggerLeave={React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent])}\n onOpen={handleOpen}\n onClose={handleClose}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n \n \n );\n};\n\nTooltip.displayName = TOOLTIP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TooltipTrigger';\n\ntype TooltipTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface TooltipTriggerProps extends PrimitiveButtonProps {}\n\nconst TooltipTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => (isPointerDownRef.current = false), []);\n\n React.useEffect(() => {\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [handlePointerUp]);\n\n return (\n \n {\n if (event.pointerType === 'touch') return;\n if (\n !hasPointerMoveOpenedRef.current &&\n !providerContext.isPointerInTransitRef.current\n ) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n })}\n onPointerLeave={composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, () => {\n isPointerDownRef.current = true;\n document.addEventListener('pointerup', handlePointerUp, { once: true });\n })}\n onFocus={composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n })}\n onBlur={composeEventHandlers(props.onBlur, context.onClose)}\n onClick={composeEventHandlers(props.onClick, context.onClose)}\n />\n \n );\n }\n);\n\nTooltipTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'TooltipPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface TooltipPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipPortal: React.FC = (props: ScopedProps) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nTooltipPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TooltipContent';\n\ntype TooltipContentElement = TooltipContentImplElement;\ninterface TooltipContentProps extends TooltipContentImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = 'top', ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n\n return (\n \n {context.disableHoverableContent ? (\n \n ) : (\n \n )}\n \n );\n }\n);\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\n\ntype TooltipContentHoverableElement = TooltipContentImplElement;\ninterface TooltipContentHoverableProps extends TooltipContentImplProps {}\n\nconst TooltipContentHoverable = React.forwardRef<\n TooltipContentHoverableElement,\n TooltipContentHoverableProps\n>((props: ScopedProps, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n\n const { trigger, onClose } = context;\n const content = ref.current;\n\n const { onPointerInTransitChange } = providerContext;\n\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n\n const handleCreateGraceArea = React.useCallback(\n (event: PointerEvent, hoverTarget: HTMLElement) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, trigger);\n\n trigger.addEventListener('pointerleave', handleTriggerLeave);\n content.addEventListener('pointerleave', handleContentLeave);\n return () => {\n trigger.removeEventListener('pointerleave', handleTriggerLeave);\n content.removeEventListener('pointerleave', handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event: PointerEvent) => {\n const target = event.target as HTMLElement;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener('pointermove', handleTrackPointerGrace);\n return () => document.removeEventListener('pointermove', handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n\n return ;\n});\n\nconst [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =\n createTooltipContext(TOOLTIP_NAME, { isInside: false });\n\ntype TooltipContentImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype PopperContentProps = React.ComponentPropsWithoutRef;\ninterface TooltipContentImplProps extends Omit {\n /**\n * A more descriptive label for accessibility purpose\n */\n 'aria-label'?: string;\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `Tooltip`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n}\n\nconst TooltipContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n 'aria-label': ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n\n // Close this tooltip if another one opens\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n\n // Close the tooltip if the trigger is scrolled\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener('scroll', handleScroll, { capture: true });\n return () => window.removeEventListener('scroll', handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n\n return (\n event.preventDefault()}\n onDismiss={onClose}\n >\n \n {children}\n \n \n {ariaLabel || children}\n \n \n \n \n );\n }\n);\n\nTooltipContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'TooltipArrow';\n\ntype TooltipArrowElement = React.ElementRef;\ntype PopperArrowProps = React.ComponentPropsWithoutRef;\ninterface TooltipArrowProps extends PopperArrowProps {}\n\nconst TooltipArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to\n // prevent issues in positioning the arrow due to the duplicate\n return visuallyHiddenContentContext.isInside ? null : (\n \n );\n }\n);\n\nTooltipArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype Side = NonNullable;\n\nfunction getExitSideFromRect(point: Point, rect: DOMRect): Side {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return 'left';\n case right:\n return 'right';\n case top:\n return 'top';\n case bottom:\n return 'bottom';\n default:\n throw new Error('unreachable');\n }\n}\n\nfunction getPaddedExitPoints(exitPoint: Point, exitSide: Side, padding = 5) {\n const paddedExitPoints: Point[] = [];\n switch (exitSide) {\n case 'top':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'bottom':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case 'left':\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'right':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n\nfunction getPointsFromRect(rect: DOMRect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n ];\n}\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nfunction getHull

(points: Readonly>): Array

{\n const newPoints: Array

= points.slice();\n newPoints.sort((a: Point, b: Point) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return +1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return +1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nfunction getHullPresorted

(points: Readonly>): Array

{\n if (points.length <= 1) return points.slice();\n\n const upperHull: Array

= [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n\n const lowerHull: Array

= [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n\n if (\n upperHull.length === 1 &&\n lowerHull.length === 1 &&\n upperHull[0].x === lowerHull[0].x &&\n upperHull[0].y === lowerHull[0].y\n ) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n\nconst Provider = TooltipProvider;\nconst Root = Tooltip;\nconst Trigger = TooltipTrigger;\nconst Portal = TooltipPortal;\nconst Content = TooltipContent;\nconst Arrow = TooltipArrow;\n\nexport {\n createTooltipScope,\n //\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n //\n Provider,\n Root,\n Trigger,\n Portal,\n Content,\n Arrow,\n};\nexport type {\n TooltipProviderProps,\n TooltipProps,\n TooltipTriggerProps,\n TooltipPortalProps,\n TooltipContentProps,\n TooltipArrowProps,\n};\n", "import * as React from 'react';\n\nfunction createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext(defaultContext);\n\n const Provider: React.FC = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope = { [scopeName: string]: React.Context[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n", "import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState();\n const stylesRef = React.useRef({} as any);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nexport { Presence };\nexport type { PresenceProps };\n", "import * as React from 'react';\n\ntype Machine = { [k: string]: { [k: string]: S } };\ntype MachineState = keyof T;\ntype MachineEvent = keyof UnionToIntersection;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine(\n initialState: MachineState,\n machine: M & Machine>\n) {\n return React.useReducer((state: MachineState, event: MachineEvent): MachineState => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n"], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAuB;;;ACAvB,YAAuB;AAaZ,yBAAA;AA2BX,SAAS,mBAAmB,WAAmB,yBAAwC,CAAC,GAAG;AACzF,MAAI,kBAAyB,CAAC;AAM9B,WAASC,eACP,mBACA,gBACA;AACA,UAAM,cAAoB,oBAA4C,cAAc;AACpF,UAAM,QAAQ,gBAAgB;AAC9B,sBAAkB,CAAC,GAAG,iBAAiB,cAAc;AAErD,UAAMC,YAEF,CAAC,UAAU;;AACb,YAAM,EAAE,OAAO,UAAU,GAAG,QAAQ,IAAI;AACxC,YAAM,YAAU,oCAAQ,eAAR,mBAAqB,WAAU;AAG/C,YAAM,QAAc,cAAQ,MAAM,SAAS,OAAO,OAAO,OAAO,CAAC;AACjE,iBAAO,wBAAC,QAAQ,UAAR,EAAiB,OAAe,SAAA,CAAS;IACnD;AAEA,IAAAA,UAAS,cAAc,oBAAoB;AAE3C,aAASC,YAAW,cAAsB,OAA4C;;AACpF,YAAM,YAAU,oCAAQ,eAAR,mBAAqB,WAAU;AAC/C,YAAM,UAAgB,iBAAW,OAAO;AACxC,UAAI,QAAS,QAAO;AACpB,UAAI,mBAAmB,OAAW,QAAO;AAEzC,YAAM,IAAI,MAAM,KAAK,YAAY,4BAA4B,iBAAiB,IAAI;IACpF;AAEA,WAAO,CAACD,WAAUC,WAAU;EAC9B;AAMA,QAAM,cAA2B,MAAM;AACrC,UAAM,gBAAgB,gBAAgB,IAAI,CAAC,mBAAmB;AAC5D,aAAa,oBAAc,cAAc;IAC3C,CAAC;AACD,WAAO,SAAS,SAAS,OAAc;AACrC,YAAM,YAAW,+BAAQ,eAAc;AACvC,aAAa;QACX,OAAO,EAAE,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE;QACtE,CAAC,OAAO,QAAQ;MAClB;IACF;EACF;AAEA,cAAY,YAAY;AACxB,SAAO,CAACF,gBAAe,qBAAqB,aAAa,GAAG,sBAAsB,CAAC;AACrF;AAMA,SAAS,wBAAwB,QAAuB;AACtD,QAAM,YAAY,OAAO,CAAC;AAC1B,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,QAAM,cAA2B,MAAM;AACrC,UAAM,aAAa,OAAO,IAAI,CAACG,kBAAiB;MAC9C,UAAUA,aAAY;MACtB,WAAWA,aAAY;IACzB,EAAE;AAEF,WAAO,SAAS,kBAAkB,gBAAgB;AAChD,YAAM,aAAa,WAAW,OAAO,CAACC,aAAY,EAAE,UAAU,UAAU,MAAM;AAI5E,cAAM,aAAa,SAAS,cAAc;AAC1C,cAAM,eAAe,WAAW,UAAU,SAAS,EAAE;AACrD,eAAO,EAAE,GAAGA,aAAY,GAAG,aAAa;MAC1C,GAAG,CAAC,CAAC;AAEL,aAAa,cAAQ,OAAO,EAAE,CAAC,UAAU,UAAU,SAAS,EAAE,GAAG,WAAW,IAAI,CAAC,UAAU,CAAC;IAC9F;EACF;AAEA,cAAY,YAAY,UAAU;AAClC,SAAO;AACT;;;ACnIA,aAAuB;ACAvB,IAAAC,SAAuB;AAWhB,SAAS,gBACd,cACA,SACA;AACA,SAAa,kBAAW,CAAC,OAAwB,UAA4C;AAC3F,UAAM,YAAa,QAAQ,KAAK,EAAU,KAAK;AAC/C,WAAO,aAAa;EACtB,GAAG,YAAY;AACjB;ADTA,IAAM,WAAoC,CAAC,UAAU;AACnD,QAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAM,WAAW,YAAY,OAAO;AAEpC,QAAM,QACJ,OAAO,aAAa,aAChB,SAAS,EAAE,SAAS,SAAS,UAAU,CAAC,IAClC,gBAAS,KAAK,QAAQ;AAGlC,QAAM,MAAM,gBAAgB,SAAS,KAAK,cAAc,KAAK,CAAC;AAC9D,QAAM,aAAa,OAAO,aAAa;AACvC,SAAO,cAAc,SAAS,YAAkB,oBAAa,OAAO,EAAE,IAAI,CAAC,IAAI;AACjF;AAEA,SAAS,cAAc;AAMvB,SAAS,YAAY,SAAkB;AACrC,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAsB;AACpD,QAAM,YAAkB,cAA4B,CAAC,CAAQ;AAC7D,QAAM,iBAAuB,cAAO,OAAO;AAC3C,QAAM,uBAA6B,cAAe,MAAM;AACxD,QAAM,eAAe,UAAU,YAAY;AAC3C,QAAM,CAAC,OAAO,IAAI,IAAI,gBAAgB,cAAc;IAClD,SAAS;MACP,SAAS;MACT,eAAe;IACjB;IACA,kBAAkB;MAChB,OAAO;MACP,eAAe;IACjB;IACA,WAAW;MACT,OAAO;IACT;EACF,CAAC;AAEK,EAAA,iBAAU,MAAM;AACpB,UAAM,uBAAuB,iBAAiB,UAAU,OAAO;AAC/D,yBAAqB,UAAU,UAAU,YAAY,uBAAuB;EAC9E,GAAG,CAAC,KAAK,CAAC;AAEV,mBAAgB,MAAM;AACpB,UAAM,SAAS,UAAU;AACzB,UAAM,aAAa,eAAe;AAClC,UAAM,oBAAoB,eAAe;AAEzC,QAAI,mBAAmB;AACrB,YAAM,oBAAoB,qBAAqB;AAC/C,YAAM,uBAAuB,iBAAiB,MAAM;AAEpD,UAAI,SAAS;AACX,aAAK,OAAO;MACd,WAAW,yBAAyB,WAAU,iCAAQ,aAAY,QAAQ;AAGxE,aAAK,SAAS;MAChB,OAAO;AAOL,cAAM,cAAc,sBAAsB;AAE1C,YAAI,cAAc,aAAa;AAC7B,eAAK,eAAe;QACtB,OAAO;AACL,eAAK,SAAS;QAChB;MACF;AAEA,qBAAe,UAAU;IAC3B;EACF,GAAG,CAAC,SAAS,IAAI,CAAC;AAElB,mBAAgB,MAAM;AACpB,QAAI,MAAM;AACR,UAAI;AACJ,YAAM,cAAc,KAAK,cAAc,eAAe;AAMtD,YAAM,qBAAqB,CAAC,UAA0B;AACpD,cAAM,uBAAuB,iBAAiB,UAAU,OAAO;AAC/D,cAAM,qBAAqB,qBAAqB,SAAS,MAAM,aAAa;AAC5E,YAAI,MAAM,WAAW,QAAQ,oBAAoB;AAW/C,eAAK,eAAe;AACpB,cAAI,CAAC,eAAe,SAAS;AAC3B,kBAAM,kBAAkB,KAAK,MAAM;AACnC,iBAAK,MAAM,oBAAoB;AAK/B,wBAAY,YAAY,WAAW,MAAM;AACvC,kBAAI,KAAK,MAAM,sBAAsB,YAAY;AAC/C,qBAAK,MAAM,oBAAoB;cACjC;YACF,CAAC;UACH;QACF;MACF;AACA,YAAM,uBAAuB,CAAC,UAA0B;AACtD,YAAI,MAAM,WAAW,MAAM;AAEzB,+BAAqB,UAAU,iBAAiB,UAAU,OAAO;QACnE;MACF;AACA,WAAK,iBAAiB,kBAAkB,oBAAoB;AAC5D,WAAK,iBAAiB,mBAAmB,kBAAkB;AAC3D,WAAK,iBAAiB,gBAAgB,kBAAkB;AACxD,aAAO,MAAM;AACX,oBAAY,aAAa,SAAS;AAClC,aAAK,oBAAoB,kBAAkB,oBAAoB;AAC/D,aAAK,oBAAoB,mBAAmB,kBAAkB;AAC9D,aAAK,oBAAoB,gBAAgB,kBAAkB;MAC7D;IACF,OAAO;AAGL,WAAK,eAAe;IACtB;EACF,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,SAAO;IACL,WAAW,CAAC,WAAW,kBAAkB,EAAE,SAAS,KAAK;IACzD,KAAW,mBAAY,CAACC,UAAsB;AAC5C,UAAIA,MAAM,WAAU,UAAU,iBAAiBA,KAAI;AACnD,cAAQA,KAAI;IACd,GAAG,CAAC,CAAC;EACP;AACF;AAIA,SAAS,iBAAiB,QAA8B;AACtD,UAAO,iCAAQ,kBAAiB;AAClC;AAOA,SAAS,cAAc,SAA6B;;AAElD,MAAI,UAAS,YAAO,yBAAyB,QAAQ,OAAO,KAAK,MAApD,mBAAuD;AACpE,MAAI,UAAU,UAAU,oBAAoB,UAAU,OAAO;AAC7D,MAAI,SAAS;AACX,WAAQ,QAAgB;EAC1B;AAGA,YAAS,YAAO,yBAAyB,SAAS,KAAK,MAA9C,mBAAiD;AAC1D,YAAU,UAAU,oBAAoB,UAAU,OAAO;AACzD,MAAI,SAAS;AACX,WAAO,QAAQ,MAAM;EACvB;AAGA,SAAO,QAAQ,MAAM,OAAQ,QAAgB;AAC/C;;;AF1GI,IAAAC,sBAAA;AAjEJ,IAAM,CAAC,sBAAsB,kBAAkB,IAAI,mBAAmB,WAAW;EAC/E;AACF,CAAC;AACD,IAAM,iBAAiB,kBAAkB;AAMzC,IAAM,gBAAgB;AACtB,IAAM,yBAAyB;AAC/B,IAAM,eAAe;AAYrB,IAAM,CAAC,gCAAgC,yBAAyB,IAC9D,qBAAkD,aAAa;AAqBjE,IAAM,kBAAkD,CACtD,UACG;AACH,QAAM;IACJ;IACA,gBAAgB;IAChB,oBAAoB;IACpB,0BAA0B;IAC1B;EACF,IAAI;AACJ,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAAS,IAAI;AAC7D,QAAM,wBAA8B,cAAO,KAAK;AAChD,QAAM,oBAA0B,cAAO,CAAC;AAElC,EAAA,iBAAU,MAAM;AACpB,UAAM,iBAAiB,kBAAkB;AACzC,WAAO,MAAM,OAAO,aAAa,cAAc;EACjD,GAAG,CAAC,CAAC;AAEL,aACE;IAAC;IAAA;MACC,OAAO;MACP;MACA;MACA,QAAc,mBAAY,MAAM;AAC9B,eAAO,aAAa,kBAAkB,OAAO;AAC7C,yBAAiB,KAAK;MACxB,GAAG,CAAC,CAAC;MACL,SAAe,mBAAY,MAAM;AAC/B,eAAO,aAAa,kBAAkB,OAAO;AAC7C,0BAAkB,UAAU,OAAO;UACjC,MAAM,iBAAiB,IAAI;UAC3B;QACF;MACF,GAAG,CAAC,iBAAiB,CAAC;MACtB;MACA,0BAAgC,mBAAY,CAAC,cAAuB;AAClE,8BAAsB,UAAU;MAClC,GAAG,CAAC,CAAC;MACL;MAEC;IAAA;EACH;AAEJ;AAEA,gBAAgB,cAAc;AAM9B,IAAM,eAAe;AAerB,IAAM,CAAC,wBAAwB,iBAAiB,IAC9C,qBAA0C,YAAY;AAoBxD,IAAM,UAAkC,CAAC,UAAqC;AAC5E,QAAM;IACJ;IACA;IACA,MAAM;IACN,cAAc;IACd;IACA,yBAAyB;IACzB,eAAe;EACjB,IAAI;AACJ,QAAM,kBAAkB,0BAA0B,cAAc,MAAM,cAAc;AACpF,QAAM,cAAc,eAAe,cAAc;AACjD,QAAM,CAAC,SAAS,UAAU,IAAU,gBAAmC,IAAI;AAC3E,QAAM,YAAY,MAAM;AACxB,QAAM,eAAqB,cAAO,CAAC;AACnC,QAAM,0BACJ,+BAA+B,gBAAgB;AACjD,QAAM,gBAAgB,qBAAqB,gBAAgB;AAC3D,QAAM,oBAA0B,cAAO,KAAK;AAC5C,QAAM,CAAC,OAAO,OAAO,OAAO,IAAI,qBAAqB;IACnD,MAAM;IACN,aAAa;IACb,UAAU,CAACC,UAAS;AAClB,UAAIA,OAAM;AACR,wBAAgB,OAAO;AAIvB,iBAAS,cAAc,IAAI,YAAY,YAAY,CAAC;MACtD,OAAO;AACL,wBAAgB,QAAQ;MAC1B;AACA,mDAAeA;IACjB;EACF,CAAC;AACD,QAAM,iBAAuB,eAAQ,MAAM;AACzC,WAAO,OAAQ,kBAAkB,UAAU,iBAAiB,iBAAkB;EAChF,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,aAAmB,mBAAY,MAAM;AACzC,WAAO,aAAa,aAAa,OAAO;AACxC,iBAAa,UAAU;AACvB,sBAAkB,UAAU;AAC5B,YAAQ,IAAI;EACd,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,cAAoB,mBAAY,MAAM;AAC1C,WAAO,aAAa,aAAa,OAAO;AACxC,iBAAa,UAAU;AACvB,YAAQ,KAAK;EACf,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,oBAA0B,mBAAY,MAAM;AAChD,WAAO,aAAa,aAAa,OAAO;AACxC,iBAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,wBAAkB,UAAU;AAC5B,cAAQ,IAAI;AACZ,mBAAa,UAAU;IACzB,GAAG,aAAa;EAClB,GAAG,CAAC,eAAe,OAAO,CAAC;AAErB,EAAA,iBAAU,MAAM;AACpB,WAAO,MAAM;AACX,UAAI,aAAa,SAAS;AACxB,eAAO,aAAa,aAAa,OAAO;AACxC,qBAAa,UAAU;MACzB;IACF;EACF,GAAG,CAAC,CAAC;AAEL,aACE,yBAAiB,OAAhB,EAAsB,GAAG,aACxB,cAAA;IAAC;IAAA;MACC,OAAO;MACP;MACA;MACA;MACA;MACA,iBAAiB;MACjB,gBAAsB,mBAAY,MAAM;AACtC,YAAI,gBAAgB,cAAe,mBAAkB;YAChD,YAAW;MAClB,GAAG,CAAC,gBAAgB,eAAe,mBAAmB,UAAU,CAAC;MACjE,gBAAsB,mBAAY,MAAM;AACtC,YAAI,yBAAyB;AAC3B,sBAAY;QACd,OAAO;AAEL,iBAAO,aAAa,aAAa,OAAO;AACxC,uBAAa,UAAU;QACzB;MACF,GAAG,CAAC,aAAa,uBAAuB,CAAC;MACzC,QAAQ;MACR,SAAS;MACT;MAEC;IAAA;EACH,EAAA,CACF;AAEJ;AAEA,QAAQ,cAAc;AAMtB,IAAM,eAAe;AAMrB,IAAM,iBAAuB;EAC3B,CAAC,OAAyC,iBAAiB;AACzD,UAAM,EAAE,gBAAgB,GAAG,aAAa,IAAI;AAC5C,UAAM,UAAU,kBAAkB,cAAc,cAAc;AAC9D,UAAM,kBAAkB,0BAA0B,cAAc,cAAc;AAC9E,UAAM,cAAc,eAAe,cAAc;AACjD,UAAM,MAAY,cAA8B,IAAI;AACpD,UAAM,eAAe,gBAAgB,cAAc,KAAK,QAAQ,eAAe;AAC/E,UAAM,mBAAyB,cAAO,KAAK;AAC3C,UAAM,0BAAgC,cAAO,KAAK;AAClD,UAAM,kBAAwB,mBAAY,MAAO,iBAAiB,UAAU,OAAQ,CAAC,CAAC;AAEhF,IAAA,iBAAU,MAAM;AACpB,aAAO,MAAM,SAAS,oBAAoB,aAAa,eAAe;IACxE,GAAG,CAAC,eAAe,CAAC;AAEpB,eACE,yBAAiB,QAAhB,EAAuB,SAAO,MAAE,GAAG,aAClC,cAAA;MAAC,UAAU;MAAV;QAGC,oBAAkB,QAAQ,OAAO,QAAQ,YAAY;QACrD,cAAY,QAAQ;QACnB,GAAG;QACJ,KAAK;QACL,eAAe,qBAAqB,MAAM,eAAe,CAAC,UAAU;AAClE,cAAI,MAAM,gBAAgB,QAAS;AACnC,cACE,CAAC,wBAAwB,WACzB,CAAC,gBAAgB,sBAAsB,SACvC;AACA,oBAAQ,eAAe;AACvB,oCAAwB,UAAU;UACpC;QACF,CAAC;QACD,gBAAgB,qBAAqB,MAAM,gBAAgB,MAAM;AAC/D,kBAAQ,eAAe;AACvB,kCAAwB,UAAU;QACpC,CAAC;QACD,eAAe,qBAAqB,MAAM,eAAe,MAAM;AAC7D,2BAAiB,UAAU;AAC3B,mBAAS,iBAAiB,aAAa,iBAAiB,EAAE,MAAM,KAAK,CAAC;QACxE,CAAC;QACD,SAAS,qBAAqB,MAAM,SAAS,MAAM;AACjD,cAAI,CAAC,iBAAiB,QAAS,SAAQ,OAAO;QAChD,CAAC;QACD,QAAQ,qBAAqB,MAAM,QAAQ,QAAQ,OAAO;QAC1D,SAAS,qBAAqB,MAAM,SAAS,QAAQ,OAAO;MAAA;IAC9D,EAAA,CACF;EAEJ;AACF;AAEA,eAAe,cAAc;AAM7B,IAAM,cAAc;AAGpB,IAAM,CAAC,gBAAgB,gBAAgB,IAAI,qBAAyC,aAAa;EAC/F,YAAY;AACd,CAAC;AAgBD,IAAM,gBAA8C,CAAC,UAA2C;AAC9F,QAAM,EAAE,gBAAgB,YAAY,UAAU,UAAU,IAAI;AAC5D,QAAM,UAAU,kBAAkB,aAAa,cAAc;AAC7D,aACE,yBAAC,gBAAA,EAAe,OAAO,gBAAgB,YACrC,cAAA,yBAAC,UAAA,EAAS,SAAS,cAAc,QAAQ,MACvC,cAAA,yBAAC,QAAA,EAAgB,SAAO,MAAC,WACtB,SAAA,CACH,EAAA,CACF,EAAA,CACF;AAEJ;AAEA,cAAc,cAAc;AAM5B,IAAM,eAAe;AAWrB,IAAM,iBAAuB;EAC3B,CAAC,OAAyC,iBAAiB;AACzD,UAAM,gBAAgB,iBAAiB,cAAc,MAAM,cAAc;AACzE,UAAM,EAAE,aAAa,cAAc,YAAY,OAAO,OAAO,GAAG,aAAa,IAAI;AACjF,UAAM,UAAU,kBAAkB,cAAc,MAAM,cAAc;AAEpE,eACE,yBAAC,UAAA,EAAS,SAAS,cAAc,QAAQ,MACtC,UAAA,QAAQ,8BACP,yBAAC,oBAAA,EAAmB,MAAa,GAAG,cAAc,KAAK,aAAA,CAAc,QAErE,yBAAC,yBAAA,EAAwB,MAAa,GAAG,cAAc,KAAK,aAAA,CAAc,EAAA,CAE9E;EAEJ;AACF;AAQA,IAAM,0BAAgC,kBAGpC,CAAC,OAAkD,iBAAiB;AACpE,QAAM,UAAU,kBAAkB,cAAc,MAAM,cAAc;AACpE,QAAM,kBAAkB,0BAA0B,cAAc,MAAM,cAAc;AACpF,QAAM,MAAY,cAAuC,IAAI;AAC7D,QAAM,eAAe,gBAAgB,cAAc,GAAG;AACtD,QAAM,CAAC,kBAAkB,mBAAmB,IAAU,gBAAyB,IAAI;AAEnF,QAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,QAAM,UAAU,IAAI;AAEpB,QAAM,EAAE,yBAAyB,IAAI;AAErC,QAAM,wBAA8B,mBAAY,MAAM;AACpD,wBAAoB,IAAI;AACxB,6BAAyB,KAAK;EAChC,GAAG,CAAC,wBAAwB,CAAC;AAE7B,QAAM,wBAA8B;IAClC,CAAC,OAAqB,gBAA6B;AACjD,YAAM,gBAAgB,MAAM;AAC5B,YAAM,YAAY,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ;AACvD,YAAM,WAAW,oBAAoB,WAAW,cAAc,sBAAsB,CAAC;AACrF,YAAM,mBAAmB,oBAAoB,WAAW,QAAQ;AAChE,YAAM,oBAAoB,kBAAkB,YAAY,sBAAsB,CAAC;AAC/E,YAAM,YAAY,QAAQ,CAAC,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AACrE,0BAAoB,SAAS;AAC7B,+BAAyB,IAAI;IAC/B;IACA,CAAC,wBAAwB;EAC3B;AAEM,EAAA,iBAAU,MAAM;AACpB,WAAO,MAAM,sBAAsB;EACrC,GAAG,CAAC,qBAAqB,CAAC;AAEpB,EAAA,iBAAU,MAAM;AACpB,QAAI,WAAW,SAAS;AACtB,YAAM,qBAAqB,CAAC,UAAwB,sBAAsB,OAAO,OAAO;AACxF,YAAM,qBAAqB,CAAC,UAAwB,sBAAsB,OAAO,OAAO;AAExF,cAAQ,iBAAiB,gBAAgB,kBAAkB;AAC3D,cAAQ,iBAAiB,gBAAgB,kBAAkB;AAC3D,aAAO,MAAM;AACX,gBAAQ,oBAAoB,gBAAgB,kBAAkB;AAC9D,gBAAQ,oBAAoB,gBAAgB,kBAAkB;MAChE;IACF;EACF,GAAG,CAAC,SAAS,SAAS,uBAAuB,qBAAqB,CAAC;AAE7D,EAAA,iBAAU,MAAM;AACpB,QAAI,kBAAkB;AACpB,YAAM,0BAA0B,CAAC,UAAwB;AACvD,cAAM,SAAS,MAAM;AACrB,cAAM,kBAAkB,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ;AAC7D,cAAM,oBAAmB,mCAAS,SAAS,aAAW,mCAAS,SAAS;AACxE,cAAM,4BAA4B,CAAC,iBAAiB,iBAAiB,gBAAgB;AAErF,YAAI,kBAAkB;AACpB,gCAAsB;QACxB,WAAW,2BAA2B;AACpC,gCAAsB;AACtB,kBAAQ;QACV;MACF;AACA,eAAS,iBAAiB,eAAe,uBAAuB;AAChE,aAAO,MAAM,SAAS,oBAAoB,eAAe,uBAAuB;IAClF;EACF,GAAG,CAAC,SAAS,SAAS,kBAAkB,SAAS,qBAAqB,CAAC;AAEvE,aAAO,yBAAC,oBAAA,EAAoB,GAAG,OAAO,KAAK,aAAA,CAAc;AAC3D,CAAC;AAED,IAAM,CAAC,sCAAsC,+BAA+B,IAC1E,qBAAqB,cAAc,EAAE,UAAU,MAAM,CAAC;AAuBxD,IAAM,qBAA2B;EAC/B,CAAC,OAA6C,iBAAiB;AAC7D,UAAM;MACJ;MACA;MACA,cAAc;MACd;MACA;MACA,GAAG;IACL,IAAI;AACJ,UAAM,UAAU,kBAAkB,cAAc,cAAc;AAC9D,UAAM,cAAc,eAAe,cAAc;AACjD,UAAM,EAAE,QAAQ,IAAI;AAGd,IAAA,iBAAU,MAAM;AACpB,eAAS,iBAAiB,cAAc,OAAO;AAC/C,aAAO,MAAM,SAAS,oBAAoB,cAAc,OAAO;IACjE,GAAG,CAAC,OAAO,CAAC;AAGN,IAAA,iBAAU,MAAM;AACpB,UAAI,QAAQ,SAAS;AACnB,cAAM,eAAe,CAAC,UAAiB;AACrC,gBAAM,SAAS,MAAM;AACrB,cAAI,iCAAQ,SAAS,QAAQ,SAAU,SAAQ;QACjD;AACA,eAAO,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;AACjE,eAAO,MAAM,OAAO,oBAAoB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;MACnF;IACF,GAAG,CAAC,QAAQ,SAAS,OAAO,CAAC;AAE7B,eACE;MAAC;MAAA;QACC,SAAO;QACP,6BAA6B;QAC7B;QACA;QACA,gBAAgB,CAAC,UAAU,MAAM,eAAe;QAChD,WAAW;QAEX,cAAA;UAAiB;UAAhB;YACC,cAAY,QAAQ;YACnB,GAAG;YACH,GAAG;YACJ,KAAK;YACL,OAAO;cACL,GAAG,aAAa;;cAEhB,GAAG;gBACD,4CAA4C;gBAC5C,2CAA2C;gBAC3C,4CAA4C;gBAC5C,iCAAiC;gBACjC,kCAAkC;cACpC;YACF;YAEA,UAAA;kBAAA,yBAAC,WAAA,EAAW,SAAA,CAAS;kBACrB,yBAAC,sCAAA,EAAqC,OAAO,gBAAgB,UAAU,MACrE,cAAA,yBAAyB,MAAxB,EAA6B,IAAI,QAAQ,WAAW,MAAK,WACvD,UAAA,aAAa,SAAA,CAChB,EAAA,CACF;YAAA;UAAA;QACF;MAAA;IACF;EAEJ;AACF;AAEA,eAAe,cAAc;AAM7B,IAAM,aAAa;AAMnB,IAAM,eAAqB;EACzB,CAAC,OAAuC,iBAAiB;AACvD,UAAM,EAAE,gBAAgB,GAAG,WAAW,IAAI;AAC1C,UAAM,cAAc,eAAe,cAAc;AACjD,UAAM,+BAA+B;MACnC;MACA;IACF;AAGA,WAAO,6BAA6B,WAAW,WAC7C,yBAAiB,OAAhB,EAAuB,GAAG,aAAc,GAAG,YAAY,KAAK,aAAA,CAAc;EAE/E;AACF;AAEA,aAAa,cAAc;AAM3B,SAAS,oBAAoB,OAAc,MAAqB;AAC9D,QAAM,MAAM,KAAK,IAAI,KAAK,MAAM,MAAM,CAAC;AACvC,QAAM,SAAS,KAAK,IAAI,KAAK,SAAS,MAAM,CAAC;AAC7C,QAAM,QAAQ,KAAK,IAAI,KAAK,QAAQ,MAAM,CAAC;AAC3C,QAAM,OAAO,KAAK,IAAI,KAAK,OAAO,MAAM,CAAC;AAEzC,UAAQ,KAAK,IAAI,KAAK,QAAQ,OAAO,IAAI,GAAG;IAC1C,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT;AACE,YAAM,IAAI,MAAM,aAAa;EACjC;AACF;AAEA,SAAS,oBAAoB,WAAkB,UAAgB,UAAU,GAAG;AAC1E,QAAM,mBAA4B,CAAC;AACnC,UAAQ,UAAU;IAChB,KAAK;AACH,uBAAiB;QACf,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;QACrD,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;MACvD;AACA;IACF,KAAK;AACH,uBAAiB;QACf,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;QACrD,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;MACvD;AACA;IACF,KAAK;AACH,uBAAiB;QACf,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;QACrD,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;MACvD;AACA;IACF,KAAK;AACH,uBAAiB;QACf,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;QACrD,EAAE,GAAG,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,QAAQ;MACvD;AACA;EACJ;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAe;AACxC,QAAM,EAAE,KAAK,OAAO,QAAQ,KAAK,IAAI;AACrC,SAAO;IACL,EAAE,GAAG,MAAM,GAAG,IAAI;IAClB,EAAE,GAAG,OAAO,GAAG,IAAI;IACnB,EAAE,GAAG,OAAO,GAAG,OAAO;IACtB,EAAE,GAAG,MAAM,GAAG,OAAO;EACvB;AACF;AAIA,SAAS,iBAAiB,OAAc,SAAkB;AACxD,QAAM,EAAE,GAAG,EAAE,IAAI;AACjB,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,IAAI,QAAQ,QAAQ,IAAI,KAAK;AACnE,UAAM,KAAK,QAAQ,CAAC,EAAE;AACtB,UAAM,KAAK,QAAQ,CAAC,EAAE;AACtB,UAAM,KAAK,QAAQ,CAAC,EAAE;AACtB,UAAM,KAAK,QAAQ,CAAC,EAAE;AAGtB,UAAM,YAAc,KAAK,MAAQ,KAAK,KAAQ,KAAK,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM;AACrF,QAAI,UAAW,UAAS,CAAC;EAC3B;AAEA,SAAO;AACT;AAIA,SAAS,QAAyB,QAAsC;AACtE,QAAM,YAAsB,OAAO,MAAM;AACzC,YAAU,KAAK,CAAC,GAAU,MAAa;AACrC,QAAI,EAAE,IAAI,EAAE,EAAG,QAAO;aACb,EAAE,IAAI,EAAE,EAAG,QAAO;aAClB,EAAE,IAAI,EAAE,EAAG,QAAO;aAClB,EAAE,IAAI,EAAE,EAAG,QAAO;QACtB,QAAO;EACd,CAAC;AACD,SAAO,iBAAiB,SAAS;AACnC;AAGA,SAAS,iBAAkC,QAAsC;AAC/E,MAAI,OAAO,UAAU,EAAG,QAAO,OAAO,MAAM;AAE5C,QAAM,YAAsB,CAAC;AAC7B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,IAAI,OAAO,CAAC;AAClB,WAAO,UAAU,UAAU,GAAG;AAC5B,YAAM,IAAI,UAAU,UAAU,SAAS,CAAC;AACxC,YAAM,IAAI,UAAU,UAAU,SAAS,CAAC;AACxC,WAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,WAAU,IAAI;UACrE;IACP;AACA,cAAU,KAAK,CAAC;EAClB;AACA,YAAU,IAAI;AAEd,QAAM,YAAsB,CAAC;AAC7B,WAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,UAAM,IAAI,OAAO,CAAC;AAClB,WAAO,UAAU,UAAU,GAAG;AAC5B,YAAM,IAAI,UAAU,UAAU,SAAS,CAAC;AACxC,YAAM,IAAI,UAAU,UAAU,SAAS,CAAC;AACxC,WAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,WAAU,IAAI;UACrE;IACP;AACA,cAAU,KAAK,CAAC;EAClB;AACA,YAAU,IAAI;AAEd,MACE,UAAU,WAAW,KACrB,UAAU,WAAW,KACrB,UAAU,CAAC,EAAE,MAAM,UAAU,CAAC,EAAE,KAChC,UAAU,CAAC,EAAE,MAAM,UAAU,CAAC,EAAE,GAChC;AACA,WAAO;EACT,OAAO;AACL,WAAO,UAAU,OAAO,SAAS;EACnC;AACF;AAEA,IAAM,WAAW;AACjB,IAAMC,QAAO;AACb,IAAM,UAAU;AAChB,IAAMC,UAAS;AACf,IAAMC,WAAU;AAChB,IAAMC,SAAQ;", - "names": ["React", "createContext", "Provider", "useContext", "createScope", "nextScopes", "React", "node", "import_jsx_runtime", "open", "Root", "Portal", "Content", "Arrow"] + "sources": ["../../@radix-ui/react-tooltip/src/Tooltip.tsx"], + "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slottable } from '@radix-ui/react-slot';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport * as VisuallyHiddenPrimitive from '@radix-ui/react-visually-hidden';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype ScopedProps

= P & { __scopeTooltip?: Scope };\nconst [createTooltipContext, createTooltipScope] = createContextScope('Tooltip', [\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipProvider\n * -----------------------------------------------------------------------------------------------*/\n\nconst PROVIDER_NAME = 'TooltipProvider';\nconst DEFAULT_DELAY_DURATION = 700;\nconst TOOLTIP_OPEN = 'tooltip.open';\n\ntype TooltipProviderContextValue = {\n isOpenDelayed: boolean;\n delayDuration: number;\n onOpen(): void;\n onClose(): void;\n onPointerInTransitChange(inTransit: boolean): void;\n isPointerInTransitRef: React.MutableRefObject;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipProviderContextProvider, useTooltipProviderContext] =\n createTooltipContext(PROVIDER_NAME);\n\ninterface TooltipProviderProps {\n children: React.ReactNode;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * How much time a user has to enter another trigger without incurring a delay again.\n * @defaultValue 300\n */\n skipDelayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst TooltipProvider: React.FC = (\n props: ScopedProps\n) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children,\n } = props;\n const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n\n return (\n {\n window.clearTimeout(skipDelayTimerRef.current);\n setIsOpenDelayed(false);\n }, [])}\n onClose={React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => setIsOpenDelayed(true),\n skipDelayDuration\n );\n }, [skipDelayDuration])}\n isPointerInTransitRef={isPointerInTransitRef}\n onPointerInTransitChange={React.useCallback((inTransit: boolean) => {\n isPointerInTransitRef.current = inTransit;\n }, [])}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n \n );\n};\n\nTooltipProvider.displayName = PROVIDER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Tooltip\n * -----------------------------------------------------------------------------------------------*/\n\nconst TOOLTIP_NAME = 'Tooltip';\n\ntype TooltipContextValue = {\n contentId: string;\n open: boolean;\n stateAttribute: 'closed' | 'delayed-open' | 'instant-open';\n trigger: TooltipTriggerElement | null;\n onTriggerChange(trigger: TooltipTriggerElement | null): void;\n onTriggerEnter(): void;\n onTriggerLeave(): void;\n onOpen(): void;\n onClose(): void;\n disableHoverableContent: boolean;\n};\n\nconst [TooltipContextProvider, useTooltipContext] =\n createTooltipContext(TOOLTIP_NAME);\n\ninterface TooltipProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n * override the prop with the same name passed to Provider.\n * @defaultValue 700\n */\n delayDuration?: number;\n /**\n * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n * @defaultValue false\n */\n disableHoverableContent?: boolean;\n}\n\nconst Tooltip: React.FC = (props: ScopedProps) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp,\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent =\n disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: (open) => {\n if (open) {\n providerContext.onOpen();\n\n // as `onChange` is called within a lifecycle method we\n // avoid dispatching via `dispatchDiscreteCustomEvent`.\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open);\n },\n });\n const stateAttribute = React.useMemo(() => {\n return open ? (wasOpenDelayedRef.current ? 'delayed-open' : 'instant-open') : 'closed';\n }, [open]);\n\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n\n return (\n \n {\n if (providerContext.isOpenDelayed) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen])}\n onTriggerLeave={React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent])}\n onOpen={handleOpen}\n onClose={handleClose}\n disableHoverableContent={disableHoverableContent}\n >\n {children}\n \n \n );\n};\n\nTooltip.displayName = TOOLTIP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TooltipTrigger';\n\ntype TooltipTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface TooltipTriggerProps extends PrimitiveButtonProps {}\n\nconst TooltipTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => (isPointerDownRef.current = false), []);\n\n React.useEffect(() => {\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [handlePointerUp]);\n\n return (\n \n {\n if (event.pointerType === 'touch') return;\n if (\n !hasPointerMoveOpenedRef.current &&\n !providerContext.isPointerInTransitRef.current\n ) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n })}\n onPointerLeave={composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n })}\n onPointerDown={composeEventHandlers(props.onPointerDown, () => {\n isPointerDownRef.current = true;\n document.addEventListener('pointerup', handlePointerUp, { once: true });\n })}\n onFocus={composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n })}\n onBlur={composeEventHandlers(props.onBlur, context.onClose)}\n onClick={composeEventHandlers(props.onClick, context.onClose)}\n />\n \n );\n }\n);\n\nTooltipTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'TooltipPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface TooltipPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipPortal: React.FC = (props: ScopedProps) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nTooltipPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TooltipContent';\n\ntype TooltipContentElement = TooltipContentImplElement;\ninterface TooltipContentProps extends TooltipContentImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TooltipContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = 'top', ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n\n return (\n \n {context.disableHoverableContent ? (\n \n ) : (\n \n )}\n \n );\n }\n);\n\ntype Point = { x: number; y: number };\ntype Polygon = Point[];\n\ntype TooltipContentHoverableElement = TooltipContentImplElement;\ninterface TooltipContentHoverableProps extends TooltipContentImplProps {}\n\nconst TooltipContentHoverable = React.forwardRef<\n TooltipContentHoverableElement,\n TooltipContentHoverableProps\n>((props: ScopedProps, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n\n const { trigger, onClose } = context;\n const content = ref.current;\n\n const { onPointerInTransitChange } = providerContext;\n\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n\n const handleCreateGraceArea = React.useCallback(\n (event: PointerEvent, hoverTarget: HTMLElement) => {\n const currentTarget = event.currentTarget as HTMLElement;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, trigger);\n\n trigger.addEventListener('pointerleave', handleTriggerLeave);\n content.addEventListener('pointerleave', handleContentLeave);\n return () => {\n trigger.removeEventListener('pointerleave', handleTriggerLeave);\n content.removeEventListener('pointerleave', handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event: PointerEvent) => {\n const target = event.target as HTMLElement;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener('pointermove', handleTrackPointerGrace);\n return () => document.removeEventListener('pointermove', handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n\n return ;\n});\n\nconst [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] =\n createTooltipContext(TOOLTIP_NAME, { isInside: false });\n\ntype TooltipContentImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype PopperContentProps = React.ComponentPropsWithoutRef;\ninterface TooltipContentImplProps extends Omit {\n /**\n * A more descriptive label for accessibility purpose\n */\n 'aria-label'?: string;\n\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `Tooltip`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n}\n\nconst TooltipContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n 'aria-label': ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n\n // Close this tooltip if another one opens\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n\n // Close the tooltip if the trigger is scrolled\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event: Event) => {\n const target = event.target as HTMLElement;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener('scroll', handleScroll, { capture: true });\n return () => window.removeEventListener('scroll', handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n\n return (\n event.preventDefault()}\n onDismiss={onClose}\n >\n \n {children}\n \n \n {ariaLabel || children}\n \n \n \n \n );\n }\n);\n\nTooltipContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TooltipArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'TooltipArrow';\n\ntype TooltipArrowElement = React.ElementRef;\ntype PopperArrowProps = React.ComponentPropsWithoutRef;\ninterface TooltipArrowProps extends PopperArrowProps {}\n\nconst TooltipArrow = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n // if the arrow is inside the `VisuallyHidden`, we don't want to render it all to\n // prevent issues in positioning the arrow due to the duplicate\n return visuallyHiddenContentContext.isInside ? null : (\n \n );\n }\n);\n\nTooltipArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype Side = NonNullable;\n\nfunction getExitSideFromRect(point: Point, rect: DOMRect): Side {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return 'left';\n case right:\n return 'right';\n case top:\n return 'top';\n case bottom:\n return 'bottom';\n default:\n throw new Error('unreachable');\n }\n}\n\nfunction getPaddedExitPoints(exitPoint: Point, exitSide: Side, padding = 5) {\n const paddedExitPoints: Point[] = [];\n switch (exitSide) {\n case 'top':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'bottom':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case 'left':\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case 'right':\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\n\nfunction getPointsFromRect(rect: DOMRect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n ];\n}\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nfunction isPointInPolygon(point: Point, polygon: Polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n\n // prettier-ignore\n const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n if (intersect) inside = !inside;\n }\n\n return inside;\n}\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nfunction getHull

(points: Readonly>): Array

{\n const newPoints: Array

= points.slice();\n newPoints.sort((a: Point, b: Point) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return +1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return +1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nfunction getHullPresorted

(points: Readonly>): Array

{\n if (points.length <= 1) return points.slice();\n\n const upperHull: Array

= [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n\n const lowerHull: Array

= [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n\n if (\n upperHull.length === 1 &&\n lowerHull.length === 1 &&\n upperHull[0].x === lowerHull[0].x &&\n upperHull[0].y === lowerHull[0].y\n ) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\n\nconst Provider = TooltipProvider;\nconst Root = Tooltip;\nconst Trigger = TooltipTrigger;\nconst Portal = TooltipPortal;\nconst Content = TooltipContent;\nconst Arrow = TooltipArrow;\n\nexport {\n createTooltipScope,\n //\n TooltipProvider,\n Tooltip,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n TooltipArrow,\n //\n Provider,\n Root,\n Trigger,\n Portal,\n Content,\n Arrow,\n};\nexport type {\n TooltipProviderProps,\n TooltipProps,\n TooltipTriggerProps,\n TooltipPortalProps,\n TooltipContentProps,\n TooltipArrowProps,\n};\n"], + "mappings": "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", + "names": ["open", "Root", "Portal", "Content", "Arrow"] } diff --git a/node_modules/.vite/deps/@tanstack_react-query.js b/node_modules/.vite/deps/@tanstack_react-query.js index 3ba59bfa..877a0076 100644 --- a/node_modules/.vite/deps/@tanstack_react-query.js +++ b/node_modules/.vite/deps/@tanstack_react-query.js @@ -378,6 +378,39 @@ var OnlineManager = (_a2 = class extends Subscribable { }, _online = new WeakMap(), _cleanup2 = new WeakMap(), _setup2 = new WeakMap(), _a2); var onlineManager = new OnlineManager(); +// node_modules/@tanstack/query-core/build/modern/thenable.js +function pendingThenable() { + let resolve; + let reject; + const thenable = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + thenable.status = "pending"; + thenable.catch(() => { + }); + function finalize(data) { + Object.assign(thenable, data); + delete thenable.resolve; + delete thenable.reject; + } + thenable.resolve = (value) => { + finalize({ + status: "fulfilled", + value + }); + resolve(value); + }; + thenable.reject = (reason) => { + finalize({ + status: "rejected", + reason + }); + reject(reason); + }; + return thenable; +} + // node_modules/@tanstack/query-core/build/modern/retryer.js function defaultRetryDelay(failureCount) { return Math.min(1e3 * 2 ** failureCount, 3e4); @@ -400,12 +433,7 @@ function createRetryer(config) { let failureCount = 0; let isResolved = false; let continueFn; - let promiseResolve; - let promiseReject; - const promise = new Promise((outerResolve, outerReject) => { - promiseResolve = outerResolve; - promiseReject = outerReject; - }); + const thenable = pendingThenable(); const cancel = (cancelOptions) => { var _a12; if (!isResolved) { @@ -427,7 +455,7 @@ function createRetryer(config) { isResolved = true; (_a12 = config.onSuccess) == null ? void 0 : _a12.call(config, value); continueFn == null ? void 0 : continueFn(); - promiseResolve(value); + thenable.resolve(value); } }; const reject = (value) => { @@ -436,7 +464,7 @@ function createRetryer(config) { isResolved = true; (_a12 = config.onError) == null ? void 0 : _a12.call(config, value); continueFn == null ? void 0 : continueFn(); - promiseReject(value); + thenable.reject(value); } }; const pause = () => { @@ -494,11 +522,11 @@ function createRetryer(config) { }); }; return { - promise, + promise: thenable, cancel, continue: () => { continueFn == null ? void 0 : continueFn(); - return promise; + return thenable; }, cancelRetry, continueRetry, @@ -509,7 +537,7 @@ function createRetryer(config) { } else { pause().then(run); } - return promise; + return thenable; } }; } @@ -696,7 +724,10 @@ var Query = (_a4 = class extends Removable { ); } isDisabled() { - return this.getObserversCount() > 0 && !this.isActive(); + if (this.getObserversCount() > 0) { + return !this.isActive(); + } + return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0; } isStale() { if (this.state.isInvalidated) { @@ -845,10 +876,7 @@ var Query = (_a4 = class extends Removable { this ); } - if (!this.isFetchingOptimistic) { - this.scheduleGc(); - } - this.isFetchingOptimistic = false; + this.scheduleGc(); }; __privateSet(this, _retryer, createRetryer({ initialPromise: fetchOptions == null ? void 0 : fetchOptions.initialPromise, @@ -878,10 +906,7 @@ var Query = (_a4 = class extends Removable { this.state.error, this ); - if (!this.isFetchingOptimistic) { - this.scheduleGc(); - } - this.isFetchingOptimistic = false; + this.scheduleGc(); }, onError, onFail: (failureCount, error) => { @@ -1829,7 +1854,7 @@ var QueryClient = (_a8 = class { }, _queryCache = new WeakMap(), _mutationCache2 = new WeakMap(), _defaultOptions2 = new WeakMap(), _queryDefaults = new WeakMap(), _mutationDefaults = new WeakMap(), _mountCount = new WeakMap(), _unsubscribeFocus = new WeakMap(), _unsubscribeOnline = new WeakMap(), _a8); // node_modules/@tanstack/query-core/build/modern/queryObserver.js -var _client, _currentQuery, _currentQueryInitialState, _currentResult, _currentResultState, _currentResultOptions, _selectError, _selectFn, _selectResult, _lastQueryWithDefinedData, _staleTimeoutId, _refetchIntervalId, _currentRefetchInterval, _trackedProps, _QueryObserver_instances, executeFetch_fn, updateStaleTimeout_fn, computeRefetchInterval_fn, updateRefetchInterval_fn, updateTimers_fn, clearStaleTimeout_fn, clearRefetchInterval_fn, updateQuery_fn, notify_fn, _a9; +var _client, _currentQuery, _currentQueryInitialState, _currentResult, _currentResultState, _currentResultOptions, _currentThenable, _selectError, _selectFn, _selectResult, _lastQueryWithDefinedData, _staleTimeoutId, _refetchIntervalId, _currentRefetchInterval, _trackedProps, _QueryObserver_instances, executeFetch_fn, updateStaleTimeout_fn, computeRefetchInterval_fn, updateRefetchInterval_fn, updateTimers_fn, clearStaleTimeout_fn, clearRefetchInterval_fn, updateQuery_fn, notify_fn, _a9; var QueryObserver = (_a9 = class extends Subscribable { constructor(client, options) { super(); @@ -1840,6 +1865,7 @@ var QueryObserver = (_a9 = class extends Subscribable { __privateAdd(this, _currentResult); __privateAdd(this, _currentResultState); __privateAdd(this, _currentResultOptions); + __privateAdd(this, _currentThenable); __privateAdd(this, _selectError); __privateAdd(this, _selectFn); __privateAdd(this, _selectResult); @@ -1853,6 +1879,12 @@ var QueryObserver = (_a9 = class extends Subscribable { this.options = options; __privateSet(this, _client, client); __privateSet(this, _selectError, null); + __privateSet(this, _currentThenable, pendingThenable()); + if (!this.options.experimental_prefetchInRender) { + __privateGet(this, _currentThenable).reject( + new Error("experimental_prefetchInRender feature flag is not enabled") + ); + } this.bindMethods(); this.setOptions(options); } @@ -1973,7 +2005,6 @@ var QueryObserver = (_a9 = class extends Subscribable { fetchOptimistic(options) { const defaultedOptions = __privateGet(this, _client).defaultQueryOptions(options); const query = __privateGet(this, _client).getQueryCache().build(__privateGet(this, _client), defaultedOptions); - query.isFetchingOptimistic = true; return query.fetch().then(() => this.createResult(query, defaultedOptions)); } fetch(fetchOptions) { @@ -2093,9 +2124,42 @@ var QueryObserver = (_a9 = class extends Subscribable { isPlaceholderData, isRefetchError: isError && hasData, isStale: isStale(query, options), - refetch: this.refetch + refetch: this.refetch, + promise: __privateGet(this, _currentThenable) }; - return result; + const nextResult = result; + if (this.options.experimental_prefetchInRender) { + const finalizeThenableIfPossible = (thenable) => { + if (nextResult.status === "error") { + thenable.reject(nextResult.error); + } else if (nextResult.data !== void 0) { + thenable.resolve(nextResult.data); + } + }; + const recreateThenable = () => { + const pending = __privateSet(this, _currentThenable, nextResult.promise = pendingThenable()); + finalizeThenableIfPossible(pending); + }; + const prevThenable = __privateGet(this, _currentThenable); + switch (prevThenable.status) { + case "pending": + if (query.queryHash === prevQuery.queryHash) { + finalizeThenableIfPossible(prevThenable); + } + break; + case "fulfilled": + if (nextResult.status === "error" || nextResult.data !== prevThenable.value) { + recreateThenable(); + } + break; + case "rejected": + if (nextResult.status !== "error" || nextResult.error !== prevThenable.reason) { + recreateThenable(); + } + break; + } + } + return nextResult; } updateResult(notifyOptions) { const prevResult = __privateGet(this, _currentResult); @@ -2142,7 +2206,7 @@ var QueryObserver = (_a9 = class extends Subscribable { __privateMethod(this, _QueryObserver_instances, updateTimers_fn).call(this); } } -}, _client = new WeakMap(), _currentQuery = new WeakMap(), _currentQueryInitialState = new WeakMap(), _currentResult = new WeakMap(), _currentResultState = new WeakMap(), _currentResultOptions = new WeakMap(), _selectError = new WeakMap(), _selectFn = new WeakMap(), _selectResult = new WeakMap(), _lastQueryWithDefinedData = new WeakMap(), _staleTimeoutId = new WeakMap(), _refetchIntervalId = new WeakMap(), _currentRefetchInterval = new WeakMap(), _trackedProps = new WeakMap(), _QueryObserver_instances = new WeakSet(), executeFetch_fn = function(fetchOptions) { +}, _client = new WeakMap(), _currentQuery = new WeakMap(), _currentQueryInitialState = new WeakMap(), _currentResult = new WeakMap(), _currentResultState = new WeakMap(), _currentResultOptions = new WeakMap(), _currentThenable = new WeakMap(), _selectError = new WeakMap(), _selectFn = new WeakMap(), _selectResult = new WeakMap(), _lastQueryWithDefinedData = new WeakMap(), _staleTimeoutId = new WeakMap(), _refetchIntervalId = new WeakMap(), _currentRefetchInterval = new WeakMap(), _trackedProps = new WeakMap(), _QueryObserver_instances = new WeakSet(), executeFetch_fn = function(fetchOptions) { __privateMethod(this, _QueryObserver_instances, updateQuery_fn).call(this); let promise = __privateGet(this, _currentQuery).fetch( this.options, @@ -2254,19 +2318,21 @@ function replaceAt(array, index, value) { copy[index] = value; return copy; } -var _client2, _result, _queries2, _observers2, _combinedResult, _lastCombine, _lastResult, _QueriesObserver_instances, combineResult_fn, findMatchingObservers_fn, onUpdate_fn, notify_fn2, _a10; +var _client2, _result, _queries2, _options, _observers2, _combinedResult, _lastCombine, _lastResult, _QueriesObserver_instances, combineResult_fn, findMatchingObservers_fn, onUpdate_fn, notify_fn2, _a10; var QueriesObserver = (_a10 = class extends Subscribable { - constructor(client, queries, _options) { + constructor(client, queries, options) { super(); __privateAdd(this, _QueriesObserver_instances); __privateAdd(this, _client2); __privateAdd(this, _result); __privateAdd(this, _queries2); + __privateAdd(this, _options); __privateAdd(this, _observers2); __privateAdd(this, _combinedResult); __privateAdd(this, _lastCombine); __privateAdd(this, _lastResult); __privateSet(this, _client2, client); + __privateSet(this, _options, options); __privateSet(this, _queries2, []); __privateSet(this, _observers2, []); __privateSet(this, _result, []); @@ -2292,8 +2358,9 @@ var QueriesObserver = (_a10 = class extends Subscribable { observer.destroy(); }); } - setQueries(queries, _options, notifyOptions) { + setQueries(queries, options, notifyOptions) { __privateSet(this, _queries2, queries); + __privateSet(this, _options, options); notifyManager.batch(() => { const prevObservers = __privateGet(this, _observers2); const newObserverMatches = __privateMethod(this, _QueriesObserver_instances, findMatchingObservers_fn).call(this, __privateGet(this, _queries2)); @@ -2357,7 +2424,7 @@ var QueriesObserver = (_a10 = class extends Subscribable { } ]; } -}, _client2 = new WeakMap(), _result = new WeakMap(), _queries2 = new WeakMap(), _observers2 = new WeakMap(), _combinedResult = new WeakMap(), _lastCombine = new WeakMap(), _lastResult = new WeakMap(), _QueriesObserver_instances = new WeakSet(), combineResult_fn = function(input, combine) { +}, _client2 = new WeakMap(), _result = new WeakMap(), _queries2 = new WeakMap(), _options = new WeakMap(), _observers2 = new WeakMap(), _combinedResult = new WeakMap(), _lastCombine = new WeakMap(), _lastResult = new WeakMap(), _QueriesObserver_instances = new WeakSet(), combineResult_fn = function(input, combine) { if (combine) { if (!__privateGet(this, _combinedResult) || __privateGet(this, _result) !== __privateGet(this, _lastResult) || combine !== __privateGet(this, _lastCombine)) { __privateSet(this, _lastCombine, combine); @@ -2371,41 +2438,35 @@ var QueriesObserver = (_a10 = class extends Subscribable { } return input; }, findMatchingObservers_fn = function(queries) { - const prevObservers = __privateGet(this, _observers2); const prevObserversMap = new Map( - prevObservers.map((observer) => [observer.options.queryHash, observer]) + __privateGet(this, _observers2).map((observer) => [observer.options.queryHash, observer]) ); - const defaultedQueryOptions = queries.map( - (options) => __privateGet(this, _client2).defaultQueryOptions(options) - ); - const matchingObservers = defaultedQueryOptions.flatMap((defaultedOptions) => { - const match = prevObserversMap.get(defaultedOptions.queryHash); - if (match != null) { - return [{ defaultedQueryOptions: defaultedOptions, observer: match }]; - } - return []; - }); - const matchedQueryHashes = new Set( - matchingObservers.map((match) => match.defaultedQueryOptions.queryHash) - ); - const unmatchedQueries = defaultedQueryOptions.filter( - (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash) - ); - const getObserver = (options) => { + const observers = []; + queries.forEach((options) => { const defaultedOptions = __privateGet(this, _client2).defaultQueryOptions(options); - const currentObserver = __privateGet(this, _observers2).find( - (o) => o.options.queryHash === defaultedOptions.queryHash - ); - return currentObserver ?? new QueryObserver(__privateGet(this, _client2), defaultedOptions); - }; - const newOrReusedObservers = unmatchedQueries.map((options) => { - return { - defaultedQueryOptions: options, - observer: getObserver(options) - }; + const match = prevObserversMap.get(defaultedOptions.queryHash); + if (match) { + observers.push({ + defaultedQueryOptions: defaultedOptions, + observer: match + }); + } else { + const existingObserver = __privateGet(this, _observers2).find( + (o) => o.options.queryHash === defaultedOptions.queryHash + ); + observers.push({ + defaultedQueryOptions: defaultedOptions, + observer: existingObserver ?? new QueryObserver(__privateGet(this, _client2), defaultedOptions) + }); + } + }); + return observers.sort((a, b) => { + return queries.findIndex( + (q) => q.queryHash === a.defaultedQueryOptions.queryHash + ) - queries.findIndex( + (q) => q.queryHash === b.defaultedQueryOptions.queryHash + ); }); - const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions); - return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries); }, onUpdate_fn = function(observer, result) { const index = __privateGet(this, _observers2).indexOf(observer); if (index !== -1) { @@ -2413,11 +2474,18 @@ var QueriesObserver = (_a10 = class extends Subscribable { __privateMethod(this, _QueriesObserver_instances, notify_fn2).call(this); } }, notify_fn2 = function() { - notifyManager.batch(() => { - this.listeners.forEach((listener) => { - listener(__privateGet(this, _result)); - }); - }); + var _a12; + if (this.hasListeners()) { + const previousResult = __privateGet(this, _combinedResult); + const newResult = __privateMethod(this, _QueriesObserver_instances, combineResult_fn).call(this, __privateGet(this, _result), (_a12 = __privateGet(this, _options)) == null ? void 0 : _a12.combine); + if (previousResult !== newResult) { + notifyManager.batch(() => { + this.listeners.forEach((listener) => { + listener(__privateGet(this, _result)); + }); + }); + } + } }, _a10); // node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js @@ -2806,7 +2874,7 @@ var getHasError = ({ var defaultThrowOnError = (_error, query) => query.state.data === void 0; var ensureSuspenseTimers = (defaultedOptions) => { if (defaultedOptions.suspense) { - if (typeof defaultedOptions.staleTime !== "number") { + if (defaultedOptions.staleTime === void 0) { defaultedOptions.staleTime = 1e3; } if (typeof defaultedOptions.gcTime === "number") { @@ -2909,7 +2977,7 @@ function useQueries({ // node_modules/@tanstack/react-query/build/modern/useBaseQuery.js var React6 = __toESM(require_react(), 1); function useBaseQuery(options, Observer, queryClient) { - var _a12, _b, _c, _d; + var _a12, _b, _c, _d, _e; if (true) { if (typeof options !== "object" || Array.isArray(options)) { throw new Error( @@ -2929,6 +2997,7 @@ function useBaseQuery(options, Observer, queryClient) { ensureSuspenseTimers(defaultedOptions); ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary); useClearResetErrorBoundary(errorResetBoundary); + const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash); const [observer] = React6.useState( () => new Observer( client, @@ -2968,6 +3037,18 @@ function useBaseQuery(options, Observer, queryClient) { defaultedOptions, result ); + if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) { + const promise = isNewCacheEntry ? ( + // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted + fetchOptimistic(defaultedOptions, observer, errorResetBoundary) + ) : ( + // subscribe to the "cache promise" so that we can finalize the currentThenable once data comes in + (_e = client.getQueryCache().get(defaultedOptions.queryHash)) == null ? void 0 : _e.promise + ); + promise == null ? void 0 : promise.catch(noop2).finally(() => { + observer.updateResult(); + }); + } return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result; } diff --git a/node_modules/.vite/deps/@tanstack_react-query.js.map b/node_modules/.vite/deps/@tanstack_react-query.js.map index 2f1317c5..5cb7def0 100644 --- a/node_modules/.vite/deps/@tanstack_react-query.js.map +++ b/node_modules/.vite/deps/@tanstack_react-query.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../@tanstack/query-core/src/subscribable.ts", "../../@tanstack/query-core/src/utils.ts", "../../@tanstack/query-core/src/focusManager.ts", "../../@tanstack/query-core/src/onlineManager.ts", "../../@tanstack/query-core/src/retryer.ts", "../../@tanstack/query-core/src/notifyManager.ts", "../../@tanstack/query-core/src/removable.ts", "../../@tanstack/query-core/src/query.ts", "../../@tanstack/query-core/src/queryCache.ts", "../../@tanstack/query-core/src/mutation.ts", "../../@tanstack/query-core/src/mutationCache.ts", "../../@tanstack/query-core/src/infiniteQueryBehavior.ts", "../../@tanstack/query-core/src/queryClient.ts", "../../@tanstack/query-core/src/queryObserver.ts", "../../@tanstack/query-core/src/queriesObserver.ts", "../../@tanstack/query-core/src/infiniteQueryObserver.ts", "../../@tanstack/query-core/src/mutationObserver.ts", "../../@tanstack/query-core/src/hydration.ts", "../../@tanstack/react-query/src/useQueries.ts", "../../@tanstack/react-query/src/QueryClientProvider.tsx", "../../@tanstack/react-query/src/isRestoring.ts", "../../@tanstack/react-query/src/QueryErrorResetBoundary.tsx", "../../@tanstack/react-query/src/errorBoundaryUtils.ts", "../../@tanstack/react-query/src/utils.ts", "../../@tanstack/react-query/src/suspense.ts", "../../@tanstack/react-query/src/useBaseQuery.ts", "../../@tanstack/react-query/src/useQuery.ts", "../../@tanstack/react-query/src/useSuspenseQuery.ts", "../../@tanstack/react-query/src/useSuspenseInfiniteQuery.ts", "../../@tanstack/react-query/src/useSuspenseQueries.ts", "../../@tanstack/react-query/src/usePrefetchQuery.tsx", "../../@tanstack/react-query/src/usePrefetchInfiniteQuery.tsx", "../../@tanstack/react-query/src/queryOptions.ts", "../../@tanstack/react-query/src/infiniteQueryOptions.ts", "../../@tanstack/react-query/src/HydrationBoundary.tsx", "../../@tanstack/react-query/src/useIsFetching.ts", "../../@tanstack/react-query/src/useMutationState.ts", "../../@tanstack/react-query/src/useMutation.ts", "../../@tanstack/react-query/src/useInfiniteQuery.ts"], - "sourcesContent": ["export class Subscribable {\n protected listeners = new Set()\n\n constructor() {\n this.subscribe = this.subscribe.bind(this)\n }\n\n subscribe(listener: TListener): () => void {\n this.listeners.add(listener)\n\n this.onSubscribe()\n\n return () => {\n this.listeners.delete(listener)\n this.onUnsubscribe()\n }\n }\n\n hasListeners(): boolean {\n return this.listeners.size > 0\n }\n\n protected onSubscribe(): void {\n // Do nothing\n }\n\n protected onUnsubscribe(): void {\n // Do nothing\n }\n}\n", "import type {\n DefaultError,\n Enabled,\n FetchStatus,\n MutationKey,\n MutationStatus,\n QueryFunction,\n QueryKey,\n QueryOptions,\n StaleTime,\n} from './types'\nimport type { Mutation } from './mutation'\nimport type { FetchOptions, Query } from './query'\n\n// TYPES\n\nexport interface QueryFilters {\n /**\n * Filter to active queries, inactive queries or all queries\n */\n type?: QueryTypeFilter\n /**\n * Match query key exactly\n */\n exact?: boolean\n /**\n * Include queries matching this predicate function\n */\n predicate?: (query: Query) => boolean\n /**\n * Include queries matching this query key\n */\n queryKey?: QueryKey\n /**\n * Include or exclude stale queries\n */\n stale?: boolean\n /**\n * Include queries matching their fetchStatus\n */\n fetchStatus?: FetchStatus\n}\n\nexport interface MutationFilters {\n /**\n * Match mutation key exactly\n */\n exact?: boolean\n /**\n * Include mutations matching this predicate function\n */\n predicate?: (mutation: Mutation) => boolean\n /**\n * Include mutations matching this mutation key\n */\n mutationKey?: MutationKey\n /**\n * Filter by mutation status\n */\n status?: MutationStatus\n}\n\nexport type Updater = TOutput | ((input: TInput) => TOutput)\n\nexport type QueryTypeFilter = 'all' | 'active' | 'inactive'\n\n// UTILS\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in globalThis\n\nexport function noop(): undefined {\n return undefined\n}\n\nexport function functionalUpdate(\n updater: Updater,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as (_: TInput) => TOutput)(input)\n : updater\n}\n\nexport function isValidTimeout(value: unknown): value is number {\n return typeof value === 'number' && value >= 0 && value !== Infinity\n}\n\nexport function timeUntilStale(updatedAt: number, staleTime?: number): number {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport function resolveStaleTime<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n staleTime: undefined | StaleTime,\n query: Query,\n): number | undefined {\n return typeof staleTime === 'function' ? staleTime(query) : staleTime\n}\n\nexport function resolveEnabled<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n enabled: undefined | Enabled,\n query: Query,\n): boolean | undefined {\n return typeof enabled === 'function' ? enabled(query) : enabled\n}\n\nexport function matchQuery(\n filters: QueryFilters,\n query: Query,\n): boolean {\n const {\n type = 'all',\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale,\n } = filters\n\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false\n }\n }\n\n if (type !== 'all') {\n const isActive = query.isActive()\n if (type === 'active' && !isActive) {\n return false\n }\n if (type === 'inactive' && isActive) {\n return false\n }\n }\n\n if (typeof stale === 'boolean' && query.isStale() !== stale) {\n return false\n }\n\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false\n }\n\n if (predicate && !predicate(query)) {\n return false\n }\n\n return true\n}\n\nexport function matchMutation(\n filters: MutationFilters,\n mutation: Mutation,\n): boolean {\n const { exact, status, predicate, mutationKey } = filters\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false\n }\n }\n\n if (status && mutation.state.status !== status) {\n return false\n }\n\n if (predicate && !predicate(mutation)) {\n return false\n }\n\n return true\n}\n\nexport function hashQueryKeyByOptions(\n queryKey: TQueryKey,\n options?: Pick, 'queryKeyHashFn'>,\n): string {\n const hashFn = options?.queryKeyHashFn || hashKey\n return hashFn(queryKey)\n}\n\n/**\n * Default query & mutation keys hash function.\n * Hashes the value into a stable hash.\n */\nexport function hashKey(queryKey: QueryKey | MutationKey): string {\n return JSON.stringify(queryKey, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key]\n return result\n }, {} as any)\n : val,\n )\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport function partialMatchKey(a: QueryKey, b: QueryKey): boolean\nexport function partialMatchKey(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]))\n }\n\n return false\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep(a: unknown, b: T): T\nexport function replaceEqualDeep(a: any, b: any): any {\n if (a === b) {\n return a\n }\n\n const array = isPlainArray(a) && isPlainArray(b)\n\n if (array || (isPlainObject(a) && isPlainObject(b))) {\n const aItems = array ? a : Object.keys(a)\n const aSize = aItems.length\n const bItems = array ? b : Object.keys(b)\n const bSize = bItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i]\n if (\n ((!array && aItems.includes(key)) || array) &&\n a[key] === undefined &&\n b[key] === undefined\n ) {\n copy[key] = undefined\n equalItems++\n } else {\n copy[key] = replaceEqualDeep(a[key], b[key])\n if (copy[key] === a[key] && a[key] !== undefined) {\n equalItems++\n }\n }\n }\n\n return aSize === bSize && equalItems === aSize ? a : copy\n }\n\n return b\n}\n\n/**\n * Shallow compare objects.\n */\nexport function shallowEqualObjects>(\n a: T,\n b: T | undefined,\n): boolean {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false\n }\n\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport function isPlainObject(o: any): o is Object {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has no constructor\n const ctor = o.constructor\n if (ctor === undefined) {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Handles Objects created by Object.create()\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function sleep(timeout: number): Promise {\n return new Promise((resolve) => {\n setTimeout(resolve, timeout)\n })\n}\n\nexport function replaceData<\n TData,\n TOptions extends QueryOptions,\n>(prevData: TData | undefined, data: TData, options: TOptions): TData {\n if (typeof options.structuralSharing === 'function') {\n return options.structuralSharing(prevData, data) as TData\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== 'production') {\n try {\n return replaceEqualDeep(prevData, data)\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`,\n )\n }\n }\n // Structurally share data between prev and new data if needed\n return replaceEqualDeep(prevData, data)\n }\n return data\n}\n\nexport function keepPreviousData(\n previousData: T | undefined,\n): T | undefined {\n return previousData\n}\n\nexport function addToEnd(items: Array, item: T, max = 0): Array {\n const newItems = [...items, item]\n return max && newItems.length > max ? newItems.slice(1) : newItems\n}\n\nexport function addToStart(items: Array, item: T, max = 0): Array {\n const newItems = [item, ...items]\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems\n}\n\nexport const skipToken = Symbol()\nexport type SkipToken = typeof skipToken\n\nexport function ensureQueryFn<\n TQueryFnData = unknown,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: {\n queryFn?: QueryFunction | SkipToken\n queryHash?: string\n },\n fetchOptions?: FetchOptions,\n): QueryFunction {\n if (process.env.NODE_ENV !== 'production') {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`,\n )\n }\n }\n\n // if we attempt to retry a fetch that was triggered from an initialPromise\n // when we don't have a queryFn yet, we can't retry, so we just return the already rejected initialPromise\n // if an observer has already mounted, we will be able to retry with that queryFn\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise!\n }\n\n if (!options.queryFn || options.queryFn === skipToken) {\n return () =>\n Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`))\n }\n\n return options.queryFn\n}\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (focused: boolean) => void\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n const changed = this.#focused !== focused\n if (changed) {\n this.#focused = focused\n this.onFocus()\n }\n }\n\n onFocus(): void {\n const isFocused = this.isFocused()\n this.listeners.forEach((listener) => {\n listener(isFocused)\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable {\n #online = true\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\n }\n\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n", "import { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { isServer, sleep } from './utils'\nimport type { CancelOptions, DefaultError, NetworkMode } from './types'\n\n// TYPES\n\ninterface RetryerConfig {\n fn: () => TData | Promise\n initialPromise?: Promise\n abort?: () => void\n onError?: (error: TError) => void\n onSuccess?: (data: TData) => void\n onFail?: (failureCount: number, error: TError) => void\n onPause?: () => void\n onContinue?: () => void\n retry?: RetryValue\n retryDelay?: RetryDelayValue\n networkMode: NetworkMode | undefined\n canRun: () => boolean\n}\n\nexport interface Retryer {\n promise: Promise\n cancel: (cancelOptions?: CancelOptions) => void\n continue: () => Promise\n cancelRetry: () => void\n continueRetry: () => void\n canStart: () => boolean\n start: () => Promise\n}\n\nexport type RetryValue = boolean | number | ShouldRetryFunction\n\ntype ShouldRetryFunction = (\n failureCount: number,\n error: TError,\n) => boolean\n\nexport type RetryDelayValue = number | RetryDelayFunction\n\ntype RetryDelayFunction = (\n failureCount: number,\n error: TError,\n) => number\n\nfunction defaultRetryDelay(failureCount: number) {\n return Math.min(1000 * 2 ** failureCount, 30000)\n}\n\nexport function canFetch(networkMode: NetworkMode | undefined): boolean {\n return (networkMode ?? 'online') === 'online'\n ? onlineManager.isOnline()\n : true\n}\n\nexport class CancelledError extends Error {\n revert?: boolean\n silent?: boolean\n constructor(options?: CancelOptions) {\n super('CancelledError')\n this.revert = options?.revert\n this.silent = options?.silent\n }\n}\n\nexport function isCancelledError(value: any): value is CancelledError {\n return value instanceof CancelledError\n}\n\nexport function createRetryer(\n config: RetryerConfig,\n): Retryer {\n let isRetryCancelled = false\n let failureCount = 0\n let isResolved = false\n let continueFn: ((value?: unknown) => void) | undefined\n let promiseResolve: (data: TData) => void\n let promiseReject: (error: TError) => void\n\n const promise = new Promise((outerResolve, outerReject) => {\n promiseResolve = outerResolve\n promiseReject = outerReject\n })\n\n const cancel = (cancelOptions?: CancelOptions): void => {\n if (!isResolved) {\n reject(new CancelledError(cancelOptions))\n\n config.abort?.()\n }\n }\n const cancelRetry = () => {\n isRetryCancelled = true\n }\n\n const continueRetry = () => {\n isRetryCancelled = false\n }\n\n const canContinue = () =>\n focusManager.isFocused() &&\n (config.networkMode === 'always' || onlineManager.isOnline()) &&\n config.canRun()\n\n const canStart = () => canFetch(config.networkMode) && config.canRun()\n\n const resolve = (value: any) => {\n if (!isResolved) {\n isResolved = true\n config.onSuccess?.(value)\n continueFn?.()\n promiseResolve(value)\n }\n }\n\n const reject = (value: any) => {\n if (!isResolved) {\n isResolved = true\n config.onError?.(value)\n continueFn?.()\n promiseReject(value)\n }\n }\n\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved || canContinue()) {\n continueResolve(value)\n }\n }\n config.onPause?.()\n }).then(() => {\n continueFn = undefined\n if (!isResolved) {\n config.onContinue?.()\n }\n })\n }\n\n // Create loop function\n const run = () => {\n // Do nothing if already resolved\n if (isResolved) {\n return\n }\n\n let promiseOrValue: any\n\n // we can re-use config.initialPromise on the first call of run()\n const initialPromise =\n failureCount === 0 ? config.initialPromise : undefined\n\n // Execute query\n try {\n promiseOrValue = initialPromise ?? config.fn()\n } catch (error) {\n promiseOrValue = Promise.reject(error)\n }\n\n Promise.resolve(promiseOrValue)\n .then(resolve)\n .catch((error) => {\n // Stop if the fetch is already resolved\n if (isResolved) {\n return\n }\n\n // Do we need to retry the request?\n const retry = config.retry ?? (isServer ? 0 : 3)\n const retryDelay = config.retryDelay ?? defaultRetryDelay\n const delay =\n typeof retryDelay === 'function'\n ? retryDelay(failureCount, error)\n : retryDelay\n const shouldRetry =\n retry === true ||\n (typeof retry === 'number' && failureCount < retry) ||\n (typeof retry === 'function' && retry(failureCount, error))\n\n if (isRetryCancelled || !shouldRetry) {\n // We are done if the query does not need to be retried\n reject(error)\n return\n }\n\n failureCount++\n\n // Notify on fail\n config.onFail?.(failureCount, error)\n\n // Delay\n sleep(delay)\n // Pause if the document is not visible or when the device is offline\n .then(() => {\n return canContinue() ? undefined : pause()\n })\n .then(() => {\n if (isRetryCancelled) {\n reject(error)\n } else {\n run()\n }\n })\n })\n }\n\n return {\n promise,\n cancel,\n continue: () => {\n continueFn?.()\n return promise\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n // Start loop\n if (canStart()) {\n run()\n } else {\n pause().then(run)\n }\n return promise\n },\n }\n}\n", "// TYPES\n\ntype NotifyCallback = () => void\n\ntype NotifyFunction = (callback: () => void) => void\n\ntype BatchNotifyFunction = (callback: () => void) => void\n\ntype BatchCallsCallback> = (...args: T) => void\n\ntype ScheduleFunction = (callback: () => void) => void\n\nexport function createNotifyManager() {\n let queue: Array = []\n let transactions = 0\n let notifyFn: NotifyFunction = (callback) => {\n callback()\n }\n let batchNotifyFn: BatchNotifyFunction = (callback: () => void) => {\n callback()\n }\n let scheduleFn: ScheduleFunction = (cb) => setTimeout(cb, 0)\n\n const schedule = (callback: NotifyCallback): void => {\n if (transactions) {\n queue.push(callback)\n } else {\n scheduleFn(() => {\n notifyFn(callback)\n })\n }\n }\n const flush = (): void => {\n const originalQueue = queue\n queue = []\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback)\n })\n })\n })\n }\n }\n\n return {\n batch: (callback: () => T): T => {\n let result\n transactions++\n try {\n result = callback()\n } finally {\n transactions--\n if (!transactions) {\n flush()\n }\n }\n return result\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: >(\n callback: BatchCallsCallback,\n ): BatchCallsCallback => {\n return (...args) => {\n schedule(() => {\n callback(...args)\n })\n }\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn: NotifyFunction) => {\n notifyFn = fn\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn: BatchNotifyFunction) => {\n batchNotifyFn = fn\n },\n setScheduler: (fn: ScheduleFunction) => {\n scheduleFn = fn\n },\n } as const\n}\n\n// SINGLETON\nexport const notifyManager = createNotifyManager()\n", "import { isServer, isValidTimeout } from './utils'\n\nexport abstract class Removable {\n gcTime!: number\n #gcTimeout?: ReturnType\n\n destroy(): void {\n this.clearGcTimeout()\n }\n\n protected scheduleGc(): void {\n this.clearGcTimeout()\n\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = setTimeout(() => {\n this.optionalRemove()\n }, this.gcTime)\n }\n }\n\n protected updateGcTime(newGcTime: number | undefined): void {\n // Default to 5 minutes (Infinity for server-side) if no gcTime is set\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1000),\n )\n }\n\n protected clearGcTimeout() {\n if (this.#gcTimeout) {\n clearTimeout(this.#gcTimeout)\n this.#gcTimeout = undefined\n }\n }\n\n protected abstract optionalRemove(): void\n}\n", "import {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type {\n CancelOptions,\n DefaultError,\n FetchStatus,\n InitialDataFunction,\n OmitKeyof,\n QueryFunction,\n QueryFunctionContext,\n QueryKey,\n QueryMeta,\n QueryOptions,\n QueryStatus,\n SetDataOptions,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n cache: QueryCache\n queryKey: TQueryKey\n queryHash: string\n options?: QueryOptions\n defaultOptions?: QueryOptions\n state?: QueryState\n}\n\nexport interface QueryState {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchFailureReason: TError | null\n fetchMeta: FetchMeta | null\n isInvalidated: boolean\n status: QueryStatus\n fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n fetchFn: () => unknown | Promise\n fetchOptions?: FetchOptions\n signal: AbortSignal\n options: QueryOptions\n queryKey: TQueryKey\n state: QueryState\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext,\n query: Query,\n ) => void\n}\n\nexport type FetchDirection = 'forward' | 'backward'\n\nexport interface FetchMeta {\n fetchMore?: { direction: FetchDirection }\n}\n\nexport interface FetchOptions {\n cancelRefetch?: boolean\n meta?: FetchMeta\n initialPromise?: Promise\n}\n\ninterface FailedAction {\n type: 'failed'\n failureCount: number\n error: TError\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: FetchMeta\n}\n\ninterface SuccessAction {\n data: TData | undefined\n type: 'success'\n dataUpdatedAt?: number\n manual?: boolean\n}\n\ninterface ErrorAction {\n type: 'error'\n error: TError\n}\n\ninterface InvalidateAction {\n type: 'invalidate'\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction {\n type: 'setState'\n state: Partial>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action =\n | ContinueAction\n | ErrorAction\n | FailedAction\n | FetchAction\n | InvalidateAction\n | PauseAction\n | SetStateAction\n | SuccessAction\n\nexport interface SetStateOptions {\n meta?: any\n}\n\n// CLASS\n\nexport class Query<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n queryKey: TQueryKey\n queryHash: string\n options!: QueryOptions\n state: QueryState\n isFetchingOptimistic?: boolean\n\n #initialState: QueryState\n #revertState?: QueryState\n #cache: QueryCache\n #retryer?: Retryer\n observers: Array>\n #defaultOptions?: QueryOptions\n #abortSignalConsumed: boolean\n\n constructor(config: QueryConfig) {\n super()\n\n this.#abortSignalConsumed = false\n this.#defaultOptions = config.defaultOptions\n this.setOptions(config.options)\n this.observers = []\n this.#cache = config.cache\n this.queryKey = config.queryKey\n this.queryHash = config.queryHash\n this.#initialState = getDefaultState(this.options)\n this.state = config.state ?? this.#initialState\n this.scheduleGc()\n }\n get meta(): QueryMeta | undefined {\n return this.options.meta\n }\n\n get promise(): Promise | undefined {\n return this.#retryer?.promise\n }\n\n setOptions(\n options?: QueryOptions,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n protected optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === 'idle') {\n this.#cache.remove(this)\n }\n }\n\n setData(\n newData: TData,\n options?: SetDataOptions & { manual: boolean },\n ): TData {\n const data = replaceData(this.state.data, newData, this.options)\n\n // Set data and mark it as cached\n this.#dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual,\n })\n\n return data\n }\n\n setState(\n state: Partial>,\n setStateOptions?: SetStateOptions,\n ): void {\n this.#dispatch({ type: 'setState', state, setStateOptions })\n }\n\n cancel(options?: CancelOptions): Promise {\n const promise = this.#retryer?.promise\n this.#retryer?.cancel(options)\n return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n }\n\n destroy(): void {\n super.destroy()\n\n this.cancel({ silent: true })\n }\n\n reset(): void {\n this.destroy()\n this.setState(this.#initialState)\n }\n\n isActive(): boolean {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false,\n )\n }\n\n isDisabled(): boolean {\n return this.getObserversCount() > 0 && !this.isActive()\n }\n\n isStale(): boolean {\n if (this.state.isInvalidated) {\n return true\n }\n\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale,\n )\n }\n\n return this.state.data === undefined\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n this.state.data === undefined ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n onOnline(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n addObserver(observer: QueryObserver): void {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer)\n\n // Stop the query from being garbage collected\n this.clearGcTimeout()\n\n this.#cache.notify({ type: 'observerAdded', query: this, observer })\n }\n }\n\n removeObserver(observer: QueryObserver): void {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer)\n\n if (!this.observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true })\n } else {\n this.#retryer.cancelRetry()\n }\n }\n\n this.scheduleGc()\n }\n\n this.#cache.notify({ type: 'observerRemoved', query: this, observer })\n }\n }\n\n getObserversCount(): number {\n return this.observers.length\n }\n\n invalidate(): void {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: 'invalidate' })\n }\n }\n\n fetch(\n options?: QueryOptions,\n fetchOptions?: FetchOptions,\n ): Promise {\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.data !== undefined && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetch\n this.cancel({ silent: true })\n } else if (this.#retryer) {\n // make sure that retries that were potentially cancelled due to unmounts can continue\n this.#retryer.continueRetry()\n // Return current promise if we are already fetching\n return this.#retryer.promise\n }\n }\n\n // Update config if passed, otherwise the config from the last execution is used\n if (options) {\n this.setOptions(options)\n }\n\n // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn)\n if (observer) {\n this.setOptions(observer.options)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n )\n }\n }\n\n const abortController = new AbortController()\n\n // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true\n return abortController.signal\n },\n })\n }\n\n // Create fetch function\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions)\n\n // Create query function context\n const queryFnContext: OmitKeyof<\n QueryFunctionContext,\n 'signal'\n > = {\n queryKey: this.queryKey,\n meta: this.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n this.#abortSignalConsumed = false\n if (this.options.persister) {\n return this.options.persister(\n queryFn as QueryFunction,\n queryFnContext as QueryFunctionContext,\n this as unknown as Query,\n )\n }\n\n return queryFn(queryFnContext as QueryFunctionContext)\n }\n\n // Trigger behavior hook\n const context: OmitKeyof<\n FetchContext,\n 'signal'\n > = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(\n context as FetchContext,\n this as unknown as Query,\n )\n\n // Store state in case the current fetch needs to be reverted\n this.#revertState = this.state\n\n // Set to fetching state if not already in it\n if (\n this.state.fetchStatus === 'idle' ||\n this.state.fetchMeta !== context.fetchOptions?.meta\n ) {\n this.#dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n }\n\n const onError = (error: TError | { silent?: boolean }) => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.#dispatch({\n type: 'error',\n error: error as TError,\n })\n }\n\n if (!isCancelledError(error)) {\n // Notify cache callback\n this.#cache.config.onError?.(\n error as any,\n this as Query,\n )\n this.#cache.config.onSettled?.(\n this.state.data,\n error as any,\n this as Query,\n )\n }\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n }\n\n // Try to fetch the data\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise as\n | Promise\n | undefined,\n fn: context.fetchFn as () => Promise,\n abort: abortController.abort.bind(abortController),\n onSuccess: (data) => {\n if (data === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n )\n }\n onError(new Error(`${this.queryHash} data is undefined`) as any)\n return\n }\n\n try {\n this.setData(data)\n } catch (error) {\n onError(error as TError)\n return\n }\n\n // Notify cache callback\n this.#cache.config.onSuccess?.(data, this as Query)\n this.#cache.config.onSettled?.(\n data,\n this.state.error as any,\n this as Query,\n )\n\n if (!this.isFetchingOptimistic) {\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n this.isFetchingOptimistic = false\n },\n onError,\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true,\n })\n\n return this.#retryer.start()\n }\n\n #dispatch(action: Action): void {\n const reducer = (\n state: QueryState,\n ): QueryState => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n fetchStatus: 'paused',\n }\n case 'continue':\n return {\n ...state,\n fetchStatus: 'fetching',\n }\n case 'fetch':\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null,\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null,\n }),\n }\n case 'error':\n const error = action.error\n\n if (isCancelledError(error) && error.revert && this.#revertState) {\n return { ...this.#revertState, fetchStatus: 'idle' }\n }\n\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: 'idle',\n status: 'error',\n }\n case 'invalidate':\n return {\n ...state,\n isInvalidated: true,\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate()\n })\n\n this.#cache.notify({ query: this, type: 'updated', action })\n })\n }\n}\n\nexport function fetchState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n data: TData | undefined,\n options: QueryOptions,\n) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? 'fetching' : 'paused',\n ...(data === undefined &&\n ({\n error: null,\n status: 'pending',\n } as const)),\n } as const\n}\n\nfunction getDefaultState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n options: QueryOptions,\n): QueryState {\n const data =\n typeof options.initialData === 'function'\n ? (options.initialData as InitialDataFunction)()\n : options.initialData\n\n const hasData = data !== undefined\n\n const initialDataUpdatedAt = hasData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? (initialDataUpdatedAt ?? Date.now()) : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'pending',\n fetchStatus: 'idle',\n }\n}\n", "import { hashQueryKeyByOptions, matchQuery } from './utils'\nimport { Query } from './query'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport type { QueryFilters } from './utils'\nimport type { Action, QueryState } from './query'\nimport type {\n DefaultError,\n NotifyEvent,\n QueryKey,\n QueryOptions,\n WithRequired,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { QueryObserver } from './queryObserver'\n\n// TYPES\n\ninterface QueryCacheConfig {\n onError?: (\n error: DefaultError,\n query: Query,\n ) => void\n onSuccess?: (data: unknown, query: Query) => void\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n query: Query,\n ) => void\n}\n\ninterface NotifyEventQueryAdded extends NotifyEvent {\n type: 'added'\n query: Query\n}\n\ninterface NotifyEventQueryRemoved extends NotifyEvent {\n type: 'removed'\n query: Query\n}\n\ninterface NotifyEventQueryUpdated extends NotifyEvent {\n type: 'updated'\n query: Query\n action: Action\n}\n\ninterface NotifyEventQueryObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n query: Query\n observer: QueryObserver\n}\n\ninterface NotifyEventQueryObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n query: Query\n observer: QueryObserver\n}\n\ninterface NotifyEventQueryObserverResultsUpdated extends NotifyEvent {\n type: 'observerResultsUpdated'\n query: Query\n}\n\ninterface NotifyEventQueryObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n query: Query\n observer: QueryObserver\n}\n\nexport type QueryCacheNotifyEvent =\n | NotifyEventQueryAdded\n | NotifyEventQueryRemoved\n | NotifyEventQueryUpdated\n | NotifyEventQueryObserverAdded\n | NotifyEventQueryObserverRemoved\n | NotifyEventQueryObserverResultsUpdated\n | NotifyEventQueryObserverOptionsUpdated\n\ntype QueryCacheListener = (event: QueryCacheNotifyEvent) => void\n\nexport interface QueryStore {\n has: (queryHash: string) => boolean\n set: (queryHash: string, query: Query) => void\n get: (queryHash: string) => Query | undefined\n delete: (queryHash: string) => void\n values: () => IterableIterator\n}\n\n// CLASS\n\nexport class QueryCache extends Subscribable {\n #queries: QueryStore\n\n constructor(public config: QueryCacheConfig = {}) {\n super()\n this.#queries = new Map()\n }\n\n build<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n client: QueryClient,\n options: WithRequired<\n QueryOptions,\n 'queryKey'\n >,\n state?: QueryState,\n ): Query {\n const queryKey = options.queryKey\n const queryHash =\n options.queryHash ?? hashQueryKeyByOptions(queryKey, options)\n let query = this.get(queryHash)\n\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey),\n })\n this.add(query)\n }\n\n return query\n }\n\n add(query: Query): void {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query)\n\n this.notify({\n type: 'added',\n query,\n })\n }\n }\n\n remove(query: Query): void {\n const queryInMap = this.#queries.get(query.queryHash)\n\n if (queryInMap) {\n query.destroy()\n\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash)\n }\n\n this.notify({ type: 'removed', query })\n }\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query)\n })\n })\n }\n\n get<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n queryHash: string,\n ): Query | undefined {\n return this.#queries.get(queryHash) as\n | Query\n | undefined\n }\n\n getAll(): Array {\n return [...this.#queries.values()]\n }\n\n find(\n filters: WithRequired,\n ): Query | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((query) =>\n matchQuery(defaultedFilters, query),\n ) as Query | undefined\n }\n\n findAll(filters: QueryFilters = {}): Array {\n const queries = this.getAll()\n return Object.keys(filters).length > 0\n ? queries.filter((query) => matchQuery(filters, query))\n : queries\n }\n\n notify(event: QueryCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n onFocus(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus()\n })\n })\n }\n\n onOnline(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline()\n })\n })\n }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { createRetryer } from './retryer'\nimport type {\n DefaultError,\n MutationMeta,\n MutationOptions,\n MutationStatus,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions\n state?: MutationState\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction {\n type: 'pending'\n isPaused: boolean\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action =\n | ContinueAction\n | ErrorAction\n | FailedAction\n | PendingAction\n | PauseAction\n | SuccessAction\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> extends Removable {\n state: MutationState\n options!: MutationOptions\n readonly mutationId: number\n\n #observers: Array>\n #mutationCache: MutationCache\n #retryer?: Retryer\n\n constructor(config: MutationConfig) {\n super()\n\n this.mutationId = config.mutationId\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options: MutationOptions,\n ): void {\n this.options = options\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this),\n })\n\n const restored = this.state.status === 'pending'\n const isPaused = !this.#retryer.canStart()\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables, isPaused })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n isPaused,\n })\n }\n }\n const data = await this.#retryer.start()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context!)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n } finally {\n this.#mutationCache.runNext(this)\n }\n }\n\n #dispatch(action: Action): void {\n const reducer = (\n state: MutationState,\n ): MutationState => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation\n observer: MutationObserver\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation\n observer: MutationObserver\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation\n observer: MutationObserver\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation\n action: Action\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable {\n #mutations: Map>>\n #mutationId: number\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = new Map()\n this.#mutationId = Date.now()\n }\n\n build(\n client: QueryClient,\n options: MutationOptions,\n state?: MutationState,\n ): Mutation {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation): void {\n const scope = scopeFor(mutation)\n const mutations = this.#mutations.get(scope) ?? []\n mutations.push(mutation)\n this.#mutations.set(scope, mutations)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation): void {\n const scope = scopeFor(mutation)\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations\n .get(scope)\n ?.filter((x) => x !== mutation)\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope)\n } else {\n this.#mutations.set(scope, mutations)\n }\n }\n }\n\n this.notify({ type: 'removed', mutation })\n }\n\n canRun(mutation: Mutation): boolean {\n const firstPendingMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m.state.status === 'pending')\n\n // we can run if there is no current pending mutation (start use-case)\n // or if WE are the first pending mutation (continue use-case)\n return !firstPendingMutation || firstPendingMutation === mutation\n }\n\n runNext(mutation: Mutation): Promise {\n const foundMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m !== mutation && m.state.isPaused)\n\n return foundMutation?.continue() ?? Promise.resolve()\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Array {\n return [...this.#mutations.values()].flat()\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n ) as Mutation | undefined\n }\n\n findAll(filters: MutationFilters = {}): Array {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused)\n\n return notifyManager.batch(() =>\n Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop)),\n ),\n )\n }\n}\n\nfunction scopeFor(mutation: Mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId)\n}\n", "import { addToEnd, addToStart, ensureQueryFn } from './utils'\nimport type { QueryBehavior } from './query'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n OmitKeyof,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior(\n pages?: number,\n): QueryBehavior> {\n return {\n onFetch: (context, query) => {\n const options = context.options as InfiniteQueryPageParamsOptions\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n let result: InfiniteData = { pages: [], pageParams: [] }\n let currentPage = 0\n\n const fetchFn = async () => {\n let cancelled = false\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true\n } else {\n context.signal.addEventListener('abort', () => {\n cancelled = true\n })\n }\n return context.signal\n },\n })\n }\n\n const queryFn = ensureQueryFn(context.options, context.fetchOptions)\n\n // Create function to fetch a page\n const fetchPage = async (\n data: InfiniteData,\n param: unknown,\n previous?: boolean,\n ): Promise> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (param == null && data.pages.length) {\n return Promise.resolve(data)\n }\n\n const queryFnContext: OmitKeyof<\n QueryFunctionContext,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? 'backward' : 'forward',\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const page = await queryFn(\n queryFnContext as QueryFunctionContext,\n )\n\n const { maxPages } = context.options\n const addTo = previous ? addToStart : addToEnd\n\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages),\n }\n }\n\n // fetch next / previous page?\n if (direction && oldPages.length) {\n const previous = direction === 'backward'\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams,\n }\n const param = pageParamFn(options, oldData)\n\n result = await fetchPage(oldData, param, previous)\n } else {\n const remainingPages = pages ?? oldPages.length\n\n // Fetch all pages\n do {\n const param =\n currentPage === 0\n ? (oldPageParams[0] ?? options.initialPageParam)\n : getNextPageParam(options, result)\n if (currentPage > 0 && param == null) {\n break\n }\n result = await fetchPage(result, param)\n currentPage++\n } while (currentPage < remainingPages)\n }\n\n return result\n }\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn as any,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal,\n },\n query,\n )\n }\n } else {\n context.fetchFn = fetchFn\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions,\n { pages, pageParams }: InfiniteData,\n): unknown | undefined {\n const lastIndex = pages.length - 1\n return pages.length > 0\n ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams,\n )\n : undefined\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions,\n { pages, pageParams }: InfiniteData,\n): unknown | undefined {\n return pages.length > 0\n ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams)\n : undefined\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions,\n data?: InfiniteData,\n): boolean {\n if (!data) return false\n return getNextPageParam(options, data) != null\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions,\n data?: InfiniteData,\n): boolean {\n if (!data || !options.getPreviousPageParam) return false\n return getPreviousPageParam(options, data) != null\n}\n", "import {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken,\n} from './utils'\nimport { QueryCache } from './queryCache'\nimport { MutationCache } from './mutationCache'\nimport { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { notifyManager } from './notifyManager'\nimport { infiniteQueryBehavior } from './infiniteQueryBehavior'\nimport type {\n CancelOptions,\n DataTag,\n DefaultError,\n DefaultOptions,\n DefaultedQueryObserverOptions,\n EnsureInfiniteQueryDataOptions,\n EnsureQueryDataOptions,\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n InfiniteData,\n InvalidateOptions,\n InvalidateQueryFilters,\n MutationKey,\n MutationObserverOptions,\n MutationOptions,\n NoInfer,\n OmitKeyof,\n QueryClientConfig,\n QueryKey,\n QueryObserverOptions,\n QueryOptions,\n RefetchOptions,\n RefetchQueryFilters,\n ResetOptions,\n SetDataOptions,\n} from './types'\nimport type { QueryState } from './query'\nimport type { MutationFilters, QueryFilters, Updater } from './utils'\n\n// TYPES\n\ninterface QueryDefaults {\n queryKey: QueryKey\n defaultOptions: OmitKeyof, 'queryKey'>\n}\n\ninterface MutationDefaults {\n mutationKey: MutationKey\n defaultOptions: MutationOptions\n}\n\n// CLASS\n\nexport class QueryClient {\n #queryCache: QueryCache\n #mutationCache: MutationCache\n #defaultOptions: DefaultOptions\n #queryDefaults: Map\n #mutationDefaults: Map\n #mountCount: number\n #unsubscribeFocus?: () => void\n #unsubscribeOnline?: () => void\n\n constructor(config: QueryClientConfig = {}) {\n this.#queryCache = config.queryCache || new QueryCache()\n this.#mutationCache = config.mutationCache || new MutationCache()\n this.#defaultOptions = config.defaultOptions || {}\n this.#queryDefaults = new Map()\n this.#mutationDefaults = new Map()\n this.#mountCount = 0\n }\n\n mount(): void {\n this.#mountCount++\n if (this.#mountCount !== 1) return\n\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations()\n this.#queryCache.onFocus()\n }\n })\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations()\n this.#queryCache.onOnline()\n }\n })\n }\n\n unmount(): void {\n this.#mountCount--\n if (this.#mountCount !== 0) return\n\n this.#unsubscribeFocus?.()\n this.#unsubscribeFocus = undefined\n\n this.#unsubscribeOnline?.()\n this.#unsubscribeOnline = undefined\n }\n\n isFetching(filters?: QueryFilters): number {\n return this.#queryCache.findAll({ ...filters, fetchStatus: 'fetching' })\n .length\n }\n\n isMutating(filters?: MutationFilters): number {\n return this.#mutationCache.findAll({ ...filters, status: 'pending' }).length\n }\n\n getQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = TTaggedQueryKey extends DataTag<\n unknown,\n infer TaggedValue\n >\n ? TaggedValue\n : TQueryFnData,\n >(queryKey: TTaggedQueryKey): TInferredQueryFnData | undefined\n getQueryData(queryKey: QueryKey) {\n const options = this.defaultQueryOptions({ queryKey })\n return this.#queryCache.get(options.queryHash)?.state.data\n }\n\n ensureQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: EnsureQueryDataOptions,\n ): Promise {\n const cachedData = this.getQueryData(options.queryKey)\n\n if (cachedData === undefined) return this.fetchQuery(options)\n else {\n const defaultedOptions = this.defaultQueryOptions(options)\n const query = this.#queryCache.build(this, defaultedOptions)\n\n if (\n options.revalidateIfStale &&\n query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))\n ) {\n void this.prefetchQuery(defaultedOptions)\n }\n\n return Promise.resolve(cachedData)\n }\n }\n\n getQueriesData(\n filters: QueryFilters,\n ): Array<[QueryKey, TQueryFnData | undefined]> {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data as TQueryFnData | undefined\n return [queryKey, data]\n })\n }\n\n setQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = TTaggedQueryKey extends DataTag<\n unknown,\n infer TaggedValue\n >\n ? TaggedValue\n : TQueryFnData,\n >(\n queryKey: TTaggedQueryKey,\n updater: Updater<\n NoInfer | undefined,\n NoInfer | undefined\n >,\n options?: SetDataOptions,\n ): TInferredQueryFnData | undefined {\n const defaultedOptions = this.defaultQueryOptions<\n any,\n any,\n unknown,\n any,\n QueryKey\n >({ queryKey })\n\n const query = this.#queryCache.get(\n defaultedOptions.queryHash,\n )\n const prevData = query?.state.data\n const data = functionalUpdate(updater, prevData)\n\n if (data === undefined) {\n return undefined\n }\n\n return this.#queryCache\n .build(this, defaultedOptions)\n .setData(data, { ...options, manual: true })\n }\n\n setQueriesData(\n filters: QueryFilters,\n updater: Updater,\n options?: SetDataOptions,\n ): Array<[QueryKey, TQueryFnData | undefined]> {\n return notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options),\n ]),\n )\n }\n\n getQueryState<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = TTaggedQueryKey extends DataTag<\n unknown,\n infer TaggedValue\n >\n ? TaggedValue\n : TQueryFnData,\n >(\n queryKey: TTaggedQueryKey,\n ): QueryState | undefined {\n const options = this.defaultQueryOptions({ queryKey })\n return this.#queryCache.get(options.queryHash)\n ?.state\n }\n\n removeQueries(filters?: QueryFilters): void {\n const queryCache = this.#queryCache\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query)\n })\n })\n }\n\n resetQueries(filters?: QueryFilters, options?: ResetOptions): Promise {\n const queryCache = this.#queryCache\n\n const refetchFilters: RefetchQueryFilters = {\n type: 'active',\n ...filters,\n }\n\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset()\n })\n return this.refetchQueries(refetchFilters, options)\n })\n }\n\n cancelQueries(\n filters: QueryFilters = {},\n cancelOptions: CancelOptions = {},\n ): Promise {\n const defaultedCancelOptions = { revert: true, ...cancelOptions }\n\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map((query) => query.cancel(defaultedCancelOptions)),\n )\n\n return Promise.all(promises).then(noop).catch(noop)\n }\n\n invalidateQueries(\n filters: InvalidateQueryFilters = {},\n options: InvalidateOptions = {},\n ): Promise {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate()\n })\n\n if (filters.refetchType === 'none') {\n return Promise.resolve()\n }\n const refetchFilters: RefetchQueryFilters = {\n ...filters,\n type: filters.refetchType ?? filters.type ?? 'active',\n }\n return this.refetchQueries(refetchFilters, options)\n })\n }\n\n refetchQueries(\n filters: RefetchQueryFilters = {},\n options?: RefetchOptions,\n ): Promise {\n const fetchOptions = {\n ...options,\n cancelRefetch: options?.cancelRefetch ?? true,\n }\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .filter((query) => !query.isDisabled())\n .map((query) => {\n let promise = query.fetch(undefined, fetchOptions)\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop)\n }\n return query.state.fetchStatus === 'paused'\n ? Promise.resolve()\n : promise\n }),\n )\n\n return Promise.all(promises).then(noop)\n }\n\n fetchQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options: FetchQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise {\n const defaultedOptions = this.defaultQueryOptions(options)\n\n // https://github.com/tannerlinsley/react-query/issues/652\n if (defaultedOptions.retry === undefined) {\n defaultedOptions.retry = false\n }\n\n const query = this.#queryCache.build(this, defaultedOptions)\n\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query),\n )\n ? query.fetch(defaultedOptions)\n : Promise.resolve(query.state.data as TData)\n }\n\n prefetchQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: FetchQueryOptions,\n ): Promise {\n return this.fetchQuery(options).then(noop).catch(noop)\n }\n\n fetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise> {\n options.behavior = infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n TPageParam\n >(options.pages)\n return this.fetchQuery(options as any)\n }\n\n prefetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop)\n }\n\n ensureInfiniteQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: EnsureInfiniteQueryDataOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise> {\n options.behavior = infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n TPageParam\n >(options.pages)\n\n return this.ensureQueryData(options as any)\n }\n\n resumePausedMutations(): Promise {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations()\n }\n return Promise.resolve()\n }\n\n getQueryCache(): QueryCache {\n return this.#queryCache\n }\n\n getMutationCache(): MutationCache {\n return this.#mutationCache\n }\n\n getDefaultOptions(): DefaultOptions {\n return this.#defaultOptions\n }\n\n setDefaultOptions(options: DefaultOptions): void {\n this.#defaultOptions = options\n }\n\n setQueryDefaults<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n queryKey: QueryKey,\n options: Partial<\n OmitKeyof<\n QueryObserverOptions,\n 'queryKey'\n >\n >,\n ): void {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options,\n })\n }\n\n getQueryDefaults(\n queryKey: QueryKey,\n ): OmitKeyof, 'queryKey'> {\n const defaults = [...this.#queryDefaults.values()]\n\n let result: OmitKeyof<\n QueryObserverOptions,\n 'queryKey'\n > = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n result = { ...result, ...queryDefault.defaultOptions }\n }\n })\n return result\n }\n\n setMutationDefaults<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n >(\n mutationKey: MutationKey,\n options: OmitKeyof<\n MutationObserverOptions,\n 'mutationKey'\n >,\n ): void {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options,\n })\n }\n\n getMutationDefaults(\n mutationKey: MutationKey,\n ): MutationObserverOptions {\n const defaults = [...this.#mutationDefaults.values()]\n\n let result: MutationObserverOptions = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions }\n }\n })\n\n return result\n }\n\n defaultQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options:\n | QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >\n | DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n > {\n if (options._defaulted) {\n return options as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true,\n }\n\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions,\n )\n }\n\n // dependent default values\n if (defaultedOptions.refetchOnReconnect === undefined) {\n defaultedOptions.refetchOnReconnect =\n defaultedOptions.networkMode !== 'always'\n }\n if (defaultedOptions.throwOnError === undefined) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense\n }\n\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = 'offlineFirst'\n }\n\n if (\n defaultedOptions.enabled !== true &&\n defaultedOptions.queryFn === skipToken\n ) {\n defaultedOptions.enabled = false\n }\n\n return defaultedOptions as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n defaultMutationOptions>(\n options?: T,\n ): T {\n if (options?._defaulted) {\n return options\n }\n return {\n ...this.#defaultOptions.mutations,\n ...(options?.mutationKey &&\n this.getMutationDefaults(options.mutationKey)),\n ...options,\n _defaulted: true,\n } as T\n }\n\n clear(): void {\n this.#queryCache.clear()\n this.#mutationCache.clear()\n }\n}\n", "import {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { focusManager } from './focusManager'\nimport { Subscribable } from './subscribable'\nimport { fetchState } from './query'\nimport type { FetchOptions, Query, QueryState } from './query'\nimport type { QueryClient } from './queryClient'\nimport type {\n DefaultError,\n DefaultedQueryObserverOptions,\n PlaceholderDataFunction,\n QueryKey,\n QueryObserverBaseResult,\n QueryObserverOptions,\n QueryObserverResult,\n QueryOptions,\n RefetchOptions,\n} from './types'\n\ntype QueryObserverListener = (\n result: QueryObserverResult,\n) => void\n\nexport interface NotifyOptions {\n listeners?: boolean\n}\n\ninterface ObserverFetchOptions extends FetchOptions {\n throwOnError?: boolean\n}\n\nexport class QueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Subscribable> {\n #client: QueryClient\n #currentQuery: Query = undefined!\n #currentQueryInitialState: QueryState = undefined!\n #currentResult: QueryObserverResult = undefined!\n #currentResultState?: QueryState\n #currentResultOptions?: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n #selectError: TError | null\n #selectFn?: (data: TQueryData) => TData\n #selectResult?: TData\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData?: Query\n #staleTimeoutId?: ReturnType\n #refetchIntervalId?: ReturnType\n #currentRefetchInterval?: number | false\n #trackedProps = new Set()\n\n constructor(\n client: QueryClient,\n public options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ) {\n super()\n\n this.#client = client\n this.#selectError = null\n this.bindMethods()\n this.setOptions(options)\n }\n\n protected bindMethods(): void {\n this.refetch = this.refetch.bind(this)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this)\n\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch()\n } else {\n this.updateResult()\n }\n\n this.#updateTimers()\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.hasListeners()) {\n this.destroy()\n }\n }\n\n shouldFetchOnReconnect(): boolean {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect,\n )\n }\n\n shouldFetchOnWindowFocus(): boolean {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus,\n )\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#clearStaleTimeout()\n this.#clearRefetchInterval()\n this.#currentQuery.removeObserver(this)\n }\n\n setOptions(\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n const prevOptions = this.options\n const prevQuery = this.#currentQuery\n\n this.options = this.#client.defaultQueryOptions(options)\n\n if (\n this.options.enabled !== undefined &&\n typeof this.options.enabled !== 'boolean' &&\n typeof this.options.enabled !== 'function' &&\n typeof resolveEnabled(this.options.enabled, this.#currentQuery) !==\n 'boolean'\n ) {\n throw new Error(\n 'Expected enabled to be a boolean or a callback that returns a boolean',\n )\n }\n\n this.#updateQuery()\n this.#currentQuery.setOptions(this.options)\n\n if (\n prevOptions._defaulted &&\n !shallowEqualObjects(this.options, prevOptions)\n ) {\n this.#client.getQueryCache().notify({\n type: 'observerOptionsUpdated',\n query: this.#currentQuery,\n observer: this,\n })\n }\n\n const mounted = this.hasListeners()\n\n // Fetch if there are subscribers\n if (\n mounted &&\n shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions,\n )\n ) {\n this.#executeFetch()\n }\n\n // Update result\n this.updateResult(notifyOptions)\n\n // Update stale interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n resolveStaleTime(this.options.staleTime, this.#currentQuery) !==\n resolveStaleTime(prevOptions.staleTime, this.#currentQuery))\n ) {\n this.#updateStaleTimeout()\n }\n\n const nextRefetchInterval = this.#computeRefetchInterval()\n\n // Update refetch interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n nextRefetchInterval !== this.#currentRefetchInterval)\n ) {\n this.#updateRefetchInterval(nextRefetchInterval)\n }\n }\n\n getOptimisticResult(\n options: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): QueryObserverResult {\n const query = this.#client.getQueryCache().build(this.#client, options)\n\n const result = this.createResult(query, options)\n\n if (shouldAssignObserverCurrentProperties(this, result)) {\n // this assigns the optimistic result to the current Observer\n // because if the query function changes, useQuery will be performing\n // an effect where it would fetch again.\n // When the fetch finishes, we perform a deep data cloning in order\n // to reuse objects references. This deep data clone is performed against\n // the `observer.currentResult.data` property\n // When QueryKey changes, we refresh the query and get new `optimistic`\n // result, while we leave the `observer.currentResult`, so when new data\n // arrives, it finds the old `observer.currentResult` which is related\n // to the old QueryKey. Which means that currentResult and selectData are\n // out of sync already.\n // To solve this, we move the cursor of the currentResult every time\n // an observer reads an optimistic value.\n\n // When keeping the previous data, the result doesn't change until new\n // data arrives.\n this.#currentResult = result\n this.#currentResultOptions = this.options\n this.#currentResultState = this.#currentQuery.state\n }\n return result\n }\n\n getCurrentResult(): QueryObserverResult {\n return this.#currentResult\n }\n\n trackResult(\n result: QueryObserverResult,\n onPropTracked?: (key: keyof QueryObserverResult) => void,\n ): QueryObserverResult {\n const trackedResult = {} as QueryObserverResult\n\n Object.keys(result).forEach((key) => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackProp(key as keyof QueryObserverResult)\n onPropTracked?.(key as keyof QueryObserverResult)\n return result[key as keyof QueryObserverResult]\n },\n })\n })\n\n return trackedResult\n }\n\n trackProp(key: keyof QueryObserverResult) {\n this.#trackedProps.add(key)\n }\n\n getCurrentQuery(): Query {\n return this.#currentQuery\n }\n\n refetch({ ...options }: RefetchOptions = {}): Promise<\n QueryObserverResult\n > {\n return this.fetch({\n ...options,\n })\n }\n\n fetchOptimistic(\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): Promise> {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n\n const query = this.#client\n .getQueryCache()\n .build(this.#client, defaultedOptions)\n query.isFetchingOptimistic = true\n\n return query.fetch().then(() => this.createResult(query, defaultedOptions))\n }\n\n protected fetch(\n fetchOptions: ObserverFetchOptions,\n ): Promise> {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true,\n }).then(() => {\n this.updateResult()\n return this.#currentResult\n })\n }\n\n #executeFetch(\n fetchOptions?: Omit,\n ): Promise {\n // Make sure we reference the latest query as the current one might have been removed\n this.#updateQuery()\n\n // Fetch\n let promise: Promise = this.#currentQuery.fetch(\n this.options as QueryOptions,\n fetchOptions,\n )\n\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop)\n }\n\n return promise\n }\n\n #updateStaleTimeout(): void {\n this.#clearStaleTimeout()\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery,\n )\n\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return\n }\n\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime)\n\n // The timeout is sometimes triggered 1 ms before the stale time expiration.\n // To mitigate this issue we always add 1 ms to the timeout.\n const timeout = time + 1\n\n this.#staleTimeoutId = setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult()\n }\n }, timeout)\n }\n\n #computeRefetchInterval() {\n return (\n (typeof this.options.refetchInterval === 'function'\n ? this.options.refetchInterval(this.#currentQuery)\n : this.options.refetchInterval) ?? false\n )\n }\n\n #updateRefetchInterval(nextInterval: number | false): void {\n this.#clearRefetchInterval()\n\n this.#currentRefetchInterval = nextInterval\n\n if (\n isServer ||\n resolveEnabled(this.options.enabled, this.#currentQuery) === false ||\n !isValidTimeout(this.#currentRefetchInterval) ||\n this.#currentRefetchInterval === 0\n ) {\n return\n }\n\n this.#refetchIntervalId = setInterval(() => {\n if (\n this.options.refetchIntervalInBackground ||\n focusManager.isFocused()\n ) {\n this.#executeFetch()\n }\n }, this.#currentRefetchInterval)\n }\n\n #updateTimers(): void {\n this.#updateStaleTimeout()\n this.#updateRefetchInterval(this.#computeRefetchInterval())\n }\n\n #clearStaleTimeout(): void {\n if (this.#staleTimeoutId) {\n clearTimeout(this.#staleTimeoutId)\n this.#staleTimeoutId = undefined\n }\n }\n\n #clearRefetchInterval(): void {\n if (this.#refetchIntervalId) {\n clearInterval(this.#refetchIntervalId)\n this.#refetchIntervalId = undefined\n }\n }\n\n protected createResult(\n query: Query,\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): QueryObserverResult {\n const prevQuery = this.#currentQuery\n const prevOptions = this.options\n const prevResult = this.#currentResult as\n | QueryObserverResult\n | undefined\n const prevResultState = this.#currentResultState\n const prevResultOptions = this.#currentResultOptions\n const queryChange = query !== prevQuery\n const queryInitialState = queryChange\n ? query.state\n : this.#currentQueryInitialState\n\n const { state } = query\n let newState = { ...state }\n let isPlaceholderData = false\n let data: TData | undefined\n\n // Optimistically set result in fetching state if needed\n if (options._optimisticResults) {\n const mounted = this.hasListeners()\n\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options)\n\n const fetchOptionally =\n mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions)\n\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options),\n }\n }\n if (options._optimisticResults === 'isRestoring') {\n newState.fetchStatus = 'idle'\n }\n }\n\n let { error, errorUpdatedAt, status } = newState\n\n // Select data if needed\n if (options.select && newState.data !== undefined) {\n // Memoize select result\n if (\n prevResult &&\n newState.data === prevResultState?.data &&\n options.select === this.#selectFn\n ) {\n data = this.#selectResult\n } else {\n try {\n this.#selectFn = options.select\n data = options.select(newState.data)\n data = replaceData(prevResult?.data, data, options)\n this.#selectResult = data\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\n }\n // Use query data\n else {\n data = newState.data as unknown as TData\n }\n\n // Show placeholder data if needed\n if (\n options.placeholderData !== undefined &&\n data === undefined &&\n status === 'pending'\n ) {\n let placeholderData\n\n // Memoize placeholder data\n if (\n prevResult?.isPlaceholderData &&\n options.placeholderData === prevResultOptions?.placeholderData\n ) {\n placeholderData = prevResult.data\n } else {\n placeholderData =\n typeof options.placeholderData === 'function'\n ? (\n options.placeholderData as unknown as PlaceholderDataFunction\n )(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData as any,\n )\n : options.placeholderData\n if (options.select && placeholderData !== undefined) {\n try {\n placeholderData = options.select(placeholderData)\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\n }\n\n if (placeholderData !== undefined) {\n status = 'success'\n data = replaceData(\n prevResult?.data,\n placeholderData as unknown,\n options,\n ) as TData\n isPlaceholderData = true\n }\n }\n\n if (this.#selectError) {\n error = this.#selectError as any\n data = this.#selectResult\n errorUpdatedAt = Date.now()\n status = 'error'\n }\n\n const isFetching = newState.fetchStatus === 'fetching'\n const isPending = status === 'pending'\n const isError = status === 'error'\n\n const isLoading = isPending && isFetching\n const hasData = data !== undefined\n\n const result: QueryObserverBaseResult = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === 'success',\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount:\n newState.dataUpdateCount > queryInitialState.dataUpdateCount ||\n newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === 'paused',\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n }\n\n return result as QueryObserverResult\n }\n\n updateResult(notifyOptions?: NotifyOptions): void {\n const prevResult = this.#currentResult as\n | QueryObserverResult\n | undefined\n\n const nextResult = this.createResult(this.#currentQuery, this.options)\n this.#currentResultState = this.#currentQuery.state\n this.#currentResultOptions = this.options\n\n if (this.#currentResultState.data !== undefined) {\n this.#lastQueryWithDefinedData = this.#currentQuery\n }\n\n // Only notify and update result if something has changed\n if (shallowEqualObjects(nextResult, prevResult)) {\n return\n }\n\n this.#currentResult = nextResult\n\n // Determine which callbacks to trigger\n const defaultNotifyOptions: NotifyOptions = {}\n\n const shouldNotifyListeners = (): boolean => {\n if (!prevResult) {\n return true\n }\n\n const { notifyOnChangeProps } = this.options\n const notifyOnChangePropsValue =\n typeof notifyOnChangeProps === 'function'\n ? notifyOnChangeProps()\n : notifyOnChangeProps\n\n if (\n notifyOnChangePropsValue === 'all' ||\n (!notifyOnChangePropsValue && !this.#trackedProps.size)\n ) {\n return true\n }\n\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps,\n )\n\n if (this.options.throwOnError) {\n includedProps.add('error')\n }\n\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key as keyof QueryObserverResult\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey]\n return changed && includedProps.has(typedKey)\n })\n }\n\n if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true\n }\n\n this.#notify({ ...defaultNotifyOptions, ...notifyOptions })\n }\n\n #updateQuery(): void {\n const query = this.#client.getQueryCache().build(this.#client, this.options)\n\n if (query === this.#currentQuery) {\n return\n }\n\n const prevQuery = this.#currentQuery as\n | Query\n | undefined\n this.#currentQuery = query\n this.#currentQueryInitialState = query.state\n\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this)\n query.addObserver(this)\n }\n }\n\n onQueryUpdate(): void {\n this.updateResult()\n\n if (this.hasListeners()) {\n this.#updateTimers()\n }\n }\n\n #notify(notifyOptions: NotifyOptions): void {\n notifyManager.batch(() => {\n // First, trigger the listeners\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult)\n })\n }\n\n // Then the cache listeners\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: 'observerResultsUpdated',\n })\n })\n }\n}\n\nfunction shouldLoadOnMount(\n query: Query,\n options: QueryObserverOptions,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.state.data === undefined &&\n !(query.state.status === 'error' && options.retryOnMount === false)\n )\n}\n\nfunction shouldFetchOnMount(\n query: Query,\n options: QueryObserverOptions,\n): boolean {\n return (\n shouldLoadOnMount(query, options) ||\n (query.state.data !== undefined &&\n shouldFetchOn(query, options, options.refetchOnMount))\n )\n}\n\nfunction shouldFetchOn(\n query: Query,\n options: QueryObserverOptions,\n field: (typeof options)['refetchOnMount'] &\n (typeof options)['refetchOnWindowFocus'] &\n (typeof options)['refetchOnReconnect'],\n) {\n if (resolveEnabled(options.enabled, query) !== false) {\n const value = typeof field === 'function' ? field(query) : field\n\n return value === 'always' || (value !== false && isStale(query, options))\n }\n return false\n}\n\nfunction shouldFetchOptionally(\n query: Query,\n prevQuery: Query,\n options: QueryObserverOptions,\n prevOptions: QueryObserverOptions,\n): boolean {\n return (\n (query !== prevQuery ||\n resolveEnabled(prevOptions.enabled, query) === false) &&\n (!options.suspense || query.state.status !== 'error') &&\n isStale(query, options)\n )\n}\n\nfunction isStale(\n query: Query,\n options: QueryObserverOptions,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.isStaleByTime(resolveStaleTime(options.staleTime, query))\n )\n}\n\n// this function would decide if we will update the observer's 'current'\n// properties after an optimistic reading via getOptimisticResult\nfunction shouldAssignObserverCurrentProperties<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n observer: QueryObserver,\n optimisticResult: QueryObserverResult,\n) {\n // if the newly created result isn't what the observer is holding as current,\n // then we'll need to update the properties as well\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true\n }\n\n // basically, just keep previous properties if nothing changed\n return false\n}\n", "import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\nfunction difference(array1: Array, array2: Array): Array {\n return array1.filter((x) => !array2.includes(x))\n}\n\nfunction replaceAt(array: Array, index: number, value: T): Array {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: Array) => void\n\ntype CombineFn = (\n result: Array,\n) => TCombinedResult\n\nexport interface QueriesObserverOptions<\n TCombinedResult = Array,\n> {\n combine?: CombineFn\n}\n\nexport class QueriesObserver<\n TCombinedResult = Array,\n> extends Subscribable {\n #client: QueryClient\n #result!: Array\n #queries: Array\n #observers: Array\n #combinedResult?: TCombinedResult\n #lastCombine?: CombineFn\n #lastResult?: Array\n\n constructor(\n client: QueryClient,\n queries: Array>,\n _options?: QueriesObserverOptions,\n ) {\n super()\n\n this.#client = client\n this.#queries = []\n this.#observers = []\n this.#result = []\n\n this.setQueries(queries)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: Array,\n _options?: QueriesObserverOptions,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n\n notifyManager.batch(() => {\n const prevObservers = this.#observers\n\n const newObserverMatches = this.#findMatchingObservers(this.#queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.#observers = newObservers\n this.#result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n\n this.#notify()\n })\n }\n\n getCurrentResult(): Array {\n return this.#result\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: Array,\n combine: CombineFn | undefined,\n ): [\n rawResult: Array,\n combineResult: (r?: Array) => TCombinedResult,\n trackResult: () => Array,\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: Array) => {\n return this.#combineResult(r ?? result, combine)\n },\n () => {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult, (accessedProp) => {\n // track property on all observers to ensure proper (synchronized) tracking (#7000)\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp)\n })\n })\n : observerResult\n })\n },\n ]\n }\n\n #combineResult(\n input: Array,\n combine: CombineFn | undefined,\n ): TCombinedResult {\n if (combine) {\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input),\n )\n }\n\n return this.#combinedResult\n }\n return input as any\n }\n\n #findMatchingObservers(\n queries: Array,\n ): Array {\n const prevObservers = this.#observers\n const prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.#client.defaultQueryOptions(options),\n )\n\n const matchingObservers: Array =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: Array =\n unmatchedQueries.map((options) => {\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n })\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result)\n this.#notify()\n }\n }\n\n #notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n", "import { QueryObserver } from './queryObserver'\nimport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior,\n} from './infiniteQueryBehavior'\nimport type { Subscribable } from './subscribable'\nimport type {\n DefaultError,\n DefaultedInfiniteQueryObserverOptions,\n FetchNextPageOptions,\n FetchPreviousPageOptions,\n InfiniteData,\n InfiniteQueryObserverBaseResult,\n InfiniteQueryObserverOptions,\n InfiniteQueryObserverResult,\n QueryKey,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport type { Query } from './query'\n\ntype InfiniteQueryObserverListener = (\n result: InfiniteQueryObserverResult,\n) => void\n\nexport class InfiniteQueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData,\n TQueryKey\n> {\n // Type override\n subscribe!: Subscribable<\n InfiniteQueryObserverListener\n >['subscribe']\n\n // Type override\n getCurrentResult!: ReplaceReturnType<\n QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData,\n TQueryKey\n >['getCurrentResult'],\n InfiniteQueryObserverResult\n >\n\n // Type override\n protected fetch!: ReplaceReturnType<\n QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData,\n TQueryKey\n >['fetch'],\n Promise>\n >\n\n constructor(\n client: QueryClient,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ) {\n super(client, options)\n }\n\n protected bindMethods(): void {\n super.bindMethods()\n this.fetchNextPage = this.fetchNextPage.bind(this)\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this)\n }\n\n setOptions(\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n super.setOptions(\n {\n ...options,\n behavior: infiniteQueryBehavior(),\n },\n notifyOptions,\n )\n }\n\n getOptimisticResult(\n options: DefaultedInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult {\n options.behavior = infiniteQueryBehavior()\n return super.getOptimisticResult(options) as InfiniteQueryObserverResult<\n TData,\n TError\n >\n }\n\n fetchNextPage(\n options?: FetchNextPageOptions,\n ): Promise> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'forward' },\n },\n })\n }\n\n fetchPreviousPage(\n options?: FetchPreviousPageOptions,\n ): Promise> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'backward' },\n },\n })\n }\n\n protected createResult(\n query: Query<\n TQueryFnData,\n TError,\n InfiniteData,\n TQueryKey\n >,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult {\n const { state } = query\n const parentResult = super.createResult(query, options)\n\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult\n const fetchDirection = state.fetchMeta?.fetchMore?.direction\n\n const isFetchNextPageError = isError && fetchDirection === 'forward'\n const isFetchingNextPage = isFetching && fetchDirection === 'forward'\n\n const isFetchPreviousPageError = isError && fetchDirection === 'backward'\n const isFetchingPreviousPage = isFetching && fetchDirection === 'backward'\n\n const result: InfiniteQueryObserverBaseResult = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError:\n isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching:\n isRefetching && !isFetchingNextPage && !isFetchingPreviousPage,\n }\n\n return result as InfiniteQueryObserverResult\n }\n}\n\ntype ReplaceReturnType<\n TFunction extends (...args: Array) => unknown,\n TReturn,\n> = (...args: Parameters) => TReturn\n", "import { getDefaultState } from './mutation'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport { hashKey, shallowEqualObjects } from './utils'\nimport type { QueryClient } from './queryClient'\nimport type {\n DefaultError,\n MutateOptions,\n MutationObserverOptions,\n MutationObserverResult,\n} from './types'\nimport type { Action, Mutation } from './mutation'\n\n// TYPES\n\ntype MutationObserverListener = (\n result: MutationObserverResult,\n) => void\n\n// CLASS\n\nexport class MutationObserver<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Subscribable<\n MutationObserverListener\n> {\n options!: MutationObserverOptions\n\n #client: QueryClient\n #currentResult: MutationObserverResult =\n undefined!\n #currentMutation?: Mutation\n #mutateOptions?: MutateOptions\n\n constructor(\n client: QueryClient,\n options: MutationObserverOptions,\n ) {\n super()\n\n this.#client = client\n this.setOptions(options)\n this.bindMethods()\n this.#updateResult()\n }\n\n protected bindMethods(): void {\n this.mutate = this.mutate.bind(this)\n this.reset = this.reset.bind(this)\n }\n\n setOptions(\n options: MutationObserverOptions,\n ) {\n const prevOptions = this.options as\n | MutationObserverOptions\n | undefined\n this.options = this.#client.defaultMutationOptions(options)\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: 'observerOptionsUpdated',\n mutation: this.#currentMutation,\n observer: this,\n })\n }\n\n if (\n prevOptions?.mutationKey &&\n this.options.mutationKey &&\n hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)\n ) {\n this.reset()\n } else if (this.#currentMutation?.state.status === 'pending') {\n this.#currentMutation.setOptions(this.options)\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this)\n }\n }\n\n onMutationUpdate(action: Action): void {\n this.#updateResult()\n\n this.#notify(action)\n }\n\n getCurrentResult(): MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n > {\n return this.#currentResult\n }\n\n reset(): void {\n // reset needs to remove the observer from the mutation because there is no way to \"get it back\"\n // another mutate call will yield a new mutation!\n this.#currentMutation?.removeObserver(this)\n this.#currentMutation = undefined\n this.#updateResult()\n this.#notify()\n }\n\n mutate(\n variables: TVariables,\n options?: MutateOptions,\n ): Promise {\n this.#mutateOptions = options\n\n this.#currentMutation?.removeObserver(this)\n\n this.#currentMutation = this.#client\n .getMutationCache()\n .build(this.#client, this.options)\n\n this.#currentMutation.addObserver(this)\n\n return this.#currentMutation.execute(variables)\n }\n\n #updateResult(): void {\n const state =\n this.#currentMutation?.state ??\n getDefaultState()\n\n this.#currentResult = {\n ...state,\n isPending: state.status === 'pending',\n isSuccess: state.status === 'success',\n isError: state.status === 'error',\n isIdle: state.status === 'idle',\n mutate: this.mutate,\n reset: this.reset,\n } as MutationObserverResult\n }\n\n #notify(action?: Action): void {\n notifyManager.batch(() => {\n // First trigger the mutate callbacks\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables!\n const context = this.#currentResult.context\n\n if (action?.type === 'success') {\n this.#mutateOptions.onSuccess?.(action.data, variables, context!)\n this.#mutateOptions.onSettled?.(action.data, null, variables, context)\n } else if (action?.type === 'error') {\n this.#mutateOptions.onError?.(action.error, variables, context)\n this.#mutateOptions.onSettled?.(\n undefined,\n action.error,\n variables,\n context,\n )\n }\n }\n\n // Then trigger the listeners\n this.listeners.forEach((listener) => {\n listener(this.#currentResult)\n })\n })\n }\n}\n", "import type {\n DefaultError,\n MutationKey,\n MutationMeta,\n MutationOptions,\n MutationScope,\n QueryKey,\n QueryMeta,\n QueryOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\ntype TransformerFn = (data: any) => any\nfunction defaultTransformerFn(data: any): any {\n return data\n}\n\nexport interface DehydrateOptions {\n serializeData?: TransformerFn\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n deserializeData?: TransformerFn\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n meta?: MutationMeta\n scope?: MutationScope\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n promise?: Promise\n meta?: QueryMeta\n}\n\nexport interface DehydratedState {\n mutations: Array\n queries: Array\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...(mutation.options.scope && { scope: mutation.options.scope }),\n ...(mutation.meta && { meta: mutation.meta }),\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(\n query: Query,\n serializeData: TransformerFn,\n): DehydratedQuery {\n return {\n state: {\n ...query.state,\n ...(query.state.data !== undefined && {\n data: serializeData(query.state.data),\n }),\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.state.status === 'pending' && {\n promise: query.promise?.then(serializeData).catch((error) => {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`,\n )\n }\n return Promise.reject(new Error('redacted'))\n }),\n }),\n ...(query.meta && { meta: query.meta }),\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ??\n client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ??\n defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ??\n client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ??\n defaultShouldDehydrateQuery\n\n const serializeData =\n options.serializeData ??\n client.getDefaultOptions().dehydrate?.serializeData ??\n defaultTransformerFn\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) =>\n filterQuery(query) ? [dehydrateQuery(query, serializeData)] : [],\n )\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n const deserializeData =\n options?.defaultOptions?.deserializeData ??\n client.getDefaultOptions().hydrate?.deserializeData ??\n defaultTransformerFn\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions,\n },\n state,\n )\n })\n\n queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n let query = queryCache.get(queryHash)\n\n const data =\n state.data === undefined ? state.data : deserializeData(state.data)\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n // omit fetchStatus from dehydrated state\n // so that query stays in its current fetchStatus\n const { fetchStatus: _ignored, ...serializedState } = state\n query.setState({\n ...serializedState,\n data,\n })\n }\n } else {\n // Restore query\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta,\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: 'idle',\n },\n )\n }\n\n if (promise) {\n // Note: `Promise.resolve` required cause\n // RSC transformed promises are not thenable\n const initialPromise = Promise.resolve(promise).then(deserializeData)\n\n // this doesn't actually fetch - it just creates a retryer\n // which will re-use the passed `initialPromise`\n void query.fetch(undefined, { initialPromise })\n }\n })\n}\n", "'use client'\nimport * as React from 'react'\n\nimport {\n QueriesObserver,\n QueryObserver,\n notifyManager,\n} from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch,\n} from './suspense'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefaultError,\n OmitKeyof,\n QueriesObserverOptions,\n QueriesPlaceholderDataFunction,\n QueryClient,\n QueryFunction,\n QueryKey,\n QueryObserverOptions,\n ThrowOnError,\n} from '@tanstack/query-core'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function always gets undefined passed\ntype UseQueryOptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<\n UseQueryOptions,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\n// Widen the type of the symbol to enable type inference even if skipToken is not immutable.\ntype SkipTokenForUseQueries = symbol\n\ntype GetUseQueryOptionsForUseQueries =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseQueryOptionsForUseQueries\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryOptionsForUseQueries\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryOptionsForUseQueries\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseQueryOptionsForUseQueries\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryOptionsForUseQueries\n : T extends [infer TQueryFnData]\n ? UseQueryOptionsForUseQueries\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? UseQueryOptionsForUseQueries<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError,\n unknown extends TData ? TQueryFnData : TData,\n TQueryKey\n >\n : // Fallback\n UseQueryOptionsForUseQueries\n\n// A defined initialData setting should return a DefinedUseQueryResult rather than UseQueryResult\ntype GetDefinedOrUndefinedQueryResult = T extends {\n initialData?: infer TInitialData\n}\n ? unknown extends TInitialData\n ? UseQueryResult\n : TInitialData extends TData\n ? DefinedUseQueryResult\n : TInitialData extends () => infer TInitialDataResult\n ? unknown extends TInitialDataResult\n ? UseQueryResult\n : TInitialDataResult extends TData\n ? DefinedUseQueryResult\n : UseQueryResult\n : UseQueryResult\n : UseQueryResult\n\ntype GetUseQueryResult =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? GetDefinedOrUndefinedQueryResult\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? GetDefinedOrUndefinedQueryResult\n : T extends { data: infer TData; error?: infer TError }\n ? GetDefinedOrUndefinedQueryResult\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? GetDefinedOrUndefinedQueryResult\n : T extends [infer TQueryFnData, infer TError]\n ? GetDefinedOrUndefinedQueryResult\n : T extends [infer TQueryFnData]\n ? GetDefinedOrUndefinedQueryResult\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? GetDefinedOrUndefinedQueryResult<\n T,\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : // Fallback\n UseQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQueryOptionsForUseQueries]\n : T extends [infer Head, ...infer Tails]\n ? QueriesOptions<\n [...Tails],\n [...TResults, GetUseQueryOptionsForUseQueries],\n [...TDepth, 1]\n >\n : ReadonlyArray extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends Array<\n UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n UseQueryOptionsForUseQueries<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n >\n : // Fallback\n Array\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQueryResult]\n : T extends [infer Head, ...infer Tails]\n ? QueriesResults<\n [...Tails],\n [...TResults, GetUseQueryResult],\n [...TDepth, 1]\n >\n : T extends Array<\n UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >\n >\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n Array<\n UseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n >\n : // Fallback\n Array\n\nexport function useQueries<\n T extends Array,\n TCombinedResult = QueriesResults,\n>(\n {\n queries,\n ...options\n }: {\n queries: readonly [...QueriesOptions]\n combine?: (result: QueriesResults) => TCombinedResult\n },\n queryClient?: QueryClient,\n): TCombinedResult {\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n\n const defaultedQueries = React.useMemo(\n () =>\n queries.map((opts) => {\n const defaultedOptions = client.defaultQueryOptions(\n opts as QueryObserverOptions,\n )\n\n // Make sure the results are already in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n return defaultedOptions\n }),\n [queries, client, isRestoring],\n )\n\n defaultedQueries.forEach((query) => {\n ensureSuspenseTimers(query)\n ensurePreventErrorBoundaryRetry(query, errorResetBoundary)\n })\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new QueriesObserver(\n client,\n defaultedQueries,\n options as QueriesObserverOptions,\n ),\n )\n\n const [optimisticResult, getCombinedResult, trackResult] =\n observer.getOptimisticResult(\n defaultedQueries,\n (options as QueriesObserverOptions).combine,\n )\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setQueries(\n defaultedQueries,\n options as QueriesObserverOptions,\n {\n listeners: false,\n },\n )\n }, [defaultedQueries, options, observer])\n\n const shouldAtLeastOneSuspend = optimisticResult.some((result, index) =>\n shouldSuspend(defaultedQueries[index], result),\n )\n\n const suspensePromises = shouldAtLeastOneSuspend\n ? optimisticResult.flatMap((result, index) => {\n const opts = defaultedQueries[index]\n\n if (opts) {\n const queryObserver = new QueryObserver(client, opts)\n if (shouldSuspend(opts, result)) {\n return fetchOptimistic(opts, queryObserver, errorResetBoundary)\n } else if (willFetch(result, isRestoring)) {\n void fetchOptimistic(opts, queryObserver, errorResetBoundary)\n }\n }\n return []\n })\n : []\n\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises)\n }\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) => {\n const query = defaultedQueries[index]\n return (\n query &&\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: query.throwOnError,\n query: client.getQueryCache().get(query.queryHash),\n })\n )\n },\n )\n\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error\n }\n\n return getCombinedResult(trackResult())\n}\n", "'use client'\nimport * as React from 'react'\n\nimport type { QueryClient } from '@tanstack/query-core'\n\nexport const QueryClientContext = React.createContext(\n undefined,\n)\n\nexport const useQueryClient = (queryClient?: QueryClient) => {\n const client = React.useContext(QueryClientContext)\n\n if (queryClient) {\n return queryClient\n }\n\n if (!client) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one')\n }\n\n return client\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: React.ReactNode\n}\n\nexport const QueryClientProvider = ({\n client,\n children,\n}: QueryClientProviderProps): React.JSX.Element => {\n React.useEffect(() => {\n client.mount()\n return () => {\n client.unmount()\n }\n }, [client])\n\n return (\n \n {children}\n \n )\n}\n", "'use client'\nimport * as React from 'react'\n\nconst IsRestoringContext = React.createContext(false)\n\nexport const useIsRestoring = () => React.useContext(IsRestoringContext)\nexport const IsRestoringProvider = IsRestoringContext.Provider\n", "'use client'\nimport * as React from 'react'\n\n// CONTEXT\n\nexport interface QueryErrorResetBoundaryValue {\n clearReset: () => void\n isReset: () => boolean\n reset: () => void\n}\n\nfunction createValue(): QueryErrorResetBoundaryValue {\n let isReset = false\n return {\n clearReset: () => {\n isReset = false\n },\n reset: () => {\n isReset = true\n },\n isReset: () => {\n return isReset\n },\n }\n}\n\nconst QueryErrorResetBoundaryContext = React.createContext(createValue())\n\n// HOOK\n\nexport const useQueryErrorResetBoundary = () =>\n React.useContext(QueryErrorResetBoundaryContext)\n\n// COMPONENT\n\nexport interface QueryErrorResetBoundaryProps {\n children:\n | ((value: QueryErrorResetBoundaryValue) => React.ReactNode)\n | React.ReactNode\n}\n\nexport const QueryErrorResetBoundary = ({\n children,\n}: QueryErrorResetBoundaryProps) => {\n const [value] = React.useState(() => createValue())\n return (\n \n {typeof children === 'function'\n ? (children as Function)(value)\n : children}\n \n )\n}\n", "'use client'\nimport * as React from 'react'\nimport { shouldThrowError } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserverResult,\n ThrowOnError,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const ensurePreventErrorBoundaryRetry = <\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n if (options.suspense || options.throwOnError) {\n // Prevent retrying failed query if the error boundary has not been reset yet\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false\n }\n }\n}\n\nexport const useClearResetErrorBoundary = (\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset()\n }, [errorResetBoundary])\n}\n\nexport const getHasError = <\n TData,\n TError,\n TQueryFnData,\n TQueryData,\n TQueryKey extends QueryKey,\n>({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n}: {\n result: QueryObserverResult\n errorResetBoundary: QueryErrorResetBoundaryValue\n throwOnError: ThrowOnError\n query: Query | undefined\n}) => {\n return (\n result.isError &&\n !errorResetBoundary.isReset() &&\n !result.isFetching &&\n query &&\n shouldThrowError(throwOnError, [result.error, query])\n )\n}\n", "export function shouldThrowError) => boolean>(\n throwError: boolean | T | undefined,\n params: Parameters,\n): boolean {\n // Allow throwError function to override throwing behavior on a per-error basis\n if (typeof throwError === 'function') {\n return throwError(...params)\n }\n\n return !!throwError\n}\n\nexport function noop() {}\n", "import type {\n DefaultError,\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const defaultThrowOnError = <\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n _error: TError,\n query: Query,\n) => query.state.data === undefined\n\nexport const ensureSuspenseTimers = (\n defaultedOptions: DefaultedQueryObserverOptions,\n) => {\n if (defaultedOptions.suspense) {\n // Always set stale time when using suspense to prevent\n // fetching again when directly mounting after suspending\n if (typeof defaultedOptions.staleTime !== 'number') {\n defaultedOptions.staleTime = 1000\n }\n if (typeof defaultedOptions.gcTime === 'number') {\n defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, 1000)\n }\n }\n}\n\nexport const willFetch = (\n result: QueryObserverResult,\n isRestoring: boolean,\n) => result.isLoading && result.isFetching && !isRestoring\n\nexport const shouldSuspend = (\n defaultedOptions:\n | DefaultedQueryObserverOptions\n | undefined,\n result: QueryObserverResult,\n) => defaultedOptions?.suspense && result.isPending\n\nexport const fetchOptimistic = <\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n defaultedOptions: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n observer: QueryObserver,\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) =>\n observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset()\n })\n", "'use client'\nimport * as React from 'react'\n\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n} from './suspense'\nimport type { UseBaseQueryOptions } from './types'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n ;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.(\n defaultedOptions,\n )\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureSuspenseTimers(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new Observer(\n client,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n })\n ) {\n throw result.error\n }\n\n ;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.(\n defaultedOptions,\n result,\n )\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n", "'use client'\nimport { QueryObserver } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n} from './queryOptions'\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions,\n queryClient?: QueryClient,\n): DefinedUseQueryResult\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions,\n queryClient?: QueryClient,\n): UseQueryResult\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions,\n queryClient?: QueryClient,\n): UseQueryResult\n\nexport function useQuery(options: UseQueryOptions, queryClient?: QueryClient) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n", "'use client'\nimport { QueryObserver, skipToken } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport { defaultThrowOnError } from './suspense'\nimport type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'\nimport type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'\n\nexport function useSuspenseQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseSuspenseQueryOptions,\n queryClient?: QueryClient,\n): UseSuspenseQueryResult {\n if (process.env.NODE_ENV !== 'production') {\n if (options.queryFn === skipToken) {\n console.error('skipToken is not allowed for useSuspenseQuery')\n }\n }\n\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n placeholderData: undefined,\n },\n QueryObserver,\n queryClient,\n ) as UseSuspenseQueryResult\n}\n", "'use client'\nimport { InfiniteQueryObserver, skipToken } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport { defaultThrowOnError } from './suspense'\nimport type {\n DefaultError,\n InfiniteData,\n InfiniteQueryObserverSuccessResult,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport type {\n UseSuspenseInfiniteQueryOptions,\n UseSuspenseInfiniteQueryResult,\n} from './types'\n\nexport function useSuspenseInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UseSuspenseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseSuspenseInfiniteQueryResult {\n if (process.env.NODE_ENV !== 'production') {\n if (options.queryFn === skipToken) {\n console.error('skipToken is not allowed for useSuspenseInfiniteQuery')\n }\n }\n\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n },\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n ) as InfiniteQueryObserverSuccessResult\n}\n", "'use client'\nimport { skipToken } from '@tanstack/query-core'\nimport { useQueries } from './useQueries'\nimport { defaultThrowOnError } from './suspense'\nimport type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'\nimport type {\n DefaultError,\n QueryClient,\n QueryFunction,\n ThrowOnError,\n} from '@tanstack/query-core'\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\n// Widen the type of the symbol to enable type inference even if skipToken is not immutable.\ntype SkipTokenForUseQueries = symbol\n\ntype GetUseSuspenseQueryOptions =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseSuspenseQueryOptions\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseSuspenseQueryOptions\n : T extends { data: infer TData; error?: infer TError }\n ? UseSuspenseQueryOptions\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseSuspenseQueryOptions\n : T extends [infer TQueryFnData, infer TError]\n ? UseSuspenseQueryOptions\n : T extends [infer TQueryFnData]\n ? UseSuspenseQueryOptions\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n : T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryOptions<\n TQueryFnData,\n TError,\n TQueryFnData,\n TQueryKey\n >\n : // Fallback\n UseSuspenseQueryOptions\n\ntype GetUseSuspenseQueryResult =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? UseSuspenseQueryResult\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseSuspenseQueryResult\n : T extends { data: infer TData; error?: infer TError }\n ? UseSuspenseQueryResult\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? UseSuspenseQueryResult\n : T extends [infer TQueryFnData, infer TError]\n ? UseSuspenseQueryResult\n : T extends [infer TQueryFnData]\n ? UseSuspenseQueryResult\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryResult<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError\n >\n : // Fallback\n UseSuspenseQueryResult\n\n/**\n * SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type SuspenseQueriesOptions<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseSuspenseQueryOptions]\n : T extends [infer Head, ...infer Tails]\n ? SuspenseQueriesOptions<\n [...Tails],\n [...TResults, GetUseSuspenseQueryOptions],\n [...TDepth, 1]\n >\n : Array extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends Array<\n UseSuspenseQueryOptions<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n UseSuspenseQueryOptions\n >\n : // Fallback\n Array\n\n/**\n * SuspenseQueriesResults reducer recursively maps type param to results\n */\nexport type SuspenseQueriesResults<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseSuspenseQueryResult]\n : T extends [infer Head, ...infer Tails]\n ? SuspenseQueriesResults<\n [...Tails],\n [...TResults, GetUseSuspenseQueryResult],\n [...TDepth, 1]\n >\n : T extends Array<\n UseSuspenseQueryOptions<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >\n >\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n Array<\n UseSuspenseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n >\n : // Fallback\n Array\n\nexport function useSuspenseQueries<\n T extends Array,\n TCombinedResult = SuspenseQueriesResults,\n>(\n options: {\n queries: readonly [...SuspenseQueriesOptions]\n combine?: (result: SuspenseQueriesResults) => TCombinedResult\n },\n queryClient?: QueryClient,\n): TCombinedResult {\n return useQueries(\n {\n ...options,\n queries: options.queries.map((query) => {\n if (process.env.NODE_ENV !== 'production') {\n if (query.queryFn === skipToken) {\n console.error('skipToken is not allowed for useSuspenseQueries')\n }\n }\n\n return {\n ...query,\n suspense: true,\n throwOnError: defaultThrowOnError,\n enabled: true,\n placeholderData: undefined,\n }\n }),\n } as any,\n queryClient,\n )\n}\n", "import { useQueryClient } from './QueryClientProvider'\nimport type {\n DefaultError,\n FetchQueryOptions,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\n\nexport function usePrefetchQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: FetchQueryOptions,\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n\n if (!client.getQueryState(options.queryKey)) {\n client.prefetchQuery(options)\n }\n}\n", "import { useQueryClient } from './QueryClientProvider'\nimport type {\n DefaultError,\n FetchInfiniteQueryOptions,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\n\nexport function usePrefetchInfiniteQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n\n if (!client.getQueryState(options.queryKey)) {\n client.prefetchInfiniteQuery(options)\n }\n}\n", "import type {\n DataTag,\n DefaultError,\n InitialDataFunction,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseQueryOptions } from './types'\n\nexport type UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions & {\n initialData?: undefined | InitialDataFunction>\n}\n\ntype NonUndefinedGuard = T extends undefined ? never : T\n\nexport type DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions & {\n initialData:\n | NonUndefinedGuard\n | (() => NonUndefinedGuard)\n}\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions,\n): DefinedInitialDataOptions & {\n queryKey: DataTag\n}\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions,\n): UndefinedInitialDataOptions & {\n queryKey: DataTag\n}\n\nexport function queryOptions(options: unknown) {\n return options\n}\n", "import type {\n DataTag,\n DefaultError,\n InfiniteData,\n QueryKey,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData?: undefined\n}\n\ntype NonUndefinedGuard = T extends undefined ? never : T\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData:\n | NonUndefinedGuard>\n | (() => NonUndefinedGuard>)\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n", "/* eslint-disable react-compiler/react-compiler */\n\n'use client'\nimport * as React from 'react'\n\nimport { hydrate } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n DehydratedState,\n HydrateOptions,\n OmitKeyof,\n QueryClient,\n} from '@tanstack/query-core'\n\nexport interface HydrationBoundaryProps {\n state?: unknown\n options?: OmitKeyof & {\n defaultOptions?: OmitKeyof<\n Exclude,\n 'mutations'\n >\n }\n children?: React.ReactNode\n queryClient?: QueryClient\n}\n\nexport const HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient,\n}: HydrationBoundaryProps) => {\n const client = useQueryClient(queryClient)\n const [hydrationQueue, setHydrationQueue] = React.useState<\n DehydratedState['queries'] | undefined\n >()\n\n const optionsRef = React.useRef(options)\n optionsRef.current = options\n\n // This useMemo is for performance reasons only, everything inside it _must_\n // be safe to run in every render and code here should be read as \"in render\".\n //\n // This code needs to happen during the render phase, because after initial\n // SSR, hydration needs to happen _before_ children render. Also, if hydrating\n // during a transition, we want to hydrate as much as is safe in render so\n // we can prerender as much as possible.\n //\n // For any queries that already exist in the cache, we want to hold back on\n // hydrating until _after_ the render phase. The reason for this is that during\n // transitions, we don't want the existing queries and observers to update to\n // the new data on the current page, only _after_ the transition is committed.\n // If the transition is aborted, we will have hydrated any _new_ queries, but\n // we throw away the fresh data for any existing ones to avoid unexpectedly\n // updating the UI.\n React.useMemo(() => {\n if (state) {\n if (typeof state !== 'object') {\n return\n }\n\n const queryCache = client.getQueryCache()\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (state as DehydratedState).queries || []\n\n const newQueries: DehydratedState['queries'] = []\n const existingQueries: DehydratedState['queries'] = []\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash)\n\n if (!existingQuery) {\n newQueries.push(dehydratedQuery)\n } else {\n const hydrationIsNewer =\n dehydratedQuery.state.dataUpdatedAt >\n existingQuery.state.dataUpdatedAt\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash,\n )\n\n if (\n hydrationIsNewer &&\n (!queryAlreadyQueued ||\n dehydratedQuery.state.dataUpdatedAt >\n queryAlreadyQueued.state.dataUpdatedAt)\n ) {\n existingQueries.push(dehydratedQuery)\n }\n }\n }\n\n if (newQueries.length > 0) {\n // It's actually fine to call this with queries/state that already exists\n // in the cache, or is older. hydrate() is idempotent for queries.\n hydrate(client, { queries: newQueries }, optionsRef.current)\n }\n if (existingQueries.length > 0) {\n setHydrationQueue((prev) =>\n prev ? [...prev, ...existingQueries] : existingQueries,\n )\n }\n }\n }, [client, hydrationQueue, state])\n\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current)\n setHydrationQueue(undefined)\n }\n }, [client, hydrationQueue])\n\n return children as React.ReactElement\n}\n", "'use client'\nimport * as React from 'react'\nimport { notifyManager } from '@tanstack/query-core'\n\nimport { useQueryClient } from './QueryClientProvider'\nimport type { QueryClient, QueryFilters } from '@tanstack/query-core'\n\nexport function useIsFetching(\n filters?: QueryFilters,\n queryClient?: QueryClient,\n): number {\n const client = useQueryClient(queryClient)\n const queryCache = client.getQueryCache()\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),\n [queryCache],\n ),\n () => client.isFetching(filters),\n () => client.isFetching(filters),\n )\n}\n", "/* eslint-disable react-compiler/react-compiler */\n\n'use client'\nimport * as React from 'react'\n\nimport { notifyManager, replaceEqualDeep } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n Mutation,\n MutationCache,\n MutationFilters,\n MutationState,\n QueryClient,\n} from '@tanstack/query-core'\n\nexport function useIsMutating(\n filters?: MutationFilters,\n queryClient?: QueryClient,\n): number {\n const client = useQueryClient(queryClient)\n return useMutationState(\n { filters: { ...filters, status: 'pending' } },\n client,\n ).length\n}\n\ntype MutationStateOptions = {\n filters?: MutationFilters\n select?: (mutation: Mutation) => TResult\n}\n\nfunction getResult(\n mutationCache: MutationCache,\n options: MutationStateOptions,\n): Array {\n return mutationCache\n .findAll(options.filters)\n .map(\n (mutation): TResult =>\n (options.select ? options.select(mutation) : mutation.state) as TResult,\n )\n}\n\nexport function useMutationState(\n options: MutationStateOptions = {},\n queryClient?: QueryClient,\n): Array {\n const mutationCache = useQueryClient(queryClient).getMutationCache()\n const optionsRef = React.useRef(options)\n const result = React.useRef>(null)\n if (!result.current) {\n result.current = getResult(mutationCache, options)\n }\n\n React.useEffect(() => {\n optionsRef.current = options\n })\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n mutationCache.subscribe(() => {\n const nextResult = replaceEqualDeep(\n result.current,\n getResult(mutationCache, optionsRef.current),\n )\n if (result.current !== nextResult) {\n result.current = nextResult\n notifyManager.schedule(onStoreChange)\n }\n }),\n [mutationCache],\n ),\n () => result.current,\n () => result.current,\n )!\n}\n", "'use client'\nimport * as React from 'react'\nimport { MutationObserver, notifyManager } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { noop, shouldThrowError } from './utils'\nimport type {\n UseMutateFunction,\n UseMutationOptions,\n UseMutationResult,\n} from './types'\nimport type { DefaultError, QueryClient } from '@tanstack/query-core'\n\n// HOOK\n\nexport function useMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutationOptions,\n queryClient?: QueryClient,\n): UseMutationResult {\n const client = useQueryClient(queryClient)\n\n const [observer] = React.useState(\n () =>\n new MutationObserver(\n client,\n options,\n ),\n )\n\n React.useEffect(() => {\n observer.setOptions(options)\n }, [observer, options])\n\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n const mutate = React.useCallback<\n UseMutateFunction\n >(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop)\n },\n [observer],\n )\n\n if (\n result.error &&\n shouldThrowError(observer.options.throwOnError, [result.error])\n ) {\n throw result.error\n }\n\n return { ...result, mutate, mutateAsync: result.mutate }\n}\n", "'use client'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type {\n DefaultError,\n InfiniteData,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport type {\n DefinedUseInfiniteQueryResult,\n UseInfiniteQueryOptions,\n UseInfiniteQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataInfiniteOptions,\n UndefinedInitialDataInfiniteOptions,\n} from './infiniteQueryOptions'\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): DefinedUseInfiniteQueryResult\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseInfiniteQueryResult\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseInfiniteQueryResult\n\nexport function useInfiniteQuery(\n options: UseInfiniteQueryOptions,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n )\n}\n"], - "mappings": ";;;;;;;;;;;;;;;;AAAO,IAAM,eAAN,MAA+C;EAGpD,cAAc;AAFd,SAAU,YAAY,oBAAI,IAAe;AAGvC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;EAC3C;EAEA,UAAU,UAAiC;AACzC,SAAK,UAAU,IAAI,QAAQ;AAE3B,SAAK,YAAY;AAEjB,WAAO,MAAM;AACX,WAAK,UAAU,OAAO,QAAQ;AAC9B,WAAK,cAAc;IACrB;EACF;EAEA,eAAwB;AACtB,WAAO,KAAK,UAAU,OAAO;EAC/B;EAEU,cAAoB;EAE9B;EAEU,gBAAsB;EAEhC;AACF;;;ACuCO,IAAM,WAAW,OAAO,WAAW,eAAe,UAAU;AAE5D,SAAS,OAAkB;AAChC,SAAO;AACT;AAEO,SAAS,iBACd,SACA,OACS;AACT,SAAO,OAAO,YAAY,aACrB,QAAmC,KAAK,IACzC;AACN;AAEO,SAAS,eAAe,OAAiC;AAC9D,SAAO,OAAO,UAAU,YAAY,SAAS,KAAK,UAAU;AAC9D;AAEO,SAAS,eAAe,WAAmB,WAA4B;AAC5E,SAAO,KAAK,IAAI,aAAa,aAAa,KAAK,KAAK,IAAI,GAAG,CAAC;AAC9D;AAEO,SAAS,iBAMd,WACA,OACoB;AACpB,SAAO,OAAO,cAAc,aAAa,UAAU,KAAK,IAAI;AAC9D;AAEO,SAAS,eAMd,SACA,OACqB;AACrB,SAAO,OAAO,YAAY,aAAa,QAAQ,KAAK,IAAI;AAC1D;AAEO,SAAS,WACd,SACA,OACS;AACT,QAAM;IACJ,OAAO;IACP;IACA;IACA;IACA;IACA;EACF,IAAI;AAEJ,MAAI,UAAU;AACZ,QAAI,OAAO;AACT,UAAI,MAAM,cAAc,sBAAsB,UAAU,MAAM,OAAO,GAAG;AACtE,eAAO;MACT;IACF,WAAW,CAAC,gBAAgB,MAAM,UAAU,QAAQ,GAAG;AACrD,aAAO;IACT;EACF;AAEA,MAAI,SAAS,OAAO;AAClB,UAAM,WAAW,MAAM,SAAS;AAChC,QAAI,SAAS,YAAY,CAAC,UAAU;AAClC,aAAO;IACT;AACA,QAAI,SAAS,cAAc,UAAU;AACnC,aAAO;IACT;EACF;AAEA,MAAI,OAAO,UAAU,aAAa,MAAM,QAAQ,MAAM,OAAO;AAC3D,WAAO;EACT;AAEA,MAAI,eAAe,gBAAgB,MAAM,MAAM,aAAa;AAC1D,WAAO;EACT;AAEA,MAAI,aAAa,CAAC,UAAU,KAAK,GAAG;AAClC,WAAO;EACT;AAEA,SAAO;AACT;AAEO,SAAS,cACd,SACA,UACS;AACT,QAAM,EAAE,OAAO,QAAQ,WAAW,YAAY,IAAI;AAClD,MAAI,aAAa;AACf,QAAI,CAAC,SAAS,QAAQ,aAAa;AACjC,aAAO;IACT;AACA,QAAI,OAAO;AACT,UAAI,QAAQ,SAAS,QAAQ,WAAW,MAAM,QAAQ,WAAW,GAAG;AAClE,eAAO;MACT;IACF,WAAW,CAAC,gBAAgB,SAAS,QAAQ,aAAa,WAAW,GAAG;AACtE,aAAO;IACT;EACF;AAEA,MAAI,UAAU,SAAS,MAAM,WAAW,QAAQ;AAC9C,WAAO;EACT;AAEA,MAAI,aAAa,CAAC,UAAU,QAAQ,GAAG;AACrC,WAAO;EACT;AAEA,SAAO;AACT;AAEO,SAAS,sBACd,UACA,SACQ;AACR,QAAM,UAAS,mCAAS,mBAAkB;AAC1C,SAAO,OAAO,QAAQ;AACxB;AAMO,SAAS,QAAQ,UAA0C;AAChE,SAAO,KAAK;IAAU;IAAU,CAAC,GAAG,QAClC,cAAc,GAAG,IACb,OAAO,KAAK,GAAG,EACZ,KAAK,EACL,OAAO,CAAC,QAAQ,QAAQ;AACvB,aAAO,GAAG,IAAI,IAAI,GAAG;AACrB,aAAO;IACT,GAAG,CAAC,CAAQ,IACd;EACN;AACF;AAMO,SAAS,gBAAgB,GAAQ,GAAiB;AACvD,MAAI,MAAM,GAAG;AACX,WAAO;EACT;AAEA,MAAI,OAAO,MAAM,OAAO,GAAG;AACzB,WAAO;EACT;AAEA,MAAI,KAAK,KAAK,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAC5D,WAAO,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;EACvE;AAEA,SAAO;AACT;AAQO,SAAS,iBAAiB,GAAQ,GAAa;AACpD,MAAI,MAAM,GAAG;AACX,WAAO;EACT;AAEA,QAAM,QAAQ,aAAa,CAAC,KAAK,aAAa,CAAC;AAE/C,MAAI,SAAU,cAAc,CAAC,KAAK,cAAc,CAAC,GAAI;AACnD,UAAM,SAAS,QAAQ,IAAI,OAAO,KAAK,CAAC;AACxC,UAAM,QAAQ,OAAO;AACrB,UAAM,SAAS,QAAQ,IAAI,OAAO,KAAK,CAAC;AACxC,UAAM,QAAQ,OAAO;AACrB,UAAM,OAAY,QAAQ,CAAC,IAAI,CAAC;AAEhC,QAAI,aAAa;AAEjB,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,YAAM,MAAM,QAAQ,IAAI,OAAO,CAAC;AAChC,WACI,CAAC,SAAS,OAAO,SAAS,GAAG,KAAM,UACrC,EAAE,GAAG,MAAM,UACX,EAAE,GAAG,MAAM,QACX;AACA,aAAK,GAAG,IAAI;AACZ;MACF,OAAO;AACL,aAAK,GAAG,IAAI,iBAAiB,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;AAC3C,YAAI,KAAK,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,QAAW;AAChD;QACF;MACF;IACF;AAEA,WAAO,UAAU,SAAS,eAAe,QAAQ,IAAI;EACvD;AAEA,SAAO;AACT;AAKO,SAAS,oBACd,GACA,GACS;AACT,MAAI,CAAC,KAAK,OAAO,KAAK,CAAC,EAAE,WAAW,OAAO,KAAK,CAAC,EAAE,QAAQ;AACzD,WAAO;EACT;AAEA,aAAW,OAAO,GAAG;AACnB,QAAI,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG;AACrB,aAAO;IACT;EACF;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,OAAgB;AAC3C,SAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,OAAO,KAAK,KAAK,EAAE;AACrE;AAIO,SAAS,cAAc,GAAqB;AACjD,MAAI,CAAC,mBAAmB,CAAC,GAAG;AAC1B,WAAO;EACT;AAGA,QAAM,OAAO,EAAE;AACf,MAAI,SAAS,QAAW;AACtB,WAAO;EACT;AAGA,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,mBAAmB,IAAI,GAAG;AAC7B,WAAO;EACT;AAGA,MAAI,CAAC,KAAK,eAAe,eAAe,GAAG;AACzC,WAAO;EACT;AAGA,MAAI,OAAO,eAAe,CAAC,MAAM,OAAO,WAAW;AACjD,WAAO;EACT;AAGA,SAAO;AACT;AAEA,SAAS,mBAAmB,GAAiB;AAC3C,SAAO,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AAC/C;AAEO,SAAS,MAAM,SAAgC;AACpD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,OAAO;EAC7B,CAAC;AACH;AAEO,SAAS,YAGd,UAA6B,MAAa,SAA0B;AACpE,MAAI,OAAO,QAAQ,sBAAsB,YAAY;AACnD,WAAO,QAAQ,kBAAkB,UAAU,IAAI;EACjD,WAAW,QAAQ,sBAAsB,OAAO;AAC9C,QAAI,MAAuC;AACzC,UAAI;AACF,eAAO,iBAAiB,UAAU,IAAI;MACxC,SAAS,OAAO;AACd,gBAAQ;UACN,0JAA0J,QAAQ,SAAS,MAAM,KAAK;QACxL;MACF;IACF;AAEA,WAAO,iBAAiB,UAAU,IAAI;EACxC;AACA,SAAO;AACT;AAEO,SAAS,iBACd,cACe;AACf,SAAO;AACT;AAEO,SAAS,SAAY,OAAiB,MAAS,MAAM,GAAa;AACvE,QAAM,WAAW,CAAC,GAAG,OAAO,IAAI;AAChC,SAAO,OAAO,SAAS,SAAS,MAAM,SAAS,MAAM,CAAC,IAAI;AAC5D;AAEO,SAAS,WAAc,OAAiB,MAAS,MAAM,GAAa;AACzE,QAAM,WAAW,CAAC,MAAM,GAAG,KAAK;AAChC,SAAO,OAAO,SAAS,SAAS,MAAM,SAAS,MAAM,GAAG,EAAE,IAAI;AAChE;AAEO,IAAM,YAAY,OAAO;AAGzB,SAAS,cAId,SAIA,cACwC;AACxC,MAAI,MAAuC;AACzC,QAAI,QAAQ,YAAY,WAAW;AACjC,cAAQ;QACN,yGAAyG,QAAQ,SAAS;MAC5H;IACF;EACF;AAKA,MAAI,CAAC,QAAQ,YAAW,6CAAc,iBAAgB;AACpD,WAAO,MAAM,aAAa;EAC5B;AAEA,MAAI,CAAC,QAAQ,WAAW,QAAQ,YAAY,WAAW;AACrD,WAAO,MACL,QAAQ,OAAO,IAAI,MAAM,qBAAqB,QAAQ,SAAS,GAAG,CAAC;EACvE;AAEA,SAAO,QAAQ;AACjB;;;;AC5ZO,IAAM,gBAAN,mBAA2B,aAAuB;EAMvD,cAAc;AACZ,UAAM;AANR;AACA;AAEA;AAIE,uBAAK,QAAS,CAAC,YAAY;AAGzB,UAAI,CAAC,YAAY,OAAO,kBAAkB;AACxC,cAAM,WAAW,MAAM,QAAQ;AAE/B,eAAO,iBAAiB,oBAAoB,UAAU,KAAK;AAE3D,eAAO,MAAM;AAEX,iBAAO,oBAAoB,oBAAoB,QAAQ;QACzD;MACF;AACA;IACF;EACF;EAEU,cAAoB;AAC5B,QAAI,CAAC,mBAAK,WAAU;AAClB,WAAK,iBAAiB,mBAAK,OAAM;IACnC;EACF;EAEU,gBAAgB;;AACxB,QAAI,CAAC,KAAK,aAAa,GAAG;AACxB,OAAAA,OAAA,mBAAK,cAAL,gBAAAA,KAAA;AACA,yBAAK,UAAW;IAClB;EACF;EAEA,iBAAiB,OAAsB;;AACrC,uBAAK,QAAS;AACd,KAAAA,OAAA,mBAAK,cAAL,gBAAAA,KAAA;AACA,uBAAK,UAAW,MAAM,CAAC,YAAY;AACjC,UAAI,OAAO,YAAY,WAAW;AAChC,aAAK,WAAW,OAAO;MACzB,OAAO;AACL,aAAK,QAAQ;MACf;IACF,CAAC;EACH;EAEA,WAAW,SAAyB;AAClC,UAAM,UAAU,mBAAK,cAAa;AAClC,QAAI,SAAS;AACX,yBAAK,UAAW;AAChB,WAAK,QAAQ;IACf;EACF;EAEA,UAAgB;AACd,UAAM,YAAY,KAAK,UAAU;AACjC,SAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,eAAS,SAAS;IACpB,CAAC;EACH;EAEA,YAAqB;;AACnB,QAAI,OAAO,mBAAK,cAAa,WAAW;AACtC,aAAO,mBAAK;IACd;AAIA,aAAOA,OAAA,WAAW,aAAX,gBAAAA,KAAqB,qBAAoB;EAClD;AACF,GAzEE,0BACA,0BAEA,wBAJK;AA4EA,IAAM,eAAe,IAAI,aAAa;;;;AC/EtC,IAAM,iBAANC,MAAA,cAA4B,aAAuB;EAMxD,cAAc;AACZ,UAAM;AANR,gCAAU;AACV,uBAAAC;AAEA,uBAAAC;AAIE,uBAAKA,SAAS,CAAC,aAAa;AAG1B,UAAI,CAAC,YAAY,OAAO,kBAAkB;AACxC,cAAM,iBAAiB,MAAM,SAAS,IAAI;AAC1C,cAAM,kBAAkB,MAAM,SAAS,KAAK;AAE5C,eAAO,iBAAiB,UAAU,gBAAgB,KAAK;AACvD,eAAO,iBAAiB,WAAW,iBAAiB,KAAK;AAEzD,eAAO,MAAM;AAEX,iBAAO,oBAAoB,UAAU,cAAc;AACnD,iBAAO,oBAAoB,WAAW,eAAe;QACvD;MACF;AAEA;IACF;EACF;EAEU,cAAoB;AAC5B,QAAI,CAAC,mBAAKD,YAAU;AAClB,WAAK,iBAAiB,mBAAKC,QAAM;IACnC;EACF;EAEU,gBAAgB;;AACxB,QAAI,CAAC,KAAK,aAAa,GAAG;AACxB,OAAAF,OAAA,mBAAKC,eAAL,gBAAAD,KAAA;AACA,yBAAKC,WAAW;IAClB;EACF;EAEA,iBAAiB,OAAsB;;AACrC,uBAAKC,SAAS;AACd,KAAAF,OAAA,mBAAKC,eAAL,gBAAAD,KAAA;AACA,uBAAKC,WAAW,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC;EACjD;EAEA,UAAU,QAAuB;AAC/B,UAAM,UAAU,mBAAK,aAAY;AAEjC,QAAI,SAAS;AACX,yBAAK,SAAU;AACf,WAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,iBAAS,MAAM;MACjB,CAAC;IACH;EACF;EAEA,WAAoB;AAClB,WAAO,mBAAK;EACd;AACF,GA7DE,yBACAA,YAAA,eAEAC,UAAA,eAJKF;AAgEA,IAAM,gBAAgB,IAAI,cAAc;;;ACxB/C,SAAS,kBAAkB,cAAsB;AAC/C,SAAO,KAAK,IAAI,MAAO,KAAK,cAAc,GAAK;AACjD;AAEO,SAAS,SAAS,aAA+C;AACtE,UAAQ,eAAe,cAAc,WACjC,cAAc,SAAS,IACvB;AACN;AAEO,IAAM,iBAAN,cAA6B,MAAM;EAGxC,YAAY,SAAyB;AACnC,UAAM,gBAAgB;AACtB,SAAK,SAAS,mCAAS;AACvB,SAAK,SAAS,mCAAS;EACzB;AACF;AAEO,SAAS,iBAAiB,OAAqC;AACpE,SAAO,iBAAiB;AAC1B;AAEO,SAAS,cACd,QACgB;AAChB,MAAI,mBAAmB;AACvB,MAAI,eAAe;AACnB,MAAI,aAAa;AACjB,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,UAAU,IAAI,QAAe,CAAC,cAAc,gBAAgB;AAChE,qBAAiB;AACjB,oBAAgB;EAClB,CAAC;AAED,QAAM,SAAS,CAAC,kBAAwC;;AACtD,QAAI,CAAC,YAAY;AACf,aAAO,IAAI,eAAe,aAAa,CAAC;AAExC,OAAAG,OAAA,OAAO,UAAP,gBAAAA,KAAA;IACF;EACF;AACA,QAAM,cAAc,MAAM;AACxB,uBAAmB;EACrB;AAEA,QAAM,gBAAgB,MAAM;AAC1B,uBAAmB;EACrB;AAEA,QAAM,cAAc,MAClB,aAAa,UAAU,MACtB,OAAO,gBAAgB,YAAY,cAAc,SAAS,MAC3D,OAAO,OAAO;AAEhB,QAAM,WAAW,MAAM,SAAS,OAAO,WAAW,KAAK,OAAO,OAAO;AAErE,QAAM,UAAU,CAAC,UAAe;;AAC9B,QAAI,CAAC,YAAY;AACf,mBAAa;AACb,OAAAA,OAAA,OAAO,cAAP,gBAAAA,KAAA,aAAmB;AACnB;AACA,qBAAe,KAAK;IACtB;EACF;AAEA,QAAM,SAAS,CAAC,UAAe;;AAC7B,QAAI,CAAC,YAAY;AACf,mBAAa;AACb,OAAAA,OAAA,OAAO,YAAP,gBAAAA,KAAA,aAAiB;AACjB;AACA,oBAAc,KAAK;IACrB;EACF;AAEA,QAAM,QAAQ,MAAM;AAClB,WAAO,IAAI,QAAQ,CAAC,oBAAoB;;AACtC,mBAAa,CAAC,UAAU;AACtB,YAAI,cAAc,YAAY,GAAG;AAC/B,0BAAgB,KAAK;QACvB;MACF;AACA,OAAAA,OAAA,OAAO,YAAP,gBAAAA,KAAA;IACF,CAAC,EAAE,KAAK,MAAM;;AACZ,mBAAa;AACb,UAAI,CAAC,YAAY;AACf,SAAAA,OAAA,OAAO,eAAP,gBAAAA,KAAA;MACF;IACF,CAAC;EACH;AAGA,QAAM,MAAM,MAAM;AAEhB,QAAI,YAAY;AACd;IACF;AAEA,QAAI;AAGJ,UAAM,iBACJ,iBAAiB,IAAI,OAAO,iBAAiB;AAG/C,QAAI;AACF,uBAAiB,kBAAkB,OAAO,GAAG;IAC/C,SAAS,OAAO;AACd,uBAAiB,QAAQ,OAAO,KAAK;IACvC;AAEA,YAAQ,QAAQ,cAAc,EAC3B,KAAK,OAAO,EACZ,MAAM,CAAC,UAAU;;AAEhB,UAAI,YAAY;AACd;MACF;AAGA,YAAM,QAAQ,OAAO,UAAU,WAAW,IAAI;AAC9C,YAAM,aAAa,OAAO,cAAc;AACxC,YAAM,QACJ,OAAO,eAAe,aAClB,WAAW,cAAc,KAAK,IAC9B;AACN,YAAM,cACJ,UAAU,QACT,OAAO,UAAU,YAAY,eAAe,SAC5C,OAAO,UAAU,cAAc,MAAM,cAAc,KAAK;AAE3D,UAAI,oBAAoB,CAAC,aAAa;AAEpC,eAAO,KAAK;AACZ;MACF;AAEA;AAGA,OAAAA,OAAA,OAAO,WAAP,gBAAAA,KAAA,aAAgB,cAAc;AAG9B,YAAM,KAAK,EAER,KAAK,MAAM;AACV,eAAO,YAAY,IAAI,SAAY,MAAM;MAC3C,CAAC,EACA,KAAK,MAAM;AACV,YAAI,kBAAkB;AACpB,iBAAO,KAAK;QACd,OAAO;AACL,cAAI;QACN;MACF,CAAC;IACL,CAAC;EACL;AAEA,SAAO;IACL;IACA;IACA,UAAU,MAAM;AACd;AACA,aAAO;IACT;IACA;IACA;IACA;IACA,OAAO,MAAM;AAEX,UAAI,SAAS,GAAG;AACd,YAAI;MACN,OAAO;AACL,cAAM,EAAE,KAAK,GAAG;MAClB;AACA,aAAO;IACT;EACF;AACF;;;ACxNO,SAAS,sBAAsB;AACpC,MAAI,QAA+B,CAAC;AACpC,MAAI,eAAe;AACnB,MAAI,WAA2B,CAAC,aAAa;AAC3C,aAAS;EACX;AACA,MAAI,gBAAqC,CAAC,aAAyB;AACjE,aAAS;EACX;AACA,MAAI,aAA+B,CAAC,OAAO,WAAW,IAAI,CAAC;AAE3D,QAAM,WAAW,CAAC,aAAmC;AACnD,QAAI,cAAc;AAChB,YAAM,KAAK,QAAQ;IACrB,OAAO;AACL,iBAAW,MAAM;AACf,iBAAS,QAAQ;MACnB,CAAC;IACH;EACF;AACA,QAAM,QAAQ,MAAY;AACxB,UAAM,gBAAgB;AACtB,YAAQ,CAAC;AACT,QAAI,cAAc,QAAQ;AACxB,iBAAW,MAAM;AACf,sBAAc,MAAM;AAClB,wBAAc,QAAQ,CAAC,aAAa;AAClC,qBAAS,QAAQ;UACnB,CAAC;QACH,CAAC;MACH,CAAC;IACH;EACF;AAEA,SAAO;IACL,OAAO,CAAI,aAAyB;AAClC,UAAI;AACJ;AACA,UAAI;AACF,iBAAS,SAAS;MACpB,UAAA;AACE;AACA,YAAI,CAAC,cAAc;AACjB,gBAAM;QACR;MACF;AACA,aAAO;IACT;;;;IAIA,YAAY,CACV,aAC0B;AAC1B,aAAO,IAAI,SAAS;AAClB,iBAAS,MAAM;AACb,mBAAS,GAAG,IAAI;QAClB,CAAC;MACH;IACF;IACA;;;;;IAKA,mBAAmB,CAAC,OAAuB;AACzC,iBAAW;IACb;;;;;IAKA,wBAAwB,CAAC,OAA4B;AACnD,sBAAgB;IAClB;IACA,cAAc,CAAC,OAAyB;AACtC,mBAAa;IACf;EACF;AACF;AAGO,IAAM,gBAAgB,oBAAoB;;;;AC5F1C,IAAe,aAAfC,MAAA,MAAyB;EAAzB;AAEL;;EAEA,UAAgB;AACd,SAAK,eAAe;EACtB;EAEU,aAAmB;AAC3B,SAAK,eAAe;AAEpB,QAAI,eAAe,KAAK,MAAM,GAAG;AAC/B,yBAAK,YAAa,WAAW,MAAM;AACjC,aAAK,eAAe;MACtB,GAAG,KAAK,MAAM;IAChB;EACF;EAEU,aAAa,WAAqC;AAE1D,SAAK,SAAS,KAAK;MACjB,KAAK,UAAU;MACf,cAAc,WAAW,WAAW,IAAI,KAAK;IAC/C;EACF;EAEU,iBAAiB;AACzB,QAAI,mBAAK,aAAY;AACnB,mBAAa,mBAAK,WAAU;AAC5B,yBAAK,YAAa;IACpB;EACF;AAGF,GAhCE,4BAFKA;;;;ACwJA,IAAM,SAANC,MAAA,cAKG,UAAU;EAelB,YAAY,QAA6D;AACvE,UAAM;AArBH;AAYL;AACA;AACA;AACA;AAEA;AACA;AAKE,uBAAK,sBAAuB;AAC5B,uBAAK,iBAAkB,OAAO;AAC9B,SAAK,WAAW,OAAO,OAAO;AAC9B,SAAK,YAAY,CAAC;AAClB,uBAAK,QAAS,OAAO;AACrB,SAAK,WAAW,OAAO;AACvB,SAAK,YAAY,OAAO;AACxB,uBAAK,eAAgB,gBAAgB,KAAK,OAAO;AACjD,SAAK,QAAQ,OAAO,SAAS,mBAAK;AAClC,SAAK,WAAW;EAClB;EACA,IAAI,OAA8B;AAChC,WAAO,KAAK,QAAQ;EACtB;EAEA,IAAI,UAAsC;;AACxC,YAAOA,OAAA,mBAAK,cAAL,gBAAAA,KAAe;EACxB;EAEA,WACE,SACM;AACN,SAAK,UAAU,EAAE,GAAG,mBAAK,kBAAiB,GAAG,QAAQ;AAErD,SAAK,aAAa,KAAK,QAAQ,MAAM;EACvC;EAEU,iBAAiB;AACzB,QAAI,CAAC,KAAK,UAAU,UAAU,KAAK,MAAM,gBAAgB,QAAQ;AAC/D,yBAAK,QAAO,OAAO,IAAI;IACzB;EACF;EAEA,QACE,SACA,SACO;AACP,UAAM,OAAO,YAAY,KAAK,MAAM,MAAM,SAAS,KAAK,OAAO;AAG/D,0BAAK,+BAAL,WAAe;MACb;MACA,MAAM;MACN,eAAe,mCAAS;MACxB,QAAQ,mCAAS;IACnB;AAEA,WAAO;EACT;EAEA,SACE,OACA,iBACM;AACN,0BAAK,+BAAL,WAAe,EAAE,MAAM,YAAY,OAAO,gBAAgB;EAC5D;EAEA,OAAO,SAAwC;;AAC7C,UAAM,WAAUA,OAAA,mBAAK,cAAL,gBAAAA,KAAe;AAC/B,6BAAK,cAAL,mBAAe,OAAO;AACtB,WAAO,UAAU,QAAQ,KAAK,IAAI,EAAE,MAAM,IAAI,IAAI,QAAQ,QAAQ;EACpE;EAEA,UAAgB;AACd,UAAM,QAAQ;AAEd,SAAK,OAAO,EAAE,QAAQ,KAAK,CAAC;EAC9B;EAEA,QAAc;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS,mBAAK,cAAa;EAClC;EAEA,WAAoB;AAClB,WAAO,KAAK,UAAU;MACpB,CAAC,aAAa,eAAe,SAAS,QAAQ,SAAS,IAAI,MAAM;IACnE;EACF;EAEA,aAAsB;AACpB,WAAO,KAAK,kBAAkB,IAAI,KAAK,CAAC,KAAK,SAAS;EACxD;EAEA,UAAmB;AACjB,QAAI,KAAK,MAAM,eAAe;AAC5B,aAAO;IACT;AAEA,QAAI,KAAK,kBAAkB,IAAI,GAAG;AAChC,aAAO,KAAK,UAAU;QACpB,CAAC,aAAa,SAAS,iBAAiB,EAAE;MAC5C;IACF;AAEA,WAAO,KAAK,MAAM,SAAS;EAC7B;EAEA,cAAc,YAAY,GAAY;AACpC,WACE,KAAK,MAAM,iBACX,KAAK,MAAM,SAAS,UACpB,CAAC,eAAe,KAAK,MAAM,eAAe,SAAS;EAEvD;EAEA,UAAgB;;AACd,UAAM,WAAW,KAAK,UAAU,KAAK,CAAC,MAAM,EAAE,yBAAyB,CAAC;AAExE,yCAAU,QAAQ,EAAE,eAAe,MAAM;AAGzC,KAAAA,OAAA,mBAAK,cAAL,gBAAAA,KAAe;EACjB;EAEA,WAAiB;;AACf,UAAM,WAAW,KAAK,UAAU,KAAK,CAAC,MAAM,EAAE,uBAAuB,CAAC;AAEtE,yCAAU,QAAQ,EAAE,eAAe,MAAM;AAGzC,KAAAA,OAAA,mBAAK,cAAL,gBAAAA,KAAe;EACjB;EAEA,YAAY,UAAwD;AAClE,QAAI,CAAC,KAAK,UAAU,SAAS,QAAQ,GAAG;AACtC,WAAK,UAAU,KAAK,QAAQ;AAG5B,WAAK,eAAe;AAEpB,yBAAK,QAAO,OAAO,EAAE,MAAM,iBAAiB,OAAO,MAAM,SAAS,CAAC;IACrE;EACF;EAEA,eAAe,UAAwD;AACrE,QAAI,KAAK,UAAU,SAAS,QAAQ,GAAG;AACrC,WAAK,YAAY,KAAK,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ;AAE5D,UAAI,CAAC,KAAK,UAAU,QAAQ;AAG1B,YAAI,mBAAK,WAAU;AACjB,cAAI,mBAAK,uBAAsB;AAC7B,+BAAK,UAAS,OAAO,EAAE,QAAQ,KAAK,CAAC;UACvC,OAAO;AACL,+BAAK,UAAS,YAAY;UAC5B;QACF;AAEA,aAAK,WAAW;MAClB;AAEA,yBAAK,QAAO,OAAO,EAAE,MAAM,mBAAmB,OAAO,MAAM,SAAS,CAAC;IACvE;EACF;EAEA,oBAA4B;AAC1B,WAAO,KAAK,UAAU;EACxB;EAEA,aAAmB;AACjB,QAAI,CAAC,KAAK,MAAM,eAAe;AAC7B,4BAAK,+BAAL,WAAe,EAAE,MAAM,aAAa;IACtC;EACF;EAEA,MACE,SACA,cACgB;;AAChB,QAAI,KAAK,MAAM,gBAAgB,QAAQ;AACrC,UAAI,KAAK,MAAM,SAAS,WAAa,6CAAc,gBAAe;AAEhE,aAAK,OAAO,EAAE,QAAQ,KAAK,CAAC;MAC9B,WAAW,mBAAK,WAAU;AAExB,2BAAK,UAAS,cAAc;AAE5B,eAAO,mBAAK,UAAS;MACvB;IACF;AAGA,QAAI,SAAS;AACX,WAAK,WAAW,OAAO;IACzB;AAIA,QAAI,CAAC,KAAK,QAAQ,SAAS;AACzB,YAAM,WAAW,KAAK,UAAU,KAAK,CAAC,MAAM,EAAE,QAAQ,OAAO;AAC7D,UAAI,UAAU;AACZ,aAAK,WAAW,SAAS,OAAO;MAClC;IACF;AAEA,QAAI,MAAuC;AACzC,UAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,QAAQ,GAAG;AACzC,gBAAQ;UACN;QACF;MACF;IACF;AAEA,UAAM,kBAAkB,IAAI,gBAAgB;AAK5C,UAAM,oBAAoB,CAAC,WAAoB;AAC7C,aAAO,eAAe,QAAQ,UAAU;QACtC,YAAY;QACZ,KAAK,MAAM;AACT,6BAAK,sBAAuB;AAC5B,iBAAO,gBAAgB;QACzB;MACF,CAAC;IACH;AAGA,UAAM,UAAU,MAAM;AACpB,YAAM,UAAU,cAAc,KAAK,SAAS,YAAY;AAGxD,YAAM,iBAGF;QACF,UAAU,KAAK;QACf,MAAM,KAAK;MACb;AAEA,wBAAkB,cAAc;AAEhC,yBAAK,sBAAuB;AAC5B,UAAI,KAAK,QAAQ,WAAW;AAC1B,eAAO,KAAK,QAAQ;UAClB;UACA;UACA;QACF;MACF;AAEA,aAAO,QAAQ,cAAiD;IAClE;AAGA,UAAM,UAGF;MACF;MACA,SAAS,KAAK;MACd,UAAU,KAAK;MACf,OAAO,KAAK;MACZ;IACF;AAEA,sBAAkB,OAAO;AAEzB,KAAAA,OAAA,KAAK,QAAQ,aAAb,gBAAAA,KAAuB;MACrB;MACA;;AAIF,uBAAK,cAAe,KAAK;AAGzB,QACE,KAAK,MAAM,gBAAgB,UAC3B,KAAK,MAAM,gBAAc,aAAQ,iBAAR,mBAAsB,OAC/C;AACA,4BAAK,+BAAL,WAAe,EAAE,MAAM,SAAS,OAAM,aAAQ,iBAAR,mBAAsB,KAAK;IACnE;AAEA,UAAM,UAAU,CAAC,UAAyC;;AAExD,UAAI,EAAE,iBAAiB,KAAK,KAAK,MAAM,SAAS;AAC9C,8BAAK,+BAAL,WAAe;UACb,MAAM;UACN;QACF;MACF;AAEA,UAAI,CAAC,iBAAiB,KAAK,GAAG;AAE5B,SAAAC,OAAAD,OAAA,mBAAK,QAAO,QAAO,YAAnB,gBAAAC,IAAA;UAAAD;UACE;UACA;;AAEF,eAAAE,MAAA,mBAAK,QAAO,QAAO,cAAnB;UAAAA;UACE,KAAK,MAAM;UACX;UACA;;MAEJ;AAEA,UAAI,CAAC,KAAK,sBAAsB;AAE9B,aAAK,WAAW;MAClB;AACA,WAAK,uBAAuB;IAC9B;AAGA,uBAAK,UAAW,cAAc;MAC5B,gBAAgB,6CAAc;MAG9B,IAAI,QAAQ;MACZ,OAAO,gBAAgB,MAAM,KAAK,eAAe;MACjD,WAAW,CAAC,SAAS;;AACnB,YAAI,SAAS,QAAW;AACtB,cAAI,MAAuC;AACzC,oBAAQ;cACN,yIAAyI,KAAK,SAAS;YACzJ;UACF;AACA,kBAAQ,IAAI,MAAM,GAAG,KAAK,SAAS,oBAAoB,CAAQ;AAC/D;QACF;AAEA,YAAI;AACF,eAAK,QAAQ,IAAI;QACnB,SAAS,OAAO;AACd,kBAAQ,KAAe;AACvB;QACF;AAGA,SAAAD,OAAAD,OAAA,mBAAK,QAAO,QAAO,cAAnB,gBAAAC,IAAA,KAAAD,MAA+B,MAAM;AACrC,eAAAE,MAAA,mBAAK,QAAO,QAAO,cAAnB;UAAAA;UACE;UACA,KAAK,MAAM;UACX;;AAGF,YAAI,CAAC,KAAK,sBAAsB;AAE9B,eAAK,WAAW;QAClB;AACA,aAAK,uBAAuB;MAC9B;MACA;MACA,QAAQ,CAAC,cAAc,UAAU;AAC/B,8BAAK,+BAAL,WAAe,EAAE,MAAM,UAAU,cAAc,MAAM;MACvD;MACA,SAAS,MAAM;AACb,8BAAK,+BAAL,WAAe,EAAE,MAAM,QAAQ;MACjC;MACA,YAAY,MAAM;AAChB,8BAAK,+BAAL,WAAe,EAAE,MAAM,WAAW;MACpC;MACA,OAAO,QAAQ,QAAQ;MACvB,YAAY,QAAQ,QAAQ;MAC5B,aAAa,QAAQ,QAAQ;MAC7B,QAAQ,MAAM;IAChB,CAAC;AAED,WAAO,mBAAK,UAAS,MAAM;EAC7B;AAoFF,GAzcE,+BACA,8BACA,wBACA,0BAEA,iCACA,sCAlBK,kCAmYL,cAAA,SAAU,QAAqC;AAC7C,QAAM,UAAU,CACd,UAC8B;AAC9B,YAAQ,OAAO,MAAM;MACnB,KAAK;AACH,eAAO;UACL,GAAG;UACH,mBAAmB,OAAO;UAC1B,oBAAoB,OAAO;QAC7B;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,aAAa;QACf;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,aAAa;QACf;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,GAAG,WAAW,MAAM,MAAM,KAAK,OAAO;UACtC,WAAW,OAAO,QAAQ;QAC5B;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,MAAM,OAAO;UACb,iBAAiB,MAAM,kBAAkB;UACzC,eAAe,OAAO,iBAAiB,KAAK,IAAI;UAChD,OAAO;UACP,eAAe;UACf,QAAQ;UACR,GAAI,CAAC,OAAO,UAAU;YACpB,aAAa;YACb,mBAAmB;YACnB,oBAAoB;UACtB;QACF;MACF,KAAK;AACH,cAAM,QAAQ,OAAO;AAErB,YAAI,iBAAiB,KAAK,KAAK,MAAM,UAAU,mBAAK,eAAc;AAChE,iBAAO,EAAE,GAAG,mBAAK,eAAc,aAAa,OAAO;QACrD;AAEA,eAAO;UACL,GAAG;UACH;UACA,kBAAkB,MAAM,mBAAmB;UAC3C,gBAAgB,KAAK,IAAI;UACzB,mBAAmB,MAAM,oBAAoB;UAC7C,oBAAoB;UACpB,aAAa;UACb,QAAQ;QACV;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,eAAe;QACjB;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,GAAG,OAAO;QACZ;IACJ;EACF;AAEA,OAAK,QAAQ,QAAQ,KAAK,KAAK;AAE/B,gBAAc,MAAM,MAAM;AACxB,SAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,eAAS,cAAc;IACzB,CAAC;AAED,uBAAK,QAAO,OAAO,EAAE,OAAO,MAAM,MAAM,WAAW,OAAO,CAAC;EAC7D,CAAC;AACH,GApdKF;AAudA,SAAS,WAMd,MACA,SACA;AACA,SAAO;IACL,mBAAmB;IACnB,oBAAoB;IACpB,aAAa,SAAS,QAAQ,WAAW,IAAI,aAAa;IAC1D,GAAI,SAAS,UACV;MACC,OAAO;MACP,QAAQ;IACV;EACJ;AACF;AAEA,SAAS,gBAMP,SAC2B;AAC3B,QAAM,OACJ,OAAO,QAAQ,gBAAgB,aAC1B,QAAQ,YAA2C,IACpD,QAAQ;AAEd,QAAM,UAAU,SAAS;AAEzB,QAAM,uBAAuB,UACzB,OAAO,QAAQ,yBAAyB,aACrC,QAAQ,qBAAkD,IAC3D,QAAQ,uBACV;AAEJ,SAAO;IACL;IACA,iBAAiB;IACjB,eAAe,UAAW,wBAAwB,KAAK,IAAI,IAAK;IAChE,OAAO;IACP,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,oBAAoB;IACpB,WAAW;IACX,eAAe;IACf,QAAQ,UAAU,YAAY;IAC9B,aAAa;EACf;AACF;;;;AC9kBO,IAAM,cAANG,MAAA,cAAyB,aAAiC;EAG/D,YAAmB,SAA2B,CAAC,GAAG;AAChD,UAAM;AAHR;AAEmB,SAAA,SAAA;AAEjB,uBAAK,UAAW,oBAAI,IAAmB;EACzC;EAEA,MAME,QACA,SAIA,OAC+C;AAC/C,UAAM,WAAW,QAAQ;AACzB,UAAM,YACJ,QAAQ,aAAa,sBAAsB,UAAU,OAAO;AAC9D,QAAI,QAAQ,KAAK,IAA4C,SAAS;AAEtE,QAAI,CAAC,OAAO;AACV,cAAQ,IAAI,MAAM;QAChB,OAAO;QACP;QACA;QACA,SAAS,OAAO,oBAAoB,OAAO;QAC3C;QACA,gBAAgB,OAAO,iBAAiB,QAAQ;MAClD,CAAC;AACD,WAAK,IAAI,KAAK;IAChB;AAEA,WAAO;EACT;EAEA,IAAI,OAAwC;AAC1C,QAAI,CAAC,mBAAK,UAAS,IAAI,MAAM,SAAS,GAAG;AACvC,yBAAK,UAAS,IAAI,MAAM,WAAW,KAAK;AAExC,WAAK,OAAO;QACV,MAAM;QACN;MACF,CAAC;IACH;EACF;EAEA,OAAO,OAAwC;AAC7C,UAAM,aAAa,mBAAK,UAAS,IAAI,MAAM,SAAS;AAEpD,QAAI,YAAY;AACd,YAAM,QAAQ;AAEd,UAAI,eAAe,OAAO;AACxB,2BAAK,UAAS,OAAO,MAAM,SAAS;MACtC;AAEA,WAAK,OAAO,EAAE,MAAM,WAAW,MAAM,CAAC;IACxC;EACF;EAEA,QAAc;AACZ,kBAAc,MAAM,MAAM;AACxB,WAAK,OAAO,EAAE,QAAQ,CAAC,UAAU;AAC/B,aAAK,OAAO,KAAK;MACnB,CAAC;IACH,CAAC;EACH;EAEA,IAME,WAC2D;AAC3D,WAAO,mBAAK,UAAS,IAAI,SAAS;EAGpC;EAEA,SAAuB;AACrB,WAAO,CAAC,GAAG,mBAAK,UAAS,OAAO,CAAC;EACnC;EAEA,KACE,SACgD;AAChD,UAAM,mBAAmB,EAAE,OAAO,MAAM,GAAG,QAAQ;AAEnD,WAAO,KAAK,OAAO,EAAE;MAAK,CAAC,UACzB,WAAW,kBAAkB,KAAK;IACpC;EACF;EAEA,QAAQ,UAAwB,CAAC,GAAiB;AAChD,UAAM,UAAU,KAAK,OAAO;AAC5B,WAAO,OAAO,KAAK,OAAO,EAAE,SAAS,IACjC,QAAQ,OAAO,CAAC,UAAU,WAAW,SAAS,KAAK,CAAC,IACpD;EACN;EAEA,OAAO,OAA8B;AACnC,kBAAc,MAAM,MAAM;AACxB,WAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,iBAAS,KAAK;MAChB,CAAC;IACH,CAAC;EACH;EAEA,UAAgB;AACd,kBAAc,MAAM,MAAM;AACxB,WAAK,OAAO,EAAE,QAAQ,CAAC,UAAU;AAC/B,cAAM,QAAQ;MAChB,CAAC;IACH,CAAC;EACH;EAEA,WAAiB;AACf,kBAAc,MAAM,MAAM;AACxB,WAAK,OAAO,EAAE,QAAQ,CAAC,UAAU;AAC/B,cAAM,SAAS;MACjB,CAAC;IACH,CAAC;EACH;AACF,GAlIE,0BADKA;;;;ACXA,IAAM,YAANC,MAAA,cAKG,UAAU;EASlB,YAAY,QAA6D;AACvE,UAAM;AAfH;AAUL;AACA;AACA,uBAAAC;AAKE,SAAK,aAAa,OAAO;AACzB,uBAAK,gBAAiB,OAAO;AAC7B,uBAAK,YAAa,CAAC;AACnB,SAAK,QAAQ,OAAO,SAASC,iBAAgB;AAE7C,SAAK,WAAW,OAAO,OAAO;AAC9B,SAAK,WAAW;EAClB;EAEA,WACE,SACM;AACN,SAAK,UAAU;AAEf,SAAK,aAAa,KAAK,QAAQ,MAAM;EACvC;EAEA,IAAI,OAAiC;AACnC,WAAO,KAAK,QAAQ;EACtB;EAEA,YAAY,UAAsD;AAChE,QAAI,CAAC,mBAAK,YAAW,SAAS,QAAQ,GAAG;AACvC,yBAAK,YAAW,KAAK,QAAQ;AAG7B,WAAK,eAAe;AAEpB,yBAAK,gBAAe,OAAO;QACzB,MAAM;QACN,UAAU;QACV;MACF,CAAC;IACH;EACF;EAEA,eAAe,UAAsD;AACnE,uBAAK,YAAa,mBAAK,YAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAE9D,SAAK,WAAW;AAEhB,uBAAK,gBAAe,OAAO;MACzB,MAAM;MACN,UAAU;MACV;IACF,CAAC;EACH;EAEU,iBAAiB;AACzB,QAAI,CAAC,mBAAK,YAAW,QAAQ;AAC3B,UAAI,KAAK,MAAM,WAAW,WAAW;AACnC,aAAK,WAAW;MAClB,OAAO;AACL,2BAAK,gBAAe,OAAO,IAAI;MACjC;IACF;EACF;EAEA,WAA6B;;AAC3B,aACEF,OAAA,mBAAKC,eAAL,gBAAAD,KAAe;IAEf,KAAK,QAAQ,KAAK,MAAM,SAAU;EAEtC;EAEA,MAAM,QAAQ,WAAuC;;AACnD,uBAAKC,WAAW,cAAc;MAC5B,IAAI,MAAM;AACR,YAAI,CAAC,KAAK,QAAQ,YAAY;AAC5B,iBAAO,QAAQ,OAAO,IAAI,MAAM,qBAAqB,CAAC;QACxD;AACA,eAAO,KAAK,QAAQ,WAAW,SAAS;MAC1C;MACA,QAAQ,CAAC,cAAc,UAAU;AAC/B,8BAAK,qBAAAE,cAAL,WAAe,EAAE,MAAM,UAAU,cAAc,MAAM;MACvD;MACA,SAAS,MAAM;AACb,8BAAK,qBAAAA,cAAL,WAAe,EAAE,MAAM,QAAQ;MACjC;MACA,YAAY,MAAM;AAChB,8BAAK,qBAAAA,cAAL,WAAe,EAAE,MAAM,WAAW;MACpC;MACA,OAAO,KAAK,QAAQ,SAAS;MAC7B,YAAY,KAAK,QAAQ;MACzB,aAAa,KAAK,QAAQ;MAC1B,QAAQ,MAAM,mBAAK,gBAAe,OAAO,IAAI;IAC/C,CAAC;AAED,UAAM,WAAW,KAAK,MAAM,WAAW;AACvC,UAAM,WAAW,CAAC,mBAAKF,WAAS,SAAS;AAEzC,QAAI;AACF,UAAI,CAAC,UAAU;AACb,8BAAK,qBAAAE,cAAL,WAAe,EAAE,MAAM,WAAW,WAAW,SAAS;AAEtD,gBAAM,MAAAH,OAAA,mBAAK,gBAAe,QAAO,aAA3B;UAAAA;UACJ;UACA;;AAEF,cAAM,UAAU,QAAM,gBAAK,SAAQ,aAAb,4BAAwB;AAC9C,YAAI,YAAY,KAAK,MAAM,SAAS;AAClC,gCAAK,qBAAAG,cAAL,WAAe;YACb,MAAM;YACN;YACA;YACA;UACF;QACF;MACF;AACA,YAAM,OAAO,MAAM,mBAAKF,WAAS,MAAM;AAGvC,cAAM,8BAAK,gBAAe,QAAO,cAA3B;;QACJ;QACA;QACA,KAAK,MAAM;QACX;;AAGF,cAAM,gBAAK,SAAQ,cAAb,4BAAyB,MAAM,WAAW,KAAK,MAAM;AAG3D,cAAM,8BAAK,gBAAe,QAAO,cAA3B;;QACJ;QACA;QACA,KAAK,MAAM;QACX,KAAK,MAAM;QACX;;AAGF,cAAM,gBAAK,SAAQ,cAAb,4BAAyB,MAAM,MAAM,WAAW,KAAK,MAAM;AAEjE,4BAAK,qBAAAE,cAAL,WAAe,EAAE,MAAM,WAAW,KAAK;AACvC,aAAO;IACT,SAAS,OAAO;AACd,UAAI;AAEF,gBAAM,8BAAK,gBAAe,QAAO,YAA3B;;UACJ;UACA;UACA,KAAK,MAAM;UACX;;AAGF,gBAAM,gBAAK,SAAQ,YAAb;;UACJ;UACA;UACA,KAAK,MAAM;;AAIb,gBAAM,8BAAK,gBAAe,QAAO,cAA3B;;UACJ;UACA;UACA,KAAK,MAAM;UACX,KAAK,MAAM;UACX;;AAGF,gBAAM,gBAAK,SAAQ,cAAb;;UACJ;UACA;UACA;UACA,KAAK,MAAM;;AAEb,cAAM;MACR,UAAA;AACE,8BAAK,qBAAAA,cAAL,WAAe,EAAE,MAAM,SAAS,MAAuB;MACzD;IACF,UAAA;AACE,yBAAK,gBAAe,QAAQ,IAAI;IAClC;EACF;AAuEF,GA3PE,4BACA,gCACAF,YAAA,eAZK,qCAgMLE,eAAA,SAAU,QAA2D;AACnE,QAAM,UAAU,CACd,UACuD;AACvD,YAAQ,OAAO,MAAM;MACnB,KAAK;AACH,eAAO;UACL,GAAG;UACH,cAAc,OAAO;UACrB,eAAe,OAAO;QACxB;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,UAAU;QACZ;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,UAAU;QACZ;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,SAAS,OAAO;UAChB,MAAM;UACN,cAAc;UACd,eAAe;UACf,OAAO;UACP,UAAU,OAAO;UACjB,QAAQ;UACR,WAAW,OAAO;UAClB,aAAa,KAAK,IAAI;QACxB;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,MAAM,OAAO;UACb,cAAc;UACd,eAAe;UACf,OAAO;UACP,QAAQ;UACR,UAAU;QACZ;MACF,KAAK;AACH,eAAO;UACL,GAAG;UACH,MAAM;UACN,OAAO,OAAO;UACd,cAAc,MAAM,eAAe;UACnC,eAAe,OAAO;UACtB,UAAU;UACV,QAAQ;QACV;IACJ;EACF;AACA,OAAK,QAAQ,QAAQ,KAAK,KAAK;AAE/B,gBAAc,MAAM,MAAM;AACxB,uBAAK,YAAW,QAAQ,CAAC,aAAa;AACpC,eAAS,iBAAiB,MAAM;IAClC,CAAC;AACD,uBAAK,gBAAe,OAAO;MACzB,UAAU;MACV,MAAM;MACN;IACF,CAAC;EACH,CAAC;AACH,GApQKH;AAuQA,SAASE,mBAKwC;AACtD,SAAO;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,cAAc;IACd,eAAe;IACf,UAAU;IACV,QAAQ;IACR,WAAW;IACX,aAAa;EACf;AACF;;;;ACrRO,IAAM,iBAANE,MAAA,cAA4B,aAAoC;EAIrE,YAAmB,SAA8B,CAAC,GAAG;AACnD,UAAM;AAJR;AACA;AAEmB,SAAA,SAAA;AAEjB,uBAAK,YAAa,oBAAI,IAAI;AAC1B,uBAAK,aAAc,KAAK,IAAI;EAC9B;EAEA,MACE,QACA,SACA,OAC+C;AAC/C,UAAM,WAAW,IAAI,SAAS;MAC5B,eAAe;MACf,YAAmB,EAAL,uBAAK,aAAL;MACd,SAAS,OAAO,uBAAuB,OAAO;MAC9C;IACF,CAAC;AAED,SAAK,IAAI,QAAQ;AAEjB,WAAO;EACT;EAEA,IAAI,UAA8C;AAChD,UAAM,QAAQ,SAAS,QAAQ;AAC/B,UAAM,YAAY,mBAAK,YAAW,IAAI,KAAK,KAAK,CAAC;AACjD,cAAU,KAAK,QAAQ;AACvB,uBAAK,YAAW,IAAI,OAAO,SAAS;AACpC,SAAK,OAAO,EAAE,MAAM,SAAS,SAAS,CAAC;EACzC;EAEA,OAAO,UAA8C;;AACnD,UAAM,QAAQ,SAAS,QAAQ;AAC/B,QAAI,mBAAK,YAAW,IAAI,KAAK,GAAG;AAC9B,YAAM,aAAYA,OAAA,mBAAK,YACpB,IAAI,KAAK,MADM,gBAAAA,KAEd,OAAO,CAAC,MAAM,MAAM;AACxB,UAAI,WAAW;AACb,YAAI,UAAU,WAAW,GAAG;AAC1B,6BAAK,YAAW,OAAO,KAAK;QAC9B,OAAO;AACL,6BAAK,YAAW,IAAI,OAAO,SAAS;QACtC;MACF;IACF;AAEA,SAAK,OAAO,EAAE,MAAM,WAAW,SAAS,CAAC;EAC3C;EAEA,OAAO,UAAiD;;AACtD,UAAM,wBAAuBA,OAAA,mBAAK,YAC/B,IAAI,SAAS,QAAQ,CAAC,MADI,gBAAAA,KAEzB,KAAK,CAAC,MAAM,EAAE,MAAM,WAAW;AAInC,WAAO,CAAC,wBAAwB,yBAAyB;EAC3D;EAEA,QAAQ,UAA0D;;AAChE,UAAM,iBAAgBA,OAAA,mBAAK,YACxB,IAAI,SAAS,QAAQ,CAAC,MADH,gBAAAA,KAElB,KAAK,CAAC,MAAM,MAAM,YAAY,EAAE,MAAM;AAE1C,YAAO,+CAAe,eAAc,QAAQ,QAAQ;EACtD;EAEA,QAAc;AACZ,kBAAc,MAAM,MAAM;AACxB,WAAK,OAAO,EAAE,QAAQ,CAAC,aAAa;AAClC,aAAK,OAAO,QAAQ;MACtB,CAAC;IACH,CAAC;EACH;EAEA,SAA0B;AACxB,WAAO,CAAC,GAAG,mBAAK,YAAW,OAAO,CAAC,EAAE,KAAK;EAC5C;EAEA,KAME,SAC2D;AAC3D,UAAM,mBAAmB,EAAE,OAAO,MAAM,GAAG,QAAQ;AAEnD,WAAO,KAAK,OAAO,EAAE;MAAK,CAAC,aACzB,cAAc,kBAAkB,QAAQ;IAC1C;EACF;EAEA,QAAQ,UAA2B,CAAC,GAAoB;AACtD,WAAO,KAAK,OAAO,EAAE,OAAO,CAAC,aAAa,cAAc,SAAS,QAAQ,CAAC;EAC5E;EAEA,OAAO,OAAiC;AACtC,kBAAc,MAAM,MAAM;AACxB,WAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,iBAAS,KAAK;MAChB,CAAC;IACH,CAAC;EACH;EAEA,wBAA0C;AACxC,UAAM,kBAAkB,KAAK,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,QAAQ;AAEpE,WAAO,cAAc;MAAM,MACzB,QAAQ;QACN,gBAAgB,IAAI,CAAC,aAAa,SAAS,SAAS,EAAE,MAAM,IAAI,CAAC;MACnE;IACF;EACF;AACF,GAtHE,4BACA,6BAFKA;AAyHP,SAAS,SAAS,UAAwC;;AACxD,WAAOA,OAAA,SAAS,QAAQ,UAAjB,gBAAAA,KAAwB,OAAM,OAAO,SAAS,UAAU;AACjE;;;ACpMO,SAAS,sBACd,OACsE;AACtE,SAAO;IACL,SAAS,CAAC,SAAS,UAAU;;AAC3B,YAAM,UAAU,QAAQ;AACxB,YAAM,aAAY,YAAAC,OAAA,QAAQ,iBAAR,gBAAAA,KAAsB,SAAtB,mBAA4B,cAA5B,mBAAuC;AACzD,YAAM,aAAW,aAAQ,MAAM,SAAd,mBAAoB,UAAS,CAAC;AAC/C,YAAM,kBAAgB,aAAQ,MAAM,SAAd,mBAAoB,eAAc,CAAC;AACzD,UAAI,SAAgC,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,EAAE;AAChE,UAAI,cAAc;AAElB,YAAM,UAAU,YAAY;AAC1B,YAAI,YAAY;AAChB,cAAM,oBAAoB,CAAC,WAAoB;AAC7C,iBAAO,eAAe,QAAQ,UAAU;YACtC,YAAY;YACZ,KAAK,MAAM;AACT,kBAAI,QAAQ,OAAO,SAAS;AAC1B,4BAAY;cACd,OAAO;AACL,wBAAQ,OAAO,iBAAiB,SAAS,MAAM;AAC7C,8BAAY;gBACd,CAAC;cACH;AACA,qBAAO,QAAQ;YACjB;UACF,CAAC;QACH;AAEA,cAAM,UAAU,cAAc,QAAQ,SAAS,QAAQ,YAAY;AAGnE,cAAM,YAAY,OAChB,MACA,OACA,aACmC;AACnC,cAAI,WAAW;AACb,mBAAO,QAAQ,OAAO;UACxB;AAEA,cAAI,SAAS,QAAQ,KAAK,MAAM,QAAQ;AACtC,mBAAO,QAAQ,QAAQ,IAAI;UAC7B;AAEA,gBAAM,iBAGF;YACF,UAAU,QAAQ;YAClB,WAAW;YACX,WAAW,WAAW,aAAa;YACnC,MAAM,QAAQ,QAAQ;UACxB;AAEA,4BAAkB,cAAc;AAEhC,gBAAM,OAAO,MAAM;YACjB;UACF;AAEA,gBAAM,EAAE,SAAS,IAAI,QAAQ;AAC7B,gBAAM,QAAQ,WAAW,aAAa;AAEtC,iBAAO;YACL,OAAO,MAAM,KAAK,OAAO,MAAM,QAAQ;YACvC,YAAY,MAAM,KAAK,YAAY,OAAO,QAAQ;UACpD;QACF;AAGA,YAAI,aAAa,SAAS,QAAQ;AAChC,gBAAM,WAAW,cAAc;AAC/B,gBAAM,cAAc,WAAW,uBAAuB;AACtD,gBAAM,UAAU;YACd,OAAO;YACP,YAAY;UACd;AACA,gBAAM,QAAQ,YAAY,SAAS,OAAO;AAE1C,mBAAS,MAAM,UAAU,SAAS,OAAO,QAAQ;QACnD,OAAO;AACL,gBAAM,iBAAiB,SAAS,SAAS;AAGzC,aAAG;AACD,kBAAM,QACJ,gBAAgB,IACX,cAAc,CAAC,KAAK,QAAQ,mBAC7B,iBAAiB,SAAS,MAAM;AACtC,gBAAI,cAAc,KAAK,SAAS,MAAM;AACpC;YACF;AACA,qBAAS,MAAM,UAAU,QAAQ,KAAK;AACtC;UACF,SAAS,cAAc;QACzB;AAEA,eAAO;MACT;AACA,UAAI,QAAQ,QAAQ,WAAW;AAC7B,gBAAQ,UAAU,MAAM;;AACtB,kBAAOC,OAAAD,OAAA,QAAQ,SAAQ,cAAhB,gBAAAC,IAAA;YAAAD;YACL;YACA;cACE,UAAU,QAAQ;cAClB,MAAM,QAAQ,QAAQ;cACtB,QAAQ,QAAQ;YAClB;YACA;;QAEJ;MACF,OAAO;AACL,gBAAQ,UAAU;MACpB;IACF;EACF;AACF;AAEA,SAAS,iBACP,SACA,EAAE,OAAO,WAAW,GACC;AACrB,QAAM,YAAY,MAAM,SAAS;AACjC,SAAO,MAAM,SAAS,IAClB,QAAQ;IACN,MAAM,SAAS;IACf;IACA,WAAW,SAAS;IACpB;EACF,IACA;AACN;AAEA,SAAS,qBACP,SACA,EAAE,OAAO,WAAW,GACC;;AACrB,SAAO,MAAM,SAAS,KAClBA,OAAA,QAAQ,yBAAR,gBAAAA,KAAA,cAA+B,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,GAAG,cAC/D;AACN;AAKO,SAAS,YACd,SACA,MACS;AACT,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,iBAAiB,SAAS,IAAI,KAAK;AAC5C;AAKO,SAAS,gBACd,SACA,MACS;AACT,MAAI,CAAC,QAAQ,CAAC,QAAQ;AAAsB,WAAO;AACnD,SAAO,qBAAqB,SAAS,IAAI,KAAK;AAChD;;;;ACnHO,IAAM,eAANE,MAAA,MAAkB;EAUvB,YAAY,SAA4B,CAAC,GAAG;AAT5C;AACA,uBAAAC;AACA,uBAAAC;AACA;AACA;AACA;AACA;AACA;AAGE,uBAAK,aAAc,OAAO,cAAc,IAAI,WAAW;AACvD,uBAAKD,iBAAiB,OAAO,iBAAiB,IAAI,cAAc;AAChE,uBAAKC,kBAAkB,OAAO,kBAAkB,CAAC;AACjD,uBAAK,gBAAiB,oBAAI,IAAI;AAC9B,uBAAK,mBAAoB,oBAAI,IAAI;AACjC,uBAAK,aAAc;EACrB;EAEA,QAAc;AACZ,2BAAK,aAAL;AACA,QAAI,mBAAK,iBAAgB;AAAG;AAE5B,uBAAK,mBAAoB,aAAa,UAAU,OAAO,YAAY;AACjE,UAAI,SAAS;AACX,cAAM,KAAK,sBAAsB;AACjC,2BAAK,aAAY,QAAQ;MAC3B;IACF,CAAC;AACD,uBAAK,oBAAqB,cAAc,UAAU,OAAO,WAAW;AAClE,UAAI,QAAQ;AACV,cAAM,KAAK,sBAAsB;AACjC,2BAAK,aAAY,SAAS;MAC5B;IACF,CAAC;EACH;EAEA,UAAgB;;AACd,2BAAK,aAAL;AACA,QAAI,mBAAK,iBAAgB;AAAG;AAE5B,KAAAF,OAAA,mBAAK,uBAAL,gBAAAA,KAAA;AACA,uBAAK,mBAAoB;AAEzB,6BAAK,wBAAL;AACA,uBAAK,oBAAqB;EAC5B;EAEA,WAAW,SAAgC;AACzC,WAAO,mBAAK,aAAY,QAAQ,EAAE,GAAG,SAAS,aAAa,WAAW,CAAC,EACpE;EACL;EAEA,WAAW,SAAmC;AAC5C,WAAO,mBAAKC,iBAAe,QAAQ,EAAE,GAAG,SAAS,QAAQ,UAAU,CAAC,EAAE;EACxE;EAYA,aAAa,UAAoB;;AAC/B,UAAM,UAAU,KAAK,oBAAoB,EAAE,SAAS,CAAC;AACrD,YAAOD,OAAA,mBAAK,aAAY,IAAI,QAAQ,SAAS,MAAtC,gBAAAA,KAAyC,MAAM;EACxD;EAEA,gBAME,SACgB;AAChB,UAAM,aAAa,KAAK,aAAoB,QAAQ,QAAQ;AAE5D,QAAI,eAAe;AAAW,aAAO,KAAK,WAAW,OAAO;SACvD;AACH,YAAM,mBAAmB,KAAK,oBAAoB,OAAO;AACzD,YAAM,QAAQ,mBAAK,aAAY,MAAM,MAAM,gBAAgB;AAE3D,UACE,QAAQ,qBACR,MAAM,cAAc,iBAAiB,iBAAiB,WAAW,KAAK,CAAC,GACvE;AACA,aAAK,KAAK,cAAc,gBAAgB;MAC1C;AAEA,aAAO,QAAQ,QAAQ,UAAU;IACnC;EACF;EAEA,eACE,SAC6C;AAC7C,WAAO,mBAAK,aAAY,QAAQ,OAAO,EAAE,IAAI,CAAC,EAAE,UAAU,MAAM,MAAM;AACpE,YAAM,OAAO,MAAM;AACnB,aAAO,CAAC,UAAU,IAAI;IACxB,CAAC;EACH;EAEA,aAUE,UACA,SAIA,SACkC;AAClC,UAAM,mBAAmB,KAAK,oBAM5B,EAAE,SAAS,CAAC;AAEd,UAAM,QAAQ,mBAAK,aAAY;MAC7B,iBAAiB;IACnB;AACA,UAAM,WAAW,+BAAO,MAAM;AAC9B,UAAM,OAAO,iBAAiB,SAAS,QAAQ;AAE/C,QAAI,SAAS,QAAW;AACtB,aAAO;IACT;AAEA,WAAO,mBAAK,aACT,MAAM,MAAM,gBAAgB,EAC5B,QAAQ,MAAM,EAAE,GAAG,SAAS,QAAQ,KAAK,CAAC;EAC/C;EAEA,eACE,SACA,SACA,SAC6C;AAC7C,WAAO,cAAc;MAAM,MACzB,mBAAK,aACF,QAAQ,OAAO,EACf,IAAI,CAAC,EAAE,SAAS,MAAM;QACrB;QACA,KAAK,aAA2B,UAAU,SAAS,OAAO;MAC5D,CAAC;IACL;EACF;EAEA,cAWE,UACsD;;AACtD,UAAM,UAAU,KAAK,oBAAoB,EAAE,SAAS,CAAC;AACrD,YAAOA,OAAA,mBAAK,aAAY,IAAkC,QAAQ,SAAS,MAApE,gBAAAA,KACH;EACN;EAEA,cAAc,SAA8B;AAC1C,UAAM,aAAa,mBAAK;AACxB,kBAAc,MAAM,MAAM;AACxB,iBAAW,QAAQ,OAAO,EAAE,QAAQ,CAAC,UAAU;AAC7C,mBAAW,OAAO,KAAK;MACzB,CAAC;IACH,CAAC;EACH;EAEA,aAAa,SAAwB,SAAuC;AAC1E,UAAM,aAAa,mBAAK;AAExB,UAAM,iBAAsC;MAC1C,MAAM;MACN,GAAG;IACL;AAEA,WAAO,cAAc,MAAM,MAAM;AAC/B,iBAAW,QAAQ,OAAO,EAAE,QAAQ,CAAC,UAAU;AAC7C,cAAM,MAAM;MACd,CAAC;AACD,aAAO,KAAK,eAAe,gBAAgB,OAAO;IACpD,CAAC;EACH;EAEA,cACE,UAAwB,CAAC,GACzB,gBAA+B,CAAC,GACjB;AACf,UAAM,yBAAyB,EAAE,QAAQ,MAAM,GAAG,cAAc;AAEhE,UAAM,WAAW,cAAc;MAAM,MACnC,mBAAK,aACF,QAAQ,OAAO,EACf,IAAI,CAAC,UAAU,MAAM,OAAO,sBAAsB,CAAC;IACxD;AAEA,WAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI;EACpD;EAEA,kBACE,UAAkC,CAAC,GACnC,UAA6B,CAAC,GACf;AACf,WAAO,cAAc,MAAM,MAAM;AAC/B,yBAAK,aAAY,QAAQ,OAAO,EAAE,QAAQ,CAAC,UAAU;AACnD,cAAM,WAAW;MACnB,CAAC;AAED,UAAI,QAAQ,gBAAgB,QAAQ;AAClC,eAAO,QAAQ,QAAQ;MACzB;AACA,YAAM,iBAAsC;QAC1C,GAAG;QACH,MAAM,QAAQ,eAAe,QAAQ,QAAQ;MAC/C;AACA,aAAO,KAAK,eAAe,gBAAgB,OAAO;IACpD,CAAC;EACH;EAEA,eACE,UAA+B,CAAC,GAChC,SACe;AACf,UAAM,eAAe;MACnB,GAAG;MACH,gBAAe,mCAAS,kBAAiB;IAC3C;AACA,UAAM,WAAW,cAAc;MAAM,MACnC,mBAAK,aACF,QAAQ,OAAO,EACf,OAAO,CAAC,UAAU,CAAC,MAAM,WAAW,CAAC,EACrC,IAAI,CAAC,UAAU;AACd,YAAI,UAAU,MAAM,MAAM,QAAW,YAAY;AACjD,YAAI,CAAC,aAAa,cAAc;AAC9B,oBAAU,QAAQ,MAAM,IAAI;QAC9B;AACA,eAAO,MAAM,MAAM,gBAAgB,WAC/B,QAAQ,QAAQ,IAChB;MACN,CAAC;IACL;AAEA,WAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,IAAI;EACxC;EAEA,WAOE,SAOgB;AAChB,UAAM,mBAAmB,KAAK,oBAAoB,OAAO;AAGzD,QAAI,iBAAiB,UAAU,QAAW;AACxC,uBAAiB,QAAQ;IAC3B;AAEA,UAAM,QAAQ,mBAAK,aAAY,MAAM,MAAM,gBAAgB;AAE3D,WAAO,MAAM;MACX,iBAAiB,iBAAiB,WAAW,KAAK;IACpD,IACI,MAAM,MAAM,gBAAgB,IAC5B,QAAQ,QAAQ,MAAM,MAAM,IAAa;EAC/C;EAEA,cAME,SACe;AACf,WAAO,KAAK,WAAW,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI;EACvD;EAEA,mBAOE,SAO0C;AAC1C,YAAQ,WAAW,sBAKjB,QAAQ,KAAK;AACf,WAAO,KAAK,WAAW,OAAc;EACvC;EAEA,sBAOE,SAOe;AACf,WAAO,KAAK,mBAAmB,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI;EAC/D;EAEA,wBAOE,SAO0C;AAC1C,YAAQ,WAAW,sBAKjB,QAAQ,KAAK;AAEf,WAAO,KAAK,gBAAgB,OAAc;EAC5C;EAEA,wBAA0C;AACxC,QAAI,cAAc,SAAS,GAAG;AAC5B,aAAO,mBAAKC,iBAAe,sBAAsB;IACnD;AACA,WAAO,QAAQ,QAAQ;EACzB;EAEA,gBAA4B;AAC1B,WAAO,mBAAK;EACd;EAEA,mBAAkC;AAChC,WAAO,mBAAKA;EACd;EAEA,oBAAoC;AAClC,WAAO,mBAAKC;EACd;EAEA,kBAAkB,SAA+B;AAC/C,uBAAKA,kBAAkB;EACzB;EAEA,iBAME,UACA,SAMM;AACN,uBAAK,gBAAe,IAAI,QAAQ,QAAQ,GAAG;MACzC;MACA,gBAAgB;IAClB,CAAC;EACH;EAEA,iBACE,UACsE;AACtE,UAAM,WAAW,CAAC,GAAG,mBAAK,gBAAe,OAAO,CAAC;AAEjD,QAAI,SAGA,CAAC;AAEL,aAAS,QAAQ,CAAC,iBAAiB;AACjC,UAAI,gBAAgB,UAAU,aAAa,QAAQ,GAAG;AACpD,iBAAS,EAAE,GAAG,QAAQ,GAAG,aAAa,eAAe;MACvD;IACF,CAAC;AACD,WAAO;EACT;EAEA,oBAME,aACA,SAIM;AACN,uBAAK,mBAAkB,IAAI,QAAQ,WAAW,GAAG;MAC/C;MACA,gBAAgB;IAClB,CAAC;EACH;EAEA,oBACE,aAC6C;AAC7C,UAAM,WAAW,CAAC,GAAG,mBAAK,mBAAkB,OAAO,CAAC;AAEpD,QAAI,SAAsD,CAAC;AAE3D,aAAS,QAAQ,CAAC,iBAAiB;AACjC,UAAI,gBAAgB,aAAa,aAAa,WAAW,GAAG;AAC1D,iBAAS,EAAE,GAAG,QAAQ,GAAG,aAAa,eAAe;MACvD;IACF,CAAC;AAED,WAAO;EACT;EAEA,oBAQE,SAsBA;AACA,QAAI,QAAQ,YAAY;AACtB,aAAO;IAOT;AAEA,UAAM,mBAAmB;MACvB,GAAG,mBAAKA,kBAAgB;MACxB,GAAG,KAAK,iBAAiB,QAAQ,QAAQ;MACzC,GAAG;MACH,YAAY;IACd;AAEA,QAAI,CAAC,iBAAiB,WAAW;AAC/B,uBAAiB,YAAY;QAC3B,iBAAiB;QACjB;MACF;IACF;AAGA,QAAI,iBAAiB,uBAAuB,QAAW;AACrD,uBAAiB,qBACf,iBAAiB,gBAAgB;IACrC;AACA,QAAI,iBAAiB,iBAAiB,QAAW;AAC/C,uBAAiB,eAAe,CAAC,CAAC,iBAAiB;IACrD;AAEA,QAAI,CAAC,iBAAiB,eAAe,iBAAiB,WAAW;AAC/D,uBAAiB,cAAc;IACjC;AAEA,QACE,iBAAiB,YAAY,QAC7B,iBAAiB,YAAY,WAC7B;AACA,uBAAiB,UAAU;IAC7B;AAEA,WAAO;EAOT;EAEA,uBACE,SACG;AACH,QAAI,mCAAS,YAAY;AACvB,aAAO;IACT;AACA,WAAO;MACL,GAAG,mBAAKA,kBAAgB;MACxB,IAAI,mCAAS,gBACX,KAAK,oBAAoB,QAAQ,WAAW;MAC9C,GAAG;MACH,YAAY;IACd;EACF;EAEA,QAAc;AACZ,uBAAK,aAAY,MAAM;AACvB,uBAAKD,iBAAe,MAAM;EAC5B;AACF,GA5jBE,6BACAA,kBAAA,eACAC,mBAAA,eACA,gCACA,mCACA,6BACA,mCACA,oCARKF;;;;ACnBA,IAAM,iBAANG,MAAA,cAMG,aAAmD;EAwB3D,YACE,QACO,SAOP;AACA,UAAM;AAxCH;AAOL;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAGA;;;AACA;AACA;AACA;AACA,sCAAgB,oBAAI,IAA+B;AAI1C,SAAA,UAAA;AAUP,uBAAK,SAAU;AACf,uBAAK,cAAe;AACpB,SAAK,YAAY;AACjB,SAAK,WAAW,OAAO;EACzB;EAEU,cAAoB;AAC5B,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;EACvC;EAEU,cAAoB;AAC5B,QAAI,KAAK,UAAU,SAAS,GAAG;AAC7B,yBAAK,eAAc,YAAY,IAAI;AAEnC,UAAI,mBAAmB,mBAAK,gBAAe,KAAK,OAAO,GAAG;AACxD,8BAAK,2CAAL;MACF,OAAO;AACL,aAAK,aAAa;MACpB;AAEA,4BAAK,2CAAL;IACF;EACF;EAEU,gBAAsB;AAC9B,QAAI,CAAC,KAAK,aAAa,GAAG;AACxB,WAAK,QAAQ;IACf;EACF;EAEA,yBAAkC;AAChC,WAAO;MACL,mBAAK;MACL,KAAK;MACL,KAAK,QAAQ;IACf;EACF;EAEA,2BAAoC;AAClC,WAAO;MACL,mBAAK;MACL,KAAK;MACL,KAAK,QAAQ;IACf;EACF;EAEA,UAAgB;AACd,SAAK,YAAY,oBAAI,IAAI;AACzB,0BAAK,gDAAL;AACA,0BAAK,mDAAL;AACA,uBAAK,eAAc,eAAe,IAAI;EACxC;EAEA,WACE,SAOA,eACM;AACN,UAAM,cAAc,KAAK;AACzB,UAAM,YAAY,mBAAK;AAEvB,SAAK,UAAU,mBAAK,SAAQ,oBAAoB,OAAO;AAEvD,QACE,KAAK,QAAQ,YAAY,UACzB,OAAO,KAAK,QAAQ,YAAY,aAChC,OAAO,KAAK,QAAQ,YAAY,cAChC,OAAO,eAAe,KAAK,QAAQ,SAAS,mBAAK,cAAa,MAC5D,WACF;AACA,YAAM,IAAI;QACR;MACF;IACF;AAEA,0BAAK,0CAAL;AACA,uBAAK,eAAc,WAAW,KAAK,OAAO;AAE1C,QACE,YAAY,cACZ,CAAC,oBAAoB,KAAK,SAAS,WAAW,GAC9C;AACA,yBAAK,SAAQ,cAAc,EAAE,OAAO;QAClC,MAAM;QACN,OAAO,mBAAK;QACZ,UAAU;MACZ,CAAC;IACH;AAEA,UAAM,UAAU,KAAK,aAAa;AAGlC,QACE,WACA;MACE,mBAAK;MACL;MACA,KAAK;MACL;IACF,GACA;AACA,4BAAK,2CAAL;IACF;AAGA,SAAK,aAAa,aAAa;AAG/B,QACE,YACC,mBAAK,mBAAkB,aACtB,eAAe,KAAK,QAAQ,SAAS,mBAAK,cAAa,MACrD,eAAe,YAAY,SAAS,mBAAK,cAAa,KACxD,iBAAiB,KAAK,QAAQ,WAAW,mBAAK,cAAa,MACzD,iBAAiB,YAAY,WAAW,mBAAK,cAAa,IAC9D;AACA,4BAAK,iDAAL;IACF;AAEA,UAAM,sBAAsB,sBAAK,qDAAL;AAG5B,QACE,YACC,mBAAK,mBAAkB,aACtB,eAAe,KAAK,QAAQ,SAAS,mBAAK,cAAa,MACrD,eAAe,YAAY,SAAS,mBAAK,cAAa,KACxD,wBAAwB,mBAAK,2BAC/B;AACA,4BAAK,oDAAL,WAA4B;IAC9B;EACF;EAEA,oBACE,SAOoC;AACpC,UAAM,QAAQ,mBAAK,SAAQ,cAAc,EAAE,MAAM,mBAAK,UAAS,OAAO;AAEtE,UAAM,SAAS,KAAK,aAAa,OAAO,OAAO;AAE/C,QAAI,sCAAsC,MAAM,MAAM,GAAG;AAiBvD,yBAAK,gBAAiB;AACtB,yBAAK,uBAAwB,KAAK;AAClC,yBAAK,qBAAsB,mBAAK,eAAc;IAChD;AACA,WAAO;EACT;EAEA,mBAAuD;AACrD,WAAO,mBAAK;EACd;EAEA,YACE,QACA,eACoC;AACpC,UAAM,gBAAgB,CAAC;AAEvB,WAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,aAAO,eAAe,eAAe,KAAK;QACxC,cAAc;QACd,YAAY;QACZ,KAAK,MAAM;AACT,eAAK,UAAU,GAAgC;AAC/C,yDAAgB;AAChB,iBAAO,OAAO,GAAgC;QAChD;MACF,CAAC;IACH,CAAC;AAED,WAAO;EACT;EAEA,UAAU,KAAgC;AACxC,uBAAK,eAAc,IAAI,GAAG;EAC5B;EAEA,kBAAsE;AACpE,WAAO,mBAAK;EACd;EAEA,QAAQ,EAAE,GAAG,QAAQ,IAAoB,CAAC,GAExC;AACA,WAAO,KAAK,MAAM;MAChB,GAAG;IACL,CAAC;EACH;EAEA,gBACE,SAO6C;AAC7C,UAAM,mBAAmB,mBAAK,SAAQ,oBAAoB,OAAO;AAEjE,UAAM,QAAQ,mBAAK,SAChB,cAAc,EACd,MAAM,mBAAK,UAAS,gBAAgB;AACvC,UAAM,uBAAuB;AAE7B,WAAO,MAAM,MAAM,EAAE,KAAK,MAAM,KAAK,aAAa,OAAO,gBAAgB,CAAC;EAC5E;EAEU,MACR,cAC6C;AAC7C,WAAO,sBAAK,2CAAL,WAAmB;MACxB,GAAG;MACH,eAAe,aAAa,iBAAiB;IAC/C,GAAG,KAAK,MAAM;AACZ,WAAK,aAAa;AAClB,aAAO,mBAAK;IACd,CAAC;EACH;EAgGU,aACR,OACA,SAOoC;;AACpC,UAAM,YAAY,mBAAK;AACvB,UAAM,cAAc,KAAK;AACzB,UAAM,aAAa,mBAAK;AAGxB,UAAM,kBAAkB,mBAAK;AAC7B,UAAM,oBAAoB,mBAAK;AAC/B,UAAM,cAAc,UAAU;AAC9B,UAAM,oBAAoB,cACtB,MAAM,QACN,mBAAK;AAET,UAAM,EAAE,MAAM,IAAI;AAClB,QAAI,WAAW,EAAE,GAAG,MAAM;AAC1B,QAAI,oBAAoB;AACxB,QAAI;AAGJ,QAAI,QAAQ,oBAAoB;AAC9B,YAAM,UAAU,KAAK,aAAa;AAElC,YAAM,eAAe,CAAC,WAAW,mBAAmB,OAAO,OAAO;AAElE,YAAM,kBACJ,WAAW,sBAAsB,OAAO,WAAW,SAAS,WAAW;AAEzE,UAAI,gBAAgB,iBAAiB;AACnC,mBAAW;UACT,GAAG;UACH,GAAG,WAAW,MAAM,MAAM,MAAM,OAAO;QACzC;MACF;AACA,UAAI,QAAQ,uBAAuB,eAAe;AAChD,iBAAS,cAAc;MACzB;IACF;AAEA,QAAI,EAAE,OAAO,gBAAgB,OAAO,IAAI;AAGxC,QAAI,QAAQ,UAAU,SAAS,SAAS,QAAW;AAEjD,UACE,cACA,SAAS,UAAS,mDAAiB,SACnC,QAAQ,WAAW,mBAAK,YACxB;AACA,eAAO,mBAAK;MACd,OAAO;AACL,YAAI;AACF,6BAAK,WAAY,QAAQ;AACzB,iBAAO,QAAQ,OAAO,SAAS,IAAI;AACnC,iBAAO,YAAY,yCAAY,MAAM,MAAM,OAAO;AAClD,6BAAK,eAAgB;AACrB,6BAAK,cAAe;QACtB,SAAS,aAAa;AACpB,6BAAK,cAAe;QACtB;MACF;IACF,OAEK;AACH,aAAO,SAAS;IAClB;AAGA,QACE,QAAQ,oBAAoB,UAC5B,SAAS,UACT,WAAW,WACX;AACA,UAAI;AAGJ,WACE,yCAAY,sBACZ,QAAQ,qBAAoB,uDAAmB,kBAC/C;AACA,0BAAkB,WAAW;MAC/B,OAAO;AACL,0BACE,OAAO,QAAQ,oBAAoB,aAE7B,QAAQ;WAERA,OAAA,mBAAK,+BAAL,gBAAAA,KAAgC,MAAM;UACtC,mBAAK;QACP,IACA,QAAQ;AACd,YAAI,QAAQ,UAAU,oBAAoB,QAAW;AACnD,cAAI;AACF,8BAAkB,QAAQ,OAAO,eAAe;AAChD,+BAAK,cAAe;UACtB,SAAS,aAAa;AACpB,+BAAK,cAAe;UACtB;QACF;MACF;AAEA,UAAI,oBAAoB,QAAW;AACjC,iBAAS;AACT,eAAO;UACL,yCAAY;UACZ;UACA;QACF;AACA,4BAAoB;MACtB;IACF;AAEA,QAAI,mBAAK,eAAc;AACrB,cAAQ,mBAAK;AACb,aAAO,mBAAK;AACZ,uBAAiB,KAAK,IAAI;AAC1B,eAAS;IACX;AAEA,UAAM,aAAa,SAAS,gBAAgB;AAC5C,UAAM,YAAY,WAAW;AAC7B,UAAM,UAAU,WAAW;AAE3B,UAAM,YAAY,aAAa;AAC/B,UAAM,UAAU,SAAS;AAEzB,UAAM,SAAiD;MACrD;MACA,aAAa,SAAS;MACtB;MACA,WAAW,WAAW;MACtB;MACA,kBAAkB;MAClB;MACA;MACA,eAAe,SAAS;MACxB;MACA;MACA,cAAc,SAAS;MACvB,eAAe,SAAS;MACxB,kBAAkB,SAAS;MAC3B,WAAW,SAAS,kBAAkB,KAAK,SAAS,mBAAmB;MACvE,qBACE,SAAS,kBAAkB,kBAAkB,mBAC7C,SAAS,mBAAmB,kBAAkB;MAChD;MACA,cAAc,cAAc,CAAC;MAC7B,gBAAgB,WAAW,CAAC;MAC5B,UAAU,SAAS,gBAAgB;MACnC;MACA,gBAAgB,WAAW;MAC3B,SAAS,QAAQ,OAAO,OAAO;MAC/B,SAAS,KAAK;IAChB;AAEA,WAAO;EACT;EAEA,aAAa,eAAqC;AAChD,UAAM,aAAa,mBAAK;AAIxB,UAAM,aAAa,KAAK,aAAa,mBAAK,gBAAe,KAAK,OAAO;AACrE,uBAAK,qBAAsB,mBAAK,eAAc;AAC9C,uBAAK,uBAAwB,KAAK;AAElC,QAAI,mBAAK,qBAAoB,SAAS,QAAW;AAC/C,yBAAK,2BAA4B,mBAAK;IACxC;AAGA,QAAI,oBAAoB,YAAY,UAAU,GAAG;AAC/C;IACF;AAEA,uBAAK,gBAAiB;AAGtB,UAAM,uBAAsC,CAAC;AAE7C,UAAM,wBAAwB,MAAe;AAC3C,UAAI,CAAC,YAAY;AACf,eAAO;MACT;AAEA,YAAM,EAAE,oBAAoB,IAAI,KAAK;AACrC,YAAM,2BACJ,OAAO,wBAAwB,aAC3B,oBAAoB,IACpB;AAEN,UACE,6BAA6B,SAC5B,CAAC,4BAA4B,CAAC,mBAAK,eAAc,MAClD;AACA,eAAO;MACT;AAEA,YAAM,gBAAgB,IAAI;QACxB,4BAA4B,mBAAK;MACnC;AAEA,UAAI,KAAK,QAAQ,cAAc;AAC7B,sBAAc,IAAI,OAAO;MAC3B;AAEA,aAAO,OAAO,KAAK,mBAAK,eAAc,EAAE,KAAK,CAAC,QAAQ;AACpD,cAAM,WAAW;AACjB,cAAM,UAAU,mBAAK,gBAAe,QAAQ,MAAM,WAAW,QAAQ;AACrE,eAAO,WAAW,cAAc,IAAI,QAAQ;MAC9C,CAAC;IACH;AAEA,SAAI,+CAAe,eAAc,SAAS,sBAAsB,GAAG;AACjE,2BAAqB,YAAY;IACnC;AAEA,0BAAK,qCAAL,WAAa,EAAE,GAAG,sBAAsB,GAAG,cAAc;EAC3D;EAqBA,gBAAsB;AACpB,SAAK,aAAa;AAElB,QAAI,KAAK,aAAa,GAAG;AACvB,4BAAK,2CAAL;IACF;EACF;AAkBF,GAxoBE,yBACA,+BACA,2CACA,gCACA,qCACA,uCAOA,8BACA,2BACA,+BAGA,2CACA,iCACA,oCACA,yCACA,+BA5BK,0CAiSL,kBAAA,SACE,cACiC;AAEjC,wBAAK,0CAAL;AAGA,MAAI,UAA2C,mBAAK,eAAc;IAChE,KAAK;IACL;EACF;AAEA,MAAI,EAAC,6CAAc,eAAc;AAC/B,cAAU,QAAQ,MAAM,IAAI;EAC9B;AAEA,SAAO;AACT,GAEA,wBAAA,WAA4B;AAC1B,wBAAK,gDAAL;AACA,QAAM,YAAY;IAChB,KAAK,QAAQ;IACb,mBAAK;EACP;AAEA,MAAI,YAAY,mBAAK,gBAAe,WAAW,CAAC,eAAe,SAAS,GAAG;AACzE;EACF;AAEA,QAAM,OAAO,eAAe,mBAAK,gBAAe,eAAe,SAAS;AAIxE,QAAM,UAAU,OAAO;AAEvB,qBAAK,iBAAkB,WAAW,MAAM;AACtC,QAAI,CAAC,mBAAK,gBAAe,SAAS;AAChC,WAAK,aAAa;IACpB;EACF,GAAG,OAAO;AACZ,GAEA,4BAAA,WAA0B;AACxB,UACG,OAAO,KAAK,QAAQ,oBAAoB,aACrC,KAAK,QAAQ,gBAAgB,mBAAK,cAAa,IAC/C,KAAK,QAAQ,oBAAoB;AAEzC,GAEA,2BAAA,SAAuB,cAAoC;AACzD,wBAAK,mDAAL;AAEA,qBAAK,yBAA0B;AAE/B,MACE,YACA,eAAe,KAAK,QAAQ,SAAS,mBAAK,cAAa,MAAM,SAC7D,CAAC,eAAe,mBAAK,wBAAuB,KAC5C,mBAAK,6BAA4B,GACjC;AACA;EACF;AAEA,qBAAK,oBAAqB,YAAY,MAAM;AAC1C,QACE,KAAK,QAAQ,+BACb,aAAa,UAAU,GACvB;AACA,4BAAK,2CAAL;IACF;EACF,GAAG,mBAAK,wBAAuB;AACjC,GAEA,kBAAA,WAAsB;AACpB,wBAAK,iDAAL;AACA,wBAAK,oDAAL,WAA4B,sBAAK,qDAAL;AAC9B,GAEA,uBAAA,WAA2B;AACzB,MAAI,mBAAK,kBAAiB;AACxB,iBAAa,mBAAK,gBAAe;AACjC,uBAAK,iBAAkB;EACzB;AACF,GAEA,0BAAA,WAA8B;AAC5B,MAAI,mBAAK,qBAAoB;AAC3B,kBAAc,mBAAK,mBAAkB;AACrC,uBAAK,oBAAqB;EAC5B;AACF,GAuOA,iBAAA,WAAqB;AACnB,QAAM,QAAQ,mBAAK,SAAQ,cAAc,EAAE,MAAM,mBAAK,UAAS,KAAK,OAAO;AAE3E,MAAI,UAAU,mBAAK,gBAAe;AAChC;EACF;AAEA,QAAM,YAAY,mBAAK;AAGvB,qBAAK,eAAgB;AACrB,qBAAK,2BAA4B,MAAM;AAEvC,MAAI,KAAK,aAAa,GAAG;AACvB,2CAAW,eAAe;AAC1B,UAAM,YAAY,IAAI;EACxB;AACF,GAUA,YAAA,SAAQ,eAAoC;AAC1C,gBAAc,MAAM,MAAM;AAExB,QAAI,cAAc,WAAW;AAC3B,WAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,iBAAS,mBAAK,eAAc;MAC9B,CAAC;IACH;AAGA,uBAAK,SAAQ,cAAc,EAAE,OAAO;MAClC,OAAO,mBAAK;MACZ,MAAM;IACR,CAAC;EACH,CAAC;AACH,GA9oBKA;AAipBP,SAAS,kBACP,OACA,SACS;AACT,SACE,eAAe,QAAQ,SAAS,KAAK,MAAM,SAC3C,MAAM,MAAM,SAAS,UACrB,EAAE,MAAM,MAAM,WAAW,WAAW,QAAQ,iBAAiB;AAEjE;AAEA,SAAS,mBACP,OACA,SACS;AACT,SACE,kBAAkB,OAAO,OAAO,KAC/B,MAAM,MAAM,SAAS,UACpB,cAAc,OAAO,SAAS,QAAQ,cAAc;AAE1D;AAEA,SAAS,cACP,OACA,SACA,OAGA;AACA,MAAI,eAAe,QAAQ,SAAS,KAAK,MAAM,OAAO;AACpD,UAAM,QAAQ,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AAE3D,WAAO,UAAU,YAAa,UAAU,SAAS,QAAQ,OAAO,OAAO;EACzE;AACA,SAAO;AACT;AAEA,SAAS,sBACP,OACA,WACA,SACA,aACS;AACT,UACG,UAAU,aACT,eAAe,YAAY,SAAS,KAAK,MAAM,WAChD,CAAC,QAAQ,YAAY,MAAM,MAAM,WAAW,YAC7C,QAAQ,OAAO,OAAO;AAE1B;AAEA,SAAS,QACP,OACA,SACS;AACT,SACE,eAAe,QAAQ,SAAS,KAAK,MAAM,SAC3C,MAAM,cAAc,iBAAiB,QAAQ,WAAW,KAAK,CAAC;AAElE;AAIA,SAAS,sCAOP,UACA,kBACA;AAGA,MAAI,CAAC,oBAAoB,SAAS,iBAAiB,GAAG,gBAAgB,GAAG;AACvE,WAAO;EACT;AAGA,SAAO;AACT;;;AC9vBA,SAAS,WAAc,QAAkB,QAA4B;AACnE,SAAO,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AACjD;AAEA,SAAS,UAAa,OAAiB,OAAe,OAAoB;AACxE,QAAM,OAAO,MAAM,MAAM,CAAC;AAC1B,OAAK,KAAK,IAAI;AACd,SAAO;AACT;;AAcO,IAAM,mBAANC,OAAA,cAEG,aAAsC;EAS9C,YACE,QACA,SACA,UACA;AACA,UAAM;AAhBH;AAGL,uBAAAC;AACA;AACA,uBAAAC;AACA,uBAAAC;AACA;AACA;AACA;AASE,uBAAKF,UAAU;AACf,uBAAKC,WAAW,CAAC;AACjB,uBAAKC,aAAa,CAAC;AACnB,uBAAK,SAAU,CAAC;AAEhB,SAAK,WAAW,OAAO;EACzB;EAEU,cAAoB;AAC5B,QAAI,KAAK,UAAU,SAAS,GAAG;AAC7B,yBAAKA,aAAW,QAAQ,CAAC,aAAa;AACpC,iBAAS,UAAU,CAAC,WAAW;AAC7B,gCAAK,yCAAL,WAAe,UAAU;QAC3B,CAAC;MACH,CAAC;IACH;EACF;EAEU,gBAAsB;AAC9B,QAAI,CAAC,KAAK,UAAU,MAAM;AACxB,WAAK,QAAQ;IACf;EACF;EAEA,UAAgB;AACd,SAAK,YAAY,oBAAI,IAAI;AACzB,uBAAKA,aAAW,QAAQ,CAAC,aAAa;AACpC,eAAS,QAAQ;IACnB,CAAC;EACH;EAEA,WACE,SACA,UACA,eACM;AACN,uBAAKD,WAAW;AAEhB,kBAAc,MAAM,MAAM;AACxB,YAAM,gBAAgB,mBAAKC;AAE3B,YAAM,qBAAqB,sBAAK,sDAAL,WAA4B,mBAAKD;AAG5D,yBAAmB;QAAQ,CAAC,UAC1B,MAAM,SAAS,WAAW,MAAM,uBAAuB,aAAa;MACtE;AAEA,YAAM,eAAe,mBAAmB,IAAI,CAAC,UAAU,MAAM,QAAQ;AACrE,YAAM,YAAY,aAAa;QAAI,CAAC,aAClC,SAAS,iBAAiB;MAC5B;AAEA,YAAM,iBAAiB,aAAa;QAClC,CAAC,UAAU,UAAU,aAAa,cAAc,KAAK;MACvD;AAEA,UAAI,cAAc,WAAW,aAAa,UAAU,CAAC,gBAAgB;AACnE;MACF;AAEA,yBAAKC,aAAa;AAClB,yBAAK,SAAU;AAEf,UAAI,CAAC,KAAK,aAAa,GAAG;AACxB;MACF;AAEA,iBAAW,eAAe,YAAY,EAAE,QAAQ,CAAC,aAAa;AAC5D,iBAAS,QAAQ;MACnB,CAAC;AAED,iBAAW,cAAc,aAAa,EAAE,QAAQ,CAAC,aAAa;AAC5D,iBAAS,UAAU,CAAC,WAAW;AAC7B,gCAAK,yCAAL,WAAe,UAAU;QAC3B,CAAC;MACH,CAAC;AAED,4BAAK,4BAAAC,YAAL;IACF,CAAC;EACH;EAEA,mBAA+C;AAC7C,WAAO,mBAAK;EACd;EAEA,aAAa;AACX,WAAO,mBAAKD,aAAW,IAAI,CAAC,aAAa,SAAS,gBAAgB,CAAC;EACrE;EAEA,eAAe;AACb,WAAO,mBAAKA;EACd;EAEA,oBACE,SACA,SAKA;AACA,UAAM,UAAU,sBAAK,sDAAL,WAA4B;AAC5C,UAAM,SAAS,QAAQ;MAAI,CAAC,UAC1B,MAAM,SAAS,oBAAoB,MAAM,qBAAqB;IAChE;AAEA,WAAO;MACL;MACA,CAAC,MAAmC;AAClC,eAAO,sBAAK,8CAAL,WAAoB,KAAK,QAAQ;MAC1C;MACA,MAAM;AACJ,eAAO,QAAQ,IAAI,CAAC,OAAO,UAAU;AACnC,gBAAM,iBAAiB,OAAO,KAAK;AACnC,iBAAO,CAAC,MAAM,sBAAsB,sBAChC,MAAM,SAAS,YAAY,gBAAgB,CAAC,iBAAiB;AAE3D,oBAAQ,QAAQ,CAAC,MAAM;AACrB,gBAAE,SAAS,UAAU,YAAY;YACnC,CAAC;UACH,CAAC,IACD;QACN,CAAC;MACH;IACF;EACF;AAkGF,GA/OEF,WAAA,eACA,yBACAC,YAAA,eACAC,cAAA,eACA,iCACA,8BACA,6BATK,4CAkJL,mBAAA,SACE,OACA,SACiB;AACjB,MAAI,SAAS;AACX,QACE,CAAC,mBAAK,oBACN,mBAAK,aAAY,mBAAK,gBACtB,YAAY,mBAAK,eACjB;AACA,yBAAK,cAAe;AACpB,yBAAK,aAAc,mBAAK;AACxB,yBAAK,iBAAkB;QACrB,mBAAK;QACL,QAAQ,KAAK;MACf;IACF;AAEA,WAAO,mBAAK;EACd;AACA,SAAO;AACT,GAEA,2BAAA,SACE,SAC2B;AAC3B,QAAM,gBAAgB,mBAAKA;AAC3B,QAAM,mBAAmB,IAAI;IAC3B,cAAc,IAAI,CAAC,aAAa,CAAC,SAAS,QAAQ,WAAW,QAAQ,CAAC;EACxE;AAEA,QAAM,wBAAwB,QAAQ;IAAI,CAAC,YACzC,mBAAKF,UAAQ,oBAAoB,OAAO;EAC1C;AAEA,QAAM,oBACJ,sBAAsB,QAAQ,CAAC,qBAAqB;AAClD,UAAM,QAAQ,iBAAiB,IAAI,iBAAiB,SAAS;AAC7D,QAAI,SAAS,MAAM;AACjB,aAAO,CAAC,EAAE,uBAAuB,kBAAkB,UAAU,MAAM,CAAC;IACtE;AACA,WAAO,CAAC;EACV,CAAC;AAEH,QAAM,qBAAqB,IAAI;IAC7B,kBAAkB,IAAI,CAAC,UAAU,MAAM,sBAAsB,SAAS;EACxE;AACA,QAAM,mBAAmB,sBAAsB;IAC7C,CAAC,qBAAqB,CAAC,mBAAmB,IAAI,iBAAiB,SAAS;EAC1E;AAEA,QAAM,cAAc,CAAC,YAAiD;AACpE,UAAM,mBAAmB,mBAAKA,UAAQ,oBAAoB,OAAO;AACjE,UAAM,kBAAkB,mBAAKE,aAAW;MACtC,CAAC,MAAM,EAAE,QAAQ,cAAc,iBAAiB;IAClD;AACA,WACE,mBAAmB,IAAI,cAAc,mBAAKF,WAAS,gBAAgB;EAEvE;AAEA,QAAM,uBACJ,iBAAiB,IAAI,CAAC,YAAY;AAChC,WAAO;MACL,uBAAuB;MACvB,UAAU,YAAY,OAAO;IAC/B;EACF,CAAC;AAEH,QAAM,8BAA8B,CAClC,GACA,MAEA,sBAAsB,QAAQ,EAAE,qBAAqB,IACrD,sBAAsB,QAAQ,EAAE,qBAAqB;AAEvD,SAAO,kBACJ,OAAO,oBAAoB,EAC3B,KAAK,2BAA2B;AACrC,GAEA,cAAA,SAAU,UAAyB,QAAmC;AACpE,QAAM,QAAQ,mBAAKE,aAAW,QAAQ,QAAQ;AAC9C,MAAI,UAAU,IAAI;AAChB,uBAAK,SAAU,UAAU,mBAAK,UAAS,OAAO,MAAM;AACpD,0BAAK,4BAAAC,YAAL;EACF;AACF,GAEAA,aAAA,WAAgB;AACd,gBAAc,MAAM,MAAM;AACxB,SAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,eAAS,mBAAK,QAAO;IACvB,CAAC;EACH,CAAC;AACH,GAjPKJ;;;ACRA,IAAM,wBAAN,cAOG,cAMR;EA8BA,YACE,QACA,SAQA;AACA,UAAM,QAAQ,OAAO;EACvB;EAEU,cAAoB;AAC5B,UAAM,YAAY;AAClB,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;EAC3D;EAEA,WACE,SAQA,eACM;AACN,UAAM;MACJ;QACE,GAAG;QACH,UAAU,sBAAsB;MAClC;MACA;IACF;EACF;EAEA,oBACE,SAQ4C;AAC5C,YAAQ,WAAW,sBAAsB;AACzC,WAAO,MAAM,oBAAoB,OAAO;EAI1C;EAEA,cACE,SACqD;AACrD,WAAO,KAAK,MAAM;MAChB,GAAG;MACH,MAAM;QACJ,WAAW,EAAE,WAAW,UAAU;MACpC;IACF,CAAC;EACH;EAEA,kBACE,SACqD;AACrD,WAAO,KAAK,MAAM;MAChB,GAAG;MACH,MAAM;QACJ,WAAW,EAAE,WAAW,WAAW;MACrC;IACF,CAAC;EACH;EAEU,aACR,OAMA,SAQ4C;;AAC5C,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,eAAe,MAAM,aAAa,OAAO,OAAO;AAEtD,UAAM,EAAE,YAAY,cAAc,SAAS,eAAe,IAAI;AAC9D,UAAM,kBAAiB,MAAAK,OAAA,MAAM,cAAN,gBAAAA,KAAiB,cAAjB,mBAA4B;AAEnD,UAAM,uBAAuB,WAAW,mBAAmB;AAC3D,UAAM,qBAAqB,cAAc,mBAAmB;AAE5D,UAAM,2BAA2B,WAAW,mBAAmB;AAC/D,UAAM,yBAAyB,cAAc,mBAAmB;AAEhE,UAAM,SAAyD;MAC7D,GAAG;MACH,eAAe,KAAK;MACpB,mBAAmB,KAAK;MACxB,aAAa,YAAY,SAAS,MAAM,IAAI;MAC5C,iBAAiB,gBAAgB,SAAS,MAAM,IAAI;MACpD;MACA;MACA;MACA;MACA,gBACE,kBAAkB,CAAC,wBAAwB,CAAC;MAC9C,cACE,gBAAgB,CAAC,sBAAsB,CAAC;IAC5C;AAEA,WAAO;EACT;AACF;;;;AC7KO,IAAM,oBAANC,OAAA,cAKG,aAER;EASA,YACE,QACA,SACA;AACA,UAAM;AApBH;AAUL,uBAAAC;AACA,uBAAAC;AAEA;AACA;AAQE,uBAAKD,UAAU;AACf,SAAK,WAAW,OAAO;AACvB,SAAK,YAAY;AACjB,0BAAK,8CAAL;EACF;EAEU,cAAoB;AAC5B,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;EACnC;EAEA,WACE,SACA;;AACA,UAAM,cAAc,KAAK;AAGzB,SAAK,UAAU,mBAAKA,UAAQ,uBAAuB,OAAO;AAC1D,QAAI,CAAC,oBAAoB,KAAK,SAAS,WAAW,GAAG;AACnD,yBAAKA,UAAQ,iBAAiB,EAAE,OAAO;QACrC,MAAM;QACN,UAAU,mBAAK;QACf,UAAU;MACZ,CAAC;IACH;AAEA,SACE,2CAAa,gBACb,KAAK,QAAQ,eACb,QAAQ,YAAY,WAAW,MAAM,QAAQ,KAAK,QAAQ,WAAW,GACrE;AACA,WAAK,MAAM;IACb,aAAWD,OAAA,mBAAK,sBAAL,gBAAAA,KAAuB,MAAM,YAAW,WAAW;AAC5D,yBAAK,kBAAiB,WAAW,KAAK,OAAO;IAC/C;EACF;EAEU,gBAAsB;;AAC9B,QAAI,CAAC,KAAK,aAAa,GAAG;AACxB,OAAAA,OAAA,mBAAK,sBAAL,gBAAAA,KAAuB,eAAe;IACxC;EACF;EAEA,iBAAiB,QAA2D;AAC1E,0BAAK,8CAAL;AAEA,0BAAK,6BAAAG,YAAL,WAAa;EACf;EAEA,mBAKE;AACA,WAAO,mBAAKD;EACd;EAEA,QAAc;;AAGZ,KAAAF,OAAA,mBAAK,sBAAL,gBAAAA,KAAuB,eAAe;AACtC,uBAAK,kBAAmB;AACxB,0BAAK,8CAAL;AACA,0BAAK,6BAAAG,YAAL;EACF;EAEA,OACE,WACA,SACgB;;AAChB,uBAAK,gBAAiB;AAEtB,KAAAH,OAAA,mBAAK,sBAAL,gBAAAA,KAAuB,eAAe;AAEtC,uBAAK,kBAAmB,mBAAKC,UAC1B,iBAAiB,EACjB,MAAM,mBAAKA,WAAS,KAAK,OAAO;AAEnC,uBAAK,kBAAiB,YAAY,IAAI;AAEtC,WAAO,mBAAK,kBAAiB,QAAQ,SAAS;EAChD;AA6CF,GA3IEA,WAAA,eACAC,kBAAA,eAEA,kCACA,gCAdK,6CA0GL,kBAAA,WAAsB;;AACpB,QAAM,UACJF,OAAA,mBAAK,sBAAL,gBAAAA,KAAuB,UACvBI,iBAAqD;AAEvD,qBAAKF,iBAAiB;IACpB,GAAG;IACH,WAAW,MAAM,WAAW;IAC5B,WAAW,MAAM,WAAW;IAC5B,SAAS,MAAM,WAAW;IAC1B,QAAQ,MAAM,WAAW;IACzB,QAAQ,KAAK;IACb,OAAO,KAAK;EACd;AACF,GAEAC,aAAA,SAAQ,QAA4D;AAClE,gBAAc,MAAM,MAAM;;AAExB,QAAI,mBAAK,mBAAkB,KAAK,aAAa,GAAG;AAC9C,YAAM,YAAY,mBAAKD,iBAAe;AACtC,YAAM,UAAU,mBAAKA,iBAAe;AAEpC,WAAI,iCAAQ,UAAS,WAAW;AAC9B,eAAAF,OAAA,mBAAK,iBAAe,cAApB,wBAAAA,MAAgC,OAAO,MAAM,WAAW;AACxD,uCAAK,iBAAe,cAApB,4BAAgC,OAAO,MAAM,MAAM,WAAW;MAChE,YAAW,iCAAQ,UAAS,SAAS;AACnC,uCAAK,iBAAe,YAApB,4BAA8B,OAAO,OAAO,WAAW;AACvD,uCAAK,iBAAe,cAApB;;UACE;UACA,OAAO;UACP;UACA;;MAEJ;IACF;AAGA,SAAK,UAAU,QAAQ,CAAC,aAAa;AACnC,eAAS,mBAAKE,gBAAc;IAC9B,CAAC;EACH,CAAC;AACH,GApJKF;;;ACLP,SAAS,qBAAqB,MAAgB;AAC5C,SAAO;AACT;AAsCA,SAAS,kBAAkB,UAAwC;AACjE,SAAO;IACL,aAAa,SAAS,QAAQ;IAC9B,OAAO,SAAS;IAChB,GAAI,SAAS,QAAQ,SAAS,EAAE,OAAO,SAAS,QAAQ,MAAM;IAC9D,GAAI,SAAS,QAAQ,EAAE,MAAM,SAAS,KAAK;EAC7C;AACF;AAMA,SAAS,eACP,OACA,eACiB;;AACjB,SAAO;IACL,OAAO;MACL,GAAG,MAAM;MACT,GAAI,MAAM,MAAM,SAAS,UAAa;QACpC,MAAM,cAAc,MAAM,MAAM,IAAI;MACtC;IACF;IACA,UAAU,MAAM;IAChB,WAAW,MAAM;IACjB,GAAI,MAAM,MAAM,WAAW,aAAa;MACtC,UAASK,OAAA,MAAM,YAAN,gBAAAA,KAAe,KAAK,eAAe,MAAM,CAAC,UAAU;AAC3D,YAAI,MAAuC;AACzC,kBAAQ;YACN,+DAA+D,MAAM,SAAS,MAAM,KAAK;UAC3F;QACF;AACA,eAAO,QAAQ,OAAO,IAAI,MAAM,UAAU,CAAC;MAC7C;IACF;IACA,GAAI,MAAM,QAAQ,EAAE,MAAM,MAAM,KAAK;EACvC;AACF;AAEO,SAAS,+BAA+B,UAAoB;AACjE,SAAO,SAAS,MAAM;AACxB;AAEO,SAAS,4BAA4B,OAAc;AACxD,SAAO,MAAM,MAAM,WAAW;AAChC;AAEO,SAAS,UACd,QACA,UAA4B,CAAC,GACZ;;AACjB,QAAM,iBACJ,QAAQ,6BACRA,OAAA,OAAO,kBAAkB,EAAE,cAA3B,gBAAAA,KAAsC,4BACtC;AAEF,QAAM,YAAY,OACf,iBAAiB,EACjB,OAAO,EACP;IAAQ,CAAC,aACR,eAAe,QAAQ,IAAI,CAAC,kBAAkB,QAAQ,CAAC,IAAI,CAAC;EAC9D;AAEF,QAAM,cACJ,QAAQ,0BACR,YAAO,kBAAkB,EAAE,cAA3B,mBAAsC,yBACtC;AAEF,QAAM,gBACJ,QAAQ,mBACR,YAAO,kBAAkB,EAAE,cAA3B,mBAAsC,kBACtC;AAEF,QAAM,UAAU,OACb,cAAc,EACd,OAAO,EACP;IAAQ,CAAC,UACR,YAAY,KAAK,IAAI,CAAC,eAAe,OAAO,aAAa,CAAC,IAAI,CAAC;EACjE;AAEF,SAAO,EAAE,WAAW,QAAQ;AAC9B;AAEO,SAAS,QACd,QACA,iBACA,SACM;;AACN,MAAI,OAAO,oBAAoB,YAAY,oBAAoB,MAAM;AACnE;EACF;AAEA,QAAM,gBAAgB,OAAO,iBAAiB;AAC9C,QAAM,aAAa,OAAO,cAAc;AACxC,QAAM,oBACJA,OAAA,mCAAS,mBAAT,gBAAAA,KAAyB,sBACzB,YAAO,kBAAkB,EAAE,YAA3B,mBAAoC,oBACpC;AAGF,QAAM,YAAa,gBAAoC,aAAa,CAAC;AAErE,QAAM,UAAW,gBAAoC,WAAW,CAAC;AAEjE,YAAU,QAAQ,CAAC,EAAE,OAAO,GAAG,gBAAgB,MAAM;;AACnD,kBAAc;MACZ;MACA;QACE,IAAGA,OAAA,OAAO,kBAAkB,EAAE,YAA3B,gBAAAA,KAAoC;QACvC,IAAGC,MAAA,mCAAS,mBAAT,gBAAAA,IAAyB;QAC5B,GAAG;MACL;MACA;IACF;EACF,CAAC;AAED,UAAQ,QAAQ,CAAC,EAAE,UAAU,OAAO,WAAW,MAAM,QAAQ,MAAM;;AACjE,QAAI,QAAQ,WAAW,IAAI,SAAS;AAEpC,UAAM,OACJ,MAAM,SAAS,SAAY,MAAM,OAAO,gBAAgB,MAAM,IAAI;AAGpE,QAAI,OAAO;AACT,UAAI,MAAM,MAAM,gBAAgB,MAAM,eAAe;AAGnD,cAAM,EAAE,aAAa,UAAU,GAAG,gBAAgB,IAAI;AACtD,cAAM,SAAS;UACb,GAAG;UACH;QACF,CAAC;MACH;IACF,OAAO;AAEL,cAAQ,WAAW;QACjB;QACA;UACE,IAAGD,OAAA,OAAO,kBAAkB,EAAE,YAA3B,gBAAAA,KAAoC;UACvC,IAAGC,MAAA,mCAAS,mBAAT,gBAAAA,IAAyB;UAC5B;UACA;UACA;QACF;;;QAGA;UACE,GAAG;UACH;UACA,aAAa;QACf;MACF;IACF;AAEA,QAAI,SAAS;AAGX,YAAM,iBAAiB,QAAQ,QAAQ,OAAO,EAAE,KAAK,eAAe;AAIpE,WAAK,MAAM,MAAM,QAAW,EAAE,eAAe,CAAC;IAChD;EACF,CAAC;AACH;;;AC5NA,IAAAC,SAAuB;;;ACAvB,YAAuB;AAuCnB,yBAAA;AAnCG,IAAM,qBAA2B;EACtC;AACF;AAEO,IAAM,iBAAiB,CAAC,gBAA8B;AAC3D,QAAM,SAAe,iBAAW,kBAAkB;AAElD,MAAI,aAAa;AACf,WAAO;EACT;AAEA,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,wDAAwD;EAC1E;AAEA,SAAO;AACT;AAOO,IAAM,sBAAsB,CAAC;EAClC;EACA;AACF,MAAmD;AAC3C,EAAA,gBAAU,MAAM;AACpB,WAAO,MAAM;AACb,WAAO,MAAM;AACX,aAAO,QAAQ;IACjB;EACF,GAAG,CAAC,MAAM,CAAC;AAEX,aACE,wBAAC,mBAAmB,UAAnB,EAA4B,OAAO,QACjC,SAAA,CACH;AAEJ;;;AC3CA,IAAAC,SAAuB;AAEvB,IAAM,qBAA2B,qBAAc,KAAK;AAE7C,IAAM,iBAAiB,MAAY,kBAAW,kBAAkB;AAChE,IAAM,sBAAsB,mBAAmB;;;ACLtD,IAAAC,SAAuB;AA6CnB,IAAAC,sBAAA;AAnCJ,SAAS,cAA4C;AACnD,MAAI,UAAU;AACd,SAAO;IACL,YAAY,MAAM;AAChB,gBAAU;IACZ;IACA,OAAO,MAAM;AACX,gBAAU;IACZ;IACA,SAAS,MAAM;AACb,aAAO;IACT;EACF;AACF;AAEA,IAAM,iCAAuC,qBAAc,YAAY,CAAC;AAIjE,IAAM,6BAA6B,MAClC,kBAAW,8BAA8B;AAU1C,IAAM,0BAA0B,CAAC;EACtC;AACF,MAAoC;AAClC,QAAM,CAAC,KAAK,IAAU,gBAAS,MAAM,YAAY,CAAC;AAClD,aACE,yBAAC,+BAA+B,UAA/B,EAAwC,OACtC,UAAA,OAAO,aAAa,aAChB,SAAsB,KAAK,IAC5B,SAAA,CACN;AAEJ;;;ACnDA,IAAAC,SAAuB;;;ACDhB,SAAS,iBACd,YACA,QACS;AAET,MAAI,OAAO,eAAe,YAAY;AACpC,WAAO,WAAW,GAAG,MAAM;EAC7B;AAEA,SAAO,CAAC,CAAC;AACX;AAEO,SAASC,QAAO;AAAC;;;ADAjB,IAAM,kCAAkC,CAO7C,SAOA,uBACG;AACH,MAAI,QAAQ,YAAY,QAAQ,cAAc;AAE5C,QAAI,CAAC,mBAAmB,QAAQ,GAAG;AACjC,cAAQ,eAAe;IACzB;EACF;AACF;AAEO,IAAM,6BAA6B,CACxC,uBACG;AACG,EAAA,iBAAU,MAAM;AACpB,uBAAmB,WAAW;EAChC,GAAG,CAAC,kBAAkB,CAAC;AACzB;AAEO,IAAM,cAAc,CAMzB;EACA;EACA;EACA;EACA;AACF,MAKM;AACJ,SACE,OAAO,WACP,CAAC,mBAAmB,QAAQ,KAC5B,CAAC,OAAO,cACR,SACA,iBAAiB,cAAc,CAAC,OAAO,OAAO,KAAK,CAAC;AAExD;;;AE1DO,IAAM,sBAAsB,CAMjC,QACA,UACG,MAAM,MAAM,SAAS;AAEnB,IAAM,uBAAuB,CAClC,qBACG;AACH,MAAI,iBAAiB,UAAU;AAG7B,QAAI,OAAO,iBAAiB,cAAc,UAAU;AAClD,uBAAiB,YAAY;IAC/B;AACA,QAAI,OAAO,iBAAiB,WAAW,UAAU;AAC/C,uBAAiB,SAAS,KAAK,IAAI,iBAAiB,QAAQ,GAAI;IAClE;EACF;AACF;AAEO,IAAM,YAAY,CACvB,QACA,gBACG,OAAO,aAAa,OAAO,cAAc,CAAC;AAExC,IAAM,gBAAgB,CAC3B,kBAGA,YACG,qDAAkB,aAAY,OAAO;AAEnC,IAAM,kBAAkB,CAO7B,kBAOA,UACA,uBAEA,SAAS,gBAAgB,gBAAgB,EAAE,MAAM,MAAM;AACrD,qBAAmB,WAAW;AAChC,CAAC;;;AN4JI,SAAS,WAId;EACE;EACA,GAAG;AACL,GAIA,aACiB;AACjB,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,qBAAqB,2BAA2B;AAEtD,QAAM,mBAAyB;IAC7B,MACE,QAAQ,IAAI,CAAC,SAAS;AACpB,YAAM,mBAAmB,OAAO;QAC9B;MACF;AAGA,uBAAiB,qBAAqB,cAClC,gBACA;AAEJ,aAAO;IACT,CAAC;IACH,CAAC,SAAS,QAAQ,WAAW;EAC/B;AAEA,mBAAiB,QAAQ,CAAC,UAAU;AAClC,yBAAqB,KAAK;AAC1B,oCAAgC,OAAO,kBAAkB;EAC3D,CAAC;AAED,6BAA2B,kBAAkB;AAE7C,QAAM,CAAC,QAAQ,IAAU;IACvB,MACE,IAAI;MACF;MACA;MACA;IACF;EACJ;AAEA,QAAM,CAAC,kBAAkB,mBAAmB,WAAW,IACrD,SAAS;IACP;IACC,QAAoD;EACvD;AAEI,EAAA;IACE;MACJ,CAAC,kBACC,cACI,MAAM,SACN,SAAS,UAAU,cAAc,WAAW,aAAa,CAAC;MAChE,CAAC,UAAU,WAAW;IACxB;IACA,MAAM,SAAS,iBAAiB;IAChC,MAAM,SAAS,iBAAiB;EAClC;AAEM,EAAA,iBAAU,MAAM;AAGpB,aAAS;MACP;MACA;MACA;QACE,WAAW;MACb;IACF;EACF,GAAG,CAAC,kBAAkB,SAAS,QAAQ,CAAC;AAExC,QAAM,0BAA0B,iBAAiB;IAAK,CAAC,QAAQ,UAC7D,cAAc,iBAAiB,KAAK,GAAG,MAAM;EAC/C;AAEA,QAAM,mBAAmB,0BACrB,iBAAiB,QAAQ,CAAC,QAAQ,UAAU;AAC1C,UAAM,OAAO,iBAAiB,KAAK;AAEnC,QAAI,MAAM;AACR,YAAM,gBAAgB,IAAI,cAAc,QAAQ,IAAI;AACpD,UAAI,cAAc,MAAM,MAAM,GAAG;AAC/B,eAAO,gBAAgB,MAAM,eAAe,kBAAkB;MAChE,WAAW,UAAU,QAAQ,WAAW,GAAG;AACzC,aAAK,gBAAgB,MAAM,eAAe,kBAAkB;MAC9D;IACF;AACA,WAAO,CAAC;EACV,CAAC,IACD,CAAC;AAEL,MAAI,iBAAiB,SAAS,GAAG;AAC/B,UAAM,QAAQ,IAAI,gBAAgB;EACpC;AACA,QAAM,oCAAoC,iBAAiB;IACzD,CAAC,QAAQ,UAAU;AACjB,YAAM,QAAQ,iBAAiB,KAAK;AACpC,aACE,SACA,YAAY;QACV;QACA;QACA,cAAc,MAAM;QACpB,OAAO,OAAO,cAAc,EAAE,IAAI,MAAM,SAAS;MACnD,CAAC;IAEL;EACF;AAEA,MAAI,uFAAmC,OAAO;AAC5C,UAAM,kCAAkC;EAC1C;AAEA,SAAO,kBAAkB,YAAY,CAAC;AACxC;;;AOxVA,IAAAC,SAAuB;AAwBhB,SAAS,aAOd,SAOA,UACA,aACoC;;AACpC,MAAI,MAAuC;AACzC,QAAI,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;AACzD,YAAM,IAAI;QACR;MACF;IACF;EACF;AAEA,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,qBAAqB,2BAA2B;AACtD,QAAM,mBAAmB,OAAO,oBAAoB,OAAO;AAEzD,SAAAC,OAAA,OAAO,kBAAkB,EAAE,YAA3B,gBAAAA,KAA4C,8BAA5C;IAAAA;IACA;;AAIF,mBAAiB,qBAAqB,cAClC,gBACA;AAEJ,uBAAqB,gBAAgB;AACrC,kCAAgC,kBAAkB,kBAAkB;AAEpE,6BAA2B,kBAAkB;AAE7C,QAAM,CAAC,QAAQ,IAAU;IACvB,MACE,IAAI;MACF;MACA;IACF;EACJ;AAEA,QAAM,SAAS,SAAS,oBAAoB,gBAAgB;AAEtD,EAAA;IACE;MACJ,CAAC,kBAAkB;AACjB,cAAM,cAAc,cAChB,MAAM,SACN,SAAS,UAAU,cAAc,WAAW,aAAa,CAAC;AAI9D,iBAAS,aAAa;AAEtB,eAAO;MACT;MACA,CAAC,UAAU,WAAW;IACxB;IACA,MAAM,SAAS,iBAAiB;IAChC,MAAM,SAAS,iBAAiB;EAClC;AAEM,EAAA,iBAAU,MAAM;AAGpB,aAAS,WAAW,kBAAkB,EAAE,WAAW,MAAM,CAAC;EAC5D,GAAG,CAAC,kBAAkB,QAAQ,CAAC;AAG/B,MAAI,cAAc,kBAAkB,MAAM,GAAG;AAC3C,UAAM,gBAAgB,kBAAkB,UAAU,kBAAkB;EACtE;AAGA,MACE,YAAY;IACV;IACA;IACA,cAAc,iBAAiB;IAC/B,OAAO,OACJ,cAAc,EACd,IAKC,iBAAiB,SAAS;EAChC,CAAC,GACD;AACA,UAAM,OAAO;EACf;AAEA;AAAE,qBAAO,kBAAkB,EAAE,YAA3B,mBAA4C,6BAA5C;;IACA;IACA;;AAIF,SAAO,CAAC,iBAAiB,sBACrB,SAAS,YAAY,MAAM,IAC3B;AACN;;;AC7FO,SAAS,SAAS,SAA0B,aAA2B;AAC5E,SAAO,aAAa,SAAS,eAAe,WAAW;AACzD;;;ACvCO,SAAS,iBAMd,SACA,aACuC;AACvC,MAAI,MAAuC;AACzC,QAAI,QAAQ,YAAY,WAAW;AACjC,cAAQ,MAAM,+CAA+C;IAC/D;EACF;AAEA,SAAO;IACL;MACE,GAAG;MACH,SAAS;MACT,UAAU;MACV,cAAc;MACd,iBAAiB;IACnB;IACA;IACA;EACF;AACF;;;AChBO,SAAS,yBAOd,SAQA,aAC+C;AAC/C,MAAI,MAAuC;AACzC,QAAI,QAAQ,YAAY,WAAW;AACjC,cAAQ,MAAM,uDAAuD;IACvE;EACF;AAEA,SAAO;IACL;MACE,GAAG;MACH,SAAS;MACT,UAAU;MACV,cAAc;IAChB;IACA;IACA;EACF;AACF;;;ACkIO,SAAS,mBAId,SAIA,aACiB;AACjB,SAAO;IACL;MACE,GAAG;MACH,SAAS,QAAQ,QAAQ,IAAI,CAAC,UAAU;AACtC,YAAI,MAAuC;AACzC,cAAI,MAAM,YAAY,WAAW;AAC/B,oBAAQ,MAAM,iDAAiD;UACjE;QACF;AAEA,eAAO;UACL,GAAG;UACH,UAAU;UACV,cAAc;UACd,SAAS;UACT,iBAAiB;QACnB;MACF,CAAC;IACH;IACA;EACF;AACF;;;AC3MO,SAAS,iBAMd,SACA,aACA;AACA,QAAM,SAAS,eAAe,WAAW;AAEzC,MAAI,CAAC,OAAO,cAAc,QAAQ,QAAQ,GAAG;AAC3C,WAAO,cAAc,OAAO;EAC9B;AACF;;;ACdO,SAAS,yBAOd,SAOA,aACA;AACA,QAAM,SAAS,eAAe,WAAW;AAEzC,MAAI,CAAC,OAAO,cAAc,QAAQ,QAAQ,GAAG;AAC3C,WAAO,sBAAsB,OAAO;EACtC;AACF;;;ACuBO,SAAS,aAAa,SAAkB;AAC7C,SAAO;AACT;;;ACwCO,SAAS,qBAAqB,SAAkB;AACrD,SAAO;AACT;;;AC7FA,IAAAC,SAAuB;AAuBhB,IAAM,oBAAoB,CAAC;EAChC;EACA,UAAU,CAAC;EACX;EACA;AACF,MAA8B;AAC5B,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,gBAEhD;AAEF,QAAM,aAAmB,cAAO,OAAO;AACvC,aAAW,UAAU;AAiBf,EAAA,eAAQ,MAAM;AAClB,QAAI,OAAO;AACT,UAAI,OAAO,UAAU,UAAU;AAC7B;MACF;AAEA,YAAM,aAAa,OAAO,cAAc;AAExC,YAAM,UAAW,MAA0B,WAAW,CAAC;AAEvD,YAAM,aAAyC,CAAC;AAChD,YAAM,kBAA8C,CAAC;AACrD,iBAAW,mBAAmB,SAAS;AACrC,cAAM,gBAAgB,WAAW,IAAI,gBAAgB,SAAS;AAE9D,YAAI,CAAC,eAAe;AAClB,qBAAW,KAAK,eAAe;QACjC,OAAO;AACL,gBAAM,mBACJ,gBAAgB,MAAM,gBACtB,cAAc,MAAM;AACtB,gBAAM,qBAAqB,iDAAgB;YACzC,CAAC,UAAU,MAAM,cAAc,gBAAgB;;AAGjD,cACE,qBACC,CAAC,sBACA,gBAAgB,MAAM,gBACpB,mBAAmB,MAAM,gBAC7B;AACA,4BAAgB,KAAK,eAAe;UACtC;QACF;MACF;AAEA,UAAI,WAAW,SAAS,GAAG;AAGzB,gBAAQ,QAAQ,EAAE,SAAS,WAAW,GAAG,WAAW,OAAO;MAC7D;AACA,UAAI,gBAAgB,SAAS,GAAG;AAC9B;UAAkB,CAAC,SACjB,OAAO,CAAC,GAAG,MAAM,GAAG,eAAe,IAAI;QACzC;MACF;IACF;EACF,GAAG,CAAC,QAAQ,gBAAgB,KAAK,CAAC;AAE5B,EAAA,iBAAU,MAAM;AACpB,QAAI,gBAAgB;AAClB,cAAQ,QAAQ,EAAE,SAAS,eAAe,GAAG,WAAW,OAAO;AAC/D,wBAAkB,MAAS;IAC7B;EACF,GAAG,CAAC,QAAQ,cAAc,CAAC;AAE3B,SAAO;AACT;;;AC/GA,IAAAC,SAAuB;AAMhB,SAAS,cACd,SACA,aACQ;AACR,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,aAAa,OAAO,cAAc;AAExC,SAAa;IACL;MACJ,CAAC,kBACC,WAAW,UAAU,cAAc,WAAW,aAAa,CAAC;MAC9D,CAAC,UAAU;IACb;IACA,MAAM,OAAO,WAAW,OAAO;IAC/B,MAAM,OAAO,WAAW,OAAO;EACjC;AACF;;;ACpBA,IAAAC,SAAuB;AAYhB,SAAS,cACd,SACA,aACQ;AACR,QAAM,SAAS,eAAe,WAAW;AACzC,SAAO;IACL,EAAE,SAAS,EAAE,GAAG,SAAS,QAAQ,UAAU,EAAE;IAC7C;EACF,EAAE;AACJ;AAOA,SAAS,UACP,eACA,SACgB;AAChB,SAAO,cACJ,QAAQ,QAAQ,OAAO,EACvB;IACC,CAAC,aACE,QAAQ,SAAS,QAAQ,OAAO,QAAQ,IAAI,SAAS;EAC1D;AACJ;AAEO,SAAS,iBACd,UAAyC,CAAC,GAC1C,aACgB;AAChB,QAAM,gBAAgB,eAAe,WAAW,EAAE,iBAAiB;AACnE,QAAM,aAAmB,cAAO,OAAO;AACvC,QAAM,SAAe,cAAuB,IAAI;AAChD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,UAAU,UAAU,eAAe,OAAO;EACnD;AAEM,EAAA,iBAAU,MAAM;AACpB,eAAW,UAAU;EACvB,CAAC;AAED,SAAa;IACL;MACJ,CAAC,kBACC,cAAc,UAAU,MAAM;AAC5B,cAAM,aAAa;UACjB,OAAO;UACP,UAAU,eAAe,WAAW,OAAO;QAC7C;AACA,YAAI,OAAO,YAAY,YAAY;AACjC,iBAAO,UAAU;AACjB,wBAAc,SAAS,aAAa;QACtC;MACF,CAAC;MACH,CAAC,aAAa;IAChB;IACA,MAAM,OAAO;IACb,MAAM,OAAO;EACf;AACF;;;AC3EA,IAAAC,UAAuB;AAahB,SAAS,YAMd,SACA,aACwD;AACxD,QAAM,SAAS,eAAe,WAAW;AAEzC,QAAM,CAAC,QAAQ,IAAU;IACvB,MACE,IAAI;MACF;MACA;IACF;EACJ;AAEM,EAAA,kBAAU,MAAM;AACpB,aAAS,WAAW,OAAO;EAC7B,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,QAAM,SAAe;IACb;MACJ,CAAC,kBACC,SAAS,UAAU,cAAc,WAAW,aAAa,CAAC;MAC5D,CAAC,QAAQ;IACX;IACA,MAAM,SAAS,iBAAiB;IAChC,MAAM,SAAS,iBAAiB;EAClC;AAEA,QAAM,SAAe;IAGnB,CAAC,WAAW,kBAAkB;AAC5B,eAAS,OAAO,WAAW,aAAa,EAAE,MAAMC,KAAI;IACtD;IACA,CAAC,QAAQ;EACX;AAEA,MACE,OAAO,SACP,iBAAiB,SAAS,QAAQ,cAAc,CAAC,OAAO,KAAK,CAAC,GAC9D;AACA,UAAM,OAAO;EACf;AAEA,SAAO,EAAE,GAAG,QAAQ,QAAQ,aAAa,OAAO,OAAO;AACzD;;;ACQO,SAAS,iBACd,SACA,aACA;AACA,SAAO;IACL;IACA;IACA;EACF;AACF;", - "names": ["_a", "_a", "_cleanup", "_setup", "_a", "_a", "_a", "_b", "_c", "_a", "_a", "_retryer", "getDefaultState", "dispatch_fn", "_a", "_a", "_b", "_a", "_mutationCache", "_defaultOptions", "_a", "_a", "_client", "_queries", "_observers", "notify_fn", "_a", "_a", "_client", "_currentResult", "notify_fn", "getDefaultState", "_a", "_b", "React", "React", "React", "import_jsx_runtime", "React", "noop", "React", "_a", "React", "React", "React", "React", "noop"] + "sources": ["../../@tanstack/query-core/src/subscribable.ts", "../../@tanstack/query-core/src/utils.ts", "../../@tanstack/query-core/src/focusManager.ts", "../../@tanstack/query-core/src/onlineManager.ts", "../../@tanstack/query-core/src/thenable.ts", "../../@tanstack/query-core/src/retryer.ts", "../../@tanstack/query-core/src/notifyManager.ts", "../../@tanstack/query-core/src/removable.ts", "../../@tanstack/query-core/src/query.ts", "../../@tanstack/query-core/src/queryCache.ts", "../../@tanstack/query-core/src/mutation.ts", "../../@tanstack/query-core/src/mutationCache.ts", "../../@tanstack/query-core/src/infiniteQueryBehavior.ts", "../../@tanstack/query-core/src/queryClient.ts", "../../@tanstack/query-core/src/queryObserver.ts", "../../@tanstack/query-core/src/queriesObserver.ts", "../../@tanstack/query-core/src/infiniteQueryObserver.ts", "../../@tanstack/query-core/src/mutationObserver.ts", "../../@tanstack/query-core/src/hydration.ts", "../../@tanstack/react-query/src/useQueries.ts", "../../@tanstack/react-query/src/QueryClientProvider.tsx", "../../@tanstack/react-query/src/isRestoring.ts", "../../@tanstack/react-query/src/QueryErrorResetBoundary.tsx", "../../@tanstack/react-query/src/errorBoundaryUtils.ts", "../../@tanstack/react-query/src/utils.ts", "../../@tanstack/react-query/src/suspense.ts", "../../@tanstack/react-query/src/useBaseQuery.ts", "../../@tanstack/react-query/src/useQuery.ts", "../../@tanstack/react-query/src/useSuspenseQuery.ts", "../../@tanstack/react-query/src/useSuspenseInfiniteQuery.ts", "../../@tanstack/react-query/src/useSuspenseQueries.ts", "../../@tanstack/react-query/src/usePrefetchQuery.tsx", "../../@tanstack/react-query/src/usePrefetchInfiniteQuery.tsx", "../../@tanstack/react-query/src/queryOptions.ts", "../../@tanstack/react-query/src/infiniteQueryOptions.ts", "../../@tanstack/react-query/src/HydrationBoundary.tsx", "../../@tanstack/react-query/src/useIsFetching.ts", "../../@tanstack/react-query/src/useMutationState.ts", "../../@tanstack/react-query/src/useMutation.ts", "../../@tanstack/react-query/src/useInfiniteQuery.ts"], + "sourcesContent": ["export class Subscribable {\n protected listeners = new Set()\n\n constructor() {\n this.subscribe = this.subscribe.bind(this)\n }\n\n subscribe(listener: TListener): () => void {\n this.listeners.add(listener)\n\n this.onSubscribe()\n\n return () => {\n this.listeners.delete(listener)\n this.onUnsubscribe()\n }\n }\n\n hasListeners(): boolean {\n return this.listeners.size > 0\n }\n\n protected onSubscribe(): void {\n // Do nothing\n }\n\n protected onUnsubscribe(): void {\n // Do nothing\n }\n}\n", "import type {\n DefaultError,\n Enabled,\n FetchStatus,\n MutationKey,\n MutationStatus,\n QueryFunction,\n QueryKey,\n QueryOptions,\n StaleTime,\n} from './types'\nimport type { Mutation } from './mutation'\nimport type { FetchOptions, Query } from './query'\n\n// TYPES\n\nexport interface QueryFilters {\n /**\n * Filter to active queries, inactive queries or all queries\n */\n type?: QueryTypeFilter\n /**\n * Match query key exactly\n */\n exact?: boolean\n /**\n * Include queries matching this predicate function\n */\n predicate?: (query: Query) => boolean\n /**\n * Include queries matching this query key\n */\n queryKey?: QueryKey\n /**\n * Include or exclude stale queries\n */\n stale?: boolean\n /**\n * Include queries matching their fetchStatus\n */\n fetchStatus?: FetchStatus\n}\n\nexport interface MutationFilters {\n /**\n * Match mutation key exactly\n */\n exact?: boolean\n /**\n * Include mutations matching this predicate function\n */\n predicate?: (mutation: Mutation) => boolean\n /**\n * Include mutations matching this mutation key\n */\n mutationKey?: MutationKey\n /**\n * Filter by mutation status\n */\n status?: MutationStatus\n}\n\nexport type Updater = TOutput | ((input: TInput) => TOutput)\n\nexport type QueryTypeFilter = 'all' | 'active' | 'inactive'\n\n// UTILS\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in globalThis\n\nexport function noop(): undefined {\n return undefined\n}\n\nexport function functionalUpdate(\n updater: Updater,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as (_: TInput) => TOutput)(input)\n : updater\n}\n\nexport function isValidTimeout(value: unknown): value is number {\n return typeof value === 'number' && value >= 0 && value !== Infinity\n}\n\nexport function timeUntilStale(updatedAt: number, staleTime?: number): number {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport function resolveStaleTime<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n staleTime: undefined | StaleTime,\n query: Query,\n): number | undefined {\n return typeof staleTime === 'function' ? staleTime(query) : staleTime\n}\n\nexport function resolveEnabled<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n enabled: undefined | Enabled,\n query: Query,\n): boolean | undefined {\n return typeof enabled === 'function' ? enabled(query) : enabled\n}\n\nexport function matchQuery(\n filters: QueryFilters,\n query: Query,\n): boolean {\n const {\n type = 'all',\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale,\n } = filters\n\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false\n }\n }\n\n if (type !== 'all') {\n const isActive = query.isActive()\n if (type === 'active' && !isActive) {\n return false\n }\n if (type === 'inactive' && isActive) {\n return false\n }\n }\n\n if (typeof stale === 'boolean' && query.isStale() !== stale) {\n return false\n }\n\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false\n }\n\n if (predicate && !predicate(query)) {\n return false\n }\n\n return true\n}\n\nexport function matchMutation(\n filters: MutationFilters,\n mutation: Mutation,\n): boolean {\n const { exact, status, predicate, mutationKey } = filters\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false\n }\n }\n\n if (status && mutation.state.status !== status) {\n return false\n }\n\n if (predicate && !predicate(mutation)) {\n return false\n }\n\n return true\n}\n\nexport function hashQueryKeyByOptions(\n queryKey: TQueryKey,\n options?: Pick, 'queryKeyHashFn'>,\n): string {\n const hashFn = options?.queryKeyHashFn || hashKey\n return hashFn(queryKey)\n}\n\n/**\n * Default query & mutation keys hash function.\n * Hashes the value into a stable hash.\n */\nexport function hashKey(queryKey: QueryKey | MutationKey): string {\n return JSON.stringify(queryKey, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key]\n return result\n }, {} as any)\n : val,\n )\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport function partialMatchKey(a: QueryKey, b: QueryKey): boolean\nexport function partialMatchKey(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]))\n }\n\n return false\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep(a: unknown, b: T): T\nexport function replaceEqualDeep(a: any, b: any): any {\n if (a === b) {\n return a\n }\n\n const array = isPlainArray(a) && isPlainArray(b)\n\n if (array || (isPlainObject(a) && isPlainObject(b))) {\n const aItems = array ? a : Object.keys(a)\n const aSize = aItems.length\n const bItems = array ? b : Object.keys(b)\n const bSize = bItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i]\n if (\n ((!array && aItems.includes(key)) || array) &&\n a[key] === undefined &&\n b[key] === undefined\n ) {\n copy[key] = undefined\n equalItems++\n } else {\n copy[key] = replaceEqualDeep(a[key], b[key])\n if (copy[key] === a[key] && a[key] !== undefined) {\n equalItems++\n }\n }\n }\n\n return aSize === bSize && equalItems === aSize ? a : copy\n }\n\n return b\n}\n\n/**\n * Shallow compare objects.\n */\nexport function shallowEqualObjects>(\n a: T,\n b: T | undefined,\n): boolean {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false\n }\n\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\nexport function isPlainObject(o: any): o is Object {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has no constructor\n const ctor = o.constructor\n if (ctor === undefined) {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Handles Objects created by Object.create()\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function sleep(timeout: number): Promise {\n return new Promise((resolve) => {\n setTimeout(resolve, timeout)\n })\n}\n\nexport function replaceData<\n TData,\n TOptions extends QueryOptions,\n>(prevData: TData | undefined, data: TData, options: TOptions): TData {\n if (typeof options.structuralSharing === 'function') {\n return options.structuralSharing(prevData, data) as TData\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== 'production') {\n try {\n return replaceEqualDeep(prevData, data)\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`,\n )\n }\n }\n // Structurally share data between prev and new data if needed\n return replaceEqualDeep(prevData, data)\n }\n return data\n}\n\nexport function keepPreviousData(\n previousData: T | undefined,\n): T | undefined {\n return previousData\n}\n\nexport function addToEnd(items: Array, item: T, max = 0): Array {\n const newItems = [...items, item]\n return max && newItems.length > max ? newItems.slice(1) : newItems\n}\n\nexport function addToStart(items: Array, item: T, max = 0): Array {\n const newItems = [item, ...items]\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems\n}\n\nexport const skipToken = Symbol()\nexport type SkipToken = typeof skipToken\n\nexport function ensureQueryFn<\n TQueryFnData = unknown,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: {\n queryFn?: QueryFunction | SkipToken\n queryHash?: string\n },\n fetchOptions?: FetchOptions,\n): QueryFunction {\n if (process.env.NODE_ENV !== 'production') {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`,\n )\n }\n }\n\n // if we attempt to retry a fetch that was triggered from an initialPromise\n // when we don't have a queryFn yet, we can't retry, so we just return the already rejected initialPromise\n // if an observer has already mounted, we will be able to retry with that queryFn\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise!\n }\n\n if (!options.queryFn || options.queryFn === skipToken) {\n return () =>\n Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`))\n }\n\n return options.queryFn\n}\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (focused: boolean) => void\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n const changed = this.#focused !== focused\n if (changed) {\n this.#focused = focused\n this.onFocus()\n }\n }\n\n onFocus(): void {\n const isFocused = this.isFocused()\n this.listeners.forEach((listener) => {\n listener(isFocused)\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n", "import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype Listener = (online: boolean) => void\ntype SetupFn = (setOnline: Listener) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable {\n #online = true\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true)\n const offlineListener = () => onOnline(false)\n // Listen to online\n window.addEventListener('online', onlineListener, false)\n window.addEventListener('offline', offlineListener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', onlineListener)\n window.removeEventListener('offline', offlineListener)\n }\n }\n\n return\n }\n }\n\n protected onSubscribe(): void {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.()\n this.#cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.#setup = setup\n this.#cleanup?.()\n this.#cleanup = setup(this.setOnline.bind(this))\n }\n\n setOnline(online: boolean): void {\n const changed = this.#online !== online\n\n if (changed) {\n this.#online = online\n this.listeners.forEach((listener) => {\n listener(online)\n })\n }\n }\n\n isOnline(): boolean {\n return this.#online\n }\n}\n\nexport const onlineManager = new OnlineManager()\n", "/**\n * Thenable types which matches React's types for promises\n *\n * React seemingly uses `.status`, `.value` and `.reason` properties on a promises to optimistically unwrap data from promises\n *\n * @see https://github.com/facebook/react/blob/main/packages/shared/ReactTypes.js#L112-L138\n * @see https://github.com/facebook/react/blob/4f604941569d2e8947ce1460a0b2997e835f37b9/packages/react-debug-tools/src/ReactDebugHooks.js#L224-L227\n */\n\ninterface Fulfilled {\n status: 'fulfilled'\n value: T\n}\ninterface Rejected {\n status: 'rejected'\n reason: unknown\n}\ninterface Pending {\n status: 'pending'\n\n /**\n * Resolve the promise with a value.\n * Will remove the `resolve` and `reject` properties from the promise.\n */\n resolve: (value: T) => void\n /**\n * Reject the promise with a reason.\n * Will remove the `resolve` and `reject` properties from the promise.\n */\n reject: (reason: unknown) => void\n}\n\nexport type FulfilledThenable = Promise & Fulfilled\nexport type RejectedThenable = Promise & Rejected\nexport type PendingThenable = Promise & Pending\n\nexport type Thenable =\n | FulfilledThenable\n | RejectedThenable\n | PendingThenable\n\nexport function pendingThenable(): PendingThenable {\n let resolve: Pending['resolve']\n let reject: Pending['reject']\n // this could use `Promise.withResolvers()` in the future\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n }) as PendingThenable\n\n thenable.status = 'pending'\n thenable.catch(() => {\n // prevent unhandled rejection errors\n })\n\n function finalize(data: Fulfilled | Rejected) {\n Object.assign(thenable, data)\n\n // clear pending props props to avoid calling them twice\n delete (thenable as Partial>).resolve\n delete (thenable as Partial>).reject\n }\n\n thenable.resolve = (value) => {\n finalize({\n status: 'fulfilled',\n value,\n })\n\n resolve(value)\n }\n thenable.reject = (reason) => {\n finalize({\n status: 'rejected',\n reason,\n })\n\n reject(reason)\n }\n\n return thenable\n}\n", "import { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { pendingThenable } from './thenable'\nimport { isServer, sleep } from './utils'\nimport type { CancelOptions, DefaultError, NetworkMode } from './types'\n\n// TYPES\n\ninterface RetryerConfig {\n fn: () => TData | Promise\n initialPromise?: Promise\n abort?: () => void\n onError?: (error: TError) => void\n onSuccess?: (data: TData) => void\n onFail?: (failureCount: number, error: TError) => void\n onPause?: () => void\n onContinue?: () => void\n retry?: RetryValue\n retryDelay?: RetryDelayValue\n networkMode: NetworkMode | undefined\n canRun: () => boolean\n}\n\nexport interface Retryer {\n promise: Promise\n cancel: (cancelOptions?: CancelOptions) => void\n continue: () => Promise\n cancelRetry: () => void\n continueRetry: () => void\n canStart: () => boolean\n start: () => Promise\n}\n\nexport type RetryValue = boolean | number | ShouldRetryFunction\n\ntype ShouldRetryFunction = (\n failureCount: number,\n error: TError,\n) => boolean\n\nexport type RetryDelayValue = number | RetryDelayFunction\n\ntype RetryDelayFunction = (\n failureCount: number,\n error: TError,\n) => number\n\nfunction defaultRetryDelay(failureCount: number) {\n return Math.min(1000 * 2 ** failureCount, 30000)\n}\n\nexport function canFetch(networkMode: NetworkMode | undefined): boolean {\n return (networkMode ?? 'online') === 'online'\n ? onlineManager.isOnline()\n : true\n}\n\nexport class CancelledError extends Error {\n revert?: boolean\n silent?: boolean\n constructor(options?: CancelOptions) {\n super('CancelledError')\n this.revert = options?.revert\n this.silent = options?.silent\n }\n}\n\nexport function isCancelledError(value: any): value is CancelledError {\n return value instanceof CancelledError\n}\n\nexport function createRetryer(\n config: RetryerConfig,\n): Retryer {\n let isRetryCancelled = false\n let failureCount = 0\n let isResolved = false\n let continueFn: ((value?: unknown) => void) | undefined\n\n const thenable = pendingThenable()\n\n const cancel = (cancelOptions?: CancelOptions): void => {\n if (!isResolved) {\n reject(new CancelledError(cancelOptions))\n\n config.abort?.()\n }\n }\n const cancelRetry = () => {\n isRetryCancelled = true\n }\n\n const continueRetry = () => {\n isRetryCancelled = false\n }\n\n const canContinue = () =>\n focusManager.isFocused() &&\n (config.networkMode === 'always' || onlineManager.isOnline()) &&\n config.canRun()\n\n const canStart = () => canFetch(config.networkMode) && config.canRun()\n\n const resolve = (value: any) => {\n if (!isResolved) {\n isResolved = true\n config.onSuccess?.(value)\n continueFn?.()\n thenable.resolve(value)\n }\n }\n\n const reject = (value: any) => {\n if (!isResolved) {\n isResolved = true\n config.onError?.(value)\n continueFn?.()\n thenable.reject(value)\n }\n }\n\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved || canContinue()) {\n continueResolve(value)\n }\n }\n config.onPause?.()\n }).then(() => {\n continueFn = undefined\n if (!isResolved) {\n config.onContinue?.()\n }\n })\n }\n\n // Create loop function\n const run = () => {\n // Do nothing if already resolved\n if (isResolved) {\n return\n }\n\n let promiseOrValue: any\n\n // we can re-use config.initialPromise on the first call of run()\n const initialPromise =\n failureCount === 0 ? config.initialPromise : undefined\n\n // Execute query\n try {\n promiseOrValue = initialPromise ?? config.fn()\n } catch (error) {\n promiseOrValue = Promise.reject(error)\n }\n\n Promise.resolve(promiseOrValue)\n .then(resolve)\n .catch((error) => {\n // Stop if the fetch is already resolved\n if (isResolved) {\n return\n }\n\n // Do we need to retry the request?\n const retry = config.retry ?? (isServer ? 0 : 3)\n const retryDelay = config.retryDelay ?? defaultRetryDelay\n const delay =\n typeof retryDelay === 'function'\n ? retryDelay(failureCount, error)\n : retryDelay\n const shouldRetry =\n retry === true ||\n (typeof retry === 'number' && failureCount < retry) ||\n (typeof retry === 'function' && retry(failureCount, error))\n\n if (isRetryCancelled || !shouldRetry) {\n // We are done if the query does not need to be retried\n reject(error)\n return\n }\n\n failureCount++\n\n // Notify on fail\n config.onFail?.(failureCount, error)\n\n // Delay\n sleep(delay)\n // Pause if the document is not visible or when the device is offline\n .then(() => {\n return canContinue() ? undefined : pause()\n })\n .then(() => {\n if (isRetryCancelled) {\n reject(error)\n } else {\n run()\n }\n })\n })\n }\n\n return {\n promise: thenable,\n cancel,\n continue: () => {\n continueFn?.()\n return thenable\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n // Start loop\n if (canStart()) {\n run()\n } else {\n pause().then(run)\n }\n return thenable\n },\n }\n}\n", "// TYPES\n\ntype NotifyCallback = () => void\n\ntype NotifyFunction = (callback: () => void) => void\n\ntype BatchNotifyFunction = (callback: () => void) => void\n\ntype BatchCallsCallback> = (...args: T) => void\n\ntype ScheduleFunction = (callback: () => void) => void\n\nexport function createNotifyManager() {\n let queue: Array = []\n let transactions = 0\n let notifyFn: NotifyFunction = (callback) => {\n callback()\n }\n let batchNotifyFn: BatchNotifyFunction = (callback: () => void) => {\n callback()\n }\n let scheduleFn: ScheduleFunction = (cb) => setTimeout(cb, 0)\n\n const schedule = (callback: NotifyCallback): void => {\n if (transactions) {\n queue.push(callback)\n } else {\n scheduleFn(() => {\n notifyFn(callback)\n })\n }\n }\n const flush = (): void => {\n const originalQueue = queue\n queue = []\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback)\n })\n })\n })\n }\n }\n\n return {\n batch: (callback: () => T): T => {\n let result\n transactions++\n try {\n result = callback()\n } finally {\n transactions--\n if (!transactions) {\n flush()\n }\n }\n return result\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: >(\n callback: BatchCallsCallback,\n ): BatchCallsCallback => {\n return (...args) => {\n schedule(() => {\n callback(...args)\n })\n }\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn: NotifyFunction) => {\n notifyFn = fn\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn: BatchNotifyFunction) => {\n batchNotifyFn = fn\n },\n setScheduler: (fn: ScheduleFunction) => {\n scheduleFn = fn\n },\n } as const\n}\n\n// SINGLETON\nexport const notifyManager = createNotifyManager()\n", "import { isServer, isValidTimeout } from './utils'\n\nexport abstract class Removable {\n gcTime!: number\n #gcTimeout?: ReturnType\n\n destroy(): void {\n this.clearGcTimeout()\n }\n\n protected scheduleGc(): void {\n this.clearGcTimeout()\n\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = setTimeout(() => {\n this.optionalRemove()\n }, this.gcTime)\n }\n }\n\n protected updateGcTime(newGcTime: number | undefined): void {\n // Default to 5 minutes (Infinity for server-side) if no gcTime is set\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1000),\n )\n }\n\n protected clearGcTimeout() {\n if (this.#gcTimeout) {\n clearTimeout(this.#gcTimeout)\n this.#gcTimeout = undefined\n }\n }\n\n protected abstract optionalRemove(): void\n}\n", "import {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n skipToken,\n timeUntilStale,\n} from './utils'\nimport { notifyManager } from './notifyManager'\nimport { canFetch, createRetryer, isCancelledError } from './retryer'\nimport { Removable } from './removable'\nimport type {\n CancelOptions,\n DefaultError,\n FetchStatus,\n InitialDataFunction,\n OmitKeyof,\n QueryFunction,\n QueryFunctionContext,\n QueryKey,\n QueryMeta,\n QueryOptions,\n QueryStatus,\n SetDataOptions,\n} from './types'\nimport type { QueryCache } from './queryCache'\nimport type { QueryObserver } from './queryObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface QueryConfig<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n cache: QueryCache\n queryKey: TQueryKey\n queryHash: string\n options?: QueryOptions\n defaultOptions?: QueryOptions\n state?: QueryState\n}\n\nexport interface QueryState {\n data: TData | undefined\n dataUpdateCount: number\n dataUpdatedAt: number\n error: TError | null\n errorUpdateCount: number\n errorUpdatedAt: number\n fetchFailureCount: number\n fetchFailureReason: TError | null\n fetchMeta: FetchMeta | null\n isInvalidated: boolean\n status: QueryStatus\n fetchStatus: FetchStatus\n}\n\nexport interface FetchContext<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n fetchFn: () => unknown | Promise\n fetchOptions?: FetchOptions\n signal: AbortSignal\n options: QueryOptions\n queryKey: TQueryKey\n state: QueryState\n}\n\nexport interface QueryBehavior<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> {\n onFetch: (\n context: FetchContext,\n query: Query,\n ) => void\n}\n\nexport type FetchDirection = 'forward' | 'backward'\n\nexport interface FetchMeta {\n fetchMore?: { direction: FetchDirection }\n}\n\nexport interface FetchOptions {\n cancelRefetch?: boolean\n meta?: FetchMeta\n initialPromise?: Promise\n}\n\ninterface FailedAction {\n type: 'failed'\n failureCount: number\n error: TError\n}\n\ninterface FetchAction {\n type: 'fetch'\n meta?: FetchMeta\n}\n\ninterface SuccessAction {\n data: TData | undefined\n type: 'success'\n dataUpdatedAt?: number\n manual?: boolean\n}\n\ninterface ErrorAction {\n type: 'error'\n error: TError\n}\n\ninterface InvalidateAction {\n type: 'invalidate'\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\ninterface SetStateAction {\n type: 'setState'\n state: Partial>\n setStateOptions?: SetStateOptions\n}\n\nexport type Action =\n | ContinueAction\n | ErrorAction\n | FailedAction\n | FetchAction\n | InvalidateAction\n | PauseAction\n | SetStateAction\n | SuccessAction\n\nexport interface SetStateOptions {\n meta?: any\n}\n\n// CLASS\n\nexport class Query<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Removable {\n queryKey: TQueryKey\n queryHash: string\n options!: QueryOptions\n state: QueryState\n\n #initialState: QueryState\n #revertState?: QueryState\n #cache: QueryCache\n #retryer?: Retryer\n observers: Array>\n #defaultOptions?: QueryOptions\n #abortSignalConsumed: boolean\n\n constructor(config: QueryConfig) {\n super()\n\n this.#abortSignalConsumed = false\n this.#defaultOptions = config.defaultOptions\n this.setOptions(config.options)\n this.observers = []\n this.#cache = config.cache\n this.queryKey = config.queryKey\n this.queryHash = config.queryHash\n this.#initialState = getDefaultState(this.options)\n this.state = config.state ?? this.#initialState\n this.scheduleGc()\n }\n get meta(): QueryMeta | undefined {\n return this.options.meta\n }\n\n get promise(): Promise | undefined {\n return this.#retryer?.promise\n }\n\n setOptions(\n options?: QueryOptions,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n protected optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === 'idle') {\n this.#cache.remove(this)\n }\n }\n\n setData(\n newData: TData,\n options?: SetDataOptions & { manual: boolean },\n ): TData {\n const data = replaceData(this.state.data, newData, this.options)\n\n // Set data and mark it as cached\n this.#dispatch({\n data,\n type: 'success',\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual,\n })\n\n return data\n }\n\n setState(\n state: Partial>,\n setStateOptions?: SetStateOptions,\n ): void {\n this.#dispatch({ type: 'setState', state, setStateOptions })\n }\n\n cancel(options?: CancelOptions): Promise {\n const promise = this.#retryer?.promise\n this.#retryer?.cancel(options)\n return promise ? promise.then(noop).catch(noop) : Promise.resolve()\n }\n\n destroy(): void {\n super.destroy()\n\n this.cancel({ silent: true })\n }\n\n reset(): void {\n this.destroy()\n this.setState(this.#initialState)\n }\n\n isActive(): boolean {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false,\n )\n }\n\n isDisabled(): boolean {\n if (this.getObserversCount() > 0) {\n return !this.isActive()\n }\n // if a query has no observers, it should still be considered disabled if it never attempted a fetch\n return (\n this.options.queryFn === skipToken ||\n this.state.dataUpdateCount + this.state.errorUpdateCount === 0\n )\n }\n\n isStale(): boolean {\n if (this.state.isInvalidated) {\n return true\n }\n\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale,\n )\n }\n\n return this.state.data === undefined\n }\n\n isStaleByTime(staleTime = 0): boolean {\n return (\n this.state.isInvalidated ||\n this.state.data === undefined ||\n !timeUntilStale(this.state.dataUpdatedAt, staleTime)\n )\n }\n\n onFocus(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n onOnline(): void {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect())\n\n observer?.refetch({ cancelRefetch: false })\n\n // Continue fetch if currently paused\n this.#retryer?.continue()\n }\n\n addObserver(observer: QueryObserver): void {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer)\n\n // Stop the query from being garbage collected\n this.clearGcTimeout()\n\n this.#cache.notify({ type: 'observerAdded', query: this, observer })\n }\n }\n\n removeObserver(observer: QueryObserver): void {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer)\n\n if (!this.observers.length) {\n // If the transport layer does not support cancellation\n // we'll let the query continue so the result can be cached\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true })\n } else {\n this.#retryer.cancelRetry()\n }\n }\n\n this.scheduleGc()\n }\n\n this.#cache.notify({ type: 'observerRemoved', query: this, observer })\n }\n }\n\n getObserversCount(): number {\n return this.observers.length\n }\n\n invalidate(): void {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: 'invalidate' })\n }\n }\n\n fetch(\n options?: QueryOptions,\n fetchOptions?: FetchOptions,\n ): Promise {\n if (this.state.fetchStatus !== 'idle') {\n if (this.state.data !== undefined && fetchOptions?.cancelRefetch) {\n // Silently cancel current fetch if the user wants to cancel refetch\n this.cancel({ silent: true })\n } else if (this.#retryer) {\n // make sure that retries that were potentially cancelled due to unmounts can continue\n this.#retryer.continueRetry()\n // Return current promise if we are already fetching\n return this.#retryer.promise\n }\n }\n\n // Update config if passed, otherwise the config from the last execution is used\n if (options) {\n this.setOptions(options)\n }\n\n // Use the options from the first observer with a query function if no function is found.\n // This can happen when the query is hydrated or created with setQueryData.\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn)\n if (observer) {\n this.setOptions(observer.options)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`,\n )\n }\n }\n\n const abortController = new AbortController()\n\n // Adds an enumerable signal property to the object that\n // which sets abortSignalConsumed to true when the signal\n // is read.\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true\n return abortController.signal\n },\n })\n }\n\n // Create fetch function\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions)\n\n // Create query function context\n const queryFnContext: OmitKeyof<\n QueryFunctionContext,\n 'signal'\n > = {\n queryKey: this.queryKey,\n meta: this.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n this.#abortSignalConsumed = false\n if (this.options.persister) {\n return this.options.persister(\n queryFn as QueryFunction,\n queryFnContext as QueryFunctionContext,\n this as unknown as Query,\n )\n }\n\n return queryFn(queryFnContext as QueryFunctionContext)\n }\n\n // Trigger behavior hook\n const context: OmitKeyof<\n FetchContext,\n 'signal'\n > = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n state: this.state,\n fetchFn,\n }\n\n addSignalProperty(context)\n\n this.options.behavior?.onFetch(\n context as FetchContext,\n this as unknown as Query,\n )\n\n // Store state in case the current fetch needs to be reverted\n this.#revertState = this.state\n\n // Set to fetching state if not already in it\n if (\n this.state.fetchStatus === 'idle' ||\n this.state.fetchMeta !== context.fetchOptions?.meta\n ) {\n this.#dispatch({ type: 'fetch', meta: context.fetchOptions?.meta })\n }\n\n const onError = (error: TError | { silent?: boolean }) => {\n // Optimistically update state if needed\n if (!(isCancelledError(error) && error.silent)) {\n this.#dispatch({\n type: 'error',\n error: error as TError,\n })\n }\n\n if (!isCancelledError(error)) {\n // Notify cache callback\n this.#cache.config.onError?.(\n error as any,\n this as Query,\n )\n this.#cache.config.onSettled?.(\n this.state.data,\n error as any,\n this as Query,\n )\n }\n\n // Schedule query gc after fetching\n this.scheduleGc()\n }\n\n // Try to fetch the data\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise as\n | Promise\n | undefined,\n fn: context.fetchFn as () => Promise,\n abort: abortController.abort.bind(abortController),\n onSuccess: (data) => {\n if (data === undefined) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,\n )\n }\n onError(new Error(`${this.queryHash} data is undefined`) as any)\n return\n }\n\n try {\n this.setData(data)\n } catch (error) {\n onError(error as TError)\n return\n }\n\n // Notify cache callback\n this.#cache.config.onSuccess?.(data, this as Query)\n this.#cache.config.onSettled?.(\n data,\n this.state.error as any,\n this as Query,\n )\n\n // Schedule query gc after fetching\n this.scheduleGc()\n },\n onError,\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true,\n })\n\n return this.#retryer.start()\n }\n\n #dispatch(action: Action): void {\n const reducer = (\n state: QueryState,\n ): QueryState => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n fetchStatus: 'paused',\n }\n case 'continue':\n return {\n ...state,\n fetchStatus: 'fetching',\n }\n case 'fetch':\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null,\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n dataUpdateCount: state.dataUpdateCount + 1,\n dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: 'success',\n ...(!action.manual && {\n fetchStatus: 'idle',\n fetchFailureCount: 0,\n fetchFailureReason: null,\n }),\n }\n case 'error':\n const error = action.error\n\n if (isCancelledError(error) && error.revert && this.#revertState) {\n return { ...this.#revertState, fetchStatus: 'idle' }\n }\n\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: 'idle',\n status: 'error',\n }\n case 'invalidate':\n return {\n ...state,\n isInvalidated: true,\n }\n case 'setState':\n return {\n ...state,\n ...action.state,\n }\n }\n }\n\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate()\n })\n\n this.#cache.notify({ query: this, type: 'updated', action })\n })\n }\n}\n\nexport function fetchState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n data: TData | undefined,\n options: QueryOptions,\n) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? 'fetching' : 'paused',\n ...(data === undefined &&\n ({\n error: null,\n status: 'pending',\n } as const)),\n } as const\n}\n\nfunction getDefaultState<\n TQueryFnData,\n TError,\n TData,\n TQueryKey extends QueryKey,\n>(\n options: QueryOptions,\n): QueryState {\n const data =\n typeof options.initialData === 'function'\n ? (options.initialData as InitialDataFunction)()\n : options.initialData\n\n const hasData = data !== undefined\n\n const initialDataUpdatedAt = hasData\n ? typeof options.initialDataUpdatedAt === 'function'\n ? (options.initialDataUpdatedAt as () => number | undefined)()\n : options.initialDataUpdatedAt\n : 0\n\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? (initialDataUpdatedAt ?? Date.now()) : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? 'success' : 'pending',\n fetchStatus: 'idle',\n }\n}\n", "import { hashQueryKeyByOptions, matchQuery } from './utils'\nimport { Query } from './query'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport type { QueryFilters } from './utils'\nimport type { Action, QueryState } from './query'\nimport type {\n DefaultError,\n NotifyEvent,\n QueryKey,\n QueryOptions,\n WithRequired,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { QueryObserver } from './queryObserver'\n\n// TYPES\n\ninterface QueryCacheConfig {\n onError?: (\n error: DefaultError,\n query: Query,\n ) => void\n onSuccess?: (data: unknown, query: Query) => void\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n query: Query,\n ) => void\n}\n\ninterface NotifyEventQueryAdded extends NotifyEvent {\n type: 'added'\n query: Query\n}\n\ninterface NotifyEventQueryRemoved extends NotifyEvent {\n type: 'removed'\n query: Query\n}\n\ninterface NotifyEventQueryUpdated extends NotifyEvent {\n type: 'updated'\n query: Query\n action: Action\n}\n\ninterface NotifyEventQueryObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n query: Query\n observer: QueryObserver\n}\n\ninterface NotifyEventQueryObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n query: Query\n observer: QueryObserver\n}\n\ninterface NotifyEventQueryObserverResultsUpdated extends NotifyEvent {\n type: 'observerResultsUpdated'\n query: Query\n}\n\ninterface NotifyEventQueryObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n query: Query\n observer: QueryObserver\n}\n\nexport type QueryCacheNotifyEvent =\n | NotifyEventQueryAdded\n | NotifyEventQueryRemoved\n | NotifyEventQueryUpdated\n | NotifyEventQueryObserverAdded\n | NotifyEventQueryObserverRemoved\n | NotifyEventQueryObserverResultsUpdated\n | NotifyEventQueryObserverOptionsUpdated\n\ntype QueryCacheListener = (event: QueryCacheNotifyEvent) => void\n\nexport interface QueryStore {\n has: (queryHash: string) => boolean\n set: (queryHash: string, query: Query) => void\n get: (queryHash: string) => Query | undefined\n delete: (queryHash: string) => void\n values: () => IterableIterator\n}\n\n// CLASS\n\nexport class QueryCache extends Subscribable {\n #queries: QueryStore\n\n constructor(public config: QueryCacheConfig = {}) {\n super()\n this.#queries = new Map()\n }\n\n build<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n client: QueryClient,\n options: WithRequired<\n QueryOptions,\n 'queryKey'\n >,\n state?: QueryState,\n ): Query {\n const queryKey = options.queryKey\n const queryHash =\n options.queryHash ?? hashQueryKeyByOptions(queryKey, options)\n let query = this.get(queryHash)\n\n if (!query) {\n query = new Query({\n cache: this,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey),\n })\n this.add(query)\n }\n\n return query\n }\n\n add(query: Query): void {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query)\n\n this.notify({\n type: 'added',\n query,\n })\n }\n }\n\n remove(query: Query): void {\n const queryInMap = this.#queries.get(query.queryHash)\n\n if (queryInMap) {\n query.destroy()\n\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash)\n }\n\n this.notify({ type: 'removed', query })\n }\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query)\n })\n })\n }\n\n get<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n queryHash: string,\n ): Query | undefined {\n return this.#queries.get(queryHash) as\n | Query\n | undefined\n }\n\n getAll(): Array {\n return [...this.#queries.values()]\n }\n\n find(\n filters: WithRequired,\n ): Query | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((query) =>\n matchQuery(defaultedFilters, query),\n ) as Query | undefined\n }\n\n findAll(filters: QueryFilters = {}): Array {\n const queries = this.getAll()\n return Object.keys(filters).length > 0\n ? queries.filter((query) => matchQuery(filters, query))\n : queries\n }\n\n notify(event: QueryCacheNotifyEvent): void {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n onFocus(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus()\n })\n })\n }\n\n onOnline(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline()\n })\n })\n }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport { createRetryer } from './retryer'\nimport type {\n DefaultError,\n MutationMeta,\n MutationOptions,\n MutationStatus,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport type { Retryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions\n state?: MutationState\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction {\n type: 'pending'\n isPaused: boolean\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action =\n | ContinueAction\n | ErrorAction\n | FailedAction\n | PendingAction\n | PauseAction\n | SuccessAction\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = unknown,\n TContext = unknown,\n> extends Removable {\n state: MutationState\n options!: MutationOptions\n readonly mutationId: number\n\n #observers: Array>\n #mutationCache: MutationCache\n #retryer?: Retryer\n\n constructor(config: MutationConfig) {\n super()\n\n this.mutationId = config.mutationId\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options: MutationOptions,\n ): void {\n this.options = options\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver): void {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this),\n })\n\n const restored = this.state.status === 'pending'\n const isPaused = !this.#retryer.canStart()\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables, isPaused })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n isPaused,\n })\n }\n }\n const data = await this.#retryer.start()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context!)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n } finally {\n this.#mutationCache.runNext(this)\n }\n }\n\n #dispatch(action: Action): void {\n const reducer = (\n state: MutationState,\n ): MutationState => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n", "import { notifyManager } from './notifyManager'\nimport { Mutation } from './mutation'\nimport { matchMutation, noop } from './utils'\nimport { Subscribable } from './subscribable'\nimport type { MutationObserver } from './mutationObserver'\nimport type { DefaultError, MutationOptions, NotifyEvent } from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Action, MutationState } from './mutation'\nimport type { MutationFilters } from './utils'\n\n// TYPES\n\ninterface MutationCacheConfig {\n onError?: (\n error: DefaultError,\n variables: unknown,\n context: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n onSuccess?: (\n data: unknown,\n variables: unknown,\n context: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n onMutate?: (\n variables: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n onSettled?: (\n data: unknown | undefined,\n error: DefaultError | null,\n variables: unknown,\n context: unknown,\n mutation: Mutation,\n ) => Promise | unknown\n}\n\ninterface NotifyEventMutationAdded extends NotifyEvent {\n type: 'added'\n mutation: Mutation\n}\ninterface NotifyEventMutationRemoved extends NotifyEvent {\n type: 'removed'\n mutation: Mutation\n}\n\ninterface NotifyEventMutationObserverAdded extends NotifyEvent {\n type: 'observerAdded'\n mutation: Mutation\n observer: MutationObserver\n}\n\ninterface NotifyEventMutationObserverRemoved extends NotifyEvent {\n type: 'observerRemoved'\n mutation: Mutation\n observer: MutationObserver\n}\n\ninterface NotifyEventMutationObserverOptionsUpdated extends NotifyEvent {\n type: 'observerOptionsUpdated'\n mutation?: Mutation\n observer: MutationObserver\n}\n\ninterface NotifyEventMutationUpdated extends NotifyEvent {\n type: 'updated'\n mutation: Mutation\n action: Action\n}\n\nexport type MutationCacheNotifyEvent =\n | NotifyEventMutationAdded\n | NotifyEventMutationRemoved\n | NotifyEventMutationObserverAdded\n | NotifyEventMutationObserverRemoved\n | NotifyEventMutationObserverOptionsUpdated\n | NotifyEventMutationUpdated\n\ntype MutationCacheListener = (event: MutationCacheNotifyEvent) => void\n\n// CLASS\n\nexport class MutationCache extends Subscribable {\n #mutations: Map>>\n #mutationId: number\n\n constructor(public config: MutationCacheConfig = {}) {\n super()\n this.#mutations = new Map()\n this.#mutationId = Date.now()\n }\n\n build(\n client: QueryClient,\n options: MutationOptions,\n state?: MutationState,\n ): Mutation {\n const mutation = new Mutation({\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state,\n })\n\n this.add(mutation)\n\n return mutation\n }\n\n add(mutation: Mutation): void {\n const scope = scopeFor(mutation)\n const mutations = this.#mutations.get(scope) ?? []\n mutations.push(mutation)\n this.#mutations.set(scope, mutations)\n this.notify({ type: 'added', mutation })\n }\n\n remove(mutation: Mutation): void {\n const scope = scopeFor(mutation)\n if (this.#mutations.has(scope)) {\n const mutations = this.#mutations\n .get(scope)\n ?.filter((x) => x !== mutation)\n if (mutations) {\n if (mutations.length === 0) {\n this.#mutations.delete(scope)\n } else {\n this.#mutations.set(scope, mutations)\n }\n }\n }\n\n this.notify({ type: 'removed', mutation })\n }\n\n canRun(mutation: Mutation): boolean {\n const firstPendingMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m.state.status === 'pending')\n\n // we can run if there is no current pending mutation (start use-case)\n // or if WE are the first pending mutation (continue use-case)\n return !firstPendingMutation || firstPendingMutation === mutation\n }\n\n runNext(mutation: Mutation): Promise {\n const foundMutation = this.#mutations\n .get(scopeFor(mutation))\n ?.find((m) => m !== mutation && m.state.isPaused)\n\n return foundMutation?.continue() ?? Promise.resolve()\n }\n\n clear(): void {\n notifyManager.batch(() => {\n this.getAll().forEach((mutation) => {\n this.remove(mutation)\n })\n })\n }\n\n getAll(): Array {\n return [...this.#mutations.values()].flat()\n }\n\n find<\n TData = unknown,\n TError = DefaultError,\n TVariables = any,\n TContext = unknown,\n >(\n filters: MutationFilters,\n ): Mutation | undefined {\n const defaultedFilters = { exact: true, ...filters }\n\n return this.getAll().find((mutation) =>\n matchMutation(defaultedFilters, mutation),\n ) as Mutation | undefined\n }\n\n findAll(filters: MutationFilters = {}): Array {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation))\n }\n\n notify(event: MutationCacheNotifyEvent) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event)\n })\n })\n }\n\n resumePausedMutations(): Promise {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused)\n\n return notifyManager.batch(() =>\n Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop)),\n ),\n )\n }\n}\n\nfunction scopeFor(mutation: Mutation) {\n return mutation.options.scope?.id ?? String(mutation.mutationId)\n}\n", "import { addToEnd, addToStart, ensureQueryFn } from './utils'\nimport type { QueryBehavior } from './query'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n OmitKeyof,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior(\n pages?: number,\n): QueryBehavior> {\n return {\n onFetch: (context, query) => {\n const options = context.options as InfiniteQueryPageParamsOptions\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n let result: InfiniteData = { pages: [], pageParams: [] }\n let currentPage = 0\n\n const fetchFn = async () => {\n let cancelled = false\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true\n } else {\n context.signal.addEventListener('abort', () => {\n cancelled = true\n })\n }\n return context.signal\n },\n })\n }\n\n const queryFn = ensureQueryFn(context.options, context.fetchOptions)\n\n // Create function to fetch a page\n const fetchPage = async (\n data: InfiniteData,\n param: unknown,\n previous?: boolean,\n ): Promise> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (param == null && data.pages.length) {\n return Promise.resolve(data)\n }\n\n const queryFnContext: OmitKeyof<\n QueryFunctionContext,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? 'backward' : 'forward',\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const page = await queryFn(\n queryFnContext as QueryFunctionContext,\n )\n\n const { maxPages } = context.options\n const addTo = previous ? addToStart : addToEnd\n\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages),\n }\n }\n\n // fetch next / previous page?\n if (direction && oldPages.length) {\n const previous = direction === 'backward'\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams,\n }\n const param = pageParamFn(options, oldData)\n\n result = await fetchPage(oldData, param, previous)\n } else {\n const remainingPages = pages ?? oldPages.length\n\n // Fetch all pages\n do {\n const param =\n currentPage === 0\n ? (oldPageParams[0] ?? options.initialPageParam)\n : getNextPageParam(options, result)\n if (currentPage > 0 && param == null) {\n break\n }\n result = await fetchPage(result, param)\n currentPage++\n } while (currentPage < remainingPages)\n }\n\n return result\n }\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn as any,\n {\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal,\n },\n query,\n )\n }\n } else {\n context.fetchFn = fetchFn\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions,\n { pages, pageParams }: InfiniteData,\n): unknown | undefined {\n const lastIndex = pages.length - 1\n return pages.length > 0\n ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams,\n )\n : undefined\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions,\n { pages, pageParams }: InfiniteData,\n): unknown | undefined {\n return pages.length > 0\n ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams)\n : undefined\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions,\n data?: InfiniteData,\n): boolean {\n if (!data) return false\n return getNextPageParam(options, data) != null\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions,\n data?: InfiniteData,\n): boolean {\n if (!data || !options.getPreviousPageParam) return false\n return getPreviousPageParam(options, data) != null\n}\n", "import {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken,\n} from './utils'\nimport { QueryCache } from './queryCache'\nimport { MutationCache } from './mutationCache'\nimport { focusManager } from './focusManager'\nimport { onlineManager } from './onlineManager'\nimport { notifyManager } from './notifyManager'\nimport { infiniteQueryBehavior } from './infiniteQueryBehavior'\nimport type {\n CancelOptions,\n DataTag,\n DefaultError,\n DefaultOptions,\n DefaultedQueryObserverOptions,\n EnsureInfiniteQueryDataOptions,\n EnsureQueryDataOptions,\n FetchInfiniteQueryOptions,\n FetchQueryOptions,\n InfiniteData,\n InvalidateOptions,\n InvalidateQueryFilters,\n MutationKey,\n MutationObserverOptions,\n MutationOptions,\n NoInfer,\n OmitKeyof,\n QueryClientConfig,\n QueryKey,\n QueryObserverOptions,\n QueryOptions,\n RefetchOptions,\n RefetchQueryFilters,\n ResetOptions,\n SetDataOptions,\n} from './types'\nimport type { QueryState } from './query'\nimport type { MutationFilters, QueryFilters, Updater } from './utils'\n\n// TYPES\n\ninterface QueryDefaults {\n queryKey: QueryKey\n defaultOptions: OmitKeyof, 'queryKey'>\n}\n\ninterface MutationDefaults {\n mutationKey: MutationKey\n defaultOptions: MutationOptions\n}\n\n// CLASS\n\nexport class QueryClient {\n #queryCache: QueryCache\n #mutationCache: MutationCache\n #defaultOptions: DefaultOptions\n #queryDefaults: Map\n #mutationDefaults: Map\n #mountCount: number\n #unsubscribeFocus?: () => void\n #unsubscribeOnline?: () => void\n\n constructor(config: QueryClientConfig = {}) {\n this.#queryCache = config.queryCache || new QueryCache()\n this.#mutationCache = config.mutationCache || new MutationCache()\n this.#defaultOptions = config.defaultOptions || {}\n this.#queryDefaults = new Map()\n this.#mutationDefaults = new Map()\n this.#mountCount = 0\n }\n\n mount(): void {\n this.#mountCount++\n if (this.#mountCount !== 1) return\n\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations()\n this.#queryCache.onFocus()\n }\n })\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations()\n this.#queryCache.onOnline()\n }\n })\n }\n\n unmount(): void {\n this.#mountCount--\n if (this.#mountCount !== 0) return\n\n this.#unsubscribeFocus?.()\n this.#unsubscribeFocus = undefined\n\n this.#unsubscribeOnline?.()\n this.#unsubscribeOnline = undefined\n }\n\n isFetching(filters?: QueryFilters): number {\n return this.#queryCache.findAll({ ...filters, fetchStatus: 'fetching' })\n .length\n }\n\n isMutating(filters?: MutationFilters): number {\n return this.#mutationCache.findAll({ ...filters, status: 'pending' }).length\n }\n\n getQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = TTaggedQueryKey extends DataTag<\n unknown,\n infer TaggedValue\n >\n ? TaggedValue\n : TQueryFnData,\n >(queryKey: TTaggedQueryKey): TInferredQueryFnData | undefined\n getQueryData(queryKey: QueryKey) {\n const options = this.defaultQueryOptions({ queryKey })\n return this.#queryCache.get(options.queryHash)?.state.data\n }\n\n ensureQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: EnsureQueryDataOptions,\n ): Promise {\n const cachedData = this.getQueryData(options.queryKey)\n\n if (cachedData === undefined) return this.fetchQuery(options)\n else {\n const defaultedOptions = this.defaultQueryOptions(options)\n const query = this.#queryCache.build(this, defaultedOptions)\n\n if (\n options.revalidateIfStale &&\n query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))\n ) {\n void this.prefetchQuery(defaultedOptions)\n }\n\n return Promise.resolve(cachedData)\n }\n }\n\n getQueriesData(\n filters: QueryFilters,\n ): Array<[QueryKey, TQueryFnData | undefined]> {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data as TQueryFnData | undefined\n return [queryKey, data]\n })\n }\n\n setQueryData<\n TQueryFnData = unknown,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = TTaggedQueryKey extends DataTag<\n unknown,\n infer TaggedValue\n >\n ? TaggedValue\n : TQueryFnData,\n >(\n queryKey: TTaggedQueryKey,\n updater: Updater<\n NoInfer | undefined,\n NoInfer | undefined\n >,\n options?: SetDataOptions,\n ): TInferredQueryFnData | undefined {\n const defaultedOptions = this.defaultQueryOptions<\n any,\n any,\n unknown,\n any,\n QueryKey\n >({ queryKey })\n\n const query = this.#queryCache.get(\n defaultedOptions.queryHash,\n )\n const prevData = query?.state.data\n const data = functionalUpdate(updater, prevData)\n\n if (data === undefined) {\n return undefined\n }\n\n return this.#queryCache\n .build(this, defaultedOptions)\n .setData(data, { ...options, manual: true })\n }\n\n setQueriesData(\n filters: QueryFilters,\n updater: Updater,\n options?: SetDataOptions,\n ): Array<[QueryKey, TQueryFnData | undefined]> {\n return notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options),\n ]),\n )\n }\n\n getQueryState<\n TQueryFnData = unknown,\n TError = DefaultError,\n TTaggedQueryKey extends QueryKey = QueryKey,\n TInferredQueryFnData = TTaggedQueryKey extends DataTag<\n unknown,\n infer TaggedValue\n >\n ? TaggedValue\n : TQueryFnData,\n >(\n queryKey: TTaggedQueryKey,\n ): QueryState | undefined {\n const options = this.defaultQueryOptions({ queryKey })\n return this.#queryCache.get(options.queryHash)\n ?.state\n }\n\n removeQueries(filters?: QueryFilters): void {\n const queryCache = this.#queryCache\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query)\n })\n })\n }\n\n resetQueries(filters?: QueryFilters, options?: ResetOptions): Promise {\n const queryCache = this.#queryCache\n\n const refetchFilters: RefetchQueryFilters = {\n type: 'active',\n ...filters,\n }\n\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset()\n })\n return this.refetchQueries(refetchFilters, options)\n })\n }\n\n cancelQueries(\n filters: QueryFilters = {},\n cancelOptions: CancelOptions = {},\n ): Promise {\n const defaultedCancelOptions = { revert: true, ...cancelOptions }\n\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .map((query) => query.cancel(defaultedCancelOptions)),\n )\n\n return Promise.all(promises).then(noop).catch(noop)\n }\n\n invalidateQueries(\n filters: InvalidateQueryFilters = {},\n options: InvalidateOptions = {},\n ): Promise {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate()\n })\n\n if (filters.refetchType === 'none') {\n return Promise.resolve()\n }\n const refetchFilters: RefetchQueryFilters = {\n ...filters,\n type: filters.refetchType ?? filters.type ?? 'active',\n }\n return this.refetchQueries(refetchFilters, options)\n })\n }\n\n refetchQueries(\n filters: RefetchQueryFilters = {},\n options?: RefetchOptions,\n ): Promise {\n const fetchOptions = {\n ...options,\n cancelRefetch: options?.cancelRefetch ?? true,\n }\n const promises = notifyManager.batch(() =>\n this.#queryCache\n .findAll(filters)\n .filter((query) => !query.isDisabled())\n .map((query) => {\n let promise = query.fetch(undefined, fetchOptions)\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop)\n }\n return query.state.fetchStatus === 'paused'\n ? Promise.resolve()\n : promise\n }),\n )\n\n return Promise.all(promises).then(noop)\n }\n\n fetchQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options: FetchQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise {\n const defaultedOptions = this.defaultQueryOptions(options)\n\n // https://github.com/tannerlinsley/react-query/issues/652\n if (defaultedOptions.retry === undefined) {\n defaultedOptions.retry = false\n }\n\n const query = this.#queryCache.build(this, defaultedOptions)\n\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query),\n )\n ? query.fetch(defaultedOptions)\n : Promise.resolve(query.state.data as TData)\n }\n\n prefetchQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n >(\n options: FetchQueryOptions,\n ): Promise {\n return this.fetchQuery(options).then(noop).catch(noop)\n }\n\n fetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise> {\n options.behavior = infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n TPageParam\n >(options.pages)\n return this.fetchQuery(options as any)\n }\n\n prefetchInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop)\n }\n\n ensureInfiniteQueryData<\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n >(\n options: EnsureInfiniteQueryDataOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n ): Promise> {\n options.behavior = infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n TPageParam\n >(options.pages)\n\n return this.ensureQueryData(options as any)\n }\n\n resumePausedMutations(): Promise {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations()\n }\n return Promise.resolve()\n }\n\n getQueryCache(): QueryCache {\n return this.#queryCache\n }\n\n getMutationCache(): MutationCache {\n return this.#mutationCache\n }\n\n getDefaultOptions(): DefaultOptions {\n return this.#defaultOptions\n }\n\n setDefaultOptions(options: DefaultOptions): void {\n this.#defaultOptions = options\n }\n\n setQueryDefaults<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n queryKey: QueryKey,\n options: Partial<\n OmitKeyof<\n QueryObserverOptions,\n 'queryKey'\n >\n >,\n ): void {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options,\n })\n }\n\n getQueryDefaults(\n queryKey: QueryKey,\n ): OmitKeyof, 'queryKey'> {\n const defaults = [...this.#queryDefaults.values()]\n\n let result: OmitKeyof<\n QueryObserverOptions,\n 'queryKey'\n > = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n result = { ...result, ...queryDefault.defaultOptions }\n }\n })\n return result\n }\n\n setMutationDefaults<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n >(\n mutationKey: MutationKey,\n options: OmitKeyof<\n MutationObserverOptions,\n 'mutationKey'\n >,\n ): void {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options,\n })\n }\n\n getMutationDefaults(\n mutationKey: MutationKey,\n ): MutationObserverOptions {\n const defaults = [...this.#mutationDefaults.values()]\n\n let result: MutationObserverOptions = {}\n\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n result = { ...result, ...queryDefault.defaultOptions }\n }\n })\n\n return result\n }\n\n defaultQueryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n options:\n | QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >\n | DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n > {\n if (options._defaulted) {\n return options as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true,\n }\n\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions,\n )\n }\n\n // dependent default values\n if (defaultedOptions.refetchOnReconnect === undefined) {\n defaultedOptions.refetchOnReconnect =\n defaultedOptions.networkMode !== 'always'\n }\n if (defaultedOptions.throwOnError === undefined) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense\n }\n\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = 'offlineFirst'\n }\n\n if (\n defaultedOptions.enabled !== true &&\n defaultedOptions.queryFn === skipToken\n ) {\n defaultedOptions.enabled = false\n }\n\n return defaultedOptions as DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n }\n\n defaultMutationOptions>(\n options?: T,\n ): T {\n if (options?._defaulted) {\n return options\n }\n return {\n ...this.#defaultOptions.mutations,\n ...(options?.mutationKey &&\n this.getMutationDefaults(options.mutationKey)),\n ...options,\n _defaulted: true,\n } as T\n }\n\n clear(): void {\n this.#queryCache.clear()\n this.#mutationCache.clear()\n }\n}\n", "import { focusManager } from './focusManager'\nimport { notifyManager } from './notifyManager'\nimport { fetchState } from './query'\nimport { Subscribable } from './subscribable'\nimport { pendingThenable } from './thenable'\nimport {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale,\n} from './utils'\nimport type { FetchOptions, Query, QueryState } from './query'\nimport type { QueryClient } from './queryClient'\nimport type { PendingThenable, Thenable } from './thenable'\nimport type {\n DefaultError,\n DefaultedQueryObserverOptions,\n PlaceholderDataFunction,\n QueryKey,\n QueryObserverBaseResult,\n QueryObserverOptions,\n QueryObserverResult,\n QueryOptions,\n RefetchOptions,\n} from './types'\n\ntype QueryObserverListener = (\n result: QueryObserverResult,\n) => void\n\nexport interface NotifyOptions {\n listeners?: boolean\n}\n\ninterface ObserverFetchOptions extends FetchOptions {\n throwOnError?: boolean\n}\n\nexport class QueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> extends Subscribable> {\n #client: QueryClient\n #currentQuery: Query = undefined!\n #currentQueryInitialState: QueryState = undefined!\n #currentResult: QueryObserverResult = undefined!\n #currentResultState?: QueryState\n #currentResultOptions?: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >\n #currentThenable: Thenable\n #selectError: TError | null\n #selectFn?: (data: TQueryData) => TData\n #selectResult?: TData\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData?: Query\n #staleTimeoutId?: ReturnType\n #refetchIntervalId?: ReturnType\n #currentRefetchInterval?: number | false\n #trackedProps = new Set()\n\n constructor(\n client: QueryClient,\n public options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ) {\n super()\n\n this.#client = client\n this.#selectError = null\n this.#currentThenable = pendingThenable()\n if (!this.options.experimental_prefetchInRender) {\n this.#currentThenable.reject(\n new Error('experimental_prefetchInRender feature flag is not enabled'),\n )\n }\n\n this.bindMethods()\n this.setOptions(options)\n }\n\n protected bindMethods(): void {\n this.refetch = this.refetch.bind(this)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this)\n\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch()\n } else {\n this.updateResult()\n }\n\n this.#updateTimers()\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.hasListeners()) {\n this.destroy()\n }\n }\n\n shouldFetchOnReconnect(): boolean {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect,\n )\n }\n\n shouldFetchOnWindowFocus(): boolean {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus,\n )\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#clearStaleTimeout()\n this.#clearRefetchInterval()\n this.#currentQuery.removeObserver(this)\n }\n\n setOptions(\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n const prevOptions = this.options\n const prevQuery = this.#currentQuery\n\n this.options = this.#client.defaultQueryOptions(options)\n\n if (\n this.options.enabled !== undefined &&\n typeof this.options.enabled !== 'boolean' &&\n typeof this.options.enabled !== 'function' &&\n typeof resolveEnabled(this.options.enabled, this.#currentQuery) !==\n 'boolean'\n ) {\n throw new Error(\n 'Expected enabled to be a boolean or a callback that returns a boolean',\n )\n }\n\n this.#updateQuery()\n this.#currentQuery.setOptions(this.options)\n\n if (\n prevOptions._defaulted &&\n !shallowEqualObjects(this.options, prevOptions)\n ) {\n this.#client.getQueryCache().notify({\n type: 'observerOptionsUpdated',\n query: this.#currentQuery,\n observer: this,\n })\n }\n\n const mounted = this.hasListeners()\n\n // Fetch if there are subscribers\n if (\n mounted &&\n shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions,\n )\n ) {\n this.#executeFetch()\n }\n\n // Update result\n this.updateResult(notifyOptions)\n\n // Update stale interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n resolveStaleTime(this.options.staleTime, this.#currentQuery) !==\n resolveStaleTime(prevOptions.staleTime, this.#currentQuery))\n ) {\n this.#updateStaleTimeout()\n }\n\n const nextRefetchInterval = this.#computeRefetchInterval()\n\n // Update refetch interval if needed\n if (\n mounted &&\n (this.#currentQuery !== prevQuery ||\n resolveEnabled(this.options.enabled, this.#currentQuery) !==\n resolveEnabled(prevOptions.enabled, this.#currentQuery) ||\n nextRefetchInterval !== this.#currentRefetchInterval)\n ) {\n this.#updateRefetchInterval(nextRefetchInterval)\n }\n }\n\n getOptimisticResult(\n options: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): QueryObserverResult {\n const query = this.#client.getQueryCache().build(this.#client, options)\n\n const result = this.createResult(query, options)\n\n if (shouldAssignObserverCurrentProperties(this, result)) {\n // this assigns the optimistic result to the current Observer\n // because if the query function changes, useQuery will be performing\n // an effect where it would fetch again.\n // When the fetch finishes, we perform a deep data cloning in order\n // to reuse objects references. This deep data clone is performed against\n // the `observer.currentResult.data` property\n // When QueryKey changes, we refresh the query and get new `optimistic`\n // result, while we leave the `observer.currentResult`, so when new data\n // arrives, it finds the old `observer.currentResult` which is related\n // to the old QueryKey. Which means that currentResult and selectData are\n // out of sync already.\n // To solve this, we move the cursor of the currentResult every time\n // an observer reads an optimistic value.\n\n // When keeping the previous data, the result doesn't change until new\n // data arrives.\n this.#currentResult = result\n this.#currentResultOptions = this.options\n this.#currentResultState = this.#currentQuery.state\n }\n return result\n }\n\n getCurrentResult(): QueryObserverResult {\n return this.#currentResult\n }\n\n trackResult(\n result: QueryObserverResult,\n onPropTracked?: (key: keyof QueryObserverResult) => void,\n ): QueryObserverResult {\n const trackedResult = {} as QueryObserverResult\n\n Object.keys(result).forEach((key) => {\n Object.defineProperty(trackedResult, key, {\n configurable: false,\n enumerable: true,\n get: () => {\n this.trackProp(key as keyof QueryObserverResult)\n onPropTracked?.(key as keyof QueryObserverResult)\n return result[key as keyof QueryObserverResult]\n },\n })\n })\n\n return trackedResult\n }\n\n trackProp(key: keyof QueryObserverResult) {\n this.#trackedProps.add(key)\n }\n\n getCurrentQuery(): Query {\n return this.#currentQuery\n }\n\n refetch({ ...options }: RefetchOptions = {}): Promise<\n QueryObserverResult\n > {\n return this.fetch({\n ...options,\n })\n }\n\n fetchOptimistic(\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): Promise> {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n\n const query = this.#client\n .getQueryCache()\n .build(this.#client, defaultedOptions)\n\n return query.fetch().then(() => this.createResult(query, defaultedOptions))\n }\n\n protected fetch(\n fetchOptions: ObserverFetchOptions,\n ): Promise> {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true,\n }).then(() => {\n this.updateResult()\n return this.#currentResult\n })\n }\n\n #executeFetch(\n fetchOptions?: Omit,\n ): Promise {\n // Make sure we reference the latest query as the current one might have been removed\n this.#updateQuery()\n\n // Fetch\n let promise: Promise = this.#currentQuery.fetch(\n this.options as QueryOptions,\n fetchOptions,\n )\n\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop)\n }\n\n return promise\n }\n\n #updateStaleTimeout(): void {\n this.#clearStaleTimeout()\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery,\n )\n\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return\n }\n\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime)\n\n // The timeout is sometimes triggered 1 ms before the stale time expiration.\n // To mitigate this issue we always add 1 ms to the timeout.\n const timeout = time + 1\n\n this.#staleTimeoutId = setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult()\n }\n }, timeout)\n }\n\n #computeRefetchInterval() {\n return (\n (typeof this.options.refetchInterval === 'function'\n ? this.options.refetchInterval(this.#currentQuery)\n : this.options.refetchInterval) ?? false\n )\n }\n\n #updateRefetchInterval(nextInterval: number | false): void {\n this.#clearRefetchInterval()\n\n this.#currentRefetchInterval = nextInterval\n\n if (\n isServer ||\n resolveEnabled(this.options.enabled, this.#currentQuery) === false ||\n !isValidTimeout(this.#currentRefetchInterval) ||\n this.#currentRefetchInterval === 0\n ) {\n return\n }\n\n this.#refetchIntervalId = setInterval(() => {\n if (\n this.options.refetchIntervalInBackground ||\n focusManager.isFocused()\n ) {\n this.#executeFetch()\n }\n }, this.#currentRefetchInterval)\n }\n\n #updateTimers(): void {\n this.#updateStaleTimeout()\n this.#updateRefetchInterval(this.#computeRefetchInterval())\n }\n\n #clearStaleTimeout(): void {\n if (this.#staleTimeoutId) {\n clearTimeout(this.#staleTimeoutId)\n this.#staleTimeoutId = undefined\n }\n }\n\n #clearRefetchInterval(): void {\n if (this.#refetchIntervalId) {\n clearInterval(this.#refetchIntervalId)\n this.#refetchIntervalId = undefined\n }\n }\n\n protected createResult(\n query: Query,\n options: QueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n ): QueryObserverResult {\n const prevQuery = this.#currentQuery\n const prevOptions = this.options\n const prevResult = this.#currentResult as\n | QueryObserverResult\n | undefined\n const prevResultState = this.#currentResultState\n const prevResultOptions = this.#currentResultOptions\n const queryChange = query !== prevQuery\n const queryInitialState = queryChange\n ? query.state\n : this.#currentQueryInitialState\n\n const { state } = query\n let newState = { ...state }\n let isPlaceholderData = false\n let data: TData | undefined\n\n // Optimistically set result in fetching state if needed\n if (options._optimisticResults) {\n const mounted = this.hasListeners()\n\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options)\n\n const fetchOptionally =\n mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions)\n\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options),\n }\n }\n if (options._optimisticResults === 'isRestoring') {\n newState.fetchStatus = 'idle'\n }\n }\n\n let { error, errorUpdatedAt, status } = newState\n\n // Select data if needed\n if (options.select && newState.data !== undefined) {\n // Memoize select result\n if (\n prevResult &&\n newState.data === prevResultState?.data &&\n options.select === this.#selectFn\n ) {\n data = this.#selectResult\n } else {\n try {\n this.#selectFn = options.select\n data = options.select(newState.data)\n data = replaceData(prevResult?.data, data, options)\n this.#selectResult = data\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\n }\n // Use query data\n else {\n data = newState.data as unknown as TData\n }\n\n // Show placeholder data if needed\n if (\n options.placeholderData !== undefined &&\n data === undefined &&\n status === 'pending'\n ) {\n let placeholderData\n\n // Memoize placeholder data\n if (\n prevResult?.isPlaceholderData &&\n options.placeholderData === prevResultOptions?.placeholderData\n ) {\n placeholderData = prevResult.data\n } else {\n placeholderData =\n typeof options.placeholderData === 'function'\n ? (\n options.placeholderData as unknown as PlaceholderDataFunction\n )(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData as any,\n )\n : options.placeholderData\n if (options.select && placeholderData !== undefined) {\n try {\n placeholderData = options.select(placeholderData)\n this.#selectError = null\n } catch (selectError) {\n this.#selectError = selectError as TError\n }\n }\n }\n\n if (placeholderData !== undefined) {\n status = 'success'\n data = replaceData(\n prevResult?.data,\n placeholderData as unknown,\n options,\n ) as TData\n isPlaceholderData = true\n }\n }\n\n if (this.#selectError) {\n error = this.#selectError as any\n data = this.#selectResult\n errorUpdatedAt = Date.now()\n status = 'error'\n }\n\n const isFetching = newState.fetchStatus === 'fetching'\n const isPending = status === 'pending'\n const isError = status === 'error'\n\n const isLoading = isPending && isFetching\n const hasData = data !== undefined\n\n const result: QueryObserverBaseResult = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === 'success',\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount:\n newState.dataUpdateCount > queryInitialState.dataUpdateCount ||\n newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === 'paused',\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n }\n\n const nextResult = result as QueryObserverResult\n\n if (this.options.experimental_prefetchInRender) {\n const finalizeThenableIfPossible = (thenable: PendingThenable) => {\n if (nextResult.status === 'error') {\n thenable.reject(nextResult.error)\n } else if (nextResult.data !== undefined) {\n thenable.resolve(nextResult.data)\n }\n }\n\n /**\n * Create a new thenable and result promise when the results have changed\n */\n const recreateThenable = () => {\n const pending =\n (this.#currentThenable =\n nextResult.promise =\n pendingThenable())\n\n finalizeThenableIfPossible(pending)\n }\n\n const prevThenable = this.#currentThenable\n switch (prevThenable.status) {\n case 'pending':\n // Finalize the previous thenable if it was pending\n // and we are still observing the same query\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable)\n }\n break\n case 'fulfilled':\n if (\n nextResult.status === 'error' ||\n nextResult.data !== prevThenable.value\n ) {\n recreateThenable()\n }\n break\n case 'rejected':\n if (\n nextResult.status !== 'error' ||\n nextResult.error !== prevThenable.reason\n ) {\n recreateThenable()\n }\n break\n }\n }\n\n return nextResult\n }\n\n updateResult(notifyOptions?: NotifyOptions): void {\n const prevResult = this.#currentResult as\n | QueryObserverResult\n | undefined\n\n const nextResult = this.createResult(this.#currentQuery, this.options)\n\n this.#currentResultState = this.#currentQuery.state\n this.#currentResultOptions = this.options\n\n if (this.#currentResultState.data !== undefined) {\n this.#lastQueryWithDefinedData = this.#currentQuery\n }\n\n // Only notify and update result if something has changed\n if (shallowEqualObjects(nextResult, prevResult)) {\n return\n }\n\n this.#currentResult = nextResult\n\n // Determine which callbacks to trigger\n const defaultNotifyOptions: NotifyOptions = {}\n\n const shouldNotifyListeners = (): boolean => {\n if (!prevResult) {\n return true\n }\n\n const { notifyOnChangeProps } = this.options\n const notifyOnChangePropsValue =\n typeof notifyOnChangeProps === 'function'\n ? notifyOnChangeProps()\n : notifyOnChangeProps\n\n if (\n notifyOnChangePropsValue === 'all' ||\n (!notifyOnChangePropsValue && !this.#trackedProps.size)\n ) {\n return true\n }\n\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps,\n )\n\n if (this.options.throwOnError) {\n includedProps.add('error')\n }\n\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key as keyof QueryObserverResult\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey]\n\n return changed && includedProps.has(typedKey)\n })\n }\n\n if (notifyOptions?.listeners !== false && shouldNotifyListeners()) {\n defaultNotifyOptions.listeners = true\n }\n\n this.#notify({ ...defaultNotifyOptions, ...notifyOptions })\n }\n\n #updateQuery(): void {\n const query = this.#client.getQueryCache().build(this.#client, this.options)\n\n if (query === this.#currentQuery) {\n return\n }\n\n const prevQuery = this.#currentQuery as\n | Query\n | undefined\n this.#currentQuery = query\n this.#currentQueryInitialState = query.state\n\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this)\n query.addObserver(this)\n }\n }\n\n onQueryUpdate(): void {\n this.updateResult()\n\n if (this.hasListeners()) {\n this.#updateTimers()\n }\n }\n\n #notify(notifyOptions: NotifyOptions): void {\n notifyManager.batch(() => {\n // First, trigger the listeners\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult)\n })\n }\n\n // Then the cache listeners\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: 'observerResultsUpdated',\n })\n })\n }\n}\n\nfunction shouldLoadOnMount(\n query: Query,\n options: QueryObserverOptions,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.state.data === undefined &&\n !(query.state.status === 'error' && options.retryOnMount === false)\n )\n}\n\nfunction shouldFetchOnMount(\n query: Query,\n options: QueryObserverOptions,\n): boolean {\n return (\n shouldLoadOnMount(query, options) ||\n (query.state.data !== undefined &&\n shouldFetchOn(query, options, options.refetchOnMount))\n )\n}\n\nfunction shouldFetchOn(\n query: Query,\n options: QueryObserverOptions,\n field: (typeof options)['refetchOnMount'] &\n (typeof options)['refetchOnWindowFocus'] &\n (typeof options)['refetchOnReconnect'],\n) {\n if (resolveEnabled(options.enabled, query) !== false) {\n const value = typeof field === 'function' ? field(query) : field\n\n return value === 'always' || (value !== false && isStale(query, options))\n }\n return false\n}\n\nfunction shouldFetchOptionally(\n query: Query,\n prevQuery: Query,\n options: QueryObserverOptions,\n prevOptions: QueryObserverOptions,\n): boolean {\n return (\n (query !== prevQuery ||\n resolveEnabled(prevOptions.enabled, query) === false) &&\n (!options.suspense || query.state.status !== 'error') &&\n isStale(query, options)\n )\n}\n\nfunction isStale(\n query: Query,\n options: QueryObserverOptions,\n): boolean {\n return (\n resolveEnabled(options.enabled, query) !== false &&\n query.isStaleByTime(resolveStaleTime(options.staleTime, query))\n )\n}\n\n// this function would decide if we will update the observer's 'current'\n// properties after an optimistic reading via getOptimisticResult\nfunction shouldAssignObserverCurrentProperties<\n TQueryFnData = unknown,\n TError = unknown,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n observer: QueryObserver,\n optimisticResult: QueryObserverResult,\n) {\n // if the newly created result isn't what the observer is holding as current,\n // then we'll need to update the properties as well\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true\n }\n\n // basically, just keep previous properties if nothing changed\n return false\n}\n", "import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\nfunction difference(array1: Array, array2: Array): Array {\n return array1.filter((x) => !array2.includes(x))\n}\n\nfunction replaceAt(array: Array, index: number, value: T): Array {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: Array) => void\n\ntype CombineFn = (\n result: Array,\n) => TCombinedResult\n\nexport interface QueriesObserverOptions<\n TCombinedResult = Array,\n> {\n combine?: CombineFn\n}\n\nexport class QueriesObserver<\n TCombinedResult = Array,\n> extends Subscribable {\n #client: QueryClient\n #result!: Array\n #queries: Array\n #options?: QueriesObserverOptions\n #observers: Array\n #combinedResult?: TCombinedResult\n #lastCombine?: CombineFn\n #lastResult?: Array\n\n constructor(\n client: QueryClient,\n queries: Array>,\n options?: QueriesObserverOptions,\n ) {\n super()\n\n this.#client = client\n this.#options = options\n this.#queries = []\n this.#observers = []\n this.#result = []\n\n this.setQueries(queries)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: Array,\n options?: QueriesObserverOptions,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\n\n notifyManager.batch(() => {\n const prevObservers = this.#observers\n\n const newObserverMatches = this.#findMatchingObservers(this.#queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.#observers = newObservers\n this.#result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n\n this.#notify()\n })\n }\n\n getCurrentResult(): Array {\n return this.#result\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: Array,\n combine: CombineFn | undefined,\n ): [\n rawResult: Array,\n combineResult: (r?: Array) => TCombinedResult,\n trackResult: () => Array,\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: Array) => {\n return this.#combineResult(r ?? result, combine)\n },\n () => {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult, (accessedProp) => {\n // track property on all observers to ensure proper (synchronized) tracking (#7000)\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp)\n })\n })\n : observerResult\n })\n },\n ]\n }\n\n #combineResult(\n input: Array,\n combine: CombineFn | undefined,\n ): TCombinedResult {\n if (combine) {\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input),\n )\n }\n\n return this.#combinedResult\n }\n return input as any\n }\n\n #findMatchingObservers(\n queries: Array,\n ): Array {\n const prevObserversMap = new Map(\n this.#observers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const observers: Array = []\n\n queries.forEach((options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match) {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: match,\n })\n } else {\n const existingObserver = this.#observers.find(\n (o) => o.options.queryHash === defaultedOptions.queryHash,\n )\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer:\n existingObserver ??\n new QueryObserver(this.#client, defaultedOptions),\n })\n }\n })\n\n return observers.sort((a, b) => {\n return (\n queries.findIndex(\n (q) => q.queryHash === a.defaultedQueryOptions.queryHash,\n ) -\n queries.findIndex(\n (q) => q.queryHash === b.defaultedQueryOptions.queryHash,\n )\n )\n })\n }\n\n #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result)\n this.#notify()\n }\n }\n\n #notify(): void {\n if (this.hasListeners()) {\n const previousResult = this.#combinedResult\n const newResult = this.#combineResult(\n this.#result,\n this.#options?.combine,\n )\n\n if (previousResult !== newResult) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result)\n })\n })\n }\n }\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n", "import { QueryObserver } from './queryObserver'\nimport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior,\n} from './infiniteQueryBehavior'\nimport type { Subscribable } from './subscribable'\nimport type {\n DefaultError,\n DefaultedInfiniteQueryObserverOptions,\n FetchNextPageOptions,\n FetchPreviousPageOptions,\n InfiniteData,\n InfiniteQueryObserverBaseResult,\n InfiniteQueryObserverOptions,\n InfiniteQueryObserverResult,\n QueryKey,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport type { Query } from './query'\n\ntype InfiniteQueryObserverListener = (\n result: InfiniteQueryObserverResult,\n) => void\n\nexport class InfiniteQueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData,\n TQueryKey\n> {\n // Type override\n subscribe!: Subscribable<\n InfiniteQueryObserverListener\n >['subscribe']\n\n // Type override\n getCurrentResult!: ReplaceReturnType<\n QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData,\n TQueryKey\n >['getCurrentResult'],\n InfiniteQueryObserverResult\n >\n\n // Type override\n protected fetch!: ReplaceReturnType<\n QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData,\n TQueryKey\n >['fetch'],\n Promise>\n >\n\n constructor(\n client: QueryClient,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ) {\n super(client, options)\n }\n\n protected bindMethods(): void {\n super.bindMethods()\n this.fetchNextPage = this.fetchNextPage.bind(this)\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this)\n }\n\n setOptions(\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n super.setOptions(\n {\n ...options,\n behavior: infiniteQueryBehavior(),\n },\n notifyOptions,\n )\n }\n\n getOptimisticResult(\n options: DefaultedInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult {\n options.behavior = infiniteQueryBehavior()\n return super.getOptimisticResult(options) as InfiniteQueryObserverResult<\n TData,\n TError\n >\n }\n\n fetchNextPage(\n options?: FetchNextPageOptions,\n ): Promise> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'forward' },\n },\n })\n }\n\n fetchPreviousPage(\n options?: FetchPreviousPageOptions,\n ): Promise> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'backward' },\n },\n })\n }\n\n protected createResult(\n query: Query<\n TQueryFnData,\n TError,\n InfiniteData,\n TQueryKey\n >,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult {\n const { state } = query\n const parentResult = super.createResult(query, options)\n\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult\n const fetchDirection = state.fetchMeta?.fetchMore?.direction\n\n const isFetchNextPageError = isError && fetchDirection === 'forward'\n const isFetchingNextPage = isFetching && fetchDirection === 'forward'\n\n const isFetchPreviousPageError = isError && fetchDirection === 'backward'\n const isFetchingPreviousPage = isFetching && fetchDirection === 'backward'\n\n const result: InfiniteQueryObserverBaseResult = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError:\n isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching:\n isRefetching && !isFetchingNextPage && !isFetchingPreviousPage,\n }\n\n return result as InfiniteQueryObserverResult\n }\n}\n\ntype ReplaceReturnType<\n TFunction extends (...args: Array) => unknown,\n TReturn,\n> = (...args: Parameters) => TReturn\n", "import { getDefaultState } from './mutation'\nimport { notifyManager } from './notifyManager'\nimport { Subscribable } from './subscribable'\nimport { hashKey, shallowEqualObjects } from './utils'\nimport type { QueryClient } from './queryClient'\nimport type {\n DefaultError,\n MutateOptions,\n MutationObserverOptions,\n MutationObserverResult,\n} from './types'\nimport type { Action, Mutation } from './mutation'\n\n// TYPES\n\ntype MutationObserverListener = (\n result: MutationObserverResult,\n) => void\n\n// CLASS\n\nexport class MutationObserver<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Subscribable<\n MutationObserverListener\n> {\n options!: MutationObserverOptions\n\n #client: QueryClient\n #currentResult: MutationObserverResult =\n undefined!\n #currentMutation?: Mutation\n #mutateOptions?: MutateOptions\n\n constructor(\n client: QueryClient,\n options: MutationObserverOptions,\n ) {\n super()\n\n this.#client = client\n this.setOptions(options)\n this.bindMethods()\n this.#updateResult()\n }\n\n protected bindMethods(): void {\n this.mutate = this.mutate.bind(this)\n this.reset = this.reset.bind(this)\n }\n\n setOptions(\n options: MutationObserverOptions,\n ) {\n const prevOptions = this.options as\n | MutationObserverOptions\n | undefined\n this.options = this.#client.defaultMutationOptions(options)\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: 'observerOptionsUpdated',\n mutation: this.#currentMutation,\n observer: this,\n })\n }\n\n if (\n prevOptions?.mutationKey &&\n this.options.mutationKey &&\n hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)\n ) {\n this.reset()\n } else if (this.#currentMutation?.state.status === 'pending') {\n this.#currentMutation.setOptions(this.options)\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this)\n }\n }\n\n onMutationUpdate(action: Action): void {\n this.#updateResult()\n\n this.#notify(action)\n }\n\n getCurrentResult(): MutationObserverResult<\n TData,\n TError,\n TVariables,\n TContext\n > {\n return this.#currentResult\n }\n\n reset(): void {\n // reset needs to remove the observer from the mutation because there is no way to \"get it back\"\n // another mutate call will yield a new mutation!\n this.#currentMutation?.removeObserver(this)\n this.#currentMutation = undefined\n this.#updateResult()\n this.#notify()\n }\n\n mutate(\n variables: TVariables,\n options?: MutateOptions,\n ): Promise {\n this.#mutateOptions = options\n\n this.#currentMutation?.removeObserver(this)\n\n this.#currentMutation = this.#client\n .getMutationCache()\n .build(this.#client, this.options)\n\n this.#currentMutation.addObserver(this)\n\n return this.#currentMutation.execute(variables)\n }\n\n #updateResult(): void {\n const state =\n this.#currentMutation?.state ??\n getDefaultState()\n\n this.#currentResult = {\n ...state,\n isPending: state.status === 'pending',\n isSuccess: state.status === 'success',\n isError: state.status === 'error',\n isIdle: state.status === 'idle',\n mutate: this.mutate,\n reset: this.reset,\n } as MutationObserverResult\n }\n\n #notify(action?: Action): void {\n notifyManager.batch(() => {\n // First trigger the mutate callbacks\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables!\n const context = this.#currentResult.context\n\n if (action?.type === 'success') {\n this.#mutateOptions.onSuccess?.(action.data, variables, context!)\n this.#mutateOptions.onSettled?.(action.data, null, variables, context)\n } else if (action?.type === 'error') {\n this.#mutateOptions.onError?.(action.error, variables, context)\n this.#mutateOptions.onSettled?.(\n undefined,\n action.error,\n variables,\n context,\n )\n }\n }\n\n // Then trigger the listeners\n this.listeners.forEach((listener) => {\n listener(this.#currentResult)\n })\n })\n }\n}\n", "import type {\n DefaultError,\n MutationKey,\n MutationMeta,\n MutationOptions,\n MutationScope,\n QueryKey,\n QueryMeta,\n QueryOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\ntype TransformerFn = (data: any) => any\nfunction defaultTransformerFn(data: any): any {\n return data\n}\n\nexport interface DehydrateOptions {\n serializeData?: TransformerFn\n shouldDehydrateMutation?: (mutation: Mutation) => boolean\n shouldDehydrateQuery?: (query: Query) => boolean\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n deserializeData?: TransformerFn\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n meta?: MutationMeta\n scope?: MutationScope\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n promise?: Promise\n meta?: QueryMeta\n}\n\nexport interface DehydratedState {\n mutations: Array\n queries: Array\n}\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...(mutation.options.scope && { scope: mutation.options.scope }),\n ...(mutation.meta && { meta: mutation.meta }),\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(\n query: Query,\n serializeData: TransformerFn,\n): DehydratedQuery {\n return {\n state: {\n ...query.state,\n ...(query.state.data !== undefined && {\n data: serializeData(query.state.data),\n }),\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...(query.state.status === 'pending' && {\n promise: query.promise?.then(serializeData).catch((error) => {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`,\n )\n }\n return Promise.reject(new Error('redacted'))\n }),\n }),\n ...(query.meta && { meta: query.meta }),\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const filterMutation =\n options.shouldDehydrateMutation ??\n client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ??\n defaultShouldDehydrateMutation\n\n const mutations = client\n .getMutationCache()\n .getAll()\n .flatMap((mutation) =>\n filterMutation(mutation) ? [dehydrateMutation(mutation)] : [],\n )\n\n const filterQuery =\n options.shouldDehydrateQuery ??\n client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ??\n defaultShouldDehydrateQuery\n\n const serializeData =\n options.serializeData ??\n client.getDefaultOptions().dehydrate?.serializeData ??\n defaultTransformerFn\n\n const queries = client\n .getQueryCache()\n .getAll()\n .flatMap((query) =>\n filterQuery(query) ? [dehydrateQuery(query, serializeData)] : [],\n )\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n const deserializeData =\n options?.defaultOptions?.deserializeData ??\n client.getDefaultOptions().hydrate?.deserializeData ??\n defaultTransformerFn\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions,\n },\n state,\n )\n })\n\n queries.forEach(({ queryKey, state, queryHash, meta, promise }) => {\n let query = queryCache.get(queryHash)\n\n const data =\n state.data === undefined ? state.data : deserializeData(state.data)\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < state.dataUpdatedAt) {\n // omit fetchStatus from dehydrated state\n // so that query stays in its current fetchStatus\n const { fetchStatus: _ignored, ...serializedState } = state\n query.setState({\n ...serializedState,\n data,\n })\n }\n } else {\n // Restore query\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta,\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: 'idle',\n },\n )\n }\n\n if (promise) {\n // Note: `Promise.resolve` required cause\n // RSC transformed promises are not thenable\n const initialPromise = Promise.resolve(promise).then(deserializeData)\n\n // this doesn't actually fetch - it just creates a retryer\n // which will re-use the passed `initialPromise`\n void query.fetch(undefined, { initialPromise })\n }\n })\n}\n", "'use client'\nimport * as React from 'react'\n\nimport {\n QueriesObserver,\n QueryObserver,\n notifyManager,\n} from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useIsRestoring } from './isRestoring'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch,\n} from './suspense'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefaultError,\n OmitKeyof,\n QueriesObserverOptions,\n QueriesPlaceholderDataFunction,\n QueryClient,\n QueryFunction,\n QueryKey,\n QueryObserverOptions,\n ThrowOnError,\n} from '@tanstack/query-core'\n\n// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.\n// `placeholderData` function always gets undefined passed\ntype UseQueryOptionsForUseQueries<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<\n UseQueryOptions,\n 'placeholderData'\n> & {\n placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction\n}\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\n// Widen the type of the symbol to enable type inference even if skipToken is not immutable.\ntype SkipTokenForUseQueries = symbol\n\ntype GetUseQueryOptionsForUseQueries =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseQueryOptionsForUseQueries\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseQueryOptionsForUseQueries\n : T extends { data: infer TData; error?: infer TError }\n ? UseQueryOptionsForUseQueries\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseQueryOptionsForUseQueries\n : T extends [infer TQueryFnData, infer TError]\n ? UseQueryOptionsForUseQueries\n : T extends [infer TQueryFnData]\n ? UseQueryOptionsForUseQueries\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? UseQueryOptionsForUseQueries<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError,\n unknown extends TData ? TQueryFnData : TData,\n TQueryKey\n >\n : // Fallback\n UseQueryOptionsForUseQueries\n\n// A defined initialData setting should return a DefinedUseQueryResult rather than UseQueryResult\ntype GetDefinedOrUndefinedQueryResult = T extends {\n initialData?: infer TInitialData\n}\n ? unknown extends TInitialData\n ? UseQueryResult\n : TInitialData extends TData\n ? DefinedUseQueryResult\n : TInitialData extends () => infer TInitialDataResult\n ? unknown extends TInitialDataResult\n ? UseQueryResult\n : TInitialDataResult extends TData\n ? DefinedUseQueryResult\n : UseQueryResult\n : UseQueryResult\n : UseQueryResult\n\ntype GetUseQueryResult =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? GetDefinedOrUndefinedQueryResult\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? GetDefinedOrUndefinedQueryResult\n : T extends { data: infer TData; error?: infer TError }\n ? GetDefinedOrUndefinedQueryResult\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? GetDefinedOrUndefinedQueryResult\n : T extends [infer TQueryFnData, infer TError]\n ? GetDefinedOrUndefinedQueryResult\n : T extends [infer TQueryFnData]\n ? GetDefinedOrUndefinedQueryResult\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? GetDefinedOrUndefinedQueryResult<\n T,\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : // Fallback\n UseQueryResult\n\n/**\n * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type QueriesOptions<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQueryOptionsForUseQueries]\n : T extends [infer Head, ...infer Tails]\n ? QueriesOptions<\n [...Tails],\n [...TResults, GetUseQueryOptionsForUseQueries],\n [...TDepth, 1]\n >\n : ReadonlyArray extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends Array<\n UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n UseQueryOptionsForUseQueries<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n >\n : // Fallback\n Array\n\n/**\n * QueriesResults reducer recursively maps type param to results\n */\nexport type QueriesResults<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseQueryResult]\n : T extends [infer Head, ...infer Tails]\n ? QueriesResults<\n [...Tails],\n [...TResults, GetUseQueryResult],\n [...TDepth, 1]\n >\n : T extends Array<\n UseQueryOptionsForUseQueries<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >\n >\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n Array<\n UseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n >\n : // Fallback\n Array\n\nexport function useQueries<\n T extends Array,\n TCombinedResult = QueriesResults,\n>(\n {\n queries,\n ...options\n }: {\n queries: readonly [...QueriesOptions]\n combine?: (result: QueriesResults) => TCombinedResult\n },\n queryClient?: QueryClient,\n): TCombinedResult {\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n\n const defaultedQueries = React.useMemo(\n () =>\n queries.map((opts) => {\n const defaultedOptions = client.defaultQueryOptions(\n opts as QueryObserverOptions,\n )\n\n // Make sure the results are already in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n return defaultedOptions\n }),\n [queries, client, isRestoring],\n )\n\n defaultedQueries.forEach((query) => {\n ensureSuspenseTimers(query)\n ensurePreventErrorBoundaryRetry(query, errorResetBoundary)\n })\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new QueriesObserver(\n client,\n defaultedQueries,\n options as QueriesObserverOptions,\n ),\n )\n\n const [optimisticResult, getCombinedResult, trackResult] =\n observer.getOptimisticResult(\n defaultedQueries,\n (options as QueriesObserverOptions).combine,\n )\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setQueries(\n defaultedQueries,\n options as QueriesObserverOptions,\n {\n listeners: false,\n },\n )\n }, [defaultedQueries, options, observer])\n\n const shouldAtLeastOneSuspend = optimisticResult.some((result, index) =>\n shouldSuspend(defaultedQueries[index], result),\n )\n\n const suspensePromises = shouldAtLeastOneSuspend\n ? optimisticResult.flatMap((result, index) => {\n const opts = defaultedQueries[index]\n\n if (opts) {\n const queryObserver = new QueryObserver(client, opts)\n if (shouldSuspend(opts, result)) {\n return fetchOptimistic(opts, queryObserver, errorResetBoundary)\n } else if (willFetch(result, isRestoring)) {\n void fetchOptimistic(opts, queryObserver, errorResetBoundary)\n }\n }\n return []\n })\n : []\n\n if (suspensePromises.length > 0) {\n throw Promise.all(suspensePromises)\n }\n const firstSingleResultWhichShouldThrow = optimisticResult.find(\n (result, index) => {\n const query = defaultedQueries[index]\n return (\n query &&\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: query.throwOnError,\n query: client.getQueryCache().get(query.queryHash),\n })\n )\n },\n )\n\n if (firstSingleResultWhichShouldThrow?.error) {\n throw firstSingleResultWhichShouldThrow.error\n }\n\n return getCombinedResult(trackResult())\n}\n", "'use client'\nimport * as React from 'react'\n\nimport type { QueryClient } from '@tanstack/query-core'\n\nexport const QueryClientContext = React.createContext(\n undefined,\n)\n\nexport const useQueryClient = (queryClient?: QueryClient) => {\n const client = React.useContext(QueryClientContext)\n\n if (queryClient) {\n return queryClient\n }\n\n if (!client) {\n throw new Error('No QueryClient set, use QueryClientProvider to set one')\n }\n\n return client\n}\n\nexport type QueryClientProviderProps = {\n client: QueryClient\n children?: React.ReactNode\n}\n\nexport const QueryClientProvider = ({\n client,\n children,\n}: QueryClientProviderProps): React.JSX.Element => {\n React.useEffect(() => {\n client.mount()\n return () => {\n client.unmount()\n }\n }, [client])\n\n return (\n \n {children}\n \n )\n}\n", "'use client'\nimport * as React from 'react'\n\nconst IsRestoringContext = React.createContext(false)\n\nexport const useIsRestoring = () => React.useContext(IsRestoringContext)\nexport const IsRestoringProvider = IsRestoringContext.Provider\n", "'use client'\nimport * as React from 'react'\n\n// CONTEXT\nexport type QueryErrorResetFunction = () => void\nexport type QueryErrorIsResetFunction = () => boolean\nexport type QueryErrorClearResetFunction = () => void\n\nexport interface QueryErrorResetBoundaryValue {\n clearReset: QueryErrorClearResetFunction\n isReset: QueryErrorIsResetFunction\n reset: QueryErrorResetFunction\n}\n\nfunction createValue(): QueryErrorResetBoundaryValue {\n let isReset = false\n return {\n clearReset: () => {\n isReset = false\n },\n reset: () => {\n isReset = true\n },\n isReset: () => {\n return isReset\n },\n }\n}\n\nconst QueryErrorResetBoundaryContext = React.createContext(createValue())\n\n// HOOK\n\nexport const useQueryErrorResetBoundary = () =>\n React.useContext(QueryErrorResetBoundaryContext)\n\n// COMPONENT\n\nexport type QueryErrorResetBoundaryFunction = (\n value: QueryErrorResetBoundaryValue,\n) => React.ReactNode\n\nexport interface QueryErrorResetBoundaryProps {\n children: QueryErrorResetBoundaryFunction | React.ReactNode\n}\n\nexport const QueryErrorResetBoundary = ({\n children,\n}: QueryErrorResetBoundaryProps) => {\n const [value] = React.useState(() => createValue())\n return (\n \n {typeof children === 'function' ? children(value) : children}\n \n )\n}\n", "'use client'\nimport * as React from 'react'\nimport { shouldThrowError } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserverResult,\n ThrowOnError,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const ensurePreventErrorBoundaryRetry = <\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n if (options.suspense || options.throwOnError) {\n // Prevent retrying failed query if the error boundary has not been reset yet\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false\n }\n }\n}\n\nexport const useClearResetErrorBoundary = (\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset()\n }, [errorResetBoundary])\n}\n\nexport const getHasError = <\n TData,\n TError,\n TQueryFnData,\n TQueryData,\n TQueryKey extends QueryKey,\n>({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n}: {\n result: QueryObserverResult\n errorResetBoundary: QueryErrorResetBoundaryValue\n throwOnError: ThrowOnError\n query: Query | undefined\n}) => {\n return (\n result.isError &&\n !errorResetBoundary.isReset() &&\n !result.isFetching &&\n query &&\n shouldThrowError(throwOnError, [result.error, query])\n )\n}\n", "export function shouldThrowError) => boolean>(\n throwError: boolean | T | undefined,\n params: Parameters,\n): boolean {\n // Allow throwError function to override throwing behavior on a per-error basis\n if (typeof throwError === 'function') {\n return throwError(...params)\n }\n\n return !!throwError\n}\n\nexport function noop() {}\n", "import type {\n DefaultError,\n DefaultedQueryObserverOptions,\n Query,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'\n\nexport const defaultThrowOnError = <\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n _error: TError,\n query: Query,\n) => query.state.data === undefined\n\nexport const ensureSuspenseTimers = (\n defaultedOptions: DefaultedQueryObserverOptions,\n) => {\n if (defaultedOptions.suspense) {\n // Always set stale time when using suspense to prevent\n // fetching again when directly mounting after suspending\n if (defaultedOptions.staleTime === undefined) {\n defaultedOptions.staleTime = 1000\n }\n if (typeof defaultedOptions.gcTime === 'number') {\n defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, 1000)\n }\n }\n}\n\nexport const willFetch = (\n result: QueryObserverResult,\n isRestoring: boolean,\n) => result.isLoading && result.isFetching && !isRestoring\n\nexport const shouldSuspend = (\n defaultedOptions:\n | DefaultedQueryObserverOptions\n | undefined,\n result: QueryObserverResult,\n) => defaultedOptions?.suspense && result.isPending\n\nexport const fetchOptimistic = <\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n defaultedOptions: DefaultedQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n observer: QueryObserver,\n errorResetBoundary: QueryErrorResetBoundaryValue,\n) =>\n observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset()\n })\n", "'use client'\nimport * as React from 'react'\n\nimport { isServer, notifyManager } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch,\n} from './suspense'\nimport { noop } from './utils'\nimport type {\n QueryClient,\n QueryKey,\n QueryObserver,\n QueryObserverResult,\n} from '@tanstack/query-core'\nimport type { UseBaseQueryOptions } from './types'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n queryClient?: QueryClient,\n): QueryObserverResult {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options !== 'object' || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object',\n )\n }\n }\n\n const client = useQueryClient(queryClient)\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = client.defaultQueryOptions(options)\n\n ;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.(\n defaultedOptions,\n )\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n ensureSuspenseTimers(defaultedOptions)\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n // this needs to be invoked before creating the Observer because that can create a cache entry\n const isNewCacheEntry = !client\n .getQueryCache()\n .get(defaultedOptions.queryHash)\n\n const [observer] = React.useState(\n () =>\n new Observer(\n client,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query: client\n .getQueryCache()\n .get<\n TQueryFnData,\n TError,\n TQueryData,\n TQueryKey\n >(defaultedOptions.queryHash),\n })\n ) {\n throw result.error\n }\n\n ;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.(\n defaultedOptions,\n result,\n )\n\n if (\n defaultedOptions.experimental_prefetchInRender &&\n !isServer &&\n willFetch(result, isRestoring)\n ) {\n const promise = isNewCacheEntry\n ? // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n : // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n client.getQueryCache().get(defaultedOptions.queryHash)?.promise\n\n promise?.catch(noop).finally(() => {\n // `.updateResult()` will trigger `.#currentThenable` to finalize\n observer.updateResult()\n })\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n", "'use client'\nimport { QueryObserver } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'\nimport type {\n DefinedUseQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataOptions,\n UndefinedInitialDataOptions,\n} from './queryOptions'\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions,\n queryClient?: QueryClient,\n): DefinedUseQueryResult\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions,\n queryClient?: QueryClient,\n): UseQueryResult\n\nexport function useQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseQueryOptions,\n queryClient?: QueryClient,\n): UseQueryResult\n\nexport function useQuery(options: UseQueryOptions, queryClient?: QueryClient) {\n return useBaseQuery(options, QueryObserver, queryClient)\n}\n", "'use client'\nimport { QueryObserver, skipToken } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport { defaultThrowOnError } from './suspense'\nimport type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'\nimport type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'\n\nexport function useSuspenseQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UseSuspenseQueryOptions,\n queryClient?: QueryClient,\n): UseSuspenseQueryResult {\n if (process.env.NODE_ENV !== 'production') {\n if ((options.queryFn as any) === skipToken) {\n console.error('skipToken is not allowed for useSuspenseQuery')\n }\n }\n\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n placeholderData: undefined,\n },\n QueryObserver,\n queryClient,\n ) as UseSuspenseQueryResult\n}\n", "'use client'\nimport { InfiniteQueryObserver, skipToken } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport { defaultThrowOnError } from './suspense'\nimport type {\n DefaultError,\n InfiniteData,\n InfiniteQueryObserverSuccessResult,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport type {\n UseSuspenseInfiniteQueryOptions,\n UseSuspenseInfiniteQueryResult,\n} from './types'\n\nexport function useSuspenseInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UseSuspenseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseSuspenseInfiniteQueryResult {\n if (process.env.NODE_ENV !== 'production') {\n if ((options.queryFn as any) === skipToken) {\n console.error('skipToken is not allowed for useSuspenseInfiniteQuery')\n }\n }\n\n return useBaseQuery(\n {\n ...options,\n enabled: true,\n suspense: true,\n throwOnError: defaultThrowOnError,\n },\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n ) as InfiniteQueryObserverSuccessResult\n}\n", "'use client'\nimport { skipToken } from '@tanstack/query-core'\nimport { useQueries } from './useQueries'\nimport { defaultThrowOnError } from './suspense'\nimport type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'\nimport type {\n DefaultError,\n QueryClient,\n QueryFunction,\n ThrowOnError,\n} from '@tanstack/query-core'\n\n// Avoid TS depth-limit error in case of large array literal\ntype MAXIMUM_DEPTH = 20\n\n// Widen the type of the symbol to enable type inference even if skipToken is not immutable.\ntype SkipTokenForUseQueries = symbol\n\ntype GetUseSuspenseQueryOptions =\n // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }\n T extends {\n queryFnData: infer TQueryFnData\n error?: infer TError\n data: infer TData\n }\n ? UseSuspenseQueryOptions\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseSuspenseQueryOptions\n : T extends { data: infer TData; error?: infer TError }\n ? UseSuspenseQueryOptions\n : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]\n T extends [infer TQueryFnData, infer TError, infer TData]\n ? UseSuspenseQueryOptions\n : T extends [infer TQueryFnData, infer TError]\n ? UseSuspenseQueryOptions\n : T extends [infer TQueryFnData]\n ? UseSuspenseQueryOptions\n : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey\n >\n : T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryOptions<\n TQueryFnData,\n TError,\n TQueryFnData,\n TQueryKey\n >\n : // Fallback\n UseSuspenseQueryOptions\n\ntype GetUseSuspenseQueryResult =\n // Part 1: responsible for mapping explicit type parameter to function result, if object\n T extends { queryFnData: any; error?: infer TError; data: infer TData }\n ? UseSuspenseQueryResult\n : T extends { queryFnData: infer TQueryFnData; error?: infer TError }\n ? UseSuspenseQueryResult\n : T extends { data: infer TData; error?: infer TError }\n ? UseSuspenseQueryResult\n : // Part 2: responsible for mapping explicit type parameter to function result, if tuple\n T extends [any, infer TError, infer TData]\n ? UseSuspenseQueryResult\n : T extends [infer TQueryFnData, infer TError]\n ? UseSuspenseQueryResult\n : T extends [infer TQueryFnData]\n ? UseSuspenseQueryResult\n : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided\n T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n select?: (data: any) => infer TData\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n : T extends {\n queryFn?:\n | QueryFunction\n | SkipTokenForUseQueries\n throwOnError?: ThrowOnError\n }\n ? UseSuspenseQueryResult<\n TQueryFnData,\n unknown extends TError ? DefaultError : TError\n >\n : // Fallback\n UseSuspenseQueryResult\n\n/**\n * SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param\n */\nexport type SuspenseQueriesOptions<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseSuspenseQueryOptions]\n : T extends [infer Head, ...infer Tails]\n ? SuspenseQueriesOptions<\n [...Tails],\n [...TResults, GetUseSuspenseQueryOptions],\n [...TDepth, 1]\n >\n : Array extends T\n ? T\n : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!\n // use this to infer the param types in the case of Array.map() argument\n T extends Array<\n UseSuspenseQueryOptions<\n infer TQueryFnData,\n infer TError,\n infer TData,\n infer TQueryKey\n >\n >\n ? Array<\n UseSuspenseQueryOptions\n >\n : // Fallback\n Array\n\n/**\n * SuspenseQueriesResults reducer recursively maps type param to results\n */\nexport type SuspenseQueriesResults<\n T extends Array,\n TResults extends Array = [],\n TDepth extends ReadonlyArray = [],\n> = TDepth['length'] extends MAXIMUM_DEPTH\n ? Array\n : T extends []\n ? []\n : T extends [infer Head]\n ? [...TResults, GetUseSuspenseQueryResult]\n : T extends [infer Head, ...infer Tails]\n ? SuspenseQueriesResults<\n [...Tails],\n [...TResults, GetUseSuspenseQueryResult],\n [...TDepth, 1]\n >\n : T extends Array<\n UseSuspenseQueryOptions<\n infer TQueryFnData,\n infer TError,\n infer TData,\n any\n >\n >\n ? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results\n Array<\n UseSuspenseQueryResult<\n unknown extends TData ? TQueryFnData : TData,\n unknown extends TError ? DefaultError : TError\n >\n >\n : // Fallback\n Array\n\nexport function useSuspenseQueries<\n T extends Array,\n TCombinedResult = SuspenseQueriesResults,\n>(\n options: {\n queries: readonly [...SuspenseQueriesOptions]\n combine?: (result: SuspenseQueriesResults) => TCombinedResult\n },\n queryClient?: QueryClient,\n): TCombinedResult {\n return useQueries(\n {\n ...options,\n queries: options.queries.map((query) => {\n if (process.env.NODE_ENV !== 'production') {\n if (query.queryFn === skipToken) {\n console.error('skipToken is not allowed for useSuspenseQueries')\n }\n }\n\n return {\n ...query,\n suspense: true,\n throwOnError: defaultThrowOnError,\n enabled: true,\n placeholderData: undefined,\n }\n }),\n } as any,\n queryClient,\n )\n}\n", "import { useQueryClient } from './QueryClientProvider'\nimport type {\n DefaultError,\n FetchQueryOptions,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\n\nexport function usePrefetchQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: FetchQueryOptions,\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n\n if (!client.getQueryState(options.queryKey)) {\n client.prefetchQuery(options)\n }\n}\n", "import { useQueryClient } from './QueryClientProvider'\nimport type {\n DefaultError,\n FetchInfiniteQueryOptions,\n QueryClient,\n QueryKey,\n} from '@tanstack/query-core'\n\nexport function usePrefetchInfiniteQuery<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: FetchInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n) {\n const client = useQueryClient(queryClient)\n\n if (!client.getQueryState(options.queryKey)) {\n client.prefetchInfiniteQuery(options)\n }\n}\n", "import type {\n DataTag,\n DefaultError,\n InitialDataFunction,\n OmitKeyof,\n QueryKey,\n SkipToken,\n} from '@tanstack/query-core'\nimport type { UseQueryOptions } from './types'\n\nexport type UndefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions & {\n initialData?:\n | undefined\n | InitialDataFunction>\n | NonUndefinedGuard\n}\n\nexport type UnusedSkipTokenOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = OmitKeyof<\n UseQueryOptions,\n 'queryFn'\n> & {\n queryFn?: Exclude<\n UseQueryOptions['queryFn'],\n SkipToken | undefined\n >\n}\n\ntype NonUndefinedGuard = T extends undefined ? never : T\n\nexport type DefinedInitialDataOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions & {\n initialData:\n | NonUndefinedGuard\n | (() => NonUndefinedGuard)\n}\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: DefinedInitialDataOptions,\n): DefinedInitialDataOptions & {\n queryKey: DataTag\n}\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UnusedSkipTokenOptions,\n): UnusedSkipTokenOptions & {\n queryKey: DataTag\n}\n\nexport function queryOptions<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n options: UndefinedInitialDataOptions,\n): UndefinedInitialDataOptions & {\n queryKey: DataTag\n}\n\nexport function queryOptions(options: unknown) {\n return options\n}\n", "import type {\n DataTag,\n DefaultError,\n InfiniteData,\n InitialDataFunction,\n OmitKeyof,\n QueryKey,\n SkipToken,\n} from '@tanstack/query-core'\nimport type { UseInfiniteQueryOptions } from './types'\n\nexport type UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData?:\n | undefined\n | NonUndefinedGuard>\n | InitialDataFunction<\n NonUndefinedGuard>\n >\n}\n\nexport type UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = OmitKeyof<\n UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n 'queryFn'\n> & {\n queryFn?: Exclude<\n UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >['queryFn'],\n SkipToken | undefined\n >\n}\n\ntype NonUndefinedGuard = T extends undefined ? never : T\n\nexport type DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> = UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n> & {\n initialData:\n | NonUndefinedGuard>\n | (() => NonUndefinedGuard>)\n | undefined\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag>\n}\n\nexport function infiniteQueryOptions<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n): UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n> & {\n queryKey: DataTag>\n}\n\nexport function infiniteQueryOptions(options: unknown) {\n return options\n}\n", "/* eslint-disable react-compiler/react-compiler */\n\n'use client'\nimport * as React from 'react'\n\nimport { hydrate } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n DehydratedState,\n HydrateOptions,\n OmitKeyof,\n QueryClient,\n} from '@tanstack/query-core'\n\nexport interface HydrationBoundaryProps {\n state?: unknown\n options?: OmitKeyof & {\n defaultOptions?: OmitKeyof<\n Exclude,\n 'mutations'\n >\n }\n children?: React.ReactNode\n queryClient?: QueryClient\n}\n\nexport const HydrationBoundary = ({\n children,\n options = {},\n state,\n queryClient,\n}: HydrationBoundaryProps) => {\n const client = useQueryClient(queryClient)\n const [hydrationQueue, setHydrationQueue] = React.useState<\n DehydratedState['queries'] | undefined\n >()\n\n const optionsRef = React.useRef(options)\n optionsRef.current = options\n\n // This useMemo is for performance reasons only, everything inside it _must_\n // be safe to run in every render and code here should be read as \"in render\".\n //\n // This code needs to happen during the render phase, because after initial\n // SSR, hydration needs to happen _before_ children render. Also, if hydrating\n // during a transition, we want to hydrate as much as is safe in render so\n // we can prerender as much as possible.\n //\n // For any queries that already exist in the cache, we want to hold back on\n // hydrating until _after_ the render phase. The reason for this is that during\n // transitions, we don't want the existing queries and observers to update to\n // the new data on the current page, only _after_ the transition is committed.\n // If the transition is aborted, we will have hydrated any _new_ queries, but\n // we throw away the fresh data for any existing ones to avoid unexpectedly\n // updating the UI.\n React.useMemo(() => {\n if (state) {\n if (typeof state !== 'object') {\n return\n }\n\n const queryCache = client.getQueryCache()\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (state as DehydratedState).queries || []\n\n const newQueries: DehydratedState['queries'] = []\n const existingQueries: DehydratedState['queries'] = []\n for (const dehydratedQuery of queries) {\n const existingQuery = queryCache.get(dehydratedQuery.queryHash)\n\n if (!existingQuery) {\n newQueries.push(dehydratedQuery)\n } else {\n const hydrationIsNewer =\n dehydratedQuery.state.dataUpdatedAt >\n existingQuery.state.dataUpdatedAt\n const queryAlreadyQueued = hydrationQueue?.find(\n (query) => query.queryHash === dehydratedQuery.queryHash,\n )\n\n if (\n hydrationIsNewer &&\n (!queryAlreadyQueued ||\n dehydratedQuery.state.dataUpdatedAt >\n queryAlreadyQueued.state.dataUpdatedAt)\n ) {\n existingQueries.push(dehydratedQuery)\n }\n }\n }\n\n if (newQueries.length > 0) {\n // It's actually fine to call this with queries/state that already exists\n // in the cache, or is older. hydrate() is idempotent for queries.\n hydrate(client, { queries: newQueries }, optionsRef.current)\n }\n if (existingQueries.length > 0) {\n setHydrationQueue((prev) =>\n prev ? [...prev, ...existingQueries] : existingQueries,\n )\n }\n }\n }, [client, hydrationQueue, state])\n\n React.useEffect(() => {\n if (hydrationQueue) {\n hydrate(client, { queries: hydrationQueue }, optionsRef.current)\n setHydrationQueue(undefined)\n }\n }, [client, hydrationQueue])\n\n return children as React.ReactElement\n}\n", "'use client'\nimport * as React from 'react'\nimport { notifyManager } from '@tanstack/query-core'\n\nimport { useQueryClient } from './QueryClientProvider'\nimport type { QueryClient, QueryFilters } from '@tanstack/query-core'\n\nexport function useIsFetching(\n filters?: QueryFilters,\n queryClient?: QueryClient,\n): number {\n const client = useQueryClient(queryClient)\n const queryCache = client.getQueryCache()\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),\n [queryCache],\n ),\n () => client.isFetching(filters),\n () => client.isFetching(filters),\n )\n}\n", "/* eslint-disable react-compiler/react-compiler */\n\n'use client'\nimport * as React from 'react'\n\nimport { notifyManager, replaceEqualDeep } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport type {\n Mutation,\n MutationCache,\n MutationFilters,\n MutationState,\n QueryClient,\n} from '@tanstack/query-core'\n\nexport function useIsMutating(\n filters?: MutationFilters,\n queryClient?: QueryClient,\n): number {\n const client = useQueryClient(queryClient)\n return useMutationState(\n { filters: { ...filters, status: 'pending' } },\n client,\n ).length\n}\n\ntype MutationStateOptions = {\n filters?: MutationFilters\n select?: (mutation: Mutation) => TResult\n}\n\nfunction getResult(\n mutationCache: MutationCache,\n options: MutationStateOptions,\n): Array {\n return mutationCache\n .findAll(options.filters)\n .map(\n (mutation): TResult =>\n (options.select ? options.select(mutation) : mutation.state) as TResult,\n )\n}\n\nexport function useMutationState(\n options: MutationStateOptions = {},\n queryClient?: QueryClient,\n): Array {\n const mutationCache = useQueryClient(queryClient).getMutationCache()\n const optionsRef = React.useRef(options)\n const result = React.useRef>(null)\n if (!result.current) {\n result.current = getResult(mutationCache, options)\n }\n\n React.useEffect(() => {\n optionsRef.current = options\n })\n\n return React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n mutationCache.subscribe(() => {\n const nextResult = replaceEqualDeep(\n result.current,\n getResult(mutationCache, optionsRef.current),\n )\n if (result.current !== nextResult) {\n result.current = nextResult\n notifyManager.schedule(onStoreChange)\n }\n }),\n [mutationCache],\n ),\n () => result.current,\n () => result.current,\n )!\n}\n", "'use client'\nimport * as React from 'react'\nimport { MutationObserver, notifyManager } from '@tanstack/query-core'\nimport { useQueryClient } from './QueryClientProvider'\nimport { noop, shouldThrowError } from './utils'\nimport type {\n UseMutateFunction,\n UseMutationOptions,\n UseMutationResult,\n} from './types'\nimport type { DefaultError, QueryClient } from '@tanstack/query-core'\n\n// HOOK\n\nexport function useMutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n>(\n options: UseMutationOptions,\n queryClient?: QueryClient,\n): UseMutationResult {\n const client = useQueryClient(queryClient)\n\n const [observer] = React.useState(\n () =>\n new MutationObserver(\n client,\n options,\n ),\n )\n\n React.useEffect(() => {\n observer.setOptions(options)\n }, [observer, options])\n\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n const mutate = React.useCallback<\n UseMutateFunction\n >(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop)\n },\n [observer],\n )\n\n if (\n result.error &&\n shouldThrowError(observer.options.throwOnError, [result.error])\n ) {\n throw result.error\n }\n\n return { ...result, mutate, mutateAsync: result.mutate }\n}\n", "'use client'\nimport { InfiniteQueryObserver } from '@tanstack/query-core'\nimport { useBaseQuery } from './useBaseQuery'\nimport type {\n DefaultError,\n InfiniteData,\n QueryClient,\n QueryKey,\n QueryObserver,\n} from '@tanstack/query-core'\nimport type {\n DefinedUseInfiniteQueryResult,\n UseInfiniteQueryOptions,\n UseInfiniteQueryResult,\n} from './types'\nimport type {\n DefinedInitialDataInfiniteOptions,\n UndefinedInitialDataInfiniteOptions,\n} from './infiniteQueryOptions'\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): DefinedUseInfiniteQueryResult\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseInfiniteQueryResult\n\nexport function useInfiniteQuery<\n TQueryFnData,\n TError = DefaultError,\n TData = InfiniteData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n>(\n options: UseInfiniteQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey,\n TPageParam\n >,\n queryClient?: QueryClient,\n): UseInfiniteQueryResult\n\nexport function useInfiniteQuery(\n options: UseInfiniteQueryOptions,\n queryClient?: QueryClient,\n) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver as typeof QueryObserver,\n queryClient,\n )\n}\n"], + "mappings": "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", + "names": ["_a", "_a", "_cleanup", "_setup", "_a", "_a", "_a", "_b", "_c", "_a", "_a", "_retryer", "getDefaultState", "dispatch_fn", "_a", "_a", "_b", "_a", "_mutationCache", "_defaultOptions", "_a", "_a", "_client", "_queries", "_observers", "notify_fn", "_a", "_a", "_client", "_currentResult", "notify_fn", "getDefaultState", "_a", "_b", "React", "React", "React", "import_jsx_runtime", "React", "noop", "React", "_a", "noop", "React", "React", "React", "React", "noop"] } diff --git a/node_modules/.vite/deps/BrowserPerformanceMeasurement-PMMEVXX3.js b/node_modules/.vite/deps/BrowserPerformanceMeasurement-PMMEVXX3.js new file mode 100644 index 00000000..2e514dd7 --- /dev/null +++ b/node_modules/.vite/deps/BrowserPerformanceMeasurement-PMMEVXX3.js @@ -0,0 +1,8 @@ +import { + BrowserPerformanceMeasurement +} from "./chunk-6NKFQNRI.js"; +import "./chunk-4MBMRILA.js"; +export { + BrowserPerformanceMeasurement +}; +//# sourceMappingURL=BrowserPerformanceMeasurement-PMMEVXX3.js.map diff --git a/node_modules/.vite/deps/BrowserPerformanceMeasurement-PMMEVXX3.js.map b/node_modules/.vite/deps/BrowserPerformanceMeasurement-PMMEVXX3.js.map new file mode 100644 index 00000000..98652118 --- /dev/null +++ b/node_modules/.vite/deps/BrowserPerformanceMeasurement-PMMEVXX3.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] +} diff --git a/node_modules/.vite/deps/_metadata.json b/node_modules/.vite/deps/_metadata.json index a737afc3..8c072abc 100644 --- a/node_modules/.vite/deps/_metadata.json +++ b/node_modules/.vite/deps/_metadata.json @@ -1,268 +1,310 @@ { - "hash": "f95c15b4", + "hash": "e59da265", "configHash": "10f19e67", - "lockfileHash": "b78ce9e4", - "browserHash": "47e30824", + "lockfileHash": "e009e63b", + "browserHash": "c707363c", "optimized": { "react/jsx-dev-runtime": { "src": "../../react/jsx-dev-runtime.js", "file": "react_jsx-dev-runtime.js", - "fileHash": "47a50e1e", + "fileHash": "296b0556", "needsInterop": true }, + "@azure/msal-browser": { + "src": "../../@azure/msal-browser/dist/index.mjs", + "file": "@azure_msal-browser.js", + "fileHash": "ea1ecf85", + "needsInterop": false + }, + "@azure/msal-react": { + "src": "../../@azure/msal-react/dist/index.js", + "file": "@azure_msal-react.js", + "fileHash": "7b5c3f7c", + "needsInterop": false + }, "@hookform/resolvers/zod": { "src": "../../@hookform/resolvers/zod/dist/zod.mjs", "file": "@hookform_resolvers_zod.js", - "fileHash": "db727ac9", - "needsInterop": false - }, - "@radix-ui/react-collapsible": { - "src": "../../@radix-ui/react-collapsible/dist/index.mjs", - "file": "@radix-ui_react-collapsible.js", - "fileHash": "74ffe2a8", - "needsInterop": false - }, - "@radix-ui/react-dropdown-menu": { - "src": "../../@radix-ui/react-dropdown-menu/dist/index.mjs", - "file": "@radix-ui_react-dropdown-menu.js", - "fileHash": "f8c23128", - "needsInterop": false - }, - "@radix-ui/react-label": { - "src": "../../@radix-ui/react-label/dist/index.mjs", - "file": "@radix-ui_react-label.js", - "fileHash": "283cca3f", - "needsInterop": false - }, - "@radix-ui/react-scroll-area": { - "src": "../../@radix-ui/react-scroll-area/dist/index.mjs", - "file": "@radix-ui_react-scroll-area.js", - "fileHash": "a237c3eb", - "needsInterop": false - }, - "@radix-ui/react-select": { - "src": "../../@radix-ui/react-select/dist/index.mjs", - "file": "@radix-ui_react-select.js", - "fileHash": "7f84a6c4", - "needsInterop": false - }, - "@radix-ui/react-slider": { - "src": "../../@radix-ui/react-slider/dist/index.mjs", - "file": "@radix-ui_react-slider.js", - "fileHash": "d7fadad5", - "needsInterop": false - }, - "@radix-ui/react-slot": { - "src": "../../@radix-ui/react-slot/dist/index.mjs", - "file": "@radix-ui_react-slot.js", - "fileHash": "36ae901f", - "needsInterop": false - }, - "@radix-ui/react-switch": { - "src": "../../@radix-ui/react-switch/dist/index.mjs", - "file": "@radix-ui_react-switch.js", - "fileHash": "d35f3f4c", - "needsInterop": false - }, - "@radix-ui/react-tabs": { - "src": "../../@radix-ui/react-tabs/dist/index.mjs", - "file": "@radix-ui_react-tabs.js", - "fileHash": "be3767b4", - "needsInterop": false - }, - "@radix-ui/react-toast": { - "src": "../../@radix-ui/react-toast/dist/index.mjs", - "file": "@radix-ui_react-toast.js", - "fileHash": "49507f30", - "needsInterop": false - }, - "@radix-ui/react-tooltip": { - "src": "../../@radix-ui/react-tooltip/dist/index.mjs", - "file": "@radix-ui_react-tooltip.js", - "fileHash": "9480d305", - "needsInterop": false - }, - "@tanstack/react-query": { - "src": "../../@tanstack/react-query/build/modern/index.js", - "file": "@tanstack_react-query.js", - "fileHash": "d65c5e94", - "needsInterop": false - }, - "axios": { - "src": "../../axios/index.js", - "file": "axios.js", - "fileHash": "caf4de2c", - "needsInterop": false - }, - "class-variance-authority": { - "src": "../../class-variance-authority/dist/index.mjs", - "file": "class-variance-authority.js", - "fileHash": "6bb1128b", - "needsInterop": false - }, - "clsx": { - "src": "../../clsx/dist/clsx.mjs", - "file": "clsx.js", - "fileHash": "a76e044b", - "needsInterop": false - }, - "lucide-react": { - "src": "../../lucide-react/dist/esm/lucide-react.js", - "file": "lucide-react.js", - "fileHash": "63cc8549", - "needsInterop": false - }, - "next-themes": { - "src": "../../next-themes/dist/index.mjs", - "file": "next-themes.js", - "fileHash": "cdbfe2d9", - "needsInterop": false - }, - "react": { - "src": "../../react/index.js", - "file": "react.js", - "fileHash": "7af2d18c", - "needsInterop": true - }, - "react-dom/client": { - "src": "../../react-dom/client.js", - "file": "react-dom_client.js", - "fileHash": "a198a0f8", - "needsInterop": true - }, - "react-hook-form": { - "src": "../../react-hook-form/dist/index.esm.mjs", - "file": "react-hook-form.js", - "fileHash": "edc4deec", - "needsInterop": false - }, - "react-router-dom": { - "src": "../../react-router-dom/dist/index.js", - "file": "react-router-dom.js", - "fileHash": "be629cd4", - "needsInterop": false - }, - "react/jsx-runtime": { - "src": "../../react/jsx-runtime.js", - "file": "react_jsx-runtime.js", - "fileHash": "1181e0c9", - "needsInterop": true - }, - "recharts": { - "src": "../../recharts/es6/index.js", - "file": "recharts.js", - "fileHash": "59ae00ff", - "needsInterop": false - }, - "sonner": { - "src": "../../sonner/dist/index.mjs", - "file": "sonner.js", - "fileHash": "920a8bae", - "needsInterop": false - }, - "tailwind-merge": { - "src": "../../tailwind-merge/dist/bundle-mjs.mjs", - "file": "tailwind-merge.js", - "fileHash": "92e0356f", - "needsInterop": false - }, - "zod": { - "src": "../../zod/lib/index.mjs", - "file": "zod.js", - "fileHash": "15ec9263", - "needsInterop": false - }, - "@radix-ui/react-checkbox": { - "src": "../../@radix-ui/react-checkbox/dist/index.mjs", - "file": "@radix-ui_react-checkbox.js", - "fileHash": "e38ed247", + "fileHash": "795721ac", "needsInterop": false }, "@radix-ui/react-alert-dialog": { "src": "../../@radix-ui/react-alert-dialog/dist/index.mjs", "file": "@radix-ui_react-alert-dialog.js", - "fileHash": "3121dbdc", + "fileHash": "5b04cd70", "needsInterop": false }, - "@radix-ui/react-progress": { - "src": "../../@radix-ui/react-progress/dist/index.mjs", - "file": "@radix-ui_react-progress.js", - "fileHash": "e73bcb88", + "@radix-ui/react-checkbox": { + "src": "../../@radix-ui/react-checkbox/dist/index.mjs", + "file": "@radix-ui_react-checkbox.js", + "fileHash": "4a42771f", "needsInterop": false }, - "@radix-ui/react-radio-group": { - "src": "../../@radix-ui/react-radio-group/dist/index.mjs", - "file": "@radix-ui_react-radio-group.js", - "fileHash": "2075210c", + "@radix-ui/react-collapsible": { + "src": "../../@radix-ui/react-collapsible/dist/index.mjs", + "file": "@radix-ui_react-collapsible.js", + "fileHash": "b42d79cf", "needsInterop": false }, "@radix-ui/react-dialog": { "src": "../../@radix-ui/react-dialog/dist/index.mjs", "file": "@radix-ui_react-dialog.js", - "fileHash": "827d17ce", + "fileHash": "6bf546e3", "needsInterop": false }, - "@radix-ui/react-separator": { - "src": "../../@radix-ui/react-separator/dist/index.mjs", - "file": "@radix-ui_react-separator.js", - "fileHash": "163f46fd", + "@radix-ui/react-dropdown-menu": { + "src": "../../@radix-ui/react-dropdown-menu/dist/index.mjs", + "file": "@radix-ui_react-dropdown-menu.js", + "fileHash": "92df7f98", + "needsInterop": false + }, + "@radix-ui/react-label": { + "src": "../../@radix-ui/react-label/dist/index.mjs", + "file": "@radix-ui_react-label.js", + "fileHash": "18ac9357", + "needsInterop": false + }, + "@radix-ui/react-progress": { + "src": "../../@radix-ui/react-progress/dist/index.mjs", + "file": "@radix-ui_react-progress.js", + "fileHash": "2a3bf401", + "needsInterop": false + }, + "@radix-ui/react-radio-group": { + "src": "../../@radix-ui/react-radio-group/dist/index.mjs", + "file": "@radix-ui_react-radio-group.js", + "fileHash": "803e61ef", + "needsInterop": false + }, + "@radix-ui/react-scroll-area": { + "src": "../../@radix-ui/react-scroll-area/dist/index.mjs", + "file": "@radix-ui_react-scroll-area.js", + "fileHash": "b660bc14", + "needsInterop": false + }, + "@radix-ui/react-select": { + "src": "../../@radix-ui/react-select/dist/index.mjs", + "file": "@radix-ui_react-select.js", + "fileHash": "d251ec97", + "needsInterop": false + }, + "@radix-ui/react-slider": { + "src": "../../@radix-ui/react-slider/dist/index.mjs", + "file": "@radix-ui_react-slider.js", + "fileHash": "f6777095", + "needsInterop": false + }, + "@radix-ui/react-slot": { + "src": "../../@radix-ui/react-slot/dist/index.mjs", + "file": "@radix-ui_react-slot.js", + "fileHash": "b815ff54", + "needsInterop": false + }, + "@radix-ui/react-switch": { + "src": "../../@radix-ui/react-switch/dist/index.mjs", + "file": "@radix-ui_react-switch.js", + "fileHash": "09a04cf4", + "needsInterop": false + }, + "@radix-ui/react-tabs": { + "src": "../../@radix-ui/react-tabs/dist/index.mjs", + "file": "@radix-ui_react-tabs.js", + "fileHash": "efabe3ee", + "needsInterop": false + }, + "@radix-ui/react-tooltip": { + "src": "../../@radix-ui/react-tooltip/dist/index.mjs", + "file": "@radix-ui_react-tooltip.js", + "fileHash": "5b52a878", + "needsInterop": false + }, + "@tanstack/react-query": { + "src": "../../@tanstack/react-query/build/modern/index.js", + "file": "@tanstack_react-query.js", + "fileHash": "b60d1fb8", + "needsInterop": false + }, + "axios": { + "src": "../../axios/index.js", + "file": "axios.js", + "fileHash": "c3bfc41e", + "needsInterop": false + }, + "class-variance-authority": { + "src": "../../class-variance-authority/dist/index.mjs", + "file": "class-variance-authority.js", + "fileHash": "ba7742dd", + "needsInterop": false + }, + "clsx": { + "src": "../../clsx/dist/clsx.mjs", + "file": "clsx.js", + "fileHash": "160c5f02", + "needsInterop": false + }, + "lucide-react": { + "src": "../../lucide-react/dist/esm/lucide-react.js", + "file": "lucide-react.js", + "fileHash": "ac5a7dee", + "needsInterop": false + }, + "next-themes": { + "src": "../../next-themes/dist/index.mjs", + "file": "next-themes.js", + "fileHash": "41959e8d", + "needsInterop": false + }, + "react": { + "src": "../../react/index.js", + "file": "react.js", + "fileHash": "adaa75de", + "needsInterop": true + }, + "react-dom/client": { + "src": "../../react-dom/client.js", + "file": "react-dom_client.js", + "fileHash": "bb00e8d4", + "needsInterop": true + }, + "react-hook-form": { + "src": "../../react-hook-form/dist/index.esm.mjs", + "file": "react-hook-form.js", + "fileHash": "028caf80", + "needsInterop": false + }, + "react-router-dom": { + "src": "../../react-router-dom/dist/index.js", + "file": "react-router-dom.js", + "fileHash": "df78eb1d", + "needsInterop": false + }, + "react/jsx-runtime": { + "src": "../../react/jsx-runtime.js", + "file": "react_jsx-runtime.js", + "fileHash": "7855ecb0", + "needsInterop": true + }, + "recharts": { + "src": "../../recharts/es6/index.js", + "file": "recharts.js", + "fileHash": "76cdee86", + "needsInterop": false + }, + "socket.io-client": { + "src": "../../socket.io-client/build/esm/index.js", + "file": "socket__io-client.js", + "fileHash": "a8cc505b", + "needsInterop": false + }, + "sonner": { + "src": "../../sonner/dist/index.mjs", + "file": "sonner.js", + "fileHash": "cdc966e5", + "needsInterop": false + }, + "tailwind-merge": { + "src": "../../tailwind-merge/dist/bundle-mjs.mjs", + "file": "tailwind-merge.js", + "fileHash": "f3a03256", + "needsInterop": false + }, + "zod": { + "src": "../../zod/lib/index.mjs", + "file": "zod.js", + "fileHash": "e6e5f53a", + "needsInterop": false + }, + "@dnd-kit/sortable": { + "src": "../../@dnd-kit/sortable/dist/sortable.esm.js", + "file": "@dnd-kit_sortable.js", + "fileHash": "fd349137", + "needsInterop": false + }, + "@dnd-kit/utilities": { + "src": "../../@dnd-kit/utilities/dist/utilities.esm.js", + "file": "@dnd-kit_utilities.js", + "fileHash": "0853e712", + "needsInterop": false + }, + "@dnd-kit/core": { + "src": "../../@dnd-kit/core/dist/core.esm.js", + "file": "@dnd-kit_core.js", + "fileHash": "30017f7d", + "needsInterop": false + }, + "@dnd-kit/modifiers": { + "src": "../../@dnd-kit/modifiers/dist/modifiers.esm.js", + "file": "@dnd-kit_modifiers.js", + "fileHash": "6d5a7f21", "needsInterop": false } }, "chunks": { + "chunk-V27RRWZQ": { + "file": "chunk-V27RRWZQ.js" + }, + "BrowserPerformanceMeasurement-PMMEVXX3": { + "file": "BrowserPerformanceMeasurement-PMMEVXX3.js" + }, "chunk-U7P2NEEE": { "file": "chunk-U7P2NEEE.js" }, - "chunk-DDW565K2": { - "file": "chunk-DDW565K2.js" - }, - "chunk-JV5O627A": { - "file": "chunk-JV5O627A.js" - }, - "chunk-3GV3KT4M": { - "file": "chunk-3GV3KT4M.js" - }, - "chunk-HQGJFDI6": { - "file": "chunk-HQGJFDI6.js" - }, - "chunk-QYKEMCE4": { - "file": "chunk-QYKEMCE4.js" - }, - "chunk-ENGL2KVA": { - "file": "chunk-ENGL2KVA.js" - }, - "chunk-6SPNF6KQ": { - "file": "chunk-6SPNF6KQ.js" - }, - "chunk-6UE7W7QM": { - "file": "chunk-6UE7W7QM.js" - }, - "chunk-MR3TNHRB": { - "file": "chunk-MR3TNHRB.js" - }, - "chunk-J3JCCWF4": { - "file": "chunk-J3JCCWF4.js" - }, - "chunk-5I6CIHEW": { - "file": "chunk-5I6CIHEW.js" - }, - "chunk-H4VE5LV5": { - "file": "chunk-H4VE5LV5.js" - }, "chunk-6ZMM2PAV": { "file": "chunk-6ZMM2PAV.js" }, + "chunk-3GV3KT4M": { + "file": "chunk-3GV3KT4M.js" + }, + "chunk-BAWHRVBE": { + "file": "chunk-BAWHRVBE.js" + }, + "chunk-Z3MJAI5R": { + "file": "chunk-Z3MJAI5R.js" + }, + "chunk-6NKFQNRI": { + "file": "chunk-6NKFQNRI.js" + }, + "chunk-RBMNEPGM": { + "file": "chunk-RBMNEPGM.js" + }, + "chunk-DDW565K2": { + "file": "chunk-DDW565K2.js" + }, + "chunk-HD7ZGEUK": { + "file": "chunk-HD7ZGEUK.js" + }, + "chunk-HUHORXLV": { + "file": "chunk-HUHORXLV.js" + }, + "chunk-5ZUJRVG4": { + "file": "chunk-5ZUJRVG4.js" + }, + "chunk-6SPNF6KQ": { + "file": "chunk-6SPNF6KQ.js" + }, "chunk-O2UA4OQB": { "file": "chunk-O2UA4OQB.js" }, - "chunk-TZDCYJOT": { - "file": "chunk-TZDCYJOT.js" + "chunk-AJMUNMLZ": { + "file": "chunk-AJMUNMLZ.js" }, - "chunk-OAV3HHWW": { - "file": "chunk-OAV3HHWW.js" + "chunk-3PHEZ67U": { + "file": "chunk-3PHEZ67U.js" }, - "chunk-SZRZRZSM": { - "file": "chunk-SZRZRZSM.js" + "chunk-CSR2432P": { + "file": "chunk-CSR2432P.js" + }, + "chunk-ZZUMGTHG": { + "file": "chunk-ZZUMGTHG.js" + }, + "chunk-MZLEVI2I": { + "file": "chunk-MZLEVI2I.js" + }, + "chunk-I6MWER2B": { + "file": "chunk-I6MWER2B.js" + }, + "chunk-ILYE3ZA7": { + "file": "chunk-ILYE3ZA7.js" }, "chunk-H55D7VYG": { "file": "chunk-H55D7VYG.js" diff --git a/node_modules/.vite/deps/chunk-QYKEMCE4.js b/node_modules/.vite/deps/chunk-3PHEZ67U.js similarity index 62% rename from node_modules/.vite/deps/chunk-QYKEMCE4.js rename to node_modules/.vite/deps/chunk-3PHEZ67U.js index 06eb6a0d..0678d538 100644 --- a/node_modules/.vite/deps/chunk-QYKEMCE4.js +++ b/node_modules/.vite/deps/chunk-3PHEZ67U.js @@ -1,6 +1,6 @@ import { useCallbackRef -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -222,6 +222,758 @@ function removeLinks(items) { return items.filter((item) => item.tagName !== "A"); } +// node_modules/@radix-ui/react-focus-guards/dist/index.mjs +var React2 = __toESM(require_react(), 1); +var count = 0; +function useFocusGuards() { + React2.useEffect(() => { + const edgeGuards = document.querySelectorAll("[data-radix-focus-guard]"); + document.body.insertAdjacentElement("afterbegin", edgeGuards[0] ?? createFocusGuard()); + document.body.insertAdjacentElement("beforeend", edgeGuards[1] ?? createFocusGuard()); + count++; + return () => { + if (count === 1) { + document.querySelectorAll("[data-radix-focus-guard]").forEach((node) => node.remove()); + } + count--; + }; + }, []); +} +function createFocusGuard() { + const element = document.createElement("span"); + element.setAttribute("data-radix-focus-guard", ""); + element.tabIndex = 0; + element.style.outline = "none"; + element.style.opacity = "0"; + element.style.position = "fixed"; + element.style.pointerEvents = "none"; + return element; +} + +// node_modules/tslib/tslib.es6.mjs +var __assign = function() { + __assign = Object.assign || function __assign2(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +} + +// node_modules/react-remove-scroll/dist/es2015/Combination.js +var React11 = __toESM(require_react()); + +// node_modules/react-remove-scroll/dist/es2015/UI.js +var React7 = __toESM(require_react()); + +// node_modules/react-remove-scroll-bar/dist/es2015/constants.js +var zeroRightClassName = "right-scroll-bar-position"; +var fullWidthClassName = "width-before-scroll-bar"; +var noScrollbarsClassName = "with-scroll-bars-hidden"; +var removedBarSizeVariable = "--removed-body-scroll-bar-size"; + +// node_modules/use-callback-ref/dist/es2015/assignRef.js +function assignRef(ref, value) { + if (typeof ref === "function") { + ref(value); + } else if (ref) { + ref.current = value; + } + return ref; +} + +// node_modules/use-callback-ref/dist/es2015/useRef.js +var import_react = __toESM(require_react()); +function useCallbackRef2(initialValue, callback) { + var ref = (0, import_react.useState)(function() { + return { + // value + value: initialValue, + // last callback + callback, + // "memoized" public interface + facade: { + get current() { + return ref.value; + }, + set current(value) { + var last = ref.value; + if (last !== value) { + ref.value = value; + ref.callback(value, last); + } + } + } + }; + })[0]; + ref.callback = callback; + return ref.facade; +} + +// node_modules/use-callback-ref/dist/es2015/useMergeRef.js +var React3 = __toESM(require_react()); +var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React3.useLayoutEffect : React3.useEffect; +var currentValues = /* @__PURE__ */ new WeakMap(); +function useMergeRefs(refs, defaultValue) { + var callbackRef = useCallbackRef2(defaultValue || null, function(newValue) { + return refs.forEach(function(ref) { + return assignRef(ref, newValue); + }); + }); + useIsomorphicLayoutEffect(function() { + var oldValue = currentValues.get(callbackRef); + if (oldValue) { + var prevRefs_1 = new Set(oldValue); + var nextRefs_1 = new Set(refs); + var current_1 = callbackRef.current; + prevRefs_1.forEach(function(ref) { + if (!nextRefs_1.has(ref)) { + assignRef(ref, null); + } + }); + nextRefs_1.forEach(function(ref) { + if (!prevRefs_1.has(ref)) { + assignRef(ref, current_1); + } + }); + } + currentValues.set(callbackRef, refs); + }, [refs]); + return callbackRef; +} + +// node_modules/use-sidecar/dist/es2015/hoc.js +var React4 = __toESM(require_react()); + +// node_modules/use-sidecar/dist/es2015/hook.js +var import_react2 = __toESM(require_react()); + +// node_modules/use-sidecar/dist/es2015/medium.js +function ItoI(a) { + return a; +} +function innerCreateMedium(defaults, middleware) { + if (middleware === void 0) { + middleware = ItoI; + } + var buffer = []; + var assigned = false; + var medium = { + read: function() { + if (assigned) { + throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`."); + } + if (buffer.length) { + return buffer[buffer.length - 1]; + } + return defaults; + }, + useMedium: function(data) { + var item = middleware(data, assigned); + buffer.push(item); + return function() { + buffer = buffer.filter(function(x) { + return x !== item; + }); + }; + }, + assignSyncMedium: function(cb) { + assigned = true; + while (buffer.length) { + var cbs = buffer; + buffer = []; + cbs.forEach(cb); + } + buffer = { + push: function(x) { + return cb(x); + }, + filter: function() { + return buffer; + } + }; + }, + assignMedium: function(cb) { + assigned = true; + var pendingQueue = []; + if (buffer.length) { + var cbs = buffer; + buffer = []; + cbs.forEach(cb); + pendingQueue = buffer; + } + var executeQueue = function() { + var cbs2 = pendingQueue; + pendingQueue = []; + cbs2.forEach(cb); + }; + var cycle = function() { + return Promise.resolve().then(executeQueue); + }; + cycle(); + buffer = { + push: function(x) { + pendingQueue.push(x); + cycle(); + }, + filter: function(filter) { + pendingQueue = pendingQueue.filter(filter); + return buffer; + } + }; + } + }; + return medium; +} +function createSidecarMedium(options) { + if (options === void 0) { + options = {}; + } + var medium = innerCreateMedium(null); + medium.options = __assign({ async: true, ssr: false }, options); + return medium; +} + +// node_modules/use-sidecar/dist/es2015/renderProp.js +var React5 = __toESM(require_react()); +var import_react3 = __toESM(require_react()); + +// node_modules/use-sidecar/dist/es2015/exports.js +var React6 = __toESM(require_react()); +var SideCar = function(_a) { + var sideCar = _a.sideCar, rest = __rest(_a, ["sideCar"]); + if (!sideCar) { + throw new Error("Sidecar: please provide `sideCar` property to import the right car"); + } + var Target = sideCar.read(); + if (!Target) { + throw new Error("Sidecar medium not found"); + } + return React6.createElement(Target, __assign({}, rest)); +}; +SideCar.isSideCarExport = true; +function exportSidecar(medium, exported) { + medium.useMedium(exported); + return SideCar; +} + +// node_modules/react-remove-scroll/dist/es2015/medium.js +var effectCar = createSidecarMedium(); + +// node_modules/react-remove-scroll/dist/es2015/UI.js +var nothing = function() { + return; +}; +var RemoveScroll = React7.forwardRef(function(props, parentRef) { + var ref = React7.useRef(null); + var _a = React7.useState({ + onScrollCapture: nothing, + onWheelCapture: nothing, + onTouchMoveCapture: nothing + }), callbacks = _a[0], setCallbacks = _a[1]; + var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]); + var SideCar2 = sideCar; + var containerRef = useMergeRefs([ref, parentRef]); + var containerProps = __assign(__assign({}, rest), callbacks); + return React7.createElement( + React7.Fragment, + null, + enabled && React7.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }), + forwardProps ? React7.cloneElement(React7.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React7.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children) + ); +}); +RemoveScroll.defaultProps = { + enabled: true, + removeScrollBar: true, + inert: false +}; +RemoveScroll.classNames = { + fullWidth: fullWidthClassName, + zeroRight: zeroRightClassName +}; + +// node_modules/react-remove-scroll/dist/es2015/SideEffect.js +var React10 = __toESM(require_react()); + +// node_modules/react-remove-scroll-bar/dist/es2015/component.js +var React9 = __toESM(require_react()); + +// node_modules/react-style-singleton/dist/es2015/hook.js +var React8 = __toESM(require_react()); + +// node_modules/get-nonce/dist/es2015/index.js +var currentNonce; +var getNonce = function() { + if (currentNonce) { + return currentNonce; + } + if (typeof __webpack_nonce__ !== "undefined") { + return __webpack_nonce__; + } + return void 0; +}; + +// node_modules/react-style-singleton/dist/es2015/singleton.js +function makeStyleTag() { + if (!document) + return null; + var tag = document.createElement("style"); + tag.type = "text/css"; + var nonce = getNonce(); + if (nonce) { + tag.setAttribute("nonce", nonce); + } + return tag; +} +function injectStyles(tag, css) { + if (tag.styleSheet) { + tag.styleSheet.cssText = css; + } else { + tag.appendChild(document.createTextNode(css)); + } +} +function insertStyleTag(tag) { + var head = document.head || document.getElementsByTagName("head")[0]; + head.appendChild(tag); +} +var stylesheetSingleton = function() { + var counter = 0; + var stylesheet = null; + return { + add: function(style) { + if (counter == 0) { + if (stylesheet = makeStyleTag()) { + injectStyles(stylesheet, style); + insertStyleTag(stylesheet); + } + } + counter++; + }, + remove: function() { + counter--; + if (!counter && stylesheet) { + stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet); + stylesheet = null; + } + } + }; +}; + +// node_modules/react-style-singleton/dist/es2015/hook.js +var styleHookSingleton = function() { + var sheet = stylesheetSingleton(); + return function(styles, isDynamic) { + React8.useEffect(function() { + sheet.add(styles); + return function() { + sheet.remove(); + }; + }, [styles && isDynamic]); + }; +}; + +// node_modules/react-style-singleton/dist/es2015/component.js +var styleSingleton = function() { + var useStyle = styleHookSingleton(); + var Sheet = function(_a) { + var styles = _a.styles, dynamic = _a.dynamic; + useStyle(styles, dynamic); + return null; + }; + return Sheet; +}; + +// node_modules/react-remove-scroll-bar/dist/es2015/utils.js +var zeroGap = { + left: 0, + top: 0, + right: 0, + gap: 0 +}; +var parse = function(x) { + return parseInt(x || "", 10) || 0; +}; +var getOffset = function(gapMode) { + var cs = window.getComputedStyle(document.body); + var left = cs[gapMode === "padding" ? "paddingLeft" : "marginLeft"]; + var top = cs[gapMode === "padding" ? "paddingTop" : "marginTop"]; + var right = cs[gapMode === "padding" ? "paddingRight" : "marginRight"]; + return [parse(left), parse(top), parse(right)]; +}; +var getGapWidth = function(gapMode) { + if (gapMode === void 0) { + gapMode = "margin"; + } + if (typeof window === "undefined") { + return zeroGap; + } + var offsets = getOffset(gapMode); + var documentWidth = document.documentElement.clientWidth; + var windowWidth = window.innerWidth; + return { + left: offsets[0], + top: offsets[1], + right: offsets[2], + gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]) + }; +}; + +// node_modules/react-remove-scroll-bar/dist/es2015/component.js +var Style = styleSingleton(); +var lockAttribute = "data-scroll-locked"; +var getStyles = function(_a, allowRelative, gapMode, important) { + var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap; + if (gapMode === void 0) { + gapMode = "margin"; + } + return "\n .".concat(noScrollbarsClassName, " {\n overflow: hidden ").concat(important, ";\n padding-right: ").concat(gap, "px ").concat(important, ";\n }\n body[").concat(lockAttribute, "] {\n overflow: hidden ").concat(important, ";\n overscroll-behavior: contain;\n ").concat([ + allowRelative && "position: relative ".concat(important, ";"), + gapMode === "margin" && "\n padding-left: ".concat(left, "px;\n padding-top: ").concat(top, "px;\n padding-right: ").concat(right, "px;\n margin-left:0;\n margin-top:0;\n margin-right: ").concat(gap, "px ").concat(important, ";\n "), + gapMode === "padding" && "padding-right: ".concat(gap, "px ").concat(important, ";") + ].filter(Boolean).join(""), "\n }\n \n .").concat(zeroRightClassName, " {\n right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(fullWidthClassName, " {\n margin-right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(zeroRightClassName, " .").concat(zeroRightClassName, " {\n right: 0 ").concat(important, ";\n }\n \n .").concat(fullWidthClassName, " .").concat(fullWidthClassName, " {\n margin-right: 0 ").concat(important, ";\n }\n \n body[").concat(lockAttribute, "] {\n ").concat(removedBarSizeVariable, ": ").concat(gap, "px;\n }\n"); +}; +var getCurrentUseCounter = function() { + var counter = parseInt(document.body.getAttribute(lockAttribute) || "0", 10); + return isFinite(counter) ? counter : 0; +}; +var useLockAttribute = function() { + React9.useEffect(function() { + document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString()); + return function() { + var newCounter = getCurrentUseCounter() - 1; + if (newCounter <= 0) { + document.body.removeAttribute(lockAttribute); + } else { + document.body.setAttribute(lockAttribute, newCounter.toString()); + } + }; + }, []); +}; +var RemoveScrollBar = function(_a) { + var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? "margin" : _b; + useLockAttribute(); + var gap = React9.useMemo(function() { + return getGapWidth(gapMode); + }, [gapMode]); + return React9.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? "!important" : "") }); +}; + +// node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js +var passiveSupported = false; +if (typeof window !== "undefined") { + try { + options = Object.defineProperty({}, "passive", { + get: function() { + passiveSupported = true; + return true; + } + }); + window.addEventListener("test", options, options); + window.removeEventListener("test", options, options); + } catch (err) { + passiveSupported = false; + } +} +var options; +var nonPassive = passiveSupported ? { passive: false } : false; + +// node_modules/react-remove-scroll/dist/es2015/handleScroll.js +var alwaysContainsScroll = function(node) { + return node.tagName === "TEXTAREA"; +}; +var elementCanBeScrolled = function(node, overflow) { + if (!(node instanceof Element)) { + return false; + } + var styles = window.getComputedStyle(node); + return ( + // not-not-scrollable + styles[overflow] !== "hidden" && // contains scroll inside self + !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === "visible") + ); +}; +var elementCouldBeVScrolled = function(node) { + return elementCanBeScrolled(node, "overflowY"); +}; +var elementCouldBeHScrolled = function(node) { + return elementCanBeScrolled(node, "overflowX"); +}; +var locationCouldBeScrolled = function(axis, node) { + var ownerDocument = node.ownerDocument; + var current = node; + do { + if (typeof ShadowRoot !== "undefined" && current instanceof ShadowRoot) { + current = current.host; + } + var isScrollable = elementCouldBeScrolled(axis, current); + if (isScrollable) { + var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2]; + if (scrollHeight > clientHeight) { + return true; + } + } + current = current.parentNode; + } while (current && current !== ownerDocument.body); + return false; +}; +var getVScrollVariables = function(_a) { + var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight; + return [ + scrollTop, + scrollHeight, + clientHeight + ]; +}; +var getHScrollVariables = function(_a) { + var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth; + return [ + scrollLeft, + scrollWidth, + clientWidth + ]; +}; +var elementCouldBeScrolled = function(axis, node) { + return axis === "v" ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node); +}; +var getScrollVariables = function(axis, node) { + return axis === "v" ? getVScrollVariables(node) : getHScrollVariables(node); +}; +var getDirectionFactor = function(axis, direction) { + return axis === "h" && direction === "rtl" ? -1 : 1; +}; +var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) { + var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction); + var delta = directionFactor * sourceDelta; + var target = event.target; + var targetInLock = endTarget.contains(target); + var shouldCancelScroll = false; + var isDeltaPositive = delta > 0; + var availableScroll = 0; + var availableScrollTop = 0; + do { + var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2]; + var elementScroll = scroll_1 - capacity - directionFactor * position; + if (position || elementScroll) { + if (elementCouldBeScrolled(axis, target)) { + availableScroll += elementScroll; + availableScrollTop += position; + } + } + if (target instanceof ShadowRoot) { + target = target.host; + } else { + target = target.parentNode; + } + } while ( + // portaled content + !targetInLock && target !== document.body || // self content + targetInLock && (endTarget.contains(target) || endTarget === target) + ); + if (isDeltaPositive && (noOverscroll && Math.abs(availableScroll) < 1 || !noOverscroll && delta > availableScroll)) { + shouldCancelScroll = true; + } else if (!isDeltaPositive && (noOverscroll && Math.abs(availableScrollTop) < 1 || !noOverscroll && -delta > availableScrollTop)) { + shouldCancelScroll = true; + } + return shouldCancelScroll; +}; + +// node_modules/react-remove-scroll/dist/es2015/SideEffect.js +var getTouchXY = function(event) { + return "changedTouches" in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0]; +}; +var getDeltaXY = function(event) { + return [event.deltaX, event.deltaY]; +}; +var extractRef = function(ref) { + return ref && "current" in ref ? ref.current : ref; +}; +var deltaCompare = function(x, y) { + return x[0] === y[0] && x[1] === y[1]; +}; +var generateStyle = function(id) { + return "\n .block-interactivity-".concat(id, " {pointer-events: none;}\n .allow-interactivity-").concat(id, " {pointer-events: all;}\n"); +}; +var idCounter = 0; +var lockStack = []; +function RemoveScrollSideCar(props) { + var shouldPreventQueue = React10.useRef([]); + var touchStartRef = React10.useRef([0, 0]); + var activeAxis = React10.useRef(); + var id = React10.useState(idCounter++)[0]; + var Style2 = React10.useState(styleSingleton)[0]; + var lastProps = React10.useRef(props); + React10.useEffect(function() { + lastProps.current = props; + }, [props]); + React10.useEffect(function() { + if (props.inert) { + document.body.classList.add("block-interactivity-".concat(id)); + var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean); + allow_1.forEach(function(el) { + return el.classList.add("allow-interactivity-".concat(id)); + }); + return function() { + document.body.classList.remove("block-interactivity-".concat(id)); + allow_1.forEach(function(el) { + return el.classList.remove("allow-interactivity-".concat(id)); + }); + }; + } + return; + }, [props.inert, props.lockRef.current, props.shards]); + var shouldCancelEvent = React10.useCallback(function(event, parent) { + if ("touches" in event && event.touches.length === 2 || event.type === "wheel" && event.ctrlKey) { + return !lastProps.current.allowPinchZoom; + } + var touch = getTouchXY(event); + var touchStart = touchStartRef.current; + var deltaX = "deltaX" in event ? event.deltaX : touchStart[0] - touch[0]; + var deltaY = "deltaY" in event ? event.deltaY : touchStart[1] - touch[1]; + var currentAxis; + var target = event.target; + var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? "h" : "v"; + if ("touches" in event && moveDirection === "h" && target.type === "range") { + return false; + } + var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); + if (!canBeScrolledInMainDirection) { + return true; + } + if (canBeScrolledInMainDirection) { + currentAxis = moveDirection; + } else { + currentAxis = moveDirection === "v" ? "h" : "v"; + canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target); + } + if (!canBeScrolledInMainDirection) { + return false; + } + if (!activeAxis.current && "changedTouches" in event && (deltaX || deltaY)) { + activeAxis.current = currentAxis; + } + if (!currentAxis) { + return true; + } + var cancelingAxis = activeAxis.current || currentAxis; + return handleScroll(cancelingAxis, parent, event, cancelingAxis === "h" ? deltaX : deltaY, true); + }, []); + var shouldPrevent = React10.useCallback(function(_event) { + var event = _event; + if (!lockStack.length || lockStack[lockStack.length - 1] !== Style2) { + return; + } + var delta = "deltaY" in event ? getDeltaXY(event) : getTouchXY(event); + var sourceEvent = shouldPreventQueue.current.filter(function(e) { + return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); + })[0]; + if (sourceEvent && sourceEvent.should) { + if (event.cancelable) { + event.preventDefault(); + } + return; + } + if (!sourceEvent) { + var shardNodes = (lastProps.current.shards || []).map(extractRef).filter(Boolean).filter(function(node) { + return node.contains(event.target); + }); + var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation; + if (shouldStop) { + if (event.cancelable) { + event.preventDefault(); + } + } + } + }, []); + var shouldCancel = React10.useCallback(function(name, delta, target, should) { + var event = { name, delta, target, should, shadowParent: getOutermostShadowParent(target) }; + shouldPreventQueue.current.push(event); + setTimeout(function() { + shouldPreventQueue.current = shouldPreventQueue.current.filter(function(e) { + return e !== event; + }); + }, 1); + }, []); + var scrollTouchStart = React10.useCallback(function(event) { + touchStartRef.current = getTouchXY(event); + activeAxis.current = void 0; + }, []); + var scrollWheel = React10.useCallback(function(event) { + shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); + }, []); + var scrollTouchMove = React10.useCallback(function(event) { + shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current)); + }, []); + React10.useEffect(function() { + lockStack.push(Style2); + props.setCallbacks({ + onScrollCapture: scrollWheel, + onWheelCapture: scrollWheel, + onTouchMoveCapture: scrollTouchMove + }); + document.addEventListener("wheel", shouldPrevent, nonPassive); + document.addEventListener("touchmove", shouldPrevent, nonPassive); + document.addEventListener("touchstart", scrollTouchStart, nonPassive); + return function() { + lockStack = lockStack.filter(function(inst) { + return inst !== Style2; + }); + document.removeEventListener("wheel", shouldPrevent, nonPassive); + document.removeEventListener("touchmove", shouldPrevent, nonPassive); + document.removeEventListener("touchstart", scrollTouchStart, nonPassive); + }; + }, []); + var removeScrollBar = props.removeScrollBar, inert = props.inert; + return React10.createElement( + React10.Fragment, + null, + inert ? React10.createElement(Style2, { styles: generateStyle(id) }) : null, + removeScrollBar ? React10.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null + ); +} +function getOutermostShadowParent(node) { + var shadowParent = null; + while (node !== null) { + if (node instanceof ShadowRoot) { + shadowParent = node.host; + node = node.host; + } + node = node.parentNode; + } + return shadowParent; +} + +// node_modules/react-remove-scroll/dist/es2015/sidecar.js +var sidecar_default = exportSidecar(effectCar, RemoveScrollSideCar); + +// node_modules/react-remove-scroll/dist/es2015/Combination.js +var ReactRemoveScroll = React11.forwardRef(function(props, ref) { + return React11.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default })); +}); +ReactRemoveScroll.classNames = RemoveScroll.classNames; +var Combination_default = ReactRemoveScroll; + // node_modules/aria-hidden/dist/es2015/index.js var getDefaultParent = function(originalTarget) { if (typeof document === "undefined") { @@ -343,406 +1095,10 @@ var hideOthers = function(originalTarget, parentNode, markerName) { return applyAttributeToOthers(targets, activeParentNode, markerName, "aria-hidden"); }; -// node_modules/tslib/tslib.es6.mjs -var __assign = function() { - __assign = Object.assign || function __assign2(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} -function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -// node_modules/react-remove-scroll-bar/dist/es2015/constants.js -var zeroRightClassName = "right-scroll-bar-position"; -var fullWidthClassName = "width-before-scroll-bar"; -var noScrollbarsClassName = "with-scroll-bars-hidden"; -var removedBarSizeVariable = "--removed-body-scroll-bar-size"; - -// node_modules/use-callback-ref/dist/es2015/useMergeRef.js -var React2 = __toESM(require_react()); - -// node_modules/use-callback-ref/dist/es2015/assignRef.js -function assignRef(ref, value) { - if (typeof ref === "function") { - ref(value); - } else if (ref) { - ref.current = value; - } - return ref; -} - -// node_modules/use-callback-ref/dist/es2015/useRef.js -var import_react = __toESM(require_react()); -function useCallbackRef2(initialValue, callback) { - var ref = (0, import_react.useState)(function() { - return { - // value - value: initialValue, - // last callback - callback, - // "memoized" public interface - facade: { - get current() { - return ref.value; - }, - set current(value) { - var last = ref.value; - if (last !== value) { - ref.value = value; - ref.callback(value, last); - } - } - } - }; - })[0]; - ref.callback = callback; - return ref.facade; -} - -// node_modules/use-callback-ref/dist/es2015/useMergeRef.js -var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React2.useLayoutEffect : React2.useEffect; -var currentValues = /* @__PURE__ */ new WeakMap(); -function useMergeRefs(refs, defaultValue) { - var callbackRef = useCallbackRef2(defaultValue || null, function(newValue) { - return refs.forEach(function(ref) { - return assignRef(ref, newValue); - }); - }); - useIsomorphicLayoutEffect(function() { - var oldValue = currentValues.get(callbackRef); - if (oldValue) { - var prevRefs_1 = new Set(oldValue); - var nextRefs_1 = new Set(refs); - var current_1 = callbackRef.current; - prevRefs_1.forEach(function(ref) { - if (!nextRefs_1.has(ref)) { - assignRef(ref, null); - } - }); - nextRefs_1.forEach(function(ref) { - if (!prevRefs_1.has(ref)) { - assignRef(ref, current_1); - } - }); - } - currentValues.set(callbackRef, refs); - }, [refs]); - return callbackRef; -} - -// node_modules/use-sidecar/dist/es2015/exports.js -var React3 = __toESM(require_react()); -var SideCar = function(_a) { - var sideCar = _a.sideCar, rest = __rest(_a, ["sideCar"]); - if (!sideCar) { - throw new Error("Sidecar: please provide `sideCar` property to import the right car"); - } - var Target = sideCar.read(); - if (!Target) { - throw new Error("Sidecar medium not found"); - } - return React3.createElement(Target, __assign({}, rest)); -}; -SideCar.isSideCarExport = true; -function exportSidecar(medium, exported) { - medium.useMedium(exported); - return SideCar; -} - -// node_modules/use-sidecar/dist/es2015/hoc.js -var React4 = __toESM(require_react()); - -// node_modules/use-sidecar/dist/es2015/hook.js -var import_react2 = __toESM(require_react()); - -// node_modules/use-sidecar/dist/es2015/medium.js -function ItoI(a) { - return a; -} -function innerCreateMedium(defaults, middleware) { - if (middleware === void 0) { - middleware = ItoI; - } - var buffer = []; - var assigned = false; - var medium = { - read: function() { - if (assigned) { - throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`."); - } - if (buffer.length) { - return buffer[buffer.length - 1]; - } - return defaults; - }, - useMedium: function(data) { - var item = middleware(data, assigned); - buffer.push(item); - return function() { - buffer = buffer.filter(function(x) { - return x !== item; - }); - }; - }, - assignSyncMedium: function(cb) { - assigned = true; - while (buffer.length) { - var cbs = buffer; - buffer = []; - cbs.forEach(cb); - } - buffer = { - push: function(x) { - return cb(x); - }, - filter: function() { - return buffer; - } - }; - }, - assignMedium: function(cb) { - assigned = true; - var pendingQueue = []; - if (buffer.length) { - var cbs = buffer; - buffer = []; - cbs.forEach(cb); - pendingQueue = buffer; - } - var executeQueue = function() { - var cbs2 = pendingQueue; - pendingQueue = []; - cbs2.forEach(cb); - }; - var cycle = function() { - return Promise.resolve().then(executeQueue); - }; - cycle(); - buffer = { - push: function(x) { - pendingQueue.push(x); - cycle(); - }, - filter: function(filter) { - pendingQueue = pendingQueue.filter(filter); - return buffer; - } - }; - } - }; - return medium; -} -function createSidecarMedium(options) { - if (options === void 0) { - options = {}; - } - var medium = innerCreateMedium(null); - medium.options = __assign({ async: true, ssr: false }, options); - return medium; -} - -// node_modules/use-sidecar/dist/es2015/renderProp.js -var React5 = __toESM(require_react()); -var import_react3 = __toESM(require_react()); - -// node_modules/react-style-singleton/dist/es2015/hook.js -var React6 = __toESM(require_react()); - -// node_modules/get-nonce/dist/es2015/index.js -var currentNonce; -var getNonce = function() { - if (currentNonce) { - return currentNonce; - } - if (typeof __webpack_nonce__ !== "undefined") { - return __webpack_nonce__; - } - return void 0; -}; - -// node_modules/react-style-singleton/dist/es2015/singleton.js -function makeStyleTag() { - if (!document) - return null; - var tag = document.createElement("style"); - tag.type = "text/css"; - var nonce = getNonce(); - if (nonce) { - tag.setAttribute("nonce", nonce); - } - return tag; -} -function injectStyles(tag, css) { - if (tag.styleSheet) { - tag.styleSheet.cssText = css; - } else { - tag.appendChild(document.createTextNode(css)); - } -} -function insertStyleTag(tag) { - var head = document.head || document.getElementsByTagName("head")[0]; - head.appendChild(tag); -} -var stylesheetSingleton = function() { - var counter = 0; - var stylesheet = null; - return { - add: function(style) { - if (counter == 0) { - if (stylesheet = makeStyleTag()) { - injectStyles(stylesheet, style); - insertStyleTag(stylesheet); - } - } - counter++; - }, - remove: function() { - counter--; - if (!counter && stylesheet) { - stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet); - stylesheet = null; - } - } - }; -}; - -// node_modules/react-style-singleton/dist/es2015/hook.js -var styleHookSingleton = function() { - var sheet = stylesheetSingleton(); - return function(styles, isDynamic) { - React6.useEffect(function() { - sheet.add(styles); - return function() { - sheet.remove(); - }; - }, [styles && isDynamic]); - }; -}; - -// node_modules/react-style-singleton/dist/es2015/component.js -var styleSingleton = function() { - var useStyle = styleHookSingleton(); - var Sheet = function(_a) { - var styles = _a.styles, dynamic = _a.dynamic; - useStyle(styles, dynamic); - return null; - }; - return Sheet; -}; - -// node_modules/react-remove-scroll-bar/dist/es2015/component.js -var React7 = __toESM(require_react()); - -// node_modules/react-remove-scroll-bar/dist/es2015/utils.js -var zeroGap = { - left: 0, - top: 0, - right: 0, - gap: 0 -}; -var parse = function(x) { - return parseInt(x || "", 10) || 0; -}; -var getOffset = function(gapMode) { - var cs = window.getComputedStyle(document.body); - var left = cs[gapMode === "padding" ? "paddingLeft" : "marginLeft"]; - var top = cs[gapMode === "padding" ? "paddingTop" : "marginTop"]; - var right = cs[gapMode === "padding" ? "paddingRight" : "marginRight"]; - return [parse(left), parse(top), parse(right)]; -}; -var getGapWidth = function(gapMode) { - if (gapMode === void 0) { - gapMode = "margin"; - } - if (typeof window === "undefined") { - return zeroGap; - } - var offsets = getOffset(gapMode); - var documentWidth = document.documentElement.clientWidth; - var windowWidth = window.innerWidth; - return { - left: offsets[0], - top: offsets[1], - right: offsets[2], - gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]) - }; -}; - -// node_modules/react-remove-scroll-bar/dist/es2015/component.js -var Style = styleSingleton(); -var lockAttribute = "data-scroll-locked"; -var getStyles = function(_a, allowRelative, gapMode, important) { - var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap; - if (gapMode === void 0) { - gapMode = "margin"; - } - return "\n .".concat(noScrollbarsClassName, " {\n overflow: hidden ").concat(important, ";\n padding-right: ").concat(gap, "px ").concat(important, ";\n }\n body[").concat(lockAttribute, "] {\n overflow: hidden ").concat(important, ";\n overscroll-behavior: contain;\n ").concat([ - allowRelative && "position: relative ".concat(important, ";"), - gapMode === "margin" && "\n padding-left: ".concat(left, "px;\n padding-top: ").concat(top, "px;\n padding-right: ").concat(right, "px;\n margin-left:0;\n margin-top:0;\n margin-right: ").concat(gap, "px ").concat(important, ";\n "), - gapMode === "padding" && "padding-right: ".concat(gap, "px ").concat(important, ";") - ].filter(Boolean).join(""), "\n }\n \n .").concat(zeroRightClassName, " {\n right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(fullWidthClassName, " {\n margin-right: ").concat(gap, "px ").concat(important, ";\n }\n \n .").concat(zeroRightClassName, " .").concat(zeroRightClassName, " {\n right: 0 ").concat(important, ";\n }\n \n .").concat(fullWidthClassName, " .").concat(fullWidthClassName, " {\n margin-right: 0 ").concat(important, ";\n }\n \n body[").concat(lockAttribute, "] {\n ").concat(removedBarSizeVariable, ": ").concat(gap, "px;\n }\n"); -}; -var getCurrentUseCounter = function() { - var counter = parseInt(document.body.getAttribute(lockAttribute) || "0", 10); - return isFinite(counter) ? counter : 0; -}; -var useLockAttribute = function() { - React7.useEffect(function() { - document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString()); - return function() { - var newCounter = getCurrentUseCounter() - 1; - if (newCounter <= 0) { - document.body.removeAttribute(lockAttribute); - } else { - document.body.setAttribute(lockAttribute, newCounter.toString()); - } - }; - }, []); -}; -var RemoveScrollBar = function(_a) { - var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? "margin" : _b; - useLockAttribute(); - var gap = React7.useMemo(function() { - return getGapWidth(gapMode); - }, [gapMode]); - return React7.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? "!important" : "") }); -}; - export { FocusScope, - hideOthers, - __assign, - __rest, - __spreadArray, - zeroRightClassName, - fullWidthClassName, - useMergeRefs, - createSidecarMedium, - exportSidecar, - styleSingleton, - RemoveScrollBar + useFocusGuards, + Combination_default, + hideOthers }; -//# sourceMappingURL=chunk-QYKEMCE4.js.map +//# sourceMappingURL=chunk-3PHEZ67U.js.map diff --git a/node_modules/.vite/deps/chunk-3PHEZ67U.js.map b/node_modules/.vite/deps/chunk-3PHEZ67U.js.map new file mode 100644 index 00000000..3b971933 --- /dev/null +++ b/node_modules/.vite/deps/chunk-3PHEZ67U.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@radix-ui/react-focus-scope/src/FocusScope.tsx", "../../@radix-ui/react-focus-guards/src/FocusGuards.tsx", "../../tslib/tslib.es6.mjs", "../../react-remove-scroll/dist/es2015/Combination.js", "../../react-remove-scroll/dist/es2015/UI.js", "../../react-remove-scroll-bar/dist/es2015/constants.js", "../../use-callback-ref/dist/es2015/assignRef.js", "../../use-callback-ref/dist/es2015/useRef.js", "../../use-callback-ref/dist/es2015/useMergeRef.js", "../../use-sidecar/dist/es2015/hoc.js", "../../use-sidecar/dist/es2015/hook.js", "../../use-sidecar/dist/es2015/medium.js", "../../use-sidecar/dist/es2015/renderProp.js", "../../use-sidecar/dist/es2015/exports.js", "../../react-remove-scroll/dist/es2015/medium.js", "../../react-remove-scroll/dist/es2015/SideEffect.js", "../../react-remove-scroll-bar/dist/es2015/component.js", "../../react-style-singleton/dist/es2015/hook.js", "../../get-nonce/dist/es2015/index.js", "../../react-style-singleton/dist/es2015/singleton.js", "../../react-style-singleton/dist/es2015/component.js", "../../react-remove-scroll-bar/dist/es2015/utils.js", "../../react-remove-scroll/dist/es2015/aggresiveCapture.js", "../../react-remove-scroll/dist/es2015/handleScroll.js", "../../react-remove-scroll/dist/es2015/sidecar.js", "../../aria-hidden/dist/es2015/index.js"], + "sourcesContent": ["import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n }).current;\n\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n\n return (\n \n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n", "import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.outline = 'none';\n element.style.opacity = '0';\n element.style.position = 'fixed';\n element.style.pointerEvents = 'none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n", "export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n", "/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n", "import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n", "import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return

...
\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { useSidecar } from './hook';\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function sidecar(importer, errorComponent) {\n var ErrorCase = function () { return errorComponent; };\n return function Sidecar(props) {\n var _a = useSidecar(importer, props.sideCar), Car = _a[0], error = _a[1];\n if (error && errorComponent) {\n return ErrorCase;\n }\n // @ts-expect-error type shenanigans\n return Car ? React.createElement(Car, __assign({}, props)) : null;\n };\n}\n", "import { useState, useEffect } from 'react';\nimport { env } from './env';\nvar cache = new WeakMap();\nvar NO_OPTIONS = {};\nexport function useSidecar(importer, effect) {\n var options = (effect && effect.options) || NO_OPTIONS;\n if (env.isNode && !options.ssr) {\n return [null, null];\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useRealSidecar(importer, effect);\n}\nfunction useRealSidecar(importer, effect) {\n var options = (effect && effect.options) || NO_OPTIONS;\n var couldUseCache = env.forceCache || (env.isNode && !!options.ssr) || !options.async;\n var _a = useState(couldUseCache ? function () { return cache.get(importer); } : undefined), Car = _a[0], setCar = _a[1];\n var _b = useState(null), error = _b[0], setError = _b[1];\n useEffect(function () {\n if (!Car) {\n importer().then(function (car) {\n var resolved = effect ? effect.read() : car.default || car;\n if (!resolved) {\n console.error('Sidecar error: with importer', importer);\n var error_1;\n if (effect) {\n console.error('Sidecar error: with medium', effect);\n error_1 = new Error('Sidecar medium was not found');\n }\n else {\n error_1 = new Error('Sidecar was not found in exports');\n }\n setError(function () { return error_1; });\n throw error_1;\n }\n cache.set(importer, resolved);\n setCar(function () { return resolved; });\n }, function (e) { return setError(function () { return e; }); });\n }\n }, []);\n return [Car, error];\n}\n", "import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { useState, useCallback, useEffect, useLayoutEffect } from 'react';\nexport function renderCar(WrappedComponent, defaults) {\n function State(_a) {\n var stateRef = _a.stateRef, props = _a.props;\n var renderTarget = useCallback(function SideTarget() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n useLayoutEffect(function () {\n stateRef.current(args);\n });\n return null;\n }, []);\n // @ts-ignore\n return React.createElement(WrappedComponent, __assign({}, props, { children: renderTarget }));\n }\n var Children = React.memo(function (_a) {\n var stateRef = _a.stateRef, defaultState = _a.defaultState, children = _a.children;\n var _b = useState(defaultState.current), state = _b[0], setState = _b[1];\n useEffect(function () {\n stateRef.current = setState;\n }, []);\n return children.apply(void 0, state);\n }, function () { return true; });\n return function Combiner(props) {\n var defaultState = React.useRef(defaults(props));\n var ref = React.useRef(function (state) { return (defaultState.current = state); });\n return (React.createElement(React.Fragment, null,\n React.createElement(State, { stateRef: ref, props: props }),\n React.createElement(Children, { stateRef: ref, defaultState: defaultState, children: props.children })));\n };\n}\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n", "import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n", "import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n", "import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n if (target instanceof ShadowRoot) {\n target = target.host;\n }\n else {\n target = target.parentNode;\n }\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n", "import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n", "var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n"], + "mappings": "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", + "names": ["handleFocusIn", "handleFocusOut", "handleMutations", "container", "React", "__assign", "React", "React", "useCallbackRef", "React", "useCallbackRef", "React", "import_react", "cbs", "React", "import_react", "React", "SideCar", "React", "React", "React", "Style"] +} diff --git a/node_modules/.vite/deps/chunk-ENGL2KVA.js b/node_modules/.vite/deps/chunk-5ZUJRVG4.js similarity index 98% rename from node_modules/.vite/deps/chunk-ENGL2KVA.js rename to node_modules/.vite/deps/chunk-5ZUJRVG4.js index b0690865..c49cbc93 100644 --- a/node_modules/.vite/deps/chunk-ENGL2KVA.js +++ b/node_modules/.vite/deps/chunk-5ZUJRVG4.js @@ -1,19 +1,19 @@ import { createCollection } from "./chunk-6SPNF6KQ.js"; -import { - useId -} from "./chunk-5I6CIHEW.js"; -import { - useControllableState -} from "./chunk-H4VE5LV5.js"; import { useDirection } from "./chunk-O2UA4OQB.js"; +import { + useId +} from "./chunk-ZZUMGTHG.js"; +import { + useControllableState +} from "./chunk-I6MWER2B.js"; import { composeEventHandlers, useCallbackRef -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -308,4 +308,4 @@ export { Root, Item }; -//# sourceMappingURL=chunk-ENGL2KVA.js.map +//# sourceMappingURL=chunk-5ZUJRVG4.js.map diff --git a/node_modules/.vite/deps/chunk-ENGL2KVA.js.map b/node_modules/.vite/deps/chunk-5ZUJRVG4.js.map similarity index 100% rename from node_modules/.vite/deps/chunk-ENGL2KVA.js.map rename to node_modules/.vite/deps/chunk-5ZUJRVG4.js.map diff --git a/node_modules/.vite/deps/chunk-6NKFQNRI.js b/node_modules/.vite/deps/chunk-6NKFQNRI.js new file mode 100644 index 00000000..8fc5ea84 --- /dev/null +++ b/node_modules/.vite/deps/chunk-6NKFQNRI.js @@ -0,0 +1,85 @@ +// node_modules/@azure/msal-browser/dist/telemetry/BrowserPerformanceMeasurement.mjs +var BrowserPerformanceMeasurement = class _BrowserPerformanceMeasurement { + constructor(name, correlationId) { + this.correlationId = correlationId; + this.measureName = _BrowserPerformanceMeasurement.makeMeasureName(name, correlationId); + this.startMark = _BrowserPerformanceMeasurement.makeStartMark(name, correlationId); + this.endMark = _BrowserPerformanceMeasurement.makeEndMark(name, correlationId); + } + static makeMeasureName(name, correlationId) { + return `msal.measure.${name}.${correlationId}`; + } + static makeStartMark(name, correlationId) { + return `msal.start.${name}.${correlationId}`; + } + static makeEndMark(name, correlationId) { + return `msal.end.${name}.${correlationId}`; + } + static supportsBrowserPerformance() { + return typeof window !== "undefined" && typeof window.performance !== "undefined" && typeof window.performance.mark === "function" && typeof window.performance.measure === "function" && typeof window.performance.clearMarks === "function" && typeof window.performance.clearMeasures === "function" && typeof window.performance.getEntriesByName === "function"; + } + /** + * Flush browser marks and measurements. + * @param {string} correlationId + * @param {SubMeasurement} measurements + */ + static flushMeasurements(correlationId, measurements) { + if (_BrowserPerformanceMeasurement.supportsBrowserPerformance()) { + try { + measurements.forEach((measurement) => { + const measureName = _BrowserPerformanceMeasurement.makeMeasureName(measurement.name, correlationId); + const entriesForMeasurement = window.performance.getEntriesByName(measureName, "measure"); + if (entriesForMeasurement.length > 0) { + window.performance.clearMeasures(measureName); + window.performance.clearMarks(_BrowserPerformanceMeasurement.makeStartMark(measureName, correlationId)); + window.performance.clearMarks(_BrowserPerformanceMeasurement.makeEndMark(measureName, correlationId)); + } + }); + } catch (e) { + } + } + } + startMeasurement() { + if (_BrowserPerformanceMeasurement.supportsBrowserPerformance()) { + try { + window.performance.mark(this.startMark); + } catch (e) { + } + } + } + endMeasurement() { + if (_BrowserPerformanceMeasurement.supportsBrowserPerformance()) { + try { + window.performance.mark(this.endMark); + window.performance.measure(this.measureName, this.startMark, this.endMark); + } catch (e) { + } + } + } + flushMeasurement() { + if (_BrowserPerformanceMeasurement.supportsBrowserPerformance()) { + try { + const entriesForMeasurement = window.performance.getEntriesByName(this.measureName, "measure"); + if (entriesForMeasurement.length > 0) { + const durationMs = entriesForMeasurement[0].duration; + window.performance.clearMeasures(this.measureName); + window.performance.clearMarks(this.startMark); + window.performance.clearMarks(this.endMark); + return durationMs; + } + } catch (e) { + } + } + return null; + } +}; + +export { + BrowserPerformanceMeasurement +}; +/*! Bundled license information: + +@azure/msal-browser/dist/telemetry/BrowserPerformanceMeasurement.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) +*/ +//# sourceMappingURL=chunk-6NKFQNRI.js.map diff --git a/node_modules/.vite/deps/chunk-6NKFQNRI.js.map b/node_modules/.vite/deps/chunk-6NKFQNRI.js.map new file mode 100644 index 00000000..ed02bd87 --- /dev/null +++ b/node_modules/.vite/deps/chunk-6NKFQNRI.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@azure/msal-browser/src/telemetry/BrowserPerformanceMeasurement.ts"], + "sourcesContent": ["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IPerformanceMeasurement,\n SubMeasurement,\n} from \"@azure/msal-common/browser\";\n\nexport class BrowserPerformanceMeasurement implements IPerformanceMeasurement {\n private readonly measureName: string;\n private readonly correlationId: string;\n private readonly startMark: string;\n private readonly endMark: string;\n\n constructor(name: string, correlationId: string) {\n this.correlationId = correlationId;\n this.measureName = BrowserPerformanceMeasurement.makeMeasureName(\n name,\n correlationId\n );\n this.startMark = BrowserPerformanceMeasurement.makeStartMark(\n name,\n correlationId\n );\n this.endMark = BrowserPerformanceMeasurement.makeEndMark(\n name,\n correlationId\n );\n }\n\n private static makeMeasureName(name: string, correlationId: string) {\n return `msal.measure.${name}.${correlationId}`;\n }\n\n private static makeStartMark(name: string, correlationId: string) {\n return `msal.start.${name}.${correlationId}`;\n }\n\n private static makeEndMark(name: string, correlationId: string) {\n return `msal.end.${name}.${correlationId}`;\n }\n\n static supportsBrowserPerformance(): boolean {\n return (\n typeof window !== \"undefined\" &&\n typeof window.performance !== \"undefined\" &&\n typeof window.performance.mark === \"function\" &&\n typeof window.performance.measure === \"function\" &&\n typeof window.performance.clearMarks === \"function\" &&\n typeof window.performance.clearMeasures === \"function\" &&\n typeof window.performance.getEntriesByName === \"function\"\n );\n }\n\n /**\n * Flush browser marks and measurements.\n * @param {string} correlationId\n * @param {SubMeasurement} measurements\n */\n public static flushMeasurements(\n correlationId: string,\n measurements: SubMeasurement[]\n ): void {\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\n try {\n measurements.forEach((measurement) => {\n const measureName =\n BrowserPerformanceMeasurement.makeMeasureName(\n measurement.name,\n correlationId\n );\n const entriesForMeasurement =\n window.performance.getEntriesByName(\n measureName,\n \"measure\"\n );\n if (entriesForMeasurement.length > 0) {\n window.performance.clearMeasures(measureName);\n window.performance.clearMarks(\n BrowserPerformanceMeasurement.makeStartMark(\n measureName,\n correlationId\n )\n );\n window.performance.clearMarks(\n BrowserPerformanceMeasurement.makeEndMark(\n measureName,\n correlationId\n )\n );\n }\n });\n } catch (e) {\n // Silently catch and return null\n }\n }\n }\n\n startMeasurement(): void {\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\n try {\n window.performance.mark(this.startMark);\n } catch (e) {\n // Silently catch\n }\n }\n }\n\n endMeasurement(): void {\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\n try {\n window.performance.mark(this.endMark);\n window.performance.measure(\n this.measureName,\n this.startMark,\n this.endMark\n );\n } catch (e) {\n // Silently catch\n }\n }\n }\n\n flushMeasurement(): number | null {\n if (BrowserPerformanceMeasurement.supportsBrowserPerformance()) {\n try {\n const entriesForMeasurement =\n window.performance.getEntriesByName(\n this.measureName,\n \"measure\"\n );\n if (entriesForMeasurement.length > 0) {\n const durationMs = entriesForMeasurement[0].duration;\n window.performance.clearMeasures(this.measureName);\n window.performance.clearMarks(this.startMark);\n window.performance.clearMarks(this.endMark);\n return durationMs;\n }\n } catch (e) {\n // Silently catch and return null\n }\n }\n return null;\n }\n}\n"], + "mappings": ";IAUa,sCAAA,+BAA6B;EAMtC,YAAY,MAAc,eAAqB;AAC3C,SAAK,gBAAgB;AACrB,SAAK,cAAc,+BAA8B,gBAC7C,MACA,aAAa;AAEjB,SAAK,YAAY,+BAA8B,cAC3C,MACA,aAAa;AAEjB,SAAK,UAAU,+BAA8B,YACzC,MACA,aAAa;;EAIb,OAAO,gBAAgB,MAAc,eAAqB;AAC9D,WAAO,gBAAgB,IAAI,IAAI,aAAa;;EAGxC,OAAO,cAAc,MAAc,eAAqB;AAC5D,WAAO,cAAc,IAAI,IAAI,aAAa;;EAGtC,OAAO,YAAY,MAAc,eAAqB;AAC1D,WAAO,YAAY,IAAI,IAAI,aAAa;;EAG5C,OAAO,6BAA0B;AAC7B,WACI,OAAO,WAAW,eAClB,OAAO,OAAO,gBAAgB,eAC9B,OAAO,OAAO,YAAY,SAAS,cACnC,OAAO,OAAO,YAAY,YAAY,cACtC,OAAO,OAAO,YAAY,eAAe,cACzC,OAAO,OAAO,YAAY,kBAAkB,cAC5C,OAAO,OAAO,YAAY,qBAAqB;;;;;;;EAShD,OAAO,kBACV,eACA,cAA8B;AAE9B,QAAI,+BAA8B,2BAA0B,GAAI;AAC5D,UAAI;AACA,qBAAa,QAAQ,CAAC,gBAAe;AACjC,gBAAM,cACF,+BAA8B,gBAC1B,YAAY,MACZ,aAAa;AAErB,gBAAM,wBACF,OAAO,YAAY,iBACf,aACA,SAAS;AAEjB,cAAI,sBAAsB,SAAS,GAAG;AAClC,mBAAO,YAAY,cAAc,WAAW;AAC5C,mBAAO,YAAY,WACf,+BAA8B,cAC1B,aACA,aAAa,CAChB;AAEL,mBAAO,YAAY,WACf,+BAA8B,YAC1B,aACA,aAAa,CAChB;UAER;QACL,CAAC;MACJ,SAAQ,GAAG;MAEX;IACJ;;EAGL,mBAAgB;AACZ,QAAI,+BAA8B,2BAA0B,GAAI;AAC5D,UAAI;AACA,eAAO,YAAY,KAAK,KAAK,SAAS;MACzC,SAAQ,GAAG;MAEX;IACJ;;EAGL,iBAAc;AACV,QAAI,+BAA8B,2BAA0B,GAAI;AAC5D,UAAI;AACA,eAAO,YAAY,KAAK,KAAK,OAAO;AACpC,eAAO,YAAY,QACf,KAAK,aACL,KAAK,WACL,KAAK,OAAO;MAEnB,SAAQ,GAAG;MAEX;IACJ;;EAGL,mBAAgB;AACZ,QAAI,+BAA8B,2BAA0B,GAAI;AAC5D,UAAI;AACA,cAAM,wBACF,OAAO,YAAY,iBACf,KAAK,aACL,SAAS;AAEjB,YAAI,sBAAsB,SAAS,GAAG;AAClC,gBAAM,aAAa,sBAAsB,CAAC,EAAE;AAC5C,iBAAO,YAAY,cAAc,KAAK,WAAW;AACjD,iBAAO,YAAY,WAAW,KAAK,SAAS;AAC5C,iBAAO,YAAY,WAAW,KAAK,OAAO;AAC1C,iBAAO;QACV;MACJ,SAAQ,GAAG;MAEX;IACJ;AACD,WAAO;;AAEd;", + "names": [] +} diff --git a/node_modules/.vite/deps/chunk-MR3TNHRB.js b/node_modules/.vite/deps/chunk-AJMUNMLZ.js similarity index 94% rename from node_modules/.vite/deps/chunk-MR3TNHRB.js rename to node_modules/.vite/deps/chunk-AJMUNMLZ.js index d2ed722c..95e104f8 100644 --- a/node_modules/.vite/deps/chunk-MR3TNHRB.js +++ b/node_modules/.vite/deps/chunk-AJMUNMLZ.js @@ -1,6 +1,6 @@ import { useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { require_react } from "./chunk-3TFVT2CW.js"; @@ -48,4 +48,4 @@ function useSize(element) { export { useSize }; -//# sourceMappingURL=chunk-MR3TNHRB.js.map +//# sourceMappingURL=chunk-AJMUNMLZ.js.map diff --git a/node_modules/.vite/deps/chunk-MR3TNHRB.js.map b/node_modules/.vite/deps/chunk-AJMUNMLZ.js.map similarity index 100% rename from node_modules/.vite/deps/chunk-MR3TNHRB.js.map rename to node_modules/.vite/deps/chunk-AJMUNMLZ.js.map diff --git a/node_modules/.vite/deps/chunk-BAWHRVBE.js b/node_modules/.vite/deps/chunk-BAWHRVBE.js new file mode 100644 index 00000000..c1b468d1 --- /dev/null +++ b/node_modules/.vite/deps/chunk-BAWHRVBE.js @@ -0,0 +1,311 @@ +import { + require_react +} from "./chunk-3TFVT2CW.js"; +import { + __toESM +} from "./chunk-4MBMRILA.js"; + +// node_modules/@dnd-kit/utilities/dist/utilities.esm.js +var import_react = __toESM(require_react()); +function useCombinedRefs() { + for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) { + refs[_key] = arguments[_key]; + } + return (0, import_react.useMemo)( + () => (node) => { + refs.forEach((ref) => ref(node)); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + refs + ); +} +var canUseDOM = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"; +function isWindow(element) { + const elementString = Object.prototype.toString.call(element); + return elementString === "[object Window]" || // In Electron context the Window object serializes to [object global] + elementString === "[object global]"; +} +function isNode(node) { + return "nodeType" in node; +} +function getWindow(target) { + var _target$ownerDocument, _target$ownerDocument2; + if (!target) { + return window; + } + if (isWindow(target)) { + return target; + } + if (!isNode(target)) { + return window; + } + return (_target$ownerDocument = (_target$ownerDocument2 = target.ownerDocument) == null ? void 0 : _target$ownerDocument2.defaultView) != null ? _target$ownerDocument : window; +} +function isDocument(node) { + const { + Document + } = getWindow(node); + return node instanceof Document; +} +function isHTMLElement(node) { + if (isWindow(node)) { + return false; + } + return node instanceof getWindow(node).HTMLElement; +} +function isSVGElement(node) { + return node instanceof getWindow(node).SVGElement; +} +function getOwnerDocument(target) { + if (!target) { + return document; + } + if (isWindow(target)) { + return target.document; + } + if (!isNode(target)) { + return document; + } + if (isDocument(target)) { + return target; + } + if (isHTMLElement(target) || isSVGElement(target)) { + return target.ownerDocument; + } + return document; +} +var useIsomorphicLayoutEffect = canUseDOM ? import_react.useLayoutEffect : import_react.useEffect; +function useEvent(handler) { + const handlerRef = (0, import_react.useRef)(handler); + useIsomorphicLayoutEffect(() => { + handlerRef.current = handler; + }); + return (0, import_react.useCallback)(function() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return handlerRef.current == null ? void 0 : handlerRef.current(...args); + }, []); +} +function useInterval() { + const intervalRef = (0, import_react.useRef)(null); + const set = (0, import_react.useCallback)((listener, duration) => { + intervalRef.current = setInterval(listener, duration); + }, []); + const clear = (0, import_react.useCallback)(() => { + if (intervalRef.current !== null) { + clearInterval(intervalRef.current); + intervalRef.current = null; + } + }, []); + return [set, clear]; +} +function useLatestValue(value, dependencies) { + if (dependencies === void 0) { + dependencies = [value]; + } + const valueRef = (0, import_react.useRef)(value); + useIsomorphicLayoutEffect(() => { + if (valueRef.current !== value) { + valueRef.current = value; + } + }, dependencies); + return valueRef; +} +function useLazyMemo(callback, dependencies) { + const valueRef = (0, import_react.useRef)(); + return (0, import_react.useMemo)( + () => { + const newValue = callback(valueRef.current); + valueRef.current = newValue; + return newValue; + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [...dependencies] + ); +} +function useNodeRef(onChange) { + const onChangeHandler = useEvent(onChange); + const node = (0, import_react.useRef)(null); + const setNodeRef = (0, import_react.useCallback)( + (element) => { + if (element !== node.current) { + onChangeHandler == null ? void 0 : onChangeHandler(element, node.current); + } + node.current = element; + }, + //eslint-disable-next-line + [] + ); + return [node, setNodeRef]; +} +function usePrevious(value) { + const ref = (0, import_react.useRef)(); + (0, import_react.useEffect)(() => { + ref.current = value; + }, [value]); + return ref.current; +} +var ids = {}; +function useUniqueId(prefix, value) { + return (0, import_react.useMemo)(() => { + if (value) { + return value; + } + const id = ids[prefix] == null ? 0 : ids[prefix] + 1; + ids[prefix] = id; + return prefix + "-" + id; + }, [prefix, value]); +} +function createAdjustmentFn(modifier) { + return function(object) { + for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + adjustments[_key - 1] = arguments[_key]; + } + return adjustments.reduce((accumulator, adjustment) => { + const entries = Object.entries(adjustment); + for (const [key, valueAdjustment] of entries) { + const value = accumulator[key]; + if (value != null) { + accumulator[key] = value + modifier * valueAdjustment; + } + } + return accumulator; + }, { + ...object + }); + }; +} +var add = createAdjustmentFn(1); +var subtract = createAdjustmentFn(-1); +function hasViewportRelativeCoordinates(event) { + return "clientX" in event && "clientY" in event; +} +function isKeyboardEvent(event) { + if (!event) { + return false; + } + const { + KeyboardEvent + } = getWindow(event.target); + return KeyboardEvent && event instanceof KeyboardEvent; +} +function isTouchEvent(event) { + if (!event) { + return false; + } + const { + TouchEvent + } = getWindow(event.target); + return TouchEvent && event instanceof TouchEvent; +} +function getEventCoordinates(event) { + if (isTouchEvent(event)) { + if (event.touches && event.touches.length) { + const { + clientX: x, + clientY: y + } = event.touches[0]; + return { + x, + y + }; + } else if (event.changedTouches && event.changedTouches.length) { + const { + clientX: x, + clientY: y + } = event.changedTouches[0]; + return { + x, + y + }; + } + } + if (hasViewportRelativeCoordinates(event)) { + return { + x: event.clientX, + y: event.clientY + }; + } + return null; +} +var CSS = Object.freeze({ + Translate: { + toString(transform) { + if (!transform) { + return; + } + const { + x, + y + } = transform; + return "translate3d(" + (x ? Math.round(x) : 0) + "px, " + (y ? Math.round(y) : 0) + "px, 0)"; + } + }, + Scale: { + toString(transform) { + if (!transform) { + return; + } + const { + scaleX, + scaleY + } = transform; + return "scaleX(" + scaleX + ") scaleY(" + scaleY + ")"; + } + }, + Transform: { + toString(transform) { + if (!transform) { + return; + } + return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(" "); + } + }, + Transition: { + toString(_ref) { + let { + property, + duration, + easing + } = _ref; + return property + " " + duration + "ms " + easing; + } + } +}); +var SELECTOR = "a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]"; +function findFirstFocusableNode(element) { + if (element.matches(SELECTOR)) { + return element; + } + return element.querySelector(SELECTOR); +} + +export { + useCombinedRefs, + canUseDOM, + isWindow, + isNode, + getWindow, + isDocument, + isHTMLElement, + isSVGElement, + getOwnerDocument, + useIsomorphicLayoutEffect, + useEvent, + useInterval, + useLatestValue, + useLazyMemo, + useNodeRef, + usePrevious, + useUniqueId, + add, + subtract, + hasViewportRelativeCoordinates, + isKeyboardEvent, + isTouchEvent, + getEventCoordinates, + CSS, + findFirstFocusableNode +}; +//# sourceMappingURL=chunk-BAWHRVBE.js.map diff --git a/node_modules/.vite/deps/chunk-BAWHRVBE.js.map b/node_modules/.vite/deps/chunk-BAWHRVBE.js.map new file mode 100644 index 00000000..c563b4c8 --- /dev/null +++ b/node_modules/.vite/deps/chunk-BAWHRVBE.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@dnd-kit/utilities/src/hooks/useCombinedRefs.ts", "../../@dnd-kit/utilities/src/execution-context/canUseDOM.ts", "../../@dnd-kit/utilities/src/type-guards/isWindow.ts", "../../@dnd-kit/utilities/src/type-guards/isNode.ts", "../../@dnd-kit/utilities/src/execution-context/getWindow.ts", "../../@dnd-kit/utilities/src/type-guards/isDocument.ts", "../../@dnd-kit/utilities/src/type-guards/isHTMLElement.ts", "../../@dnd-kit/utilities/src/type-guards/isSVGElement.ts", "../../@dnd-kit/utilities/src/execution-context/getOwnerDocument.ts", "../../@dnd-kit/utilities/src/hooks/useIsomorphicLayoutEffect.ts", "../../@dnd-kit/utilities/src/hooks/useEvent.ts", "../../@dnd-kit/utilities/src/hooks/useInterval.ts", "../../@dnd-kit/utilities/src/hooks/useLatestValue.ts", "../../@dnd-kit/utilities/src/hooks/useLazyMemo.ts", "../../@dnd-kit/utilities/src/hooks/useNodeRef.ts", "../../@dnd-kit/utilities/src/hooks/usePrevious.ts", "../../@dnd-kit/utilities/src/hooks/useUniqueId.ts", "../../@dnd-kit/utilities/src/adjustment.ts", "../../@dnd-kit/utilities/src/event/hasViewportRelativeCoordinates.ts", "../../@dnd-kit/utilities/src/event/isKeyboardEvent.ts", "../../@dnd-kit/utilities/src/event/isTouchEvent.ts", "../../@dnd-kit/utilities/src/coordinates/getEventCoordinates.ts", "../../@dnd-kit/utilities/src/css.ts", "../../@dnd-kit/utilities/src/focus/findFirstFocusableNode.ts"], + "sourcesContent": ["import {useMemo} from 'react';\n\nexport function useCombinedRefs(\n ...refs: ((node: T) => void)[]\n): (node: T) => void {\n return useMemo(\n () => (node: T) => {\n refs.forEach((ref) => ref(node));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs\n );\n}\n", "// https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js\nexport const canUseDOM =\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined';\n", "export function isWindow(element: Object): element is typeof window {\n const elementString = Object.prototype.toString.call(element);\n return (\n elementString === '[object Window]' ||\n // In Electron context the Window object serializes to [object global]\n elementString === '[object global]'\n );\n}\n", "export function isNode(node: Object): node is Node {\n return 'nodeType' in node;\n}\n", "import {isWindow} from '../type-guards/isWindow';\nimport {isNode} from '../type-guards/isNode';\n\nexport function getWindow(target: Event['target']): typeof window {\n if (!target) {\n return window;\n }\n\n if (isWindow(target)) {\n return target;\n }\n\n if (!isNode(target)) {\n return window;\n }\n\n return target.ownerDocument?.defaultView ?? window;\n}\n", "import {getWindow} from '../execution-context/getWindow';\n\nexport function isDocument(node: Node): node is Document {\n const {Document} = getWindow(node);\n\n return node instanceof Document;\n}\n", "import {getWindow} from '../execution-context/getWindow';\n\nimport {isWindow} from './isWindow';\n\nexport function isHTMLElement(node: Node | Window): node is HTMLElement {\n if (isWindow(node)) {\n return false;\n }\n\n return node instanceof getWindow(node).HTMLElement;\n}\n", "import {getWindow} from '../execution-context/getWindow';\n\nexport function isSVGElement(node: Node): node is SVGElement {\n return node instanceof getWindow(node).SVGElement;\n}\n", "import {\n isWindow,\n isHTMLElement,\n isDocument,\n isNode,\n isSVGElement,\n} from '../type-guards';\n\nexport function getOwnerDocument(target: Event['target']): Document {\n if (!target) {\n return document;\n }\n\n if (isWindow(target)) {\n return target.document;\n }\n\n if (!isNode(target)) {\n return document;\n }\n\n if (isDocument(target)) {\n return target;\n }\n\n if (isHTMLElement(target) || isSVGElement(target)) {\n return target.ownerDocument;\n }\n\n return document;\n}\n", "import {useEffect, useLayoutEffect} from 'react';\n\nimport {canUseDOM} from '../execution-context';\n\n/**\n * A hook that resolves to useEffect on the server and useLayoutEffect on the client\n * @param callback {function} Callback function that is invoked when the dependencies of the hook change\n */\nexport const useIsomorphicLayoutEffect = canUseDOM\n ? useLayoutEffect\n : useEffect;\n", "import {useCallback, useRef} from 'react';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect';\n\nexport function useEvent(handler: T | undefined) {\n const handlerRef = useRef(handler);\n\n useIsomorphicLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback(function (...args: any) {\n return handlerRef.current?.(...args);\n }, []);\n}\n", "import {useCallback, useRef} from 'react';\n\nexport function useInterval() {\n const intervalRef = useRef(null);\n\n const set = useCallback((listener: Function, duration: number) => {\n intervalRef.current = setInterval(listener, duration);\n }, []);\n\n const clear = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n return [set, clear] as const;\n}\n", "import {useRef} from 'react';\nimport type {DependencyList} from 'react';\n\nimport {useIsomorphicLayoutEffect} from './useIsomorphicLayoutEffect';\n\nexport function useLatestValue(\n value: T,\n dependencies: DependencyList = [value]\n) {\n const valueRef = useRef(value);\n\n useIsomorphicLayoutEffect(() => {\n if (valueRef.current !== value) {\n valueRef.current = value;\n }\n }, dependencies);\n\n return valueRef;\n}\n", "import {useMemo, useRef} from 'react';\n\nexport function useLazyMemo(\n callback: (prevValue: T | undefined) => T,\n dependencies: any[]\n) {\n const valueRef = useRef();\n\n return useMemo(\n () => {\n const newValue = callback(valueRef.current);\n valueRef.current = newValue;\n\n return newValue;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...dependencies]\n );\n}\n", "import {useRef, useCallback} from 'react';\n\nimport {useEvent} from './useEvent';\n\nexport function useNodeRef(\n onChange?: (\n newElement: HTMLElement | null,\n previousElement: HTMLElement | null\n ) => void\n) {\n const onChangeHandler = useEvent(onChange);\n const node = useRef(null);\n const setNodeRef = useCallback(\n (element: HTMLElement | null) => {\n if (element !== node.current) {\n onChangeHandler?.(element, node.current);\n }\n\n node.current = element;\n },\n //eslint-disable-next-line\n []\n );\n\n return [node, setNodeRef] as const;\n}\n", "import {useRef, useEffect} from 'react';\n\nexport function usePrevious(value: T) {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n}\n", "import {useMemo} from 'react';\n\nlet ids: Record = {};\n\nexport function useUniqueId(prefix: string, value?: string) {\n return useMemo(() => {\n if (value) {\n return value;\n }\n\n const id = ids[prefix] == null ? 0 : ids[prefix] + 1;\n ids[prefix] = id;\n\n return `${prefix}-${id}`;\n }, [prefix, value]);\n}\n", "function createAdjustmentFn(modifier: number) {\n return , U extends string>(\n object: T,\n ...adjustments: Partial[]\n ): T => {\n return adjustments.reduce(\n (accumulator, adjustment) => {\n const entries = Object.entries(adjustment) as [U, number][];\n\n for (const [key, valueAdjustment] of entries) {\n const value = accumulator[key];\n\n if (value != null) {\n accumulator[key] = (value + modifier * valueAdjustment) as T[U];\n }\n }\n\n return accumulator;\n },\n {\n ...object,\n }\n );\n };\n}\n\nexport const add = createAdjustmentFn(1);\nexport const subtract = createAdjustmentFn(-1);\n", "export function hasViewportRelativeCoordinates(\n event: Event\n): event is Event & Pick {\n return 'clientX' in event && 'clientY' in event;\n}\n", "import {getWindow} from '../execution-context';\n\nexport function isKeyboardEvent(\n event: Event | undefined | null\n): event is KeyboardEvent {\n if (!event) {\n return false;\n }\n\n const {KeyboardEvent} = getWindow(event.target);\n\n return KeyboardEvent && event instanceof KeyboardEvent;\n}\n", "import {getWindow} from '../execution-context';\n\nexport function isTouchEvent(\n event: Event | undefined | null\n): event is TouchEvent {\n if (!event) {\n return false;\n }\n\n const {TouchEvent} = getWindow(event.target);\n\n return TouchEvent && event instanceof TouchEvent;\n}\n", "import type {Coordinates} from './types';\nimport {isTouchEvent, hasViewportRelativeCoordinates} from '../event';\n\n/**\n * Returns the normalized x and y coordinates for mouse and touch events.\n */\nexport function getEventCoordinates(event: Event): Coordinates | null {\n if (isTouchEvent(event)) {\n if (event.touches && event.touches.length) {\n const {clientX: x, clientY: y} = event.touches[0];\n\n return {\n x,\n y,\n };\n } else if (event.changedTouches && event.changedTouches.length) {\n const {clientX: x, clientY: y} = event.changedTouches[0];\n\n return {\n x,\n y,\n };\n }\n }\n\n if (hasViewportRelativeCoordinates(event)) {\n return {\n x: event.clientX,\n y: event.clientY,\n };\n }\n\n return null;\n}\n", "export type Transform = {\n x: number;\n y: number;\n scaleX: number;\n scaleY: number;\n};\n\nexport interface Transition {\n property: string;\n easing: string;\n duration: number;\n}\n\nexport const CSS = Object.freeze({\n Translate: {\n toString(transform: Transform | null) {\n if (!transform) {\n return;\n }\n\n const {x, y} = transform;\n\n return `translate3d(${x ? Math.round(x) : 0}px, ${\n y ? Math.round(y) : 0\n }px, 0)`;\n },\n },\n Scale: {\n toString(transform: Transform | null) {\n if (!transform) {\n return;\n }\n\n const {scaleX, scaleY} = transform;\n\n return `scaleX(${scaleX}) scaleY(${scaleY})`;\n },\n },\n Transform: {\n toString(transform: Transform | null) {\n if (!transform) {\n return;\n }\n\n return [\n CSS.Translate.toString(transform),\n CSS.Scale.toString(transform),\n ].join(' ');\n },\n },\n Transition: {\n toString({property, duration, easing}: Transition) {\n return `${property} ${duration}ms ${easing}`;\n },\n },\n});\n", "const SELECTOR =\n 'a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]';\n\nexport function findFirstFocusableNode(\n element: HTMLElement\n): HTMLElement | null {\n if (element.matches(SELECTOR)) {\n return element;\n }\n\n return element.querySelector(SELECTOR);\n}\n"], + "mappings": "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", + "names": ["useCombinedRefs", "refs", "useMemo", "node", "forEach", "ref", "canUseDOM", "window", "document", "createElement", "isWindow", "element", "elementString", "Object", "prototype", "toString", "call", "isNode", "getWindow", "target", "ownerDocument", "defaultView", "isDocument", "Document", "isHTMLElement", "HTMLElement", "isSVGElement", "SVGElement", "getOwnerDocument", "useIsomorphicLayoutEffect", "useLayoutEffect", "useEffect", "useEvent", "handler", "handlerRef", "useRef", "current", "useCallback", "args", "useInterval", "intervalRef", "set", "listener", "duration", "setInterval", "clear", "clearInterval", "useLatestValue", "value", "dependencies", "valueRef", "useLazyMemo", "callback", "newValue", "useNodeRef", "onChange", "onChangeHandler", "setNodeRef", "usePrevious", "ids", "useUniqueId", "prefix", "id", "createAdjustmentFn", "modifier", "object", "adjustments", "reduce", "accumulator", "adjustment", "entries", "key", "valueAdjustment", "add", "subtract", "hasViewportRelativeCoordinates", "event", "isKeyboardEvent", "KeyboardEvent", "isTouchEvent", "TouchEvent", "getEventCoordinates", "touches", "length", "clientX", "x", "clientY", "y", "changedTouches", "CSS", "freeze", "Translate", "transform", "Math", "round", "Scale", "scaleX", "scaleY", "Transform", "join", "Transition", "property", "easing", "SELECTOR", "findFirstFocusableNode", "matches", "querySelector"] +} diff --git a/node_modules/.vite/deps/chunk-JV5O627A.js b/node_modules/.vite/deps/chunk-CSR2432P.js similarity index 85% rename from node_modules/.vite/deps/chunk-JV5O627A.js rename to node_modules/.vite/deps/chunk-CSR2432P.js index 275263ae..f848bb83 100644 --- a/node_modules/.vite/deps/chunk-JV5O627A.js +++ b/node_modules/.vite/deps/chunk-CSR2432P.js @@ -1,11 +1,8 @@ -import { - useEscapeKeydown -} from "./chunk-J3JCCWF4.js"; import { composeEventHandlers, useCallbackRef, useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive, dispatchDiscreteCustomEvent @@ -27,19 +24,36 @@ import { } from "./chunk-4MBMRILA.js"; // node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs +var React2 = __toESM(require_react(), 1); + +// node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs var React = __toESM(require_react(), 1); +function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis == null ? void 0 : globalThis.document) { + const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp); + React.useEffect(() => { + const handleKeyDown = (event) => { + if (event.key === "Escape") { + onEscapeKeyDown(event); + } + }; + ownerDocument.addEventListener("keydown", handleKeyDown, { capture: true }); + return () => ownerDocument.removeEventListener("keydown", handleKeyDown, { capture: true }); + }, [onEscapeKeyDown, ownerDocument]); +} + +// node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); var DISMISSABLE_LAYER_NAME = "DismissableLayer"; var CONTEXT_UPDATE = "dismissableLayer.update"; var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside"; var FOCUS_OUTSIDE = "dismissableLayer.focusOutside"; var originalBodyPointerEvents; -var DismissableLayerContext = React.createContext({ +var DismissableLayerContext = React2.createContext({ layers: /* @__PURE__ */ new Set(), layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(), branches: /* @__PURE__ */ new Set() }); -var DismissableLayer = React.forwardRef( +var DismissableLayer = React2.forwardRef( (props, forwardedRef) => { const { disableOutsidePointerEvents = false, @@ -50,10 +64,10 @@ var DismissableLayer = React.forwardRef( onDismiss, ...layerProps } = props; - const context = React.useContext(DismissableLayerContext); - const [node, setNode] = React.useState(null); + const context = React2.useContext(DismissableLayerContext); + const [node, setNode] = React2.useState(null); const ownerDocument = (node == null ? void 0 : node.ownerDocument) ?? (globalThis == null ? void 0 : globalThis.document); - const [, force] = React.useState({}); + const [, force] = React2.useState({}); const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)); const layers = Array.from(context.layers); const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); @@ -86,7 +100,7 @@ var DismissableLayer = React.forwardRef( onDismiss(); } }, ownerDocument); - React.useEffect(() => { + React2.useEffect(() => { if (!node) return; if (disableOutsidePointerEvents) { if (context.layersWithOutsidePointerEventsDisabled.size === 0) { @@ -103,7 +117,7 @@ var DismissableLayer = React.forwardRef( } }; }, [node, ownerDocument, disableOutsidePointerEvents, context]); - React.useEffect(() => { + React2.useEffect(() => { return () => { if (!node) return; context.layers.delete(node); @@ -111,7 +125,7 @@ var DismissableLayer = React.forwardRef( dispatchUpdate(); }; }, [node, context]); - React.useEffect(() => { + React2.useEffect(() => { const handleUpdate = () => force({}); document.addEventListener(CONTEXT_UPDATE, handleUpdate); return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate); @@ -137,11 +151,11 @@ var DismissableLayer = React.forwardRef( ); DismissableLayer.displayName = DISMISSABLE_LAYER_NAME; var BRANCH_NAME = "DismissableLayerBranch"; -var DismissableLayerBranch = React.forwardRef((props, forwardedRef) => { - const context = React.useContext(DismissableLayerContext); - const ref = React.useRef(null); +var DismissableLayerBranch = React2.forwardRef((props, forwardedRef) => { + const context = React2.useContext(DismissableLayerContext); + const ref = React2.useRef(null); const composedRefs = useComposedRefs(forwardedRef, ref); - React.useEffect(() => { + React2.useEffect(() => { const node = ref.current; if (node) { context.branches.add(node); @@ -155,10 +169,10 @@ var DismissableLayerBranch = React.forwardRef((props, forwardedRef) => { DismissableLayerBranch.displayName = BRANCH_NAME; function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { const handlePointerDownOutside = useCallbackRef(onPointerDownOutside); - const isPointerInsideReactTreeRef = React.useRef(false); - const handleClickRef = React.useRef(() => { + const isPointerInsideReactTreeRef = React2.useRef(false); + const handleClickRef = React2.useRef(() => { }); - React.useEffect(() => { + React2.useEffect(() => { const handlePointerDown = (event) => { if (event.target && !isPointerInsideReactTreeRef.current) { let handleAndDispatchPointerDownOutsideEvent2 = function() { @@ -199,8 +213,8 @@ function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis } function useFocusOutside(onFocusOutside, ownerDocument = globalThis == null ? void 0 : globalThis.document) { const handleFocusOutside = useCallbackRef(onFocusOutside); - const isFocusInsideReactTreeRef = React.useRef(false); - React.useEffect(() => { + const isFocusInsideReactTreeRef = React2.useRef(false); + React2.useEffect(() => { const handleFocus = (event) => { if (event.target && !isFocusInsideReactTreeRef.current) { const eventDetail = { originalEvent: event }; @@ -233,14 +247,14 @@ function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) { } // node_modules/@radix-ui/react-portal/dist/index.mjs -var React2 = __toESM(require_react(), 1); +var React3 = __toESM(require_react(), 1); var import_react_dom = __toESM(require_react_dom(), 1); var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); var PORTAL_NAME = "Portal"; -var Portal = React2.forwardRef((props, forwardedRef) => { +var Portal = React3.forwardRef((props, forwardedRef) => { var _a; const { container: containerProp, ...portalProps } = props; - const [mounted, setMounted] = React2.useState(false); + const [mounted, setMounted] = React3.useState(false); useLayoutEffect2(() => setMounted(true), []); const container = containerProp || mounted && ((_a = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a.body); return container ? import_react_dom.default.createPortal((0, import_jsx_runtime2.jsx)(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null; @@ -251,4 +265,4 @@ export { DismissableLayer, Portal }; -//# sourceMappingURL=chunk-JV5O627A.js.map +//# sourceMappingURL=chunk-CSR2432P.js.map diff --git a/node_modules/.vite/deps/chunk-JV5O627A.js.map b/node_modules/.vite/deps/chunk-CSR2432P.js.map similarity index 65% rename from node_modules/.vite/deps/chunk-JV5O627A.js.map rename to node_modules/.vite/deps/chunk-CSR2432P.js.map index 60a4d97e..8545a268 100644 --- a/node_modules/.vite/deps/chunk-JV5O627A.js.map +++ b/node_modules/.vite/deps/chunk-CSR2432P.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx", "../../@radix-ui/react-portal/src/Portal.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set(),\n layersWithOutsidePointerEventsDisabled: new Set(),\n branches: new Set(),\n});\n\ntype DismissableLayerElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n \n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return ;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n", "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | DocumentFragment | null;\n}\n\nconst Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n"], - "mappings": "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", - "names": ["node", "handleAndDispatchPointerDownOutsideEvent", "React", "import_jsx_runtime", "ReactDOM"] + "sources": ["../../@radix-ui/react-dismissable-layer/src/DismissableLayer.tsx", "../../@radix-ui/react-use-escape-keydown/src/useEscapeKeydown.tsx", "../../@radix-ui/react-portal/src/Portal.tsx"], + "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set(),\n layersWithOutsidePointerEventsDisabled: new Set(),\n branches: new Set(),\n});\n\ntype DismissableLayerElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n \n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ElementRef;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return ;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n", "import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener('keydown', handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n", "import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | DocumentFragment | null;\n}\n\nconst Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAuB;;;ACAvB,YAAuB;AAMvB,SAAS,iBACP,qBACA,gBAA0B,yCAAY,UACtC;AACA,QAAM,kBAAkB,eAAe,mBAAmB;AAEpD,EAAA,gBAAU,MAAM;AACpB,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AAC1B,wBAAgB,KAAK;MACvB;IACF;AACA,kBAAc,iBAAiB,WAAW,eAAe,EAAE,SAAS,KAAK,CAAC;AAC1E,WAAO,MAAM,cAAc,oBAAoB,WAAW,eAAe,EAAE,SAAS,KAAK,CAAC;EAC5F,GAAG,CAAC,iBAAiB,aAAa,CAAC;AACrC;;;ADqIM,yBAAA;AA/IN,IAAM,yBAAyB;AAC/B,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;AAC7B,IAAM,gBAAgB;AAEtB,IAAI;AAEJ,IAAM,0BAAgC,qBAAc;EAClD,QAAQ,oBAAI,IAA6B;EACzC,wCAAwC,oBAAI,IAA6B;EACzE,UAAU,oBAAI,IAAmC;AACnD,CAAC;AAsCD,IAAM,mBAAyB;EAC7B,CAAC,OAAO,iBAAiB;AACvB,UAAM;MACJ,8BAA8B;MAC9B;MACA;MACA;MACA;MACA;MACA,GAAG;IACL,IAAI;AACJ,UAAM,UAAgB,kBAAW,uBAAuB;AACxD,UAAM,CAAC,MAAM,OAAO,IAAU,gBAAyC,IAAI;AAC3E,UAAM,iBAAgB,6BAAM,mBAAiB,yCAAY;AACzD,UAAM,CAAC,EAAE,KAAK,IAAU,gBAAS,CAAC,CAAC;AACnC,UAAM,eAAe,gBAAgB,cAAc,CAACC,UAAS,QAAQA,KAAI,CAAC;AAC1E,UAAM,SAAS,MAAM,KAAK,QAAQ,MAAM;AACxC,UAAM,CAAC,4CAA4C,IAAI,CAAC,GAAG,QAAQ,sCAAsC,EAAE,MAAM,EAAE;AACnH,UAAM,oDAAoD,OAAO,QAAQ,4CAA4C;AACrH,UAAM,QAAQ,OAAO,OAAO,QAAQ,IAAI,IAAI;AAC5C,UAAM,8BAA8B,QAAQ,uCAAuC,OAAO;AAC1F,UAAM,yBAAyB,SAAS;AAExC,UAAM,qBAAqB,sBAAsB,CAAC,UAAU;AAC1D,YAAM,SAAS,MAAM;AACrB,YAAM,wBAAwB,CAAC,GAAG,QAAQ,QAAQ,EAAE,KAAK,CAAC,WAAW,OAAO,SAAS,MAAM,CAAC;AAC5F,UAAI,CAAC,0BAA0B,sBAAuB;AACtD,mEAAuB;AACvB,6DAAoB;AACpB,UAAI,CAAC,MAAM,iBAAkB;IAC/B,GAAG,aAAa;AAEhB,UAAM,eAAe,gBAAgB,CAAC,UAAU;AAC9C,YAAM,SAAS,MAAM;AACrB,YAAM,kBAAkB,CAAC,GAAG,QAAQ,QAAQ,EAAE,KAAK,CAAC,WAAW,OAAO,SAAS,MAAM,CAAC;AACtF,UAAI,gBAAiB;AACrB,uDAAiB;AACjB,6DAAoB;AACpB,UAAI,CAAC,MAAM,iBAAkB;IAC/B,GAAG,aAAa;AAEhB,qBAAiB,CAAC,UAAU;AAC1B,YAAM,iBAAiB,UAAU,QAAQ,OAAO,OAAO;AACvD,UAAI,CAAC,eAAgB;AACrB,yDAAkB;AAClB,UAAI,CAAC,MAAM,oBAAoB,WAAW;AACxC,cAAM,eAAe;AACrB,kBAAU;MACZ;IACF,GAAG,aAAa;AAEV,IAAA,iBAAU,MAAM;AACpB,UAAI,CAAC,KAAM;AACX,UAAI,6BAA6B;AAC/B,YAAI,QAAQ,uCAAuC,SAAS,GAAG;AAC7D,sCAA4B,cAAc,KAAK,MAAM;AACrD,wBAAc,KAAK,MAAM,gBAAgB;QAC3C;AACA,gBAAQ,uCAAuC,IAAI,IAAI;MACzD;AACA,cAAQ,OAAO,IAAI,IAAI;AACvB,qBAAe;AACf,aAAO,MAAM;AACX,YACE,+BACA,QAAQ,uCAAuC,SAAS,GACxD;AACA,wBAAc,KAAK,MAAM,gBAAgB;QAC3C;MACF;IACF,GAAG,CAAC,MAAM,eAAe,6BAA6B,OAAO,CAAC;AAQxD,IAAA,iBAAU,MAAM;AACpB,aAAO,MAAM;AACX,YAAI,CAAC,KAAM;AACX,gBAAQ,OAAO,OAAO,IAAI;AAC1B,gBAAQ,uCAAuC,OAAO,IAAI;AAC1D,uBAAe;MACjB;IACF,GAAG,CAAC,MAAM,OAAO,CAAC;AAEZ,IAAA,iBAAU,MAAM;AACpB,YAAM,eAAe,MAAM,MAAM,CAAC,CAAC;AACnC,eAAS,iBAAiB,gBAAgB,YAAY;AACtD,aAAO,MAAM,SAAS,oBAAoB,gBAAgB,YAAY;IACxE,GAAG,CAAC,CAAC;AAEL,eACE;MAAC,UAAU;MAAV;QACE,GAAG;QACJ,KAAK;QACL,OAAO;UACL,eAAe,8BACX,yBACE,SACA,SACF;UACJ,GAAG,MAAM;QACX;QACA,gBAAgB,qBAAqB,MAAM,gBAAgB,aAAa,cAAc;QACtF,eAAe,qBAAqB,MAAM,eAAe,aAAa,aAAa;QACnF,sBAAsB;UACpB,MAAM;UACN,mBAAmB;QACrB;MAAA;IACF;EAEJ;AACF;AAEA,iBAAiB,cAAc;AAM/B,IAAM,cAAc;AAKpB,IAAM,yBAA+B,kBAGnC,CAAC,OAAO,iBAAiB;AACzB,QAAM,UAAgB,kBAAW,uBAAuB;AACxD,QAAM,MAAY,cAAsC,IAAI;AAC5D,QAAM,eAAe,gBAAgB,cAAc,GAAG;AAEhD,EAAA,iBAAU,MAAM;AACpB,UAAM,OAAO,IAAI;AACjB,QAAI,MAAM;AACR,cAAQ,SAAS,IAAI,IAAI;AACzB,aAAO,MAAM;AACX,gBAAQ,SAAS,OAAO,IAAI;MAC9B;IACF;EACF,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,aAAO,wBAAC,UAAU,KAAV,EAAe,GAAG,OAAO,KAAK,aAAA,CAAc;AACtD,CAAC;AAED,uBAAuB,cAAc;AAYrC,SAAS,sBACP,sBACA,gBAA0B,yCAAY,UACtC;AACA,QAAM,2BAA2B,eAAe,oBAAoB;AACpE,QAAM,8BAAoC,cAAO,KAAK;AACtD,QAAM,iBAAuB,cAAO,MAAM;EAAC,CAAC;AAEtC,EAAA,iBAAU,MAAM;AACpB,UAAM,oBAAoB,CAAC,UAAwB;AACjD,UAAI,MAAM,UAAU,CAAC,4BAA4B,SAAS;AAGxD,YAASC,4CAAT,WAAoD;AAClD;YACE;YACA;YACA;YACA,EAAE,UAAU,KAAK;UACnB;QACF;AAPS,YAAA,2CAAAA;AAFT,cAAM,cAAc,EAAE,eAAe,MAAM;AAuB3C,YAAI,MAAM,gBAAgB,SAAS;AACjC,wBAAc,oBAAoB,SAAS,eAAe,OAAO;AACjE,yBAAe,UAAUA;AACzB,wBAAc,iBAAiB,SAAS,eAAe,SAAS,EAAE,MAAM,KAAK,CAAC;QAChF,OAAO;AACLA,oDAAyC;QAC3C;MACF,OAAO;AAGL,sBAAc,oBAAoB,SAAS,eAAe,OAAO;MACnE;AACA,kCAA4B,UAAU;IACxC;AAcA,UAAM,UAAU,OAAO,WAAW,MAAM;AACtC,oBAAc,iBAAiB,eAAe,iBAAiB;IACjE,GAAG,CAAC;AACJ,WAAO,MAAM;AACX,aAAO,aAAa,OAAO;AAC3B,oBAAc,oBAAoB,eAAe,iBAAiB;AAClE,oBAAc,oBAAoB,SAAS,eAAe,OAAO;IACnE;EACF,GAAG,CAAC,eAAe,wBAAwB,CAAC;AAE5C,SAAO;;IAEL,sBAAsB,MAAO,4BAA4B,UAAU;EACrE;AACF;AAMA,SAAS,gBACP,gBACA,gBAA0B,yCAAY,UACtC;AACA,QAAM,qBAAqB,eAAe,cAAc;AACxD,QAAM,4BAAkC,cAAO,KAAK;AAE9C,EAAA,iBAAU,MAAM;AACpB,UAAM,cAAc,CAAC,UAAsB;AACzC,UAAI,MAAM,UAAU,CAAC,0BAA0B,SAAS;AACtD,cAAM,cAAc,EAAE,eAAe,MAAM;AAC3C,qCAA6B,eAAe,oBAAoB,aAAa;UAC3E,UAAU;QACZ,CAAC;MACH;IACF;AACA,kBAAc,iBAAiB,WAAW,WAAW;AACrD,WAAO,MAAM,cAAc,oBAAoB,WAAW,WAAW;EACvE,GAAG,CAAC,eAAe,kBAAkB,CAAC;AAEtC,SAAO;IACL,gBAAgB,MAAO,0BAA0B,UAAU;IAC3D,eAAe,MAAO,0BAA0B,UAAU;EAC5D;AACF;AAEA,SAAS,iBAAiB;AACxB,QAAM,QAAQ,IAAI,YAAY,cAAc;AAC5C,WAAS,cAAc,KAAK;AAC9B;AAEA,SAAS,6BACP,MACA,SACA,QACA,EAAE,SAAS,GACX;AACA,QAAM,SAAS,OAAO,cAAc;AACpC,QAAM,QAAQ,IAAI,YAAY,MAAM,EAAE,SAAS,OAAO,YAAY,MAAM,OAAO,CAAC;AAChF,MAAI,QAAS,QAAO,iBAAiB,MAAM,SAA0B,EAAE,MAAM,KAAK,CAAC;AAEnF,MAAI,UAAU;AACZ,gCAA4B,QAAQ,KAAK;EAC3C,OAAO;AACL,WAAO,cAAc,KAAK;EAC5B;AACF;;;AE3VA,IAAAC,SAAuB;AACvB,uBAAqB;AAyBO,IAAAC,sBAAA;AAjB5B,IAAM,cAAc;AAWpB,IAAM,SAAe,kBAAuC,CAAC,OAAO,iBAAiB;;AACnF,QAAM,EAAE,WAAW,eAAe,GAAG,YAAY,IAAI;AACrD,QAAM,CAAC,SAAS,UAAU,IAAU,gBAAS,KAAK;AAClD,mBAAgB,MAAM,WAAW,IAAI,GAAG,CAAC,CAAC;AAC1C,QAAM,YAAY,iBAAkB,aAAW,8CAAY,aAAZ,mBAAsB;AACrE,SAAO,YACH,iBAAAC,QAAS,iBAAa,yBAAC,UAAU,KAAV,EAAe,GAAG,aAAa,KAAK,aAAA,CAAc,GAAI,SAAS,IACtF;AACN,CAAC;AAED,OAAO,cAAc;", + "names": ["React", "node", "handleAndDispatchPointerDownOutsideEvent", "React", "import_jsx_runtime", "ReactDOM"] } diff --git a/node_modules/.vite/deps/chunk-HD7ZGEUK.js b/node_modules/.vite/deps/chunk-HD7ZGEUK.js new file mode 100644 index 00000000..8de62100 --- /dev/null +++ b/node_modules/.vite/deps/chunk-HD7ZGEUK.js @@ -0,0 +1,370 @@ +import { + Combination_default, + FocusScope, + hideOthers, + useFocusGuards +} from "./chunk-3PHEZ67U.js"; +import { + DismissableLayer, + Portal +} from "./chunk-CSR2432P.js"; +import { + useId +} from "./chunk-ZZUMGTHG.js"; +import { + Presence +} from "./chunk-MZLEVI2I.js"; +import { + useControllableState +} from "./chunk-I6MWER2B.js"; +import { + composeEventHandlers, + createContext2, + createContextScope +} from "./chunk-ILYE3ZA7.js"; +import { + Primitive +} from "./chunk-H55D7VYG.js"; +import { + Slot, + useComposedRefs +} from "./chunk-4WIT4MX7.js"; +import { + require_jsx_runtime +} from "./chunk-S77I6LSE.js"; +import { + require_react +} from "./chunk-3TFVT2CW.js"; +import { + __toESM +} from "./chunk-4MBMRILA.js"; + +// node_modules/@radix-ui/react-dialog/dist/index.mjs +var React = __toESM(require_react(), 1); +var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); +var DIALOG_NAME = "Dialog"; +var [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME); +var [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME); +var Dialog = (props) => { + const { + __scopeDialog, + children, + open: openProp, + defaultOpen, + onOpenChange, + modal = true + } = props; + const triggerRef = React.useRef(null); + const contentRef = React.useRef(null); + const [open = false, setOpen] = useControllableState({ + prop: openProp, + defaultProp: defaultOpen, + onChange: onOpenChange + }); + return (0, import_jsx_runtime.jsx)( + DialogProvider, + { + scope: __scopeDialog, + triggerRef, + contentRef, + contentId: useId(), + titleId: useId(), + descriptionId: useId(), + open, + onOpenChange: setOpen, + onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), + modal, + children + } + ); +}; +Dialog.displayName = DIALOG_NAME; +var TRIGGER_NAME = "DialogTrigger"; +var DialogTrigger = React.forwardRef( + (props, forwardedRef) => { + const { __scopeDialog, ...triggerProps } = props; + const context = useDialogContext(TRIGGER_NAME, __scopeDialog); + const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef); + return (0, import_jsx_runtime.jsx)( + Primitive.button, + { + type: "button", + "aria-haspopup": "dialog", + "aria-expanded": context.open, + "aria-controls": context.contentId, + "data-state": getState(context.open), + ...triggerProps, + ref: composedTriggerRef, + onClick: composeEventHandlers(props.onClick, context.onOpenToggle) + } + ); + } +); +DialogTrigger.displayName = TRIGGER_NAME; +var PORTAL_NAME = "DialogPortal"; +var [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, { + forceMount: void 0 +}); +var DialogPortal = (props) => { + const { __scopeDialog, forceMount, children, container } = props; + const context = useDialogContext(PORTAL_NAME, __scopeDialog); + return (0, import_jsx_runtime.jsx)(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime.jsx)(Portal, { asChild: true, container, children: child }) })) }); +}; +DialogPortal.displayName = PORTAL_NAME; +var OVERLAY_NAME = "DialogOverlay"; +var DialogOverlay = React.forwardRef( + (props, forwardedRef) => { + const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog); + const { forceMount = portalContext.forceMount, ...overlayProps } = props; + const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog); + return context.modal ? (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: (0, import_jsx_runtime.jsx)(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null; + } +); +DialogOverlay.displayName = OVERLAY_NAME; +var DialogOverlayImpl = React.forwardRef( + (props, forwardedRef) => { + const { __scopeDialog, ...overlayProps } = props; + const context = useDialogContext(OVERLAY_NAME, __scopeDialog); + return ( + // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll` + // ie. when `Overlay` and `Content` are siblings + (0, import_jsx_runtime.jsx)(Combination_default, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: (0, import_jsx_runtime.jsx)( + Primitive.div, + { + "data-state": getState(context.open), + ...overlayProps, + ref: forwardedRef, + style: { pointerEvents: "auto", ...overlayProps.style } + } + ) }) + ); + } +); +var CONTENT_NAME = "DialogContent"; +var DialogContent = React.forwardRef( + (props, forwardedRef) => { + const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog); + const { forceMount = portalContext.forceMount, ...contentProps } = props; + const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); + return (0, import_jsx_runtime.jsx)(Presence, { present: forceMount || context.open, children: context.modal ? (0, import_jsx_runtime.jsx)(DialogContentModal, { ...contentProps, ref: forwardedRef }) : (0, import_jsx_runtime.jsx)(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) }); + } +); +DialogContent.displayName = CONTENT_NAME; +var DialogContentModal = React.forwardRef( + (props, forwardedRef) => { + const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); + const contentRef = React.useRef(null); + const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef); + React.useEffect(() => { + const content = contentRef.current; + if (content) return hideOthers(content); + }, []); + return (0, import_jsx_runtime.jsx)( + DialogContentImpl, + { + ...props, + ref: composedRefs, + trapFocus: context.open, + disableOutsidePointerEvents: true, + onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => { + var _a; + event.preventDefault(); + (_a = context.triggerRef.current) == null ? void 0 : _a.focus(); + }), + onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => { + const originalEvent = event.detail.originalEvent; + const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; + const isRightClick = originalEvent.button === 2 || ctrlLeftClick; + if (isRightClick) event.preventDefault(); + }), + onFocusOutside: composeEventHandlers( + props.onFocusOutside, + (event) => event.preventDefault() + ) + } + ); + } +); +var DialogContentNonModal = React.forwardRef( + (props, forwardedRef) => { + const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); + const hasInteractedOutsideRef = React.useRef(false); + const hasPointerDownOutsideRef = React.useRef(false); + return (0, import_jsx_runtime.jsx)( + DialogContentImpl, + { + ...props, + ref: forwardedRef, + trapFocus: false, + disableOutsidePointerEvents: false, + onCloseAutoFocus: (event) => { + var _a, _b; + (_a = props.onCloseAutoFocus) == null ? void 0 : _a.call(props, event); + if (!event.defaultPrevented) { + if (!hasInteractedOutsideRef.current) (_b = context.triggerRef.current) == null ? void 0 : _b.focus(); + event.preventDefault(); + } + hasInteractedOutsideRef.current = false; + hasPointerDownOutsideRef.current = false; + }, + onInteractOutside: (event) => { + var _a, _b; + (_a = props.onInteractOutside) == null ? void 0 : _a.call(props, event); + if (!event.defaultPrevented) { + hasInteractedOutsideRef.current = true; + if (event.detail.originalEvent.type === "pointerdown") { + hasPointerDownOutsideRef.current = true; + } + } + const target = event.target; + const targetIsTrigger = (_b = context.triggerRef.current) == null ? void 0 : _b.contains(target); + if (targetIsTrigger) event.preventDefault(); + if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) { + event.preventDefault(); + } + } + } + ); + } +); +var DialogContentImpl = React.forwardRef( + (props, forwardedRef) => { + const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props; + const context = useDialogContext(CONTENT_NAME, __scopeDialog); + const contentRef = React.useRef(null); + const composedRefs = useComposedRefs(forwardedRef, contentRef); + useFocusGuards(); + return (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [ + (0, import_jsx_runtime.jsx)( + FocusScope, + { + asChild: true, + loop: true, + trapped: trapFocus, + onMountAutoFocus: onOpenAutoFocus, + onUnmountAutoFocus: onCloseAutoFocus, + children: (0, import_jsx_runtime.jsx)( + DismissableLayer, + { + role: "dialog", + id: context.contentId, + "aria-describedby": context.descriptionId, + "aria-labelledby": context.titleId, + "data-state": getState(context.open), + ...contentProps, + ref: composedRefs, + onDismiss: () => context.onOpenChange(false) + } + ) + } + ), + (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [ + (0, import_jsx_runtime.jsx)(TitleWarning, { titleId: context.titleId }), + (0, import_jsx_runtime.jsx)(DescriptionWarning, { contentRef, descriptionId: context.descriptionId }) + ] }) + ] }); + } +); +var TITLE_NAME = "DialogTitle"; +var DialogTitle = React.forwardRef( + (props, forwardedRef) => { + const { __scopeDialog, ...titleProps } = props; + const context = useDialogContext(TITLE_NAME, __scopeDialog); + return (0, import_jsx_runtime.jsx)(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef }); + } +); +DialogTitle.displayName = TITLE_NAME; +var DESCRIPTION_NAME = "DialogDescription"; +var DialogDescription = React.forwardRef( + (props, forwardedRef) => { + const { __scopeDialog, ...descriptionProps } = props; + const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog); + return (0, import_jsx_runtime.jsx)(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef }); + } +); +DialogDescription.displayName = DESCRIPTION_NAME; +var CLOSE_NAME = "DialogClose"; +var DialogClose = React.forwardRef( + (props, forwardedRef) => { + const { __scopeDialog, ...closeProps } = props; + const context = useDialogContext(CLOSE_NAME, __scopeDialog); + return (0, import_jsx_runtime.jsx)( + Primitive.button, + { + type: "button", + ...closeProps, + ref: forwardedRef, + onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false)) + } + ); + } +); +DialogClose.displayName = CLOSE_NAME; +function getState(open) { + return open ? "open" : "closed"; +} +var TITLE_WARNING_NAME = "DialogTitleWarning"; +var [WarningProvider, useWarningContext] = createContext2(TITLE_WARNING_NAME, { + contentName: CONTENT_NAME, + titleName: TITLE_NAME, + docsSlug: "dialog" +}); +var TitleWarning = ({ titleId }) => { + const titleWarningContext = useWarningContext(TITLE_WARNING_NAME); + const MESSAGE = `\`${titleWarningContext.contentName}\` requires a \`${titleWarningContext.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`; + React.useEffect(() => { + if (titleId) { + const hasTitle = document.getElementById(titleId); + if (!hasTitle) console.error(MESSAGE); + } + }, [MESSAGE, titleId]); + return null; +}; +var DESCRIPTION_WARNING_NAME = "DialogDescriptionWarning"; +var DescriptionWarning = ({ contentRef, descriptionId }) => { + const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME); + const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${descriptionWarningContext.contentName}}.`; + React.useEffect(() => { + var _a; + const describedById = (_a = contentRef.current) == null ? void 0 : _a.getAttribute("aria-describedby"); + if (descriptionId && describedById) { + const hasDescription = document.getElementById(descriptionId); + if (!hasDescription) console.warn(MESSAGE); + } + }, [MESSAGE, contentRef, descriptionId]); + return null; +}; +var Root = Dialog; +var Trigger = DialogTrigger; +var Portal2 = DialogPortal; +var Overlay = DialogOverlay; +var Content = DialogContent; +var Title = DialogTitle; +var Description = DialogDescription; +var Close = DialogClose; + +export { + createDialogScope, + Dialog, + DialogTrigger, + DialogPortal, + DialogOverlay, + DialogContent, + DialogTitle, + DialogDescription, + DialogClose, + WarningProvider, + Root, + Trigger, + Portal2 as Portal, + Overlay, + Content, + Title, + Description, + Close +}; +//# sourceMappingURL=chunk-HD7ZGEUK.js.map diff --git a/node_modules/.vite/deps/chunk-HD7ZGEUK.js.map b/node_modules/.vite/deps/chunk-HD7ZGEUK.js.map new file mode 100644 index 00000000..d9e63062 --- /dev/null +++ b/node_modules/.vite/deps/chunk-HD7ZGEUK.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@radix-ui/react-dialog/src/Dialog.tsx"], + "sourcesContent": ["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContext, createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { hideOthers } from 'aria-hidden';\nimport { Slot } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps

= P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject;\n contentRef: React.RefObject;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC = (props: ScopedProps) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n return (\n setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n \n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ElementRef;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n \n );\n }\n);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC = (props: ScopedProps) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n \n {React.Children.map(children, (child) => (\n \n \n {child}\n \n \n ))}\n \n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n \n \n \n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst DialogOverlayImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n \n \n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n \n {context.modal ? (\n \n ) : (\n \n )}\n \n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit {}\n\nconst DialogContentModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ElementRef;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef;\ntype FocusScopeProps = React.ComponentPropsWithoutRef;\ninterface DialogContentImplProps extends Omit {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n \n context.onOpenChange(false)}\n />\n \n {process.env.NODE_ENV !== 'production' && (\n <>\n \n \n \n )}\n \n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ElementRef;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ElementRef;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return ;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ElementRef;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef(\n (props: ScopedProps, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n"], + "mappings": "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", + "names": ["Portal"] +} diff --git a/node_modules/.vite/deps/chunk-HQGJFDI6.js.map b/node_modules/.vite/deps/chunk-HQGJFDI6.js.map deleted file mode 100644 index 730248df..00000000 --- a/node_modules/.vite/deps/chunk-HQGJFDI6.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../react-hook-form/src/utils/isCheckBoxInput.ts", "../../react-hook-form/src/utils/isDateObject.ts", "../../react-hook-form/src/utils/isNullOrUndefined.ts", "../../react-hook-form/src/utils/isObject.ts", "../../react-hook-form/src/logic/getEventValue.ts", "../../react-hook-form/src/logic/getNodeParentName.ts", "../../react-hook-form/src/logic/isNameInFieldArray.ts", "../../react-hook-form/src/utils/isPlainObject.ts", "../../react-hook-form/src/utils/isWeb.ts", "../../react-hook-form/src/utils/cloneObject.ts", "../../react-hook-form/src/utils/compact.ts", "../../react-hook-form/src/utils/isUndefined.ts", "../../react-hook-form/src/utils/get.ts", "../../react-hook-form/src/utils/isBoolean.ts", "../../react-hook-form/src/utils/isKey.ts", "../../react-hook-form/src/utils/stringToPath.ts", "../../react-hook-form/src/utils/set.ts", "../../react-hook-form/src/constants.ts", "../../react-hook-form/src/useFormContext.tsx", "../../react-hook-form/src/logic/getProxyFormState.ts", "../../react-hook-form/src/utils/isEmptyObject.ts", "../../react-hook-form/src/logic/shouldRenderFormState.ts", "../../react-hook-form/src/utils/convertToArrayPayload.ts", "../../react-hook-form/src/logic/shouldSubscribeByName.ts", "../../react-hook-form/src/useSubscribe.ts", "../../react-hook-form/src/useFormState.ts", "../../react-hook-form/src/utils/isString.ts", "../../react-hook-form/src/logic/generateWatchOutput.ts", "../../react-hook-form/src/useWatch.ts", "../../react-hook-form/src/useController.ts", "../../react-hook-form/src/controller.tsx", "../../react-hook-form/src/form.tsx", "../../react-hook-form/src/logic/appendErrors.ts", "../../react-hook-form/src/logic/generateId.ts", "../../react-hook-form/src/logic/getFocusFieldName.ts", "../../react-hook-form/src/logic/getValidationModes.ts", "../../react-hook-form/src/logic/isWatched.ts", "../../react-hook-form/src/logic/iterateFieldsByAction.ts", "../../react-hook-form/src/logic/updateFieldArrayRootError.ts", "../../react-hook-form/src/utils/isFileInput.ts", "../../react-hook-form/src/utils/isFunction.ts", "../../react-hook-form/src/utils/isHTMLElement.ts", "../../react-hook-form/src/utils/isMessage.ts", "../../react-hook-form/src/utils/isRadioInput.ts", "../../react-hook-form/src/utils/isRegex.ts", "../../react-hook-form/src/logic/getCheckboxValue.ts", "../../react-hook-form/src/logic/getRadioValue.ts", "../../react-hook-form/src/logic/getValidateError.ts", "../../react-hook-form/src/logic/getValueAndMessage.ts", "../../react-hook-form/src/logic/validateField.ts", "../../react-hook-form/src/utils/append.ts", "../../react-hook-form/src/utils/fillEmptyArray.ts", "../../react-hook-form/src/utils/insert.ts", "../../react-hook-form/src/utils/move.ts", "../../react-hook-form/src/utils/prepend.ts", "../../react-hook-form/src/utils/remove.ts", "../../react-hook-form/src/utils/swap.ts", "../../react-hook-form/src/utils/unset.ts", "../../react-hook-form/src/utils/update.ts", "../../react-hook-form/src/useFieldArray.ts", "../../react-hook-form/src/utils/createSubject.ts", "../../react-hook-form/src/utils/isPrimitive.ts", "../../react-hook-form/src/utils/deepEqual.ts", "../../react-hook-form/src/utils/isMultipleSelect.ts", "../../react-hook-form/src/utils/isRadioOrCheckbox.ts", "../../react-hook-form/src/utils/live.ts", "../../react-hook-form/src/utils/objectHasFunction.ts", "../../react-hook-form/src/logic/getDirtyFields.ts", "../../react-hook-form/src/logic/getFieldValueAs.ts", "../../react-hook-form/src/logic/getFieldValue.ts", "../../react-hook-form/src/logic/getResolverOptions.ts", "../../react-hook-form/src/logic/getRuleValue.ts", "../../react-hook-form/src/logic/hasPromiseValidation.ts", "../../react-hook-form/src/logic/hasValidation.ts", "../../react-hook-form/src/logic/schemaErrorLookup.ts", "../../react-hook-form/src/logic/skipValidation.ts", "../../react-hook-form/src/logic/unsetEmptyArray.ts", "../../react-hook-form/src/logic/createFormControl.ts", "../../react-hook-form/src/useForm.ts"], - "sourcesContent": ["import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'checkbox';\n", "export default (value: unknown): value is Date => value instanceof Date;\n", "export default (value: unknown): value is null | undefined => value == null;\n", "import isDateObject from './isDateObject';\nimport isNullOrUndefined from './isNullOrUndefined';\n\nexport const isObjectType = (value: unknown): value is object =>\n typeof value === 'object';\n\nexport default (value: unknown): value is T =>\n !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n", "import isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isObject from '../utils/isObject';\n\ntype Event = { target: any };\n\nexport default (event: unknown) =>\n isObject(event) && (event as Event).target\n ? isCheckBoxInput((event as Event).target)\n ? (event as Event).target.checked\n : (event as Event).target.value\n : event;\n", "export default (name: string) =>\n name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n", "import { InternalFieldName } from '../types';\n\nimport getNodeParentName from './getNodeParentName';\n\nexport default (names: Set, name: InternalFieldName) =>\n names.has(getNodeParentName(name));\n", "import isObject from './isObject';\n\nexport default (tempObject: object) => {\n const prototypeCopy =\n tempObject.constructor && tempObject.constructor.prototype;\n\n return (\n isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf')\n );\n};\n", "export default typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n", "import isObject from './isObject';\nimport isPlainObject from './isPlainObject';\nimport isWeb from './isWeb';\n\nexport default function cloneObject(data: T): T {\n let copy: any;\n const isArray = Array.isArray(data);\n\n if (data instanceof Date) {\n copy = new Date(data);\n } else if (data instanceof Set) {\n copy = new Set(data);\n } else if (\n !(isWeb && (data instanceof Blob || data instanceof FileList)) &&\n (isArray || isObject(data))\n ) {\n copy = isArray ? [] : {};\n\n if (!isArray && !isPlainObject(data)) {\n copy = data;\n } else {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n }\n } else {\n return data;\n }\n\n return copy;\n}\n", "export default (value: TValue[]) =>\n Array.isArray(value) ? value.filter(Boolean) : [];\n", "export default (val: unknown): val is undefined => val === undefined;\n", "import compact from './compact';\nimport isNullOrUndefined from './isNullOrUndefined';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\n\nexport default (object: T, path?: string, defaultValue?: unknown): any => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n\n const result = compact(path.split(/[,[\\].]+?/)).reduce(\n (result, key) =>\n isNullOrUndefined(result) ? result : result[key as keyof {}],\n object,\n );\n\n return isUndefined(result) || result === object\n ? isUndefined(object[path as keyof T])\n ? defaultValue\n : object[path as keyof T]\n : result;\n};\n", "export default (value: unknown): value is boolean => typeof value === 'boolean';\n", "export default (value: string) => /^\\w*$/.test(value);\n", "import compact from './compact';\n\nexport default (input: string): string[] =>\n compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n", "import { FieldValues } from '../types';\n\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport stringToPath from './stringToPath';\n\nexport default (object: FieldValues, path: string, value?: unknown) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n\n if (key === '__proto__') {\n return;\n }\n\n object[key] = newValue;\n object = object[key];\n }\n return object;\n};\n", "export const EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n} as const;\n\nexport const VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n} as const;\n\nexport const INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n} as const;\n", "import React from 'react';\n\nimport { FieldValues, FormProviderProps, UseFormReturn } from './types';\n\nconst HookFormContext = React.createContext(null);\n\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * \n *

\n * \n * \n * \n * \n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return ;\n * }\n * ```\n */\nexport const useFormContext = <\n TFieldValues extends FieldValues,\n TContext = any,\n TransformedValues extends FieldValues | undefined = undefined,\n>(): UseFormReturn =>\n React.useContext(HookFormContext) as UseFormReturn<\n TFieldValues,\n TContext,\n TransformedValues\n >;\n\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * \n *
\n * \n * \n * \n *
\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return ;\n * }\n * ```\n */\nexport const FormProvider = <\n TFieldValues extends FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = undefined,\n>(\n props: FormProviderProps,\n) => {\n const { children, ...data } = props;\n return (\n \n {children}\n \n );\n};\n", "import { VALIDATION_MODE } from '../constants';\nimport { Control, FieldValues, FormState, ReadFormState } from '../types';\n\nexport default (\n formState: FormState,\n control: Control,\n localProxyFormState?: ReadFormState,\n isRoot = true,\n) => {\n const result = {\n defaultValues: control._defaultValues,\n } as typeof formState;\n\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key as keyof FormState & keyof ReadFormState;\n\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n\n return result;\n};\n", "import { EmptyObject } from '../types';\n\nimport isObject from './isObject';\n\nexport default (value: unknown): value is EmptyObject =>\n isObject(value) && !Object.keys(value).length;\n", "import { VALIDATION_MODE } from '../constants';\nimport {\n Control,\n FieldValues,\n FormState,\n InternalFieldName,\n ReadFormState,\n} from '../types';\nimport isEmptyObject from '../utils/isEmptyObject';\n\nexport default (\n formStateData: Partial> & { name?: InternalFieldName },\n _proxyFormState: K,\n updateFormState: Control['_updateFormState'],\n isRoot?: boolean,\n) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n\n return (\n isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find(\n (key) =>\n _proxyFormState[key as keyof ReadFormState] ===\n (!isRoot || VALIDATION_MODE.all),\n )\n );\n};\n", "export default (value: T) => (Array.isArray(value) ? value : [value]);\n", "import convertToArrayPayload from '../utils/convertToArrayPayload';\n\nexport default (\n name?: T,\n signalName?: string,\n exact?: boolean,\n) =>\n !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some(\n (currentName) =>\n currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)),\n );\n", "import React from 'react';\n\nimport { Subject } from './utils/createSubject';\n\ntype Props = {\n disabled?: boolean;\n subject: Subject;\n next: (value: T) => void;\n};\n\nexport function useSubscribe(props: Props) {\n const _props = React.useRef(props);\n _props.current = props;\n\n React.useEffect(() => {\n const subscription =\n !props.disabled &&\n _props.current.subject &&\n _props.current.subject.subscribe({\n next: _props.current.next,\n });\n\n return () => {\n subscription && subscription.unsubscribe();\n };\n }, [props.disabled]);\n}\n", "import React from 'react';\n\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport shouldSubscribeByName from './logic/shouldSubscribeByName';\nimport {\n FieldValues,\n FormState,\n InternalFieldName,\n UseFormStateProps,\n UseFormStateReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n *
\n * \n * {dirtyFields.firstName &&

Field is dirty.

}\n * \n *
\n * );\n * }\n * ```\n */\nfunction useFormState(\n props?: UseFormStateProps,\n): UseFormStateReturn {\n const methods = useFormContext();\n const { control = methods.control, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _mounted = React.useRef(true);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n const _name = React.useRef(name);\n\n _name.current = name;\n\n useSubscribe({\n disabled,\n next: (\n value: Partial> & { name?: InternalFieldName },\n ) =>\n _mounted.current &&\n shouldSubscribeByName(\n _name.current as InternalFieldName,\n value.name,\n exact,\n ) &&\n shouldRenderFormState(\n value,\n _localProxyFormState.current,\n control._updateFormState,\n ) &&\n updateFormState({\n ...control._formState,\n ...value,\n }),\n subject: control._subjects.state,\n });\n\n React.useEffect(() => {\n _mounted.current = true;\n _localProxyFormState.current.isValid && control._updateValid(true);\n\n return () => {\n _mounted.current = false;\n };\n }, [control]);\n\n return getProxyFormState(\n formState,\n control,\n _localProxyFormState.current,\n false,\n );\n}\n\nexport { useFormState };\n", "export default (value: unknown): value is string => typeof value === 'string';\n", "import { DeepPartial, FieldValues, Names } from '../types';\nimport get from '../utils/get';\nimport isString from '../utils/isString';\n\nexport default (\n names: string | string[] | undefined,\n _names: Names,\n formValues?: FieldValues,\n isGlobal?: boolean,\n defaultValue?: DeepPartial | unknown,\n) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n\n if (Array.isArray(names)) {\n return names.map(\n (fieldName) => (\n isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)\n ),\n );\n }\n\n isGlobal && (_names.watchAll = true);\n\n return formValues;\n};\n", "import React from 'react';\n\nimport generateWatchOutput from './logic/generateWatchOutput';\nimport shouldSubscribeByName from './logic/shouldSubscribeByName';\nimport cloneObject from './utils/cloneObject';\nimport {\n Control,\n DeepPartialSkipArrayKey,\n FieldPath,\n FieldPathValue,\n FieldPathValues,\n FieldValues,\n InternalFieldName,\n UseWatchProps,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * Subscribe to the entire form values change and re-render at the hook level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * defaultValue: {\n * name: \"data\"\n * },\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n>(props: {\n defaultValue?: DeepPartialSkipArrayKey;\n control?: Control;\n disabled?: boolean;\n exact?: boolean;\n}): DeepPartialSkipArrayKey;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * name: \"fieldA\",\n * defaultValue: \"default value\",\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath = FieldPath,\n>(props: {\n name: TFieldName;\n defaultValue?: FieldPathValue;\n control?: Control;\n disabled?: boolean;\n exact?: boolean;\n}): FieldPathValue;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * name: [\"fieldA\", \"fieldB\"],\n * defaultValue: {\n * fieldA: \"data\",\n * fieldB: \"data\"\n * },\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TFieldNames extends\n readonly FieldPath[] = readonly FieldPath[],\n>(props: {\n name: readonly [...TFieldNames];\n defaultValue?: DeepPartialSkipArrayKey;\n control?: Control;\n disabled?: boolean;\n exact?: boolean;\n}): FieldPathValues;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * // can skip passing down the control into useWatch if the form is wrapped with the FormProvider\n * const values = useWatch()\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n>(): DeepPartialSkipArrayKey;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nexport function useWatch(\n props?: UseWatchProps,\n) {\n const methods = useFormContext();\n const {\n control = methods.control,\n name,\n defaultValue,\n disabled,\n exact,\n } = props || {};\n const _name = React.useRef(name);\n\n _name.current = name;\n\n useSubscribe({\n disabled,\n subject: control._subjects.values,\n next: (formState: { name?: InternalFieldName; values?: FieldValues }) => {\n if (\n shouldSubscribeByName(\n _name.current as InternalFieldName,\n formState.name,\n exact,\n )\n ) {\n updateValue(\n cloneObject(\n generateWatchOutput(\n _name.current as InternalFieldName | InternalFieldName[],\n control._names,\n formState.values || control._formValues,\n false,\n defaultValue,\n ),\n ),\n );\n }\n },\n });\n\n const [value, updateValue] = React.useState(\n control._getWatch(\n name as InternalFieldName,\n defaultValue as DeepPartialSkipArrayKey,\n ),\n );\n\n React.useEffect(() => control._removeUnmounted());\n\n return value;\n}\n", "import React from 'react';\n\nimport getEventValue from './logic/getEventValue';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport cloneObject from './utils/cloneObject';\nimport get from './utils/get';\nimport isBoolean from './utils/isBoolean';\nimport isUndefined from './utils/isUndefined';\nimport set from './utils/set';\nimport { EVENTS } from './constants';\nimport {\n ControllerFieldState,\n Field,\n FieldPath,\n FieldPathValue,\n FieldValues,\n InternalFieldName,\n UseControllerProps,\n UseControllerReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useFormState } from './useFormState';\nimport { useWatch } from './useWatch';\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n *
\n * \n *

{fieldState.isTouched && \"Touched\"}

\n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\n *
\n * );\n * }\n * ```\n */\nexport function useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath = FieldPath,\n>(\n props: UseControllerProps,\n): UseControllerReturn {\n const methods = useFormContext();\n const { name, disabled, control = methods.control, shouldUnregister } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const value = useWatch({\n control,\n name,\n defaultValue: get(\n control._formValues,\n name,\n get(control._defaultValues, name, props.defaultValue),\n ),\n exact: true,\n }) as FieldPathValue;\n const formState = useFormState({\n control,\n name,\n exact: true,\n });\n\n const _registerProps = React.useRef(\n control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }),\n );\n\n React.useEffect(() => {\n const _shouldUnregisterField =\n control._options.shouldUnregister || shouldUnregister;\n\n const updateMounted = (name: InternalFieldName, value: boolean) => {\n const field: Field = get(control._fields, name);\n\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n\n updateMounted(name, true);\n\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n\n return () => {\n (\n isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField\n )\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n\n React.useEffect(() => {\n if (get(control._fields, name)) {\n control._updateDisabledField({\n disabled,\n fields: control._fields,\n name,\n value: get(control._fields, name)._f.value,\n });\n }\n }, [disabled, name, control]);\n\n return {\n field: {\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange: React.useCallback(\n (event) =>\n _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name as InternalFieldName,\n },\n type: EVENTS.CHANGE,\n }),\n [name],\n ),\n onBlur: React.useCallback(\n () =>\n _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name as InternalFieldName,\n },\n type: EVENTS.BLUR,\n }),\n [name, control],\n ),\n ref: React.useCallback(\n (elm) => {\n const field = get(control._fields, name);\n\n if (field && elm) {\n field._f.ref = {\n focus: () => elm.focus(),\n select: () => elm.select(),\n setCustomValidity: (message: string) =>\n elm.setCustomValidity(message),\n reportValidity: () => elm.reportValidity(),\n };\n }\n },\n [control._fields, name],\n ),\n },\n formState,\n fieldState: Object.defineProperties(\n {},\n {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n },\n ) as ControllerFieldState,\n };\n}\n", "import { ControllerProps, FieldPath, FieldValues } from './types';\nimport { useController } from './useController';\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n *
\n * (\n * <>\n * \n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\n *

{fieldState.isTouched ? \"touched\" : \"\"}

\n * \n * )}\n * />\n * \n * );\n * }\n * ```\n */\nconst Controller = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath = FieldPath,\n>(\n props: ControllerProps,\n) => props.render(useController(props));\n\nexport { Controller };\n", "import React from 'react';\n\nimport get from './utils/get';\nimport { FieldValues, FormProps } from './types';\nimport { useFormContext } from './useFormContext';\n\nconst POST_REQUEST = 'post';\n\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n *
\n * \n *

{errors?.root?.server && 'Server error'}

\n * \n *
\n * );\n * }\n * ```\n */\nfunction Form<\n T extends FieldValues,\n U extends FieldValues | undefined = undefined,\n>(props: FormProps) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const {\n control = methods.control,\n onSubmit,\n children,\n action,\n method = POST_REQUEST,\n headers,\n encType,\n onError,\n render,\n onSuccess,\n validateStatus,\n ...rest\n } = props;\n\n const submit = async (event?: React.BaseSyntheticEvent) => {\n let hasError = false;\n let type = '';\n\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n\n try {\n formDataJson = JSON.stringify(data);\n } catch {}\n\n for (const name of control._names.mount) {\n formData.append(name, get(data, name));\n }\n\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n\n const response = await fetch(action, {\n method,\n headers: {\n ...headers,\n ...(encType ? { 'Content-Type': encType } : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n\n if (\n response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)\n ) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n } else {\n onSuccess && onSuccess({ response });\n }\n } catch (error: unknown) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n return render ? (\n <>\n {render({\n submit,\n })}\n \n ) : (\n \n {children}\n \n );\n}\n\nexport { Form };\n", "import {\n InternalFieldErrors,\n InternalFieldName,\n ValidateResult,\n} from '../types';\n\nexport default (\n name: InternalFieldName,\n validateAllFieldCriteria: boolean,\n errors: InternalFieldErrors,\n type: string,\n message: ValidateResult,\n) =>\n validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name]!.types ? errors[name]!.types : {}),\n [type]: message || true,\n },\n }\n : {};\n", "export default () => {\n const d =\n typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n", "import { FieldArrayMethodProps, InternalFieldName } from '../types';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n name: InternalFieldName,\n index: number,\n options: FieldArrayMethodProps = {},\n): string =>\n options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n", "import { VALIDATION_MODE } from '../constants';\nimport { Mode, ValidationModeFlags } from '../types';\n\nexport default (mode?: Mode): ValidationModeFlags => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n", "import { InternalFieldName, Names } from '../types';\n\nexport default (\n name: InternalFieldName,\n _names: Names,\n isBlurEvent?: boolean,\n) =>\n !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some(\n (watchName) =>\n name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length)),\n ));\n", "import { FieldRefs, InternalFieldName, Ref } from '../types';\nimport { get } from '../utils';\nimport isObject from '../utils/isObject';\n\nconst iterateFieldsByAction = (\n fields: FieldRefs,\n action: (ref: Ref, name: string) => 1 | undefined | void,\n fieldsNames?: Set | InternalFieldName[] | 0,\n abortEarly?: boolean,\n) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n\n if (field) {\n const { _f, ...currentField } = field;\n\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n } else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n } else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n } else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\nexport default iterateFieldsByAction;\n", "import {\n FieldError,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n} from '../types';\nimport convertToArrayPayload from '../utils/convertToArrayPayload';\nimport get from '../utils/get';\nimport set from '../utils/set';\n\nexport default (\n errors: FieldErrors,\n error: Partial>,\n name: InternalFieldName,\n): FieldErrors => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'file';\n", "export default (value: unknown): value is Function =>\n typeof value === 'function';\n", "import isWeb from './isWeb';\n\nexport default (value: unknown): value is HTMLElement => {\n if (!isWeb) {\n return false;\n }\n\n const owner = value ? ((value as HTMLElement).ownerDocument as Document) : 0;\n return (\n value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement)\n );\n};\n", "import { Message } from '../types';\nimport isString from '../utils/isString';\n\nexport default (value: unknown): value is Message => isString(value);\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'radio';\n", "export default (value: unknown): value is RegExp => value instanceof RegExp;\n", "import isUndefined from '../utils/isUndefined';\n\ntype CheckboxFieldResult = {\n isValid: boolean;\n value: string | string[] | boolean | undefined;\n};\n\nconst defaultResult: CheckboxFieldResult = {\n value: false,\n isValid: false,\n};\n\nconst validResult = { value: true, isValid: true };\n\nexport default (options?: HTMLInputElement[]): CheckboxFieldResult => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n\n return defaultResult;\n};\n", "type RadioFieldResult = {\n isValid: boolean;\n value: number | string | null;\n};\n\nconst defaultReturn: RadioFieldResult = {\n isValid: false,\n value: null,\n};\n\nexport default (options?: HTMLInputElement[]): RadioFieldResult =>\n Array.isArray(options)\n ? options.reduce(\n (previous, option): RadioFieldResult =>\n option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous,\n defaultReturn,\n )\n : defaultReturn;\n", "import { FieldError, Ref, ValidateResult } from '../types';\nimport isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\n\nexport default function getValidateError(\n result: ValidateResult,\n ref: Ref,\n type = 'validate',\n): FieldError | void {\n if (\n isMessage(result) ||\n (Array.isArray(result) && result.every(isMessage)) ||\n (isBoolean(result) && !result)\n ) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n", "import { ValidationRule } from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\n\nexport default (validationData?: ValidationRule) =>\n isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n", "import { INPUT_VALIDATION_RULES } from '../constants';\nimport {\n Field,\n FieldError,\n FieldValues,\n InternalFieldErrors,\n MaxType,\n Message,\n MinType,\n NativeFieldValue,\n} from '../types';\nimport get from '../utils/get';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isHTMLElement from '../utils/isHTMLElement';\nimport isMessage from '../utils/isMessage';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isRadioInput from '../utils/isRadioInput';\nimport isRegex from '../utils/isRegex';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\n\nimport appendErrors from './appendErrors';\nimport getCheckboxValue from './getCheckboxValue';\nimport getRadioValue from './getRadioValue';\nimport getValidateError from './getValidateError';\nimport getValueAndMessage from './getValueAndMessage';\n\nexport default async (\n field: Field,\n formValues: T,\n validateAllFieldCriteria: boolean,\n shouldUseNativeValidation?: boolean,\n isFieldArray?: boolean,\n): Promise => {\n const {\n ref,\n refs,\n required,\n maxLength,\n minLength,\n min,\n max,\n pattern,\n validate,\n name,\n valueAsNumber,\n mount,\n disabled,\n } = field._f;\n const inputValue: NativeFieldValue = get(formValues, name);\n if (!mount || disabled) {\n return {};\n }\n const inputRef: HTMLInputElement = refs ? refs[0] : (ref as HTMLInputElement);\n const setCustomValidity = (message?: string | boolean) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error: InternalFieldErrors = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty =\n ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(\n null,\n name,\n validateAllFieldCriteria,\n error,\n );\n const getMinMaxMessage = (\n exceedMax: boolean,\n maxLengthMessage: Message,\n minLengthMessage: Message,\n maxType: MaxType = INPUT_VALIDATION_RULES.maxLength,\n minType: MinType = INPUT_VALIDATION_RULES.minLength,\n ) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n\n if (\n isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))\n ) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue as number)) {\n const valueNumber =\n (ref as HTMLInputElement).valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n } else {\n const valueDate =\n (ref as HTMLInputElement).valueAsDate || new Date(inputValue as string);\n const convertTimeToDate = (time: unknown) =>\n new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n !!exceedMax,\n maxOutput.message,\n minOutput.message,\n INPUT_VALIDATION_RULES.max,\n INPUT_VALIDATION_RULES.min,\n );\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name]!.message);\n return error;\n }\n }\n }\n\n if (\n (maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))\n ) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax =\n !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin =\n !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n exceedMax,\n maxLengthOutput.message,\n minLengthOutput.message,\n );\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name]!.message);\n return error;\n }\n }\n }\n\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(\n INPUT_VALIDATION_RULES.validate,\n validateError.message,\n ),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n } else if (isObject(validate)) {\n let validationResult = {} as FieldError;\n\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n\n const validateError = getValidateError(\n await validate[key](inputValue, formValues),\n inputRef,\n key,\n );\n\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n\n setCustomValidity(validateError.message);\n\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n\n setCustomValidity(true);\n return error;\n};\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default (data: T[], value: T | T[]): T[] => [\n ...data,\n ...convertToArrayPayload(value),\n];\n", "export default (value: T | T[]): undefined[] | undefined =>\n Array.isArray(value) ? value.map(() => undefined) : undefined;\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default function insert(data: T[], index: number): (T | undefined)[];\nexport default function insert(\n data: T[],\n index: number,\n value: T | T[],\n): T[];\nexport default function insert(\n data: T[],\n index: number,\n value?: T | T[],\n): (T | undefined)[] {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n", "import isUndefined from './isUndefined';\n\nexport default (\n data: (T | undefined)[],\n from: number,\n to: number,\n): (T | undefined)[] => {\n if (!Array.isArray(data)) {\n return [];\n }\n\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n\n return data;\n};\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default (data: T[], value: T | T[]): T[] => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n", "import compact from './compact';\nimport convertToArrayPayload from './convertToArrayPayload';\nimport isUndefined from './isUndefined';\n\nfunction removeAtIndexes(data: T[], indexes: number[]): T[] {\n let i = 0;\n const temp = [...data];\n\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n\n return compact(temp).length ? temp : [];\n}\n\nexport default (data: T[], index?: number | number[]): T[] =>\n isUndefined(index)\n ? []\n : removeAtIndexes(\n data,\n (convertToArrayPayload(index) as number[]).sort((a, b) => a - b),\n );\n", "export default (data: T[], indexA: number, indexB: number): void => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n", "import isEmptyObject from './isEmptyObject';\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\nimport stringToPath from './stringToPath';\n\nfunction baseGet(object: any, updatePath: (string | number)[]) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n\n return object;\n}\n\nfunction isEmptyArray(obj: unknown[]) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\n\nexport default function unset(object: any, path: string | (string | number)[]) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n\n const index = paths.length - 1;\n const key = paths[index];\n\n if (childObject) {\n delete childObject[key];\n }\n\n if (\n index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))\n ) {\n unset(object, paths.slice(0, -1));\n }\n\n return object;\n}\n", "export default (fieldValues: T[], index: number, value: T) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n", "import React from 'react';\n\nimport generateId from './logic/generateId';\nimport getFocusFieldName from './logic/getFocusFieldName';\nimport getValidationModes from './logic/getValidationModes';\nimport isWatched from './logic/isWatched';\nimport iterateFieldsByAction from './logic/iterateFieldsByAction';\nimport updateFieldArrayRootError from './logic/updateFieldArrayRootError';\nimport validateField from './logic/validateField';\nimport appendAt from './utils/append';\nimport cloneObject from './utils/cloneObject';\nimport convertToArrayPayload from './utils/convertToArrayPayload';\nimport fillEmptyArray from './utils/fillEmptyArray';\nimport get from './utils/get';\nimport insertAt from './utils/insert';\nimport isEmptyObject from './utils/isEmptyObject';\nimport moveArrayAt from './utils/move';\nimport prependAt from './utils/prepend';\nimport removeArrayAt from './utils/remove';\nimport set from './utils/set';\nimport swapArrayAt from './utils/swap';\nimport unset from './utils/unset';\nimport updateAt from './utils/update';\nimport { VALIDATION_MODE } from './constants';\nimport {\n Control,\n Field,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayPath,\n FieldArrayWithId,\n FieldErrors,\n FieldPath,\n FieldValues,\n FormState,\n InternalFieldName,\n RegisterOptions,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n *
console.log(data))}>\n * {fields.map((item, index) => (\n * \n * ))}\n * \n * \n *
\n * );\n * }\n * ```\n */\nexport function useFieldArray<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends\n FieldArrayPath = FieldArrayPath,\n TKeyName extends string = 'id',\n>(\n props: UseFieldArrayProps,\n): UseFieldArrayReturn {\n const methods = useFormContext();\n const {\n control = methods.control,\n name,\n keyName = 'id',\n shouldUnregister,\n } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(\n control._getFieldArray(name).map(generateId),\n );\n const _fieldIds = React.useRef(fields);\n const _name = React.useRef(name);\n const _actioned = React.useRef(false);\n\n _name.current = name;\n _fieldIds.current = fields;\n control._names.array.add(name);\n\n props.rules &&\n (control as Control).register(\n name as FieldPath,\n props.rules as RegisterOptions,\n );\n\n useSubscribe({\n next: ({\n values,\n name: fieldArrayName,\n }: {\n values?: FieldValues;\n name?: InternalFieldName;\n }) => {\n if (fieldArrayName === _name.current || !fieldArrayName) {\n const fieldValues = get(values, _name.current);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n subject: control._subjects.array,\n });\n\n const updateValues = React.useCallback(\n <\n T extends Partial<\n FieldArrayWithId\n >[],\n >(\n updatedFieldArrayValues: T,\n ) => {\n _actioned.current = true;\n control._updateFieldArray(name, updatedFieldArrayValues);\n },\n [control, name],\n );\n\n const append = (\n value:\n | Partial>\n | Partial>[],\n options?: FieldArrayMethodProps,\n ) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(\n control._getFieldArray(name),\n appendValue,\n );\n control._names.focus = getFocusFieldName(\n name,\n updatedFieldArrayValues.length - 1,\n options,\n );\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n\n const prepend = (\n value:\n | Partial>\n | Partial>[],\n options?: FieldArrayMethodProps,\n ) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(\n control._getFieldArray(name),\n prependValue,\n );\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n\n const remove = (index?: number | number[]) => {\n const updatedFieldArrayValues: Partial<\n FieldArrayWithId\n >[] = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n\n const insert = (\n index: number,\n value:\n | Partial>\n | Partial>[],\n options?: FieldArrayMethodProps,\n ) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insertAt(\n control._getFieldArray(name),\n index,\n insertValue,\n );\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insertAt(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, insertAt, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n\n const swap = (indexA: number, indexB: number) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n swapArrayAt,\n {\n argA: indexA,\n argB: indexB,\n },\n false,\n );\n };\n\n const move = (from: number, to: number) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n moveArrayAt,\n {\n argA: from,\n argB: to,\n },\n false,\n );\n };\n\n const update = (\n index: number,\n value: FieldArray,\n ) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(\n control._getFieldArray<\n FieldArrayWithId\n >(name),\n index,\n updateValue as FieldArrayWithId,\n );\n ids.current = [...updatedFieldArrayValues].map((item, i) =>\n !item || i === index ? generateId() : ids.current[i],\n );\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n updateAt,\n {\n argA: index,\n argB: updateValue,\n },\n true,\n false,\n );\n };\n\n const replace = (\n value:\n | Partial>\n | Partial>[],\n ) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(\n name,\n [...updatedFieldArrayValues],\n (data: T): T => data,\n {},\n true,\n false,\n );\n };\n\n React.useEffect(() => {\n control._state.action = false;\n\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n } as FormState);\n\n if (\n _actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted)\n ) {\n if (control._options.resolver) {\n control._executeSchema([name]).then((result) => {\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n\n if (\n existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type\n ) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors as FieldErrors,\n });\n }\n });\n } else {\n const field: Field = get(control._fields, name);\n if (\n field &&\n field._f &&\n !(\n getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit\n )\n ) {\n validateField(\n field,\n control._formValues,\n control._options.criteriaMode === VALIDATION_MODE.all,\n control._options.shouldUseNativeValidation,\n true,\n ).then(\n (error) =>\n !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(\n control._formState.errors as FieldErrors,\n error,\n name,\n ) as FieldErrors,\n }),\n );\n }\n }\n }\n\n control._subjects.values.next({\n name,\n values: { ...control._formValues },\n });\n\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key: string) => {\n if (\n control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus\n ) {\n ref.focus();\n return 1;\n }\n return;\n });\n\n control._names.focus = '';\n\n control._updateValid();\n _actioned.current = false;\n }, [fields, name, control]);\n\n React.useEffect(() => {\n !get(control._formValues, name) && control._updateFieldArray(name);\n\n return () => {\n (control._options.shouldUnregister || shouldUnregister) &&\n control.unregister(name as FieldPath);\n };\n }, [name, control, keyName, shouldUnregister]);\n\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(\n () =>\n fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })) as FieldArrayWithId[],\n [fields, keyName],\n ),\n };\n}\n", "import { Noop } from '../types';\n\nexport type Observer = {\n next: (value: T) => void;\n};\n\nexport type Subscription = {\n unsubscribe: Noop;\n};\n\nexport type Subject = {\n readonly observers: Observer[];\n subscribe: (value: Observer) => Subscription;\n unsubscribe: Noop;\n} & Observer;\n\nexport default (): Subject => {\n let _observers: Observer[] = [];\n\n const next = (value: T) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n\n const subscribe = (observer: Observer): Subscription => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n\n const unsubscribe = () => {\n _observers = [];\n };\n\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n", "import { Primitive } from '../types';\n\nimport isNullOrUndefined from './isNullOrUndefined';\nimport { isObjectType } from './isObject';\n\nexport default (value: unknown): value is Primitive =>\n isNullOrUndefined(value) || !isObjectType(value);\n", "import isObject from '../utils/isObject';\n\nimport isDateObject from './isDateObject';\nimport isPrimitive from './isPrimitive';\n\nexport default function deepEqual(object1: any, object2: any) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return object1 === object2;\n }\n\n if (isDateObject(object1) && isDateObject(object2)) {\n return object1.getTime() === object2.getTime();\n }\n\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n\n if (!keys2.includes(key)) {\n return false;\n }\n\n if (key !== 'ref') {\n const val2 = object2[key];\n\n if (\n (isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2)\n : val1 !== val2\n ) {\n return false;\n }\n }\n }\n\n return true;\n}\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `select-multiple`;\n", "import { FieldElement } from '../types';\n\nimport isCheckBoxInput from './isCheckBoxInput';\nimport isRadioInput from './isRadioInput';\n\nexport default (ref: FieldElement): ref is HTMLInputElement =>\n isRadioInput(ref) || isCheckBoxInput(ref);\n", "import { Ref } from '../types';\n\nimport isHTMLElement from './isHTMLElement';\n\nexport default (ref: Ref) => isHTMLElement(ref) && ref.isConnected;\n", "import isFunction from './isFunction';\n\nexport default (data: T): boolean => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n", "import deepEqual from '../utils/deepEqual';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isPrimitive from '../utils/isPrimitive';\nimport isUndefined from '../utils/isUndefined';\nimport objectHasFunction from '../utils/objectHasFunction';\n\nfunction markFieldsDirty(data: T, fields: Record = {}) {\n const isParentNodeArray = Array.isArray(data);\n\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (\n Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))\n ) {\n fields[key] = Array.isArray(data[key]) ? [] : {};\n markFieldsDirty(data[key], fields[key]);\n } else if (!isNullOrUndefined(data[key])) {\n fields[key] = true;\n }\n }\n }\n\n return fields;\n}\n\nfunction getDirtyFieldsFromDefaultValues(\n data: T,\n formValues: T,\n dirtyFieldsFromValues: Record<\n Extract,\n ReturnType | boolean\n >,\n) {\n const isParentNodeArray = Array.isArray(data);\n\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (\n Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))\n ) {\n if (\n isUndefined(formValues) ||\n isPrimitive(dirtyFieldsFromValues[key])\n ) {\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\n ? markFieldsDirty(data[key], [])\n : { ...markFieldsDirty(data[key]) };\n } else {\n getDirtyFieldsFromDefaultValues(\n data[key],\n isNullOrUndefined(formValues) ? {} : formValues[key],\n dirtyFieldsFromValues[key],\n );\n }\n } else {\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n }\n }\n }\n\n return dirtyFieldsFromValues;\n}\n\nexport default (defaultValues: T, formValues: T) =>\n getDirtyFieldsFromDefaultValues(\n defaultValues,\n formValues,\n markFieldsDirty(formValues),\n );\n", "import { Field, NativeFieldValue } from '../types';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n value: T,\n { valueAsNumber, valueAsDate, setValueAs }: Field['_f'],\n) =>\n isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n", "import { Field } from '../types';\nimport isCheckBox from '../utils/isCheckBoxInput';\nimport isFileInput from '../utils/isFileInput';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isRadioInput from '../utils/isRadioInput';\nimport isUndefined from '../utils/isUndefined';\n\nimport getCheckboxValue from './getCheckboxValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getRadioValue from './getRadioValue';\n\nexport default function getFieldValue(_f: Field['_f']) {\n const ref = _f.ref;\n\n if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\n return;\n }\n\n if (isFileInput(ref)) {\n return ref.files;\n }\n\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n\n if (isCheckBox(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n", "import {\n CriteriaMode,\n Field,\n FieldName,\n FieldRefs,\n FieldValues,\n InternalFieldName,\n} from '../types';\nimport { get } from '../utils';\nimport set from '../utils/set';\n\nexport default (\n fieldsNames: Set | InternalFieldName[],\n _fields: FieldRefs,\n criteriaMode?: CriteriaMode,\n shouldUseNativeValidation?: boolean | undefined,\n) => {\n const fields: Record = {};\n\n for (const name of fieldsNames) {\n const field: Field = get(_fields, name);\n\n field && set(fields, name, field._f);\n }\n\n return {\n criteriaMode,\n names: [...fieldsNames] as FieldName[],\n fields,\n shouldUseNativeValidation,\n };\n};\n", "import {\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n} from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n rule?: ValidationRule | ValidationValueMessage,\n) =>\n isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n", "import { Field, Validate } from '../types';\nimport isFunction from '../utils/isFunction';\nimport isObject from '../utils/isObject';\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\n\nexport default (fieldReference: Field['_f']) =>\n (!fieldReference || !fieldReference.validate) &&\n !!(\n (isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find(\n (validateFunction: Validate) =>\n validateFunction.constructor.name === ASYNC_FUNCTION,\n ))\n );\n", "import { Field } from '../types';\n\nexport default (options: Field['_f']) =>\n options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n", "import { FieldError, FieldErrors, FieldValues } from '../types';\nimport get from '../utils/get';\nimport isKey from '../utils/isKey';\n\nexport default function schemaErrorLookup(\n errors: FieldErrors,\n _fields: FieldValues,\n name: string,\n): {\n error?: FieldError;\n name: string;\n} {\n const error = get(errors, name);\n\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n\n const names = name.split('.');\n\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n\n names.pop();\n }\n\n return {\n name,\n };\n}\n", "import { ValidationModeFlags } from '../types';\n\nexport default (\n isBlurEvent: boolean,\n isTouched: boolean,\n isSubmitted: boolean,\n reValidateMode: {\n isOnBlur: boolean;\n isOnChange: boolean;\n },\n mode: Partial,\n) => {\n if (mode.isOnAll) {\n return false;\n } else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n } else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n } else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n", "import compact from '../utils/compact';\nimport get from '../utils/get';\nimport unset from '../utils/unset';\n\nexport default (ref: T, name: string) =>\n !compact(get(ref, name)).length && unset(ref, name);\n", "import { EVENTS, VALIDATION_MODE } from '../constants';\nimport {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n DeepPartial,\n DelayCallback,\n EventType,\n Field,\n FieldError,\n FieldErrors,\n FieldNamesMarkedBoolean,\n FieldPath,\n FieldRefs,\n FieldValues,\n FormState,\n GetIsDirty,\n InternalFieldName,\n Names,\n Path,\n PathValue,\n ReadFormState,\n Ref,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n UseFormClearErrors,\n UseFormGetFieldState,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormProps,\n UseFormRegister,\n UseFormReset,\n UseFormResetField,\n UseFormReturn,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n WatchInternal,\n WatchObserver,\n} from '../types';\nimport cloneObject from '../utils/cloneObject';\nimport compact from '../utils/compact';\nimport convertToArrayPayload from '../utils/convertToArrayPayload';\nimport createSubject from '../utils/createSubject';\nimport deepEqual from '../utils/deepEqual';\nimport get from '../utils/get';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isDateObject from '../utils/isDateObject';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isHTMLElement from '../utils/isHTMLElement';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isPrimitive from '../utils/isPrimitive';\nimport isRadioOrCheckbox from '../utils/isRadioOrCheckbox';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\nimport isWeb from '../utils/isWeb';\nimport live from '../utils/live';\nimport set from '../utils/set';\nimport unset from '../utils/unset';\n\nimport generateWatchOutput from './generateWatchOutput';\nimport getDirtyFields from './getDirtyFields';\nimport getEventValue from './getEventValue';\nimport getFieldValue from './getFieldValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getResolverOptions from './getResolverOptions';\nimport getRuleValue from './getRuleValue';\nimport getValidationModes from './getValidationModes';\nimport hasPromiseValidation from './hasPromiseValidation';\nimport hasValidation from './hasValidation';\nimport isNameInFieldArray from './isNameInFieldArray';\nimport isWatched from './isWatched';\nimport iterateFieldsByAction from './iterateFieldsByAction';\nimport schemaErrorLookup from './schemaErrorLookup';\nimport skipValidation from './skipValidation';\nimport unsetEmptyArray from './unsetEmptyArray';\nimport updateFieldArrayRootError from './updateFieldArrayRootError';\nimport validateField from './validateField';\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n} as const;\n\nexport function createFormControl<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n>(\n props: UseFormProps = {},\n): Omit, 'formState'> {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState: FormState = {\n submitCount: 0,\n isDirty: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields: FieldRefs = {};\n let _defaultValues =\n isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n };\n let _names: Names = {\n mount: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback: DelayCallback | null;\n let timer = 0;\n const _proxyFormState: ReadFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _subjects: Subjects = {\n values: createSubject(),\n array: createSubject(),\n state: createSubject(),\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n const shouldDisplayAllAssociatedErrors =\n _options.criteriaMode === VALIDATION_MODE.all;\n\n const debounce =\n (callback: T) =>\n (wait: number) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n\n const _updateValid = async (shouldUpdateValid?: boolean) => {\n if (_proxyFormState.isValid || shouldUpdateValid) {\n const isValid = _options.resolver\n ? isEmptyObject((await _executeSchema()).errors)\n : await executeBuiltInValidation(_fields, true);\n\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n\n const _updateIsValidating = (names?: string[], isValidating?: boolean) => {\n if (_proxyFormState.isValidating || _proxyFormState.validatingFields) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n\n const _updateFieldArray: BatchFieldArrayUpdate = (\n name,\n values = [],\n method,\n args,\n shouldSetValues = true,\n shouldUpdateFieldsAndState = true,\n ) => {\n if (args && method) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n\n if (\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))\n ) {\n const errors = method(\n get(_formState.errors, name),\n args.argA,\n args.argB,\n );\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n\n if (\n _proxyFormState.touchedFields &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))\n ) {\n const touchedFields = method(\n get(_formState.touchedFields, name),\n args.argA,\n args.argB,\n );\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n\n if (_proxyFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n } else {\n set(_formValues, name, values);\n }\n };\n\n const updateErrors = (name: InternalFieldName, error: FieldError) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n\n const _setErrors = (errors: FieldErrors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n\n const updateValidAndValue = (\n name: InternalFieldName,\n shouldSkipSetValueAs: boolean,\n value?: unknown,\n ref?: Ref,\n ) => {\n const field: Field = get(_fields, name);\n\n if (field) {\n const defaultValue = get(\n _formValues,\n name,\n isUndefined(value) ? get(_defaultValues, name) : value,\n );\n\n isUndefined(defaultValue) ||\n (ref && (ref as HTMLInputElement).defaultChecked) ||\n shouldSkipSetValueAs\n ? set(\n _formValues,\n name,\n shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f),\n )\n : setFieldValue(name, defaultValue);\n\n _state.mount && _updateValid();\n }\n };\n\n const updateTouchAndDirty = (\n name: InternalFieldName,\n fieldValue: unknown,\n isBlurEvent?: boolean,\n shouldDirty?: boolean,\n shouldRender?: boolean,\n ): Partial<\n Pick, 'dirtyFields' | 'isDirty' | 'touchedFields'>\n > => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output: Partial> & { name: string } = {\n name,\n };\n const disabledField = !!(\n get(_fields, name) &&\n get(_fields, name)._f &&\n get(_fields, name)._f.disabled\n );\n\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n\n const isCurrentFieldPristine =\n disabledField || deepEqual(get(_defaultValues, name), fieldValue);\n\n isPreviousDirty = !!(!disabledField && get(_formState.dirtyFields, name));\n isCurrentFieldPristine || disabledField\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.dirtyFields &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.touchedFields &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n\n return shouldUpdateField ? output : {};\n };\n\n const shouldRenderByError = (\n name: InternalFieldName,\n isValid?: boolean,\n error?: FieldError,\n fieldState?: {\n dirty?: FieldNamesMarkedBoolean;\n isDirty?: boolean;\n touched?: FieldNamesMarkedBoolean;\n },\n ) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid =\n _proxyFormState.isValid &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n\n if (props.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(props.delayError);\n } else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n\n if (\n (error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid\n ) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n\n _subjects.state.next(updatedFormState);\n }\n };\n\n const _executeSchema = async (name?: InternalFieldName[]) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver!(\n _formValues as TFieldValues,\n _options.context,\n getResolverOptions(\n name || _names.mount,\n _fields,\n _options.criteriaMode,\n _options.shouldUseNativeValidation,\n ),\n );\n _updateIsValidating(name);\n return result;\n };\n\n const executeSchemaAndUpdateState = async (names?: InternalFieldName[]) => {\n const { errors } = await _executeSchema(names);\n\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n } else {\n _formState.errors = errors;\n }\n\n return errors;\n };\n\n const executeBuiltInValidation = async (\n fields: FieldRefs,\n shouldOnlyCheckValid?: boolean,\n context: {\n valid: boolean;\n } = {\n valid: true,\n },\n ) => {\n for (const name in fields) {\n const field = fields[name];\n\n if (field) {\n const { _f, ...fieldValue } = field;\n\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([name], true);\n }\n\n const fieldError = await validateField(\n field,\n _formValues,\n shouldDisplayAllAssociatedErrors,\n _options.shouldUseNativeValidation && !shouldOnlyCheckValid,\n isFieldArrayRoot,\n );\n\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([name]);\n }\n\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid) {\n break;\n }\n }\n\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(\n _formState.errors,\n fieldError,\n _f.name,\n )\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(\n fieldValue,\n shouldOnlyCheckValid,\n context,\n ));\n }\n }\n\n return context.valid;\n };\n\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field: Field = get(_fields, name);\n\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name as FieldPath);\n }\n\n _names.unMount = new Set();\n };\n\n const _getDirty: GetIsDirty = (name, data) => (\n name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues)\n );\n\n const _getWatch: WatchInternal = (\n names,\n defaultValue,\n isGlobal,\n ) =>\n generateWatchOutput(\n names,\n _names,\n {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n },\n isGlobal,\n defaultValue,\n );\n\n const _getFieldArray = (\n name: InternalFieldName,\n ): Partial[] =>\n compact(\n get(\n _state.mount ? _formValues : _defaultValues,\n name,\n props.shouldUnregister ? get(_defaultValues, name, []) : [],\n ),\n );\n\n const setFieldValue = (\n name: InternalFieldName,\n value: SetFieldValue,\n options: SetValueConfig = {},\n ) => {\n const field: Field = get(_fields, name);\n let fieldValue: unknown = value;\n\n if (field) {\n const fieldReference = field._f;\n\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach(\n (optionRef) =>\n (optionRef.selected = (\n fieldValue as InternalFieldName[]\n ).includes(optionRef.value)),\n );\n } else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.length > 1\n ? fieldReference.refs.forEach(\n (checkboxRef) =>\n (!checkboxRef.defaultChecked || !checkboxRef.disabled) &&\n (checkboxRef.checked = Array.isArray(fieldValue)\n ? !!(fieldValue as []).find(\n (data: string) => data === checkboxRef.value,\n )\n : fieldValue === checkboxRef.value),\n )\n : fieldReference.refs[0] &&\n (fieldReference.refs[0].checked = !!fieldValue);\n } else {\n fieldReference.refs.forEach(\n (radioRef: HTMLInputElement) =>\n (radioRef.checked = radioRef.value === fieldValue),\n );\n }\n } else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n } else {\n fieldReference.ref.value = fieldValue;\n\n if (!fieldReference.ref.type) {\n _subjects.values.next({\n name,\n values: { ..._formValues },\n });\n }\n }\n }\n }\n\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(\n name,\n fieldValue,\n options.shouldTouch,\n options.shouldDirty,\n true,\n );\n\n options.shouldValidate && trigger(name as Path);\n };\n\n const setValues = <\n T extends InternalFieldName,\n K extends SetFieldValue,\n U extends SetValueConfig,\n >(\n name: T,\n value: K,\n options: U,\n ) => {\n for (const fieldKey in value) {\n const fieldValue = value[fieldKey];\n const fieldName = `${name}.${fieldKey}`;\n const field = get(_fields, fieldName);\n\n (_names.array.has(name) ||\n !isPrimitive(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n\n const setValue: UseFormSetValue = (\n name,\n value,\n options = {},\n ) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n\n set(_formValues, name, cloneValue);\n\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: { ..._formValues },\n });\n\n if (\n (_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\n options.shouldDirty\n ) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n } else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n\n isWatched(name, _names) && _subjects.state.next({ ..._formState });\n _subjects.values.next({\n name: _state.mount ? name : undefined,\n values: { ..._formValues },\n });\n };\n\n const onChange: ChangeHandler = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name as string;\n let isFieldValueUpdated = true;\n const field: Field = get(_fields, name);\n const getCurrentFieldValue = () =>\n target.type ? getFieldValue(field._f) : getEventValue(event);\n const _updateIsFieldValueUpdated = (fieldValue: any): void => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n\n if (field) {\n let error;\n let isValid;\n const fieldValue = getCurrentFieldValue();\n const isBlurEvent =\n event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation =\n (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(\n isBlurEvent,\n get(_formState.touchedFields, name),\n _formState.isSubmitted,\n validationModeAfterSubmit,\n validationModeBeforeSubmit,\n );\n const watched = isWatched(name, _names, isBlurEvent);\n\n set(_formValues, name, fieldValue);\n\n if (isBlurEvent) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n } else if (field._f.onChange) {\n field._f.onChange(event);\n }\n\n const fieldState = updateTouchAndDirty(\n name,\n fieldValue,\n isBlurEvent,\n false,\n );\n\n const shouldRender = !isEmptyObject(fieldState) || watched;\n\n !isBlurEvent &&\n _subjects.values.next({\n name,\n type: event.type,\n values: { ..._formValues },\n });\n\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid) {\n if (props.mode === 'onBlur') {\n if (isBlurEvent) {\n _updateValid();\n }\n } else {\n _updateValid();\n }\n }\n\n return (\n shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) })\n );\n }\n\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n\n if (_options.resolver) {\n const { errors } = await _executeSchema([name]);\n\n _updateIsFieldValueUpdated(fieldValue);\n\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(\n _formState.errors,\n _fields,\n name,\n );\n const errorLookupResult = schemaErrorLookup(\n errors,\n _fields,\n previousErrorLookupResult.name || name,\n );\n\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n\n isValid = isEmptyObject(errors);\n }\n } else {\n _updateIsValidating([name], true);\n error = (\n await validateField(\n field,\n _formValues,\n shouldDisplayAllAssociatedErrors,\n _options.shouldUseNativeValidation,\n )\n )[name];\n _updateIsValidating([name]);\n\n _updateIsFieldValueUpdated(fieldValue);\n\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n } else if (_proxyFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n\n if (isFieldValueUpdated) {\n field._f.deps &&\n trigger(\n field._f.deps as\n | FieldPath\n | FieldPath[],\n );\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n\n const _focusInput = (ref: Ref, key: string) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n\n const trigger: UseFormTrigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name) as InternalFieldName[];\n\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(\n isUndefined(name) ? name : fieldNames,\n );\n\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n } else if (name) {\n validationResult = (\n await Promise.all(\n fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(\n field && field._f ? { [fieldName]: field } : field,\n );\n }),\n )\n ).every(Boolean);\n !(!validationResult && !_formState.isValid) && _updateValid();\n } else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n\n _subjects.state.next({\n ...(!isString(name) ||\n (_proxyFormState.isValid && isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(\n _fields,\n _focusInput,\n name ? fieldNames : _names.mount,\n );\n\n return validationResult;\n };\n\n const getValues: UseFormGetValues = (\n fieldNames?:\n | FieldPath\n | ReadonlyArray>,\n ) => {\n const values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n\n const getFieldState: UseFormGetFieldState = (\n name,\n formState,\n ) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n\n const clearErrors: UseFormClearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) =>\n unset(_formState.errors, inputName),\n );\n\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n\n const setError: UseFormSetError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n\n const watch: UseFormWatch = (\n name?:\n | FieldPath\n | ReadonlyArray>\n | WatchObserver,\n defaultValue?: DeepPartial,\n ) =>\n isFunction(name)\n ? _subjects.values.subscribe({\n next: (payload) =>\n name(\n _getWatch(undefined, defaultValue),\n payload as {\n name?: FieldPath;\n type?: EventType;\n value?: unknown;\n },\n ),\n })\n : _getWatch(\n name as InternalFieldName | InternalFieldName[],\n defaultValue,\n true,\n );\n\n const unregister: UseFormUnregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n\n _subjects.values.next({\n values: { ..._formValues },\n });\n\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n\n !options.keepIsValid && _updateValid();\n };\n\n const _updateDisabledField: Control['_updateDisabledField'] = ({\n disabled,\n name,\n field,\n fields,\n value,\n }) => {\n if ((isBoolean(disabled) && _state.mount) || !!disabled) {\n const inputValue = disabled\n ? undefined\n : isUndefined(value)\n ? getFieldValue(field ? field._f : get(fields, name)._f)\n : value;\n set(_formValues, name, inputValue);\n updateTouchAndDirty(name, inputValue, false, false, true);\n }\n };\n\n const register: UseFormRegister = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined =\n isBoolean(options.disabled) || isBoolean(props.disabled);\n\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n\n if (field) {\n _updateDisabledField({\n field,\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : props.disabled,\n name,\n value: options.value,\n });\n } else {\n updateValidAndValue(name, true, options.value);\n }\n\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || props.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength) as number,\n maxLength: getRuleValue(options.maxLength) as number,\n pattern: getRuleValue(options.pattern) as string,\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref: HTMLInputElement | null): void => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? (ref.querySelectorAll('input,select,textarea')[0] as Ref) || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n\n if (\n radioOrCheckbox\n ? refs.find((option: Ref) => option === fieldRef)\n : fieldRef === field._f.ref\n ) {\n return;\n }\n\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n\n updateValidAndValue(name, false, undefined, fieldRef);\n } else {\n field = get(_fields, name, {});\n\n if (field._f) {\n field._f.mount = false;\n }\n\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n\n const _focusError = () =>\n _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n\n const _disableForm = (disabled?: boolean) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(\n _fields,\n (ref, name) => {\n const currentField: Field = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n },\n 0,\n false,\n );\n }\n };\n\n const handleSubmit: UseFormHandleSubmit =\n (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist && e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n\n _subjects.state.next({\n isSubmitting: true,\n });\n\n if (_options.resolver) {\n const { errors, values } = await _executeSchema();\n _formState.errors = errors;\n fieldValues = values;\n } else {\n await executeBuiltInValidation(_fields);\n }\n\n unset(_formState.errors, 'root');\n\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues as TFieldValues, e);\n } catch (error) {\n onValidError = error;\n }\n } else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n\n const resetField: UseFormResetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n } else {\n setValue(\n name,\n options.defaultValue as PathValue<\n TFieldValues,\n FieldPath\n >,\n );\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _updateValid();\n }\n\n _subjects.state.next({ ..._formState });\n }\n };\n\n const _reset: UseFormReset = (\n formValues,\n keepStateOptions = {},\n ) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n for (const fieldName of _names.mount) {\n get(_formState.dirtyFields, fieldName)\n ? set(values, fieldName, get(_formValues, fieldName))\n : setValue(\n fieldName as FieldPath,\n get(values, fieldName),\n );\n }\n } else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n\n _fields = {};\n }\n\n _formValues = props.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n\n _subjects.array.next({\n values: { ...values },\n });\n\n _subjects.values.next({\n values: { ...values },\n });\n }\n\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues;\n\n _state.watch = !!props.shouldUnregister;\n\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(\n keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)\n ),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n });\n };\n\n const reset: UseFormReset = (formValues, keepStateOptions) =>\n _reset(\n isFunction(formValues)\n ? formValues(_formValues as TFieldValues)\n : formValues,\n keepStateOptions,\n );\n\n const setFocus: UseFormSetFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n\n if (fieldRef.focus) {\n fieldRef.focus();\n options.shouldSelect && fieldRef.select();\n }\n }\n };\n\n const _updateFormState = (\n updatedFormState: Partial>,\n ) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n\n const _resetDefaultValues = () =>\n isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values: TFieldValues) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n\n return {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _executeSchema,\n _getWatch,\n _getDirty,\n _updateValid,\n _removeUnmounted,\n _updateFieldArray,\n _updateDisabledField,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _updateFormState,\n _disableForm,\n _subjects,\n _proxyFormState,\n _setErrors,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n set _formState(value) {\n _formState = value;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n}\n", "import React from 'react';\n\nimport { createFormControl } from './logic/createFormControl';\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport deepEqual from './utils/deepEqual';\nimport isFunction from './utils/isFunction';\nimport {\n FieldValues,\n FormState,\n InternalFieldName,\n UseFormProps,\n UseFormReturn,\n} from './types';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n *
\n * \n * \n * {errors.exampleRequired && This field is required}\n * \n *
\n * );\n * }\n * ```\n */\nexport function useForm<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = undefined,\n>(\n props: UseFormProps = {},\n): UseFormReturn {\n const _formControl = React.useRef<\n UseFormReturn | undefined\n >();\n const _values = React.useRef();\n const [formState, updateFormState] = React.useState>({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n\n if (!_formControl.current) {\n _formControl.current = {\n ...createFormControl(props),\n formState,\n };\n }\n\n const control = _formControl.current.control;\n control._options = props;\n\n useSubscribe({\n subject: control._subjects.state,\n next: (\n value: Partial> & { name?: InternalFieldName },\n ) => {\n if (\n shouldRenderFormState(\n value,\n control._proxyFormState,\n control._updateFormState,\n true,\n )\n ) {\n updateFormState({ ...control._formState });\n }\n },\n });\n\n React.useEffect(\n () => control._disableForm(props.disabled),\n [control, props.disabled],\n );\n\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n\n React.useEffect(() => {\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, control._options.resetOptions);\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n } else {\n control._resetDefaultValues();\n }\n }, [props.values, control]);\n\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n }\n }, [props.errors, control]);\n\n React.useEffect(() => {\n if (!control._state.mount) {\n control._updateValid();\n control._state.mount = true;\n }\n\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n\n control._removeUnmounted();\n });\n\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.values.next({\n values: control._getWatch(),\n });\n }, [props.shouldUnregister, control]);\n\n _formControl.current.formState = getProxyFormState(formState, control);\n\n return _formControl.current;\n}\n"], - "mappings": "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", - "names": ["result", "React", "name", "value", "isRadioOrCheckbox", "insert", "insertAt", "ref", "isCheckBox"] -} diff --git a/node_modules/.vite/deps/chunk-6UE7W7QM.js b/node_modules/.vite/deps/chunk-HUHORXLV.js similarity index 99% rename from node_modules/.vite/deps/chunk-6UE7W7QM.js rename to node_modules/.vite/deps/chunk-HUHORXLV.js index ec5ebeee..31ea27b4 100644 --- a/node_modules/.vite/deps/chunk-6UE7W7QM.js +++ b/node_modules/.vite/deps/chunk-HUHORXLV.js @@ -1,10 +1,10 @@ import { useSize -} from "./chunk-MR3TNHRB.js"; +} from "./chunk-AJMUNMLZ.js"; import { useCallbackRef, useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { Primitive } from "./chunk-H55D7VYG.js"; @@ -2229,4 +2229,4 @@ export { Content, Arrow2 as Arrow }; -//# sourceMappingURL=chunk-6UE7W7QM.js.map +//# sourceMappingURL=chunk-HUHORXLV.js.map diff --git a/node_modules/.vite/deps/chunk-6UE7W7QM.js.map b/node_modules/.vite/deps/chunk-HUHORXLV.js.map similarity index 100% rename from node_modules/.vite/deps/chunk-6UE7W7QM.js.map rename to node_modules/.vite/deps/chunk-HUHORXLV.js.map diff --git a/node_modules/.vite/deps/chunk-H4VE5LV5.js b/node_modules/.vite/deps/chunk-I6MWER2B.js similarity index 95% rename from node_modules/.vite/deps/chunk-H4VE5LV5.js rename to node_modules/.vite/deps/chunk-I6MWER2B.js index 6a217237..f48ee289 100644 --- a/node_modules/.vite/deps/chunk-H4VE5LV5.js +++ b/node_modules/.vite/deps/chunk-I6MWER2B.js @@ -1,6 +1,6 @@ import { useCallbackRef -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { require_react } from "./chunk-3TFVT2CW.js"; @@ -54,4 +54,4 @@ function useUncontrolledState({ export { useControllableState }; -//# sourceMappingURL=chunk-H4VE5LV5.js.map +//# sourceMappingURL=chunk-I6MWER2B.js.map diff --git a/node_modules/.vite/deps/chunk-H4VE5LV5.js.map b/node_modules/.vite/deps/chunk-I6MWER2B.js.map similarity index 100% rename from node_modules/.vite/deps/chunk-H4VE5LV5.js.map rename to node_modules/.vite/deps/chunk-I6MWER2B.js.map diff --git a/node_modules/.vite/deps/chunk-OAV3HHWW.js b/node_modules/.vite/deps/chunk-ILYE3ZA7.js similarity index 68% rename from node_modules/.vite/deps/chunk-OAV3HHWW.js rename to node_modules/.vite/deps/chunk-ILYE3ZA7.js index 0a266944..e7f477e3 100644 --- a/node_modules/.vite/deps/chunk-OAV3HHWW.js +++ b/node_modules/.vite/deps/chunk-ILYE3ZA7.js @@ -13,18 +13,18 @@ var React = __toESM(require_react(), 1); var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); function createContext2(rootComponentName, defaultContext) { const Context = React.createContext(defaultContext); - function Provider(props) { + const Provider = (props) => { const { children, ...context } = props; const value = React.useMemo(() => context, Object.values(context)); return (0, import_jsx_runtime.jsx)(Context.Provider, { value, children }); - } + }; + Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName) { const context = React.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } - Provider.displayName = rootComponentName + "Provider"; return [Provider, useContext2]; } function createContextScope(scopeName, createContextScopeDeps = []) { @@ -33,20 +33,22 @@ function createContextScope(scopeName, createContextScopeDeps = []) { const BaseContext = React.createContext(defaultContext); const index = defaultContexts.length; defaultContexts = [...defaultContexts, defaultContext]; - function Provider(props) { + const Provider = (props) => { + var _a; const { scope, children, ...context } = props; - const Context = (scope == null ? void 0 : scope[scopeName][index]) || BaseContext; + const Context = ((_a = scope == null ? void 0 : scope[scopeName]) == null ? void 0 : _a[index]) || BaseContext; const value = React.useMemo(() => context, Object.values(context)); return (0, import_jsx_runtime.jsx)(Context.Provider, { value, children }); - } + }; + Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName, scope) { - const Context = (scope == null ? void 0 : scope[scopeName][index]) || BaseContext; + var _a; + const Context = ((_a = scope == null ? void 0 : scope[scopeName]) == null ? void 0 : _a[index]) || BaseContext; const context = React.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } - Provider.displayName = rootComponentName + "Provider"; return [Provider, useContext2]; } const createScope = () => { @@ -85,8 +87,39 @@ function composeContextScopes(...scopes) { return createScope; } +// node_modules/@radix-ui/primitive/dist/index.mjs +function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) { + return function handleEvent(event) { + originalEventHandler == null ? void 0 : originalEventHandler(event); + if (checkForDefaultPrevented === false || !event.defaultPrevented) { + return ourEventHandler == null ? void 0 : ourEventHandler(event); + } + }; +} + +// node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs +var React2 = __toESM(require_react(), 1); +var useLayoutEffect2 = Boolean(globalThis == null ? void 0 : globalThis.document) ? React2.useLayoutEffect : () => { +}; + +// node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs +var React3 = __toESM(require_react(), 1); +function useCallbackRef(callback) { + const callbackRef = React3.useRef(callback); + React3.useEffect(() => { + callbackRef.current = callback; + }); + return React3.useMemo(() => (...args) => { + var _a; + return (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef, ...args); + }, []); +} + export { createContext2, - createContextScope + createContextScope, + composeEventHandlers, + useLayoutEffect2, + useCallbackRef }; -//# sourceMappingURL=chunk-OAV3HHWW.js.map +//# sourceMappingURL=chunk-ILYE3ZA7.js.map diff --git a/node_modules/.vite/deps/chunk-ILYE3ZA7.js.map b/node_modules/.vite/deps/chunk-ILYE3ZA7.js.map new file mode 100644 index 00000000..74de0db3 --- /dev/null +++ b/node_modules/.vite/deps/chunk-ILYE3ZA7.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@radix-ui/react-context/src/createContext.tsx", "../../@radix-ui/primitive/src/primitive.tsx", "../../@radix-ui/react-use-layout-effect/src/useLayoutEffect.tsx", "../../@radix-ui/react-use-callback-ref/src/useCallbackRef.tsx"], + "sourcesContent": ["import * as React from 'react';\n\nfunction createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext(defaultContext);\n\n const Provider: React.FC = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope = { [scopeName: string]: React.Context[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n", "function composeEventHandlers(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !((event as unknown) as Event).defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport { composeEventHandlers };\n", "import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n", "import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n"], + "mappings": ";;;;;;;;;;;AAAA,YAAuB;AAaZ,yBAAA;AAXX,SAASA,eACP,mBACA,gBACA;AACA,QAAM,UAAgB,oBAA4C,cAAc;AAEhF,QAAM,WAAuE,CAAC,UAAU;AACtF,UAAM,EAAE,UAAU,GAAG,QAAQ,IAAI;AAGjC,UAAM,QAAc,cAAQ,MAAM,SAAS,OAAO,OAAO,OAAO,CAAC;AACjE,eAAO,wBAAC,QAAQ,UAAR,EAAiB,OAAe,SAAA,CAAS;EACnD;AAEA,WAAS,cAAc,oBAAoB;AAE3C,WAASC,YAAW,cAAsB;AACxC,UAAM,UAAgB,iBAAW,OAAO;AACxC,QAAI,QAAS,QAAO;AACpB,QAAI,mBAAmB,OAAW,QAAO;AAEzC,UAAM,IAAI,MAAM,KAAK,YAAY,4BAA4B,iBAAiB,IAAI;EACpF;AAEA,SAAO,CAAC,UAAUA,WAAU;AAC9B;AAaA,SAAS,mBAAmB,WAAmB,yBAAwC,CAAC,GAAG;AACzF,MAAI,kBAAyB,CAAC;AAM9B,WAASD,eACP,mBACA,gBACA;AACA,UAAM,cAAoB,oBAA4C,cAAc;AACpF,UAAM,QAAQ,gBAAgB;AAC9B,sBAAkB,CAAC,GAAG,iBAAiB,cAAc;AAErD,UAAM,WAEF,CAAC,UAAU;;AACb,YAAM,EAAE,OAAO,UAAU,GAAG,QAAQ,IAAI;AACxC,YAAM,YAAU,oCAAQ,eAAR,mBAAqB,WAAU;AAG/C,YAAM,QAAc,cAAQ,MAAM,SAAS,OAAO,OAAO,OAAO,CAAC;AACjE,iBAAO,wBAAC,QAAQ,UAAR,EAAiB,OAAe,SAAA,CAAS;IACnD;AAEA,aAAS,cAAc,oBAAoB;AAE3C,aAASC,YAAW,cAAsB,OAA4C;;AACpF,YAAM,YAAU,oCAAQ,eAAR,mBAAqB,WAAU;AAC/C,YAAM,UAAgB,iBAAW,OAAO;AACxC,UAAI,QAAS,QAAO;AACpB,UAAI,mBAAmB,OAAW,QAAO;AAEzC,YAAM,IAAI,MAAM,KAAK,YAAY,4BAA4B,iBAAiB,IAAI;IACpF;AAEA,WAAO,CAAC,UAAUA,WAAU;EAC9B;AAMA,QAAM,cAA2B,MAAM;AACrC,UAAM,gBAAgB,gBAAgB,IAAI,CAAC,mBAAmB;AAC5D,aAAa,oBAAc,cAAc;IAC3C,CAAC;AACD,WAAO,SAAS,SAAS,OAAc;AACrC,YAAM,YAAW,+BAAQ,eAAc;AACvC,aAAa;QACX,OAAO,EAAE,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE;QACtE,CAAC,OAAO,QAAQ;MAClB;IACF;EACF;AAEA,cAAY,YAAY;AACxB,SAAO,CAACD,gBAAe,qBAAqB,aAAa,GAAG,sBAAsB,CAAC;AACrF;AAMA,SAAS,wBAAwB,QAAuB;AACtD,QAAM,YAAY,OAAO,CAAC;AAC1B,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,QAAM,cAA2B,MAAM;AACrC,UAAM,aAAa,OAAO,IAAI,CAACE,kBAAiB;MAC9C,UAAUA,aAAY;MACtB,WAAWA,aAAY;IACzB,EAAE;AAEF,WAAO,SAAS,kBAAkB,gBAAgB;AAChD,YAAM,aAAa,WAAW,OAAO,CAACC,aAAY,EAAE,UAAU,UAAU,MAAM;AAI5E,cAAM,aAAa,SAAS,cAAc;AAC1C,cAAM,eAAe,WAAW,UAAU,SAAS,EAAE;AACrD,eAAO,EAAE,GAAGA,aAAY,GAAG,aAAa;MAC1C,GAAG,CAAC,CAAC;AAEL,aAAa,cAAQ,OAAO,EAAE,CAAC,UAAU,UAAU,SAAS,EAAE,GAAG,WAAW,IAAI,CAAC,UAAU,CAAC;IAC9F;EACF;AAEA,cAAY,YAAY,UAAU;AAClC,SAAO;AACT;;;ACnIA,SAAS,qBACP,sBACA,iBACA,EAAE,2BAA2B,KAAK,IAAI,CAAC,GACvC;AACA,SAAO,SAAS,YAAY,OAAU;AACpC,iEAAuB;AAEvB,QAAI,6BAA6B,SAAS,CAAG,MAA4B,kBAAkB;AACzF,aAAO,mDAAkB;IAC3B;EACF;AACF;;;ACZA,IAAAC,SAAuB;AASvB,IAAMC,mBAAkB,QAAQ,yCAAY,QAAQ,IAAU,yBAAkB,MAAM;AAAC;;;ACTvF,IAAAC,SAAuB;AAMvB,SAAS,eAAkD,UAA4B;AACrF,QAAM,cAAoB,cAAO,QAAQ;AAEnC,EAAA,iBAAU,MAAM;AACpB,gBAAY,UAAU;EACxB,CAAC;AAGD,SAAa,eAAQ,MAAO,IAAI,SAAA;;AAAS,6BAAY,YAAZ,qCAAsB,GAAG;KAAa,CAAC,CAAC;AACnF;", + "names": ["createContext", "useContext", "createScope", "nextScopes", "React", "useLayoutEffect", "React"] +} diff --git a/node_modules/.vite/deps/chunk-J3JCCWF4.js b/node_modules/.vite/deps/chunk-J3JCCWF4.js deleted file mode 100644 index 217ea6de..00000000 --- a/node_modules/.vite/deps/chunk-J3JCCWF4.js +++ /dev/null @@ -1,29 +0,0 @@ -import { - useCallbackRef -} from "./chunk-SZRZRZSM.js"; -import { - require_react -} from "./chunk-3TFVT2CW.js"; -import { - __toESM -} from "./chunk-4MBMRILA.js"; - -// node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs -var React = __toESM(require_react(), 1); -function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis == null ? void 0 : globalThis.document) { - const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp); - React.useEffect(() => { - const handleKeyDown = (event) => { - if (event.key === "Escape") { - onEscapeKeyDown(event); - } - }; - ownerDocument.addEventListener("keydown", handleKeyDown, { capture: true }); - return () => ownerDocument.removeEventListener("keydown", handleKeyDown, { capture: true }); - }, [onEscapeKeyDown, ownerDocument]); -} - -export { - useEscapeKeydown -}; -//# sourceMappingURL=chunk-J3JCCWF4.js.map diff --git a/node_modules/.vite/deps/chunk-J3JCCWF4.js.map b/node_modules/.vite/deps/chunk-J3JCCWF4.js.map deleted file mode 100644 index 59cd9e6c..00000000 --- a/node_modules/.vite/deps/chunk-J3JCCWF4.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/react-use-escape-keydown/src/useEscapeKeydown.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener('keydown', handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n"], - "mappings": ";;;;;;;;;;;AAAA,YAAuB;AAMvB,SAAS,iBACP,qBACA,gBAA0B,yCAAY,UACtC;AACA,QAAM,kBAAkB,eAAe,mBAAmB;AAEpD,EAAA,gBAAU,MAAM;AACpB,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAI,MAAM,QAAQ,UAAU;AAC1B,wBAAgB,KAAK;MACvB;IACF;AACA,kBAAc,iBAAiB,WAAW,eAAe,EAAE,SAAS,KAAK,CAAC;AAC1E,WAAO,MAAM,cAAc,oBAAoB,WAAW,eAAe,EAAE,SAAS,KAAK,CAAC;EAC5F,GAAG,CAAC,iBAAiB,aAAa,CAAC;AACrC;", - "names": [] -} diff --git a/node_modules/.vite/deps/chunk-TZDCYJOT.js b/node_modules/.vite/deps/chunk-MZLEVI2I.js similarity index 87% rename from node_modules/.vite/deps/chunk-TZDCYJOT.js rename to node_modules/.vite/deps/chunk-MZLEVI2I.js index 2957b671..47e40482 100644 --- a/node_modules/.vite/deps/chunk-TZDCYJOT.js +++ b/node_modules/.vite/deps/chunk-MZLEVI2I.js @@ -1,9 +1,6 @@ import { useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; -import { - require_react_dom -} from "./chunk-R6S4VRB5.js"; +} from "./chunk-ILYE3ZA7.js"; import { useComposedRefs } from "./chunk-4WIT4MX7.js"; @@ -16,7 +13,6 @@ import { // node_modules/@radix-ui/react-presence/dist/index.mjs var React2 = __toESM(require_react(), 1); -var ReactDOM = __toESM(require_react_dom(), 1); var React = __toESM(require_react(), 1); function useStateMachine(initialState, machine) { return React.useReducer((state, event) => { @@ -80,11 +76,22 @@ function usePresence(present) { }, [present, send]); useLayoutEffect2(() => { if (node) { + let timeoutId; + const ownerWindow = node.ownerDocument.defaultView ?? window; const handleAnimationEnd = (event) => { const currentAnimationName = getAnimationName(stylesRef.current); const isCurrentAnimation = currentAnimationName.includes(event.animationName); if (event.target === node && isCurrentAnimation) { - ReactDOM.flushSync(() => send("ANIMATION_END")); + send("ANIMATION_END"); + if (!prevPresentRef.current) { + const currentFillMode = node.style.animationFillMode; + node.style.animationFillMode = "forwards"; + timeoutId = ownerWindow.setTimeout(() => { + if (node.style.animationFillMode === "forwards") { + node.style.animationFillMode = currentFillMode; + } + }); + } } }; const handleAnimationStart = (event) => { @@ -96,6 +103,7 @@ function usePresence(present) { node.addEventListener("animationcancel", handleAnimationEnd); node.addEventListener("animationend", handleAnimationEnd); return () => { + ownerWindow.clearTimeout(timeoutId); node.removeEventListener("animationstart", handleAnimationStart); node.removeEventListener("animationcancel", handleAnimationEnd); node.removeEventListener("animationend", handleAnimationEnd); @@ -133,4 +141,4 @@ function getElementRef(element) { export { Presence }; -//# sourceMappingURL=chunk-TZDCYJOT.js.map +//# sourceMappingURL=chunk-MZLEVI2I.js.map diff --git a/node_modules/.vite/deps/chunk-MZLEVI2I.js.map b/node_modules/.vite/deps/chunk-MZLEVI2I.js.map new file mode 100644 index 00000000..5317224f --- /dev/null +++ b/node_modules/.vite/deps/chunk-MZLEVI2I.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@radix-ui/react-presence/src/Presence.tsx", "../../@radix-ui/react-presence/src/useStateMachine.tsx"], + "sourcesContent": ["import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState();\n const stylesRef = React.useRef({} as any);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nexport { Presence };\nexport type { PresenceProps };\n", "import * as React from 'react';\n\ntype Machine = { [k: string]: { [k: string]: S } };\ntype MachineState = keyof T;\ntype MachineEvent = keyof UnionToIntersection;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine(\n initialState: MachineState,\n machine: M & Machine>\n) {\n return React.useReducer((state: MachineState, event: MachineEvent): MachineState => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n"], + "mappings": "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", + "names": ["node"] +} diff --git a/node_modules/.vite/deps/chunk-OAV3HHWW.js.map b/node_modules/.vite/deps/chunk-OAV3HHWW.js.map deleted file mode 100644 index 68777fa5..00000000 --- a/node_modules/.vite/deps/chunk-OAV3HHWW.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/react-context/src/createContext.tsx"], - "sourcesContent": ["import * as React from 'react';\n\nfunction createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext(defaultContext);\n\n function Provider(props: ContextValueType & { children: React.ReactNode }) {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n }\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n Provider.displayName = rootComponentName + 'Provider';\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope = { [scopeName: string]: React.Context[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n function Provider(\n props: ContextValueType & { scope: Scope; children: React.ReactNode }\n ) {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName][index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return {children};\n }\n\n function useContext(consumerName: string, scope: Scope) {\n const Context = scope?.[scopeName][index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n Provider.displayName = rootComponentName + 'Provider';\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n"], - "mappings": ";;;;;;;;;;;AAAA,YAAuB;AAaZ,yBAAA;AAXX,SAASA,eACP,mBACA,gBACA;AACA,QAAM,UAAgB,oBAA4C,cAAc;AAEhF,WAAS,SAAS,OAAyD;AACzE,UAAM,EAAE,UAAU,GAAG,QAAQ,IAAI;AAGjC,UAAM,QAAc,cAAQ,MAAM,SAAS,OAAO,OAAO,OAAO,CAAC;AACjE,eAAO,wBAAC,QAAQ,UAAR,EAAiB,OAAe,SAAA,CAAS;EACnD;AAEA,WAASC,YAAW,cAAsB;AACxC,UAAM,UAAgB,iBAAW,OAAO;AACxC,QAAI,QAAS,QAAO;AACpB,QAAI,mBAAmB,OAAW,QAAO;AAEzC,UAAM,IAAI,MAAM,KAAK,YAAY,4BAA4B,iBAAiB,IAAI;EACpF;AAEA,WAAS,cAAc,oBAAoB;AAC3C,SAAO,CAAC,UAAUA,WAAU;AAC9B;AAaA,SAAS,mBAAmB,WAAmB,yBAAwC,CAAC,GAAG;AACzF,MAAI,kBAAyB,CAAC;AAM9B,WAASD,eACP,mBACA,gBACA;AACA,UAAM,cAAoB,oBAA4C,cAAc;AACpF,UAAM,QAAQ,gBAAgB;AAC9B,sBAAkB,CAAC,GAAG,iBAAiB,cAAc;AAErD,aAAS,SACP,OACA;AACA,YAAM,EAAE,OAAO,UAAU,GAAG,QAAQ,IAAI;AACxC,YAAM,WAAU,+BAAQ,WAAW,WAAU;AAG7C,YAAM,QAAc,cAAQ,MAAM,SAAS,OAAO,OAAO,OAAO,CAAC;AACjE,iBAAO,wBAAC,QAAQ,UAAR,EAAiB,OAAe,SAAA,CAAS;IACnD;AAEA,aAASC,YAAW,cAAsB,OAA4C;AACpF,YAAM,WAAU,+BAAQ,WAAW,WAAU;AAC7C,YAAM,UAAgB,iBAAW,OAAO;AACxC,UAAI,QAAS,QAAO;AACpB,UAAI,mBAAmB,OAAW,QAAO;AAEzC,YAAM,IAAI,MAAM,KAAK,YAAY,4BAA4B,iBAAiB,IAAI;IACpF;AAEA,aAAS,cAAc,oBAAoB;AAC3C,WAAO,CAAC,UAAUA,WAAU;EAC9B;AAMA,QAAM,cAA2B,MAAM;AACrC,UAAM,gBAAgB,gBAAgB,IAAI,CAAC,mBAAmB;AAC5D,aAAa,oBAAc,cAAc;IAC3C,CAAC;AACD,WAAO,SAAS,SAAS,OAAc;AACrC,YAAM,YAAW,+BAAQ,eAAc;AACvC,aAAa;QACX,OAAO,EAAE,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE;QACtE,CAAC,OAAO,QAAQ;MAClB;IACF;EACF;AAEA,cAAY,YAAY;AACxB,SAAO,CAACD,gBAAe,qBAAqB,aAAa,GAAG,sBAAsB,CAAC;AACrF;AAMA,SAAS,wBAAwB,QAAuB;AACtD,QAAM,YAAY,OAAO,CAAC;AAC1B,MAAI,OAAO,WAAW,EAAG,QAAO;AAEhC,QAAM,cAA2B,MAAM;AACrC,UAAM,aAAa,OAAO,IAAI,CAACE,kBAAiB;MAC9C,UAAUA,aAAY;MACtB,WAAWA,aAAY;IACzB,EAAE;AAEF,WAAO,SAAS,kBAAkB,gBAAgB;AAChD,YAAM,aAAa,WAAW,OAAO,CAACC,aAAY,EAAE,UAAU,UAAU,MAAM;AAI5E,cAAM,aAAa,SAAS,cAAc;AAC1C,cAAM,eAAe,WAAW,UAAU,SAAS,EAAE;AACrD,eAAO,EAAE,GAAGA,aAAY,GAAG,aAAa;MAC1C,GAAG,CAAC,CAAC;AAEL,aAAa,cAAQ,OAAO,EAAE,CAAC,UAAU,UAAU,SAAS,EAAE,GAAG,WAAW,IAAI,CAAC,UAAU,CAAC;IAC9F;EACF;AAEA,cAAY,YAAY,UAAU;AAClC,SAAO;AACT;", - "names": ["createContext", "useContext", "createScope", "nextScopes"] -} diff --git a/node_modules/.vite/deps/chunk-QYKEMCE4.js.map b/node_modules/.vite/deps/chunk-QYKEMCE4.js.map deleted file mode 100644 index fa5fe49a..00000000 --- a/node_modules/.vite/deps/chunk-QYKEMCE4.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/react-focus-scope/src/FocusScope.tsx", "../../aria-hidden/dist/es2015/index.js", "../../tslib/tslib.es6.mjs", "../../react-remove-scroll-bar/dist/es2015/constants.js", "../../use-callback-ref/dist/es2015/useMergeRef.js", "../../use-callback-ref/dist/es2015/assignRef.js", "../../use-callback-ref/dist/es2015/useRef.js", "../../use-sidecar/dist/es2015/exports.js", "../../use-sidecar/dist/es2015/hoc.js", "../../use-sidecar/dist/es2015/hook.js", "../../use-sidecar/dist/es2015/medium.js", "../../use-sidecar/dist/es2015/renderProp.js", "../../react-style-singleton/dist/es2015/hook.js", "../../get-nonce/dist/es2015/index.js", "../../react-style-singleton/dist/es2015/singleton.js", "../../react-style-singleton/dist/es2015/component.js", "../../react-remove-scroll-bar/dist/es2015/component.js", "../../react-remove-scroll-bar/dist/es2015/utils.js"], - "sourcesContent": ["import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ElementRef;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n }).current;\n\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n\n return (\n \n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n", "var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n", "export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n", "import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return
...
\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n", "/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n", "import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n", "import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { useSidecar } from './hook';\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function sidecar(importer, errorComponent) {\n var ErrorCase = function () { return errorComponent; };\n return function Sidecar(props) {\n var _a = useSidecar(importer, props.sideCar), Car = _a[0], error = _a[1];\n if (error && errorComponent) {\n return ErrorCase;\n }\n // @ts-expect-error type shenanigans\n return Car ? React.createElement(Car, __assign({}, props)) : null;\n };\n}\n", "import { useState, useEffect } from 'react';\nimport { env } from './env';\nvar cache = new WeakMap();\nvar NO_OPTIONS = {};\nexport function useSidecar(importer, effect) {\n var options = (effect && effect.options) || NO_OPTIONS;\n if (env.isNode && !options.ssr) {\n return [null, null];\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useRealSidecar(importer, effect);\n}\nfunction useRealSidecar(importer, effect) {\n var options = (effect && effect.options) || NO_OPTIONS;\n var couldUseCache = env.forceCache || (env.isNode && !!options.ssr) || !options.async;\n var _a = useState(couldUseCache ? function () { return cache.get(importer); } : undefined), Car = _a[0], setCar = _a[1];\n var _b = useState(null), error = _b[0], setError = _b[1];\n useEffect(function () {\n if (!Car) {\n importer().then(function (car) {\n var resolved = effect ? effect.read() : car.default || car;\n if (!resolved) {\n console.error('Sidecar error: with importer', importer);\n var error_1;\n if (effect) {\n console.error('Sidecar error: with medium', effect);\n error_1 = new Error('Sidecar medium was not found');\n }\n else {\n error_1 = new Error('Sidecar was not found in exports');\n }\n setError(function () { return error_1; });\n throw error_1;\n }\n cache.set(importer, resolved);\n setCar(function () { return resolved; });\n }, function (e) { return setError(function () { return e; }); });\n }\n }, []);\n return [Car, error];\n}\n", "import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n", "import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { useState, useCallback, useEffect, useLayoutEffect } from 'react';\nexport function renderCar(WrappedComponent, defaults) {\n function State(_a) {\n var stateRef = _a.stateRef, props = _a.props;\n var renderTarget = useCallback(function SideTarget() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n useLayoutEffect(function () {\n stateRef.current(args);\n });\n return null;\n }, []);\n // @ts-ignore\n return React.createElement(WrappedComponent, __assign({}, props, { children: renderTarget }));\n }\n var Children = React.memo(function (_a) {\n var stateRef = _a.stateRef, defaultState = _a.defaultState, children = _a.children;\n var _b = useState(defaultState.current), state = _b[0], setState = _b[1];\n useEffect(function () {\n stateRef.current = setState;\n }, []);\n return children.apply(void 0, state);\n }, function () { return true; });\n return function Combiner(props) {\n var defaultState = React.useRef(defaults(props));\n var ref = React.useRef(function (state) { return (defaultState.current = state); });\n return (React.createElement(React.Fragment, null,\n React.createElement(State, { stateRef: ref, props: props }),\n React.createElement(Children, { stateRef: ref, defaultState: defaultState, children: props.children })));\n };\n}\n", "import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n", "var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n", "import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n", "import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n", "import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of props.render(useController(props)); +var flatten = (obj) => { + const output = {}; + for (const key of Object.keys(obj)) { + if (isObjectType(obj[key])) { + const nested = flatten(obj[key]); + for (const nestedKey of Object.keys(nested)) { + output[`${key}.${nestedKey}`] = nested[nestedKey]; + } + } else { + output[key] = obj[key]; + } + } + return output; +}; var POST_REQUEST = "post"; function Form(props) { const methods = useFormContext(); @@ -326,8 +340,9 @@ function Form(props) { formDataJson = JSON.stringify(data); } catch (_a) { } - for (const name of control._names.mount) { - formData.append(name, get(data, name)); + const flattenFormValues = flatten(control._formValues); + for (const key in flattenFormValues) { + formData.append(key, flattenFormValues[key]); } if (onSubmit) { await onSubmit({ @@ -1118,7 +1133,7 @@ function createFormControl(props = {}) { timer = setTimeout(callback, wait); }; const _updateValid = async (shouldUpdateValid) => { - if (_proxyFormState.isValid || shouldUpdateValid) { + if (!props.disabled && (_proxyFormState.isValid || shouldUpdateValid)) { const isValid = _options.resolver ? isEmptyObject((await _executeSchema()).errors) : await executeBuiltInValidation(_fields, true); if (isValid !== _formState.isValid) { _subjects.state.next({ @@ -1128,7 +1143,7 @@ function createFormControl(props = {}) { } }; const _updateIsValidating = (names, isValidating) => { - if (_proxyFormState.isValidating || _proxyFormState.validatingFields) { + if (!props.disabled && (_proxyFormState.isValidating || _proxyFormState.validatingFields)) { (names || Array.from(_names.mount)).forEach((name) => { if (name) { isValidating ? set(_formState.validatingFields, name, isValidating) : unset(_formState.validatingFields, name); @@ -1141,7 +1156,7 @@ function createFormControl(props = {}) { } }; const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => { - if (args && method) { + if (args && method && !props.disabled) { _state.action = true; if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) { const fieldValues = method(get(_fields, name), args.argA, args.argB); @@ -1197,28 +1212,30 @@ function createFormControl(props = {}) { const output = { name }; - const disabledField = !!(get(_fields, name) && get(_fields, name)._f && get(_fields, name)._f.disabled); - if (!isBlurEvent || shouldDirty) { - if (_proxyFormState.isDirty) { - isPreviousDirty = _formState.isDirty; - _formState.isDirty = output.isDirty = _getDirty(); - shouldUpdateField = isPreviousDirty !== output.isDirty; + if (!props.disabled) { + const disabledField = !!(get(_fields, name) && get(_fields, name)._f && get(_fields, name)._f.disabled); + if (!isBlurEvent || shouldDirty) { + if (_proxyFormState.isDirty) { + isPreviousDirty = _formState.isDirty; + _formState.isDirty = output.isDirty = _getDirty(); + shouldUpdateField = isPreviousDirty !== output.isDirty; + } + const isCurrentFieldPristine = disabledField || deepEqual(get(_defaultValues, name), fieldValue); + isPreviousDirty = !!(!disabledField && get(_formState.dirtyFields, name)); + isCurrentFieldPristine || disabledField ? unset(_formState.dirtyFields, name) : set(_formState.dirtyFields, name, true); + output.dirtyFields = _formState.dirtyFields; + shouldUpdateField = shouldUpdateField || _proxyFormState.dirtyFields && isPreviousDirty !== !isCurrentFieldPristine; } - const isCurrentFieldPristine = disabledField || deepEqual(get(_defaultValues, name), fieldValue); - isPreviousDirty = !!(!disabledField && get(_formState.dirtyFields, name)); - isCurrentFieldPristine || disabledField ? unset(_formState.dirtyFields, name) : set(_formState.dirtyFields, name, true); - output.dirtyFields = _formState.dirtyFields; - shouldUpdateField = shouldUpdateField || _proxyFormState.dirtyFields && isPreviousDirty !== !isCurrentFieldPristine; - } - if (isBlurEvent) { - const isPreviousFieldTouched = get(_formState.touchedFields, name); - if (!isPreviousFieldTouched) { - set(_formState.touchedFields, name, isBlurEvent); - output.touchedFields = _formState.touchedFields; - shouldUpdateField = shouldUpdateField || _proxyFormState.touchedFields && isPreviousFieldTouched !== isBlurEvent; + if (isBlurEvent) { + const isPreviousFieldTouched = get(_formState.touchedFields, name); + if (!isPreviousFieldTouched) { + set(_formState.touchedFields, name, isBlurEvent); + output.touchedFields = _formState.touchedFields; + shouldUpdateField = shouldUpdateField || _proxyFormState.touchedFields && isPreviousFieldTouched !== isBlurEvent; + } } + shouldUpdateField && shouldRender && _subjects.state.next(output); } - shouldUpdateField && shouldRender && _subjects.state.next(output); return shouldUpdateField ? output : {}; }; const shouldRenderByError = (name, isValid, error, fieldState) => { @@ -1301,7 +1318,7 @@ function createFormControl(props = {}) { } _names.unMount = /* @__PURE__ */ new Set(); }; - const _getDirty = (name, data) => (name && data && set(_formValues, name, data), !deepEqual(getValues(), _defaultValues)); + const _getDirty = (name, data) => !props.disabled && (name && data && set(_formValues, name, data), !deepEqual(getValues(), _defaultValues)); const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, { ..._state.mount ? _formValues : isUndefined(defaultValue) ? _defaultValues : isString(names) ? { [names]: defaultValue } : defaultValue }, isGlobal, defaultValue); @@ -1343,7 +1360,7 @@ function createFormControl(props = {}) { const fieldValue = value[fieldKey]; const fieldName = `${name}.${fieldKey}`; const field = get(_fields, fieldName); - (_names.array.has(name) || !isPrimitive(fieldValue) || field && !field._f) && !isDateObject(fieldValue) ? setValues(fieldName, fieldValue, options) : setFieldValue(fieldName, fieldValue, options); + (_names.array.has(name) || isObject(fieldValue) || field && !field._f) && !isDateObject(fieldValue) ? setValues(fieldName, fieldValue, options) : setFieldValue(fieldName, fieldValue, options); } }; const setValue = (name, value, options = {}) => { @@ -1380,7 +1397,7 @@ function createFormControl(props = {}) { const field = get(_fields, name); const getCurrentFieldValue = () => target.type ? getFieldValue(field._f) : getEventValue(event); const _updateIsFieldValueUpdated = (fieldValue) => { - isFieldValueUpdated = Number.isNaN(fieldValue) || deepEqual(fieldValue, get(_formValues, name, fieldValue)); + isFieldValueUpdated = Number.isNaN(fieldValue) || isDateObject(fieldValue) && isNaN(fieldValue.getTime()) || deepEqual(fieldValue, get(_formValues, name, fieldValue)); }; if (field) { let error; @@ -1709,7 +1726,11 @@ function createFormControl(props = {}) { } if (!keepStateOptions.keepValues) { if (keepStateOptions.keepDirtyValues) { - for (const fieldName of _names.mount) { + const fieldsToCheck = /* @__PURE__ */ new Set([ + ..._names.mount, + ...Object.keys(getDirtyFields(_defaultValues, _formValues)) + ]); + for (const fieldName of Array.from(fieldsToCheck)) { get(_formState.dirtyFields, fieldName) ? set(values, fieldName, get(_formValues, fieldName)) : setValue(fieldName, get(values, fieldName)); } } else { @@ -1933,6 +1954,11 @@ function useForm(props = {}) { values: control._getWatch() }); }, [props.shouldUnregister, control]); + import_react.default.useEffect(() => { + if (_formControl.current) { + _formControl.current.watch = _formControl.current.watch.bind({}); + } + }, [formState]); _formControl.current.formState = getProxyFormState(formState, control); return _formControl.current; } @@ -1951,4 +1977,4 @@ export { useFieldArray, useForm }; -//# sourceMappingURL=chunk-HQGJFDI6.js.map +//# sourceMappingURL=chunk-RBMNEPGM.js.map diff --git a/node_modules/.vite/deps/chunk-RBMNEPGM.js.map b/node_modules/.vite/deps/chunk-RBMNEPGM.js.map new file mode 100644 index 00000000..e86676dd --- /dev/null +++ b/node_modules/.vite/deps/chunk-RBMNEPGM.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../react-hook-form/src/utils/isCheckBoxInput.ts", "../../react-hook-form/src/utils/isDateObject.ts", "../../react-hook-form/src/utils/isNullOrUndefined.ts", "../../react-hook-form/src/utils/isObject.ts", "../../react-hook-form/src/logic/getEventValue.ts", "../../react-hook-form/src/logic/getNodeParentName.ts", "../../react-hook-form/src/logic/isNameInFieldArray.ts", "../../react-hook-form/src/utils/isPlainObject.ts", "../../react-hook-form/src/utils/isWeb.ts", "../../react-hook-form/src/utils/cloneObject.ts", "../../react-hook-form/src/utils/compact.ts", "../../react-hook-form/src/utils/isUndefined.ts", "../../react-hook-form/src/utils/get.ts", "../../react-hook-form/src/utils/isBoolean.ts", "../../react-hook-form/src/utils/isKey.ts", "../../react-hook-form/src/utils/stringToPath.ts", "../../react-hook-form/src/utils/set.ts", "../../react-hook-form/src/constants.ts", "../../react-hook-form/src/useFormContext.tsx", "../../react-hook-form/src/logic/getProxyFormState.ts", "../../react-hook-form/src/utils/isEmptyObject.ts", "../../react-hook-form/src/logic/shouldRenderFormState.ts", "../../react-hook-form/src/utils/convertToArrayPayload.ts", "../../react-hook-form/src/logic/shouldSubscribeByName.ts", "../../react-hook-form/src/useSubscribe.ts", "../../react-hook-form/src/useFormState.ts", "../../react-hook-form/src/utils/isString.ts", "../../react-hook-form/src/logic/generateWatchOutput.ts", "../../react-hook-form/src/useWatch.ts", "../../react-hook-form/src/useController.ts", "../../react-hook-form/src/controller.tsx", "../../react-hook-form/src/utils/flatten.ts", "../../react-hook-form/src/form.tsx", "../../react-hook-form/src/logic/appendErrors.ts", "../../react-hook-form/src/logic/generateId.ts", "../../react-hook-form/src/logic/getFocusFieldName.ts", "../../react-hook-form/src/logic/getValidationModes.ts", "../../react-hook-form/src/logic/isWatched.ts", "../../react-hook-form/src/logic/iterateFieldsByAction.ts", "../../react-hook-form/src/logic/updateFieldArrayRootError.ts", "../../react-hook-form/src/utils/isFileInput.ts", "../../react-hook-form/src/utils/isFunction.ts", "../../react-hook-form/src/utils/isHTMLElement.ts", "../../react-hook-form/src/utils/isMessage.ts", "../../react-hook-form/src/utils/isRadioInput.ts", "../../react-hook-form/src/utils/isRegex.ts", "../../react-hook-form/src/logic/getCheckboxValue.ts", "../../react-hook-form/src/logic/getRadioValue.ts", "../../react-hook-form/src/logic/getValidateError.ts", "../../react-hook-form/src/logic/getValueAndMessage.ts", "../../react-hook-form/src/logic/validateField.ts", "../../react-hook-form/src/utils/append.ts", "../../react-hook-form/src/utils/fillEmptyArray.ts", "../../react-hook-form/src/utils/insert.ts", "../../react-hook-form/src/utils/move.ts", "../../react-hook-form/src/utils/prepend.ts", "../../react-hook-form/src/utils/remove.ts", "../../react-hook-form/src/utils/swap.ts", "../../react-hook-form/src/utils/unset.ts", "../../react-hook-form/src/utils/update.ts", "../../react-hook-form/src/useFieldArray.ts", "../../react-hook-form/src/utils/createSubject.ts", "../../react-hook-form/src/utils/isPrimitive.ts", "../../react-hook-form/src/utils/deepEqual.ts", "../../react-hook-form/src/utils/isMultipleSelect.ts", "../../react-hook-form/src/utils/isRadioOrCheckbox.ts", "../../react-hook-form/src/utils/live.ts", "../../react-hook-form/src/utils/objectHasFunction.ts", "../../react-hook-form/src/logic/getDirtyFields.ts", "../../react-hook-form/src/logic/getFieldValueAs.ts", "../../react-hook-form/src/logic/getFieldValue.ts", "../../react-hook-form/src/logic/getResolverOptions.ts", "../../react-hook-form/src/logic/getRuleValue.ts", "../../react-hook-form/src/logic/hasPromiseValidation.ts", "../../react-hook-form/src/logic/hasValidation.ts", "../../react-hook-form/src/logic/schemaErrorLookup.ts", "../../react-hook-form/src/logic/skipValidation.ts", "../../react-hook-form/src/logic/unsetEmptyArray.ts", "../../react-hook-form/src/logic/createFormControl.ts", "../../react-hook-form/src/useForm.ts"], + "sourcesContent": ["import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'checkbox';\n", "export default (value: unknown): value is Date => value instanceof Date;\n", "export default (value: unknown): value is null | undefined => value == null;\n", "import isDateObject from './isDateObject';\nimport isNullOrUndefined from './isNullOrUndefined';\n\nexport const isObjectType = (value: unknown): value is object =>\n typeof value === 'object';\n\nexport default (value: unknown): value is T =>\n !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n", "import isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isObject from '../utils/isObject';\n\ntype Event = { target: any };\n\nexport default (event: unknown) =>\n isObject(event) && (event as Event).target\n ? isCheckBoxInput((event as Event).target)\n ? (event as Event).target.checked\n : (event as Event).target.value\n : event;\n", "export default (name: string) =>\n name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n", "import { InternalFieldName } from '../types';\n\nimport getNodeParentName from './getNodeParentName';\n\nexport default (names: Set, name: InternalFieldName) =>\n names.has(getNodeParentName(name));\n", "import isObject from './isObject';\n\nexport default (tempObject: object) => {\n const prototypeCopy =\n tempObject.constructor && tempObject.constructor.prototype;\n\n return (\n isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf')\n );\n};\n", "export default typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n", "import isObject from './isObject';\nimport isPlainObject from './isPlainObject';\nimport isWeb from './isWeb';\n\nexport default function cloneObject(data: T): T {\n let copy: any;\n const isArray = Array.isArray(data);\n\n if (data instanceof Date) {\n copy = new Date(data);\n } else if (data instanceof Set) {\n copy = new Set(data);\n } else if (\n !(isWeb && (data instanceof Blob || data instanceof FileList)) &&\n (isArray || isObject(data))\n ) {\n copy = isArray ? [] : {};\n\n if (!isArray && !isPlainObject(data)) {\n copy = data;\n } else {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n }\n } else {\n return data;\n }\n\n return copy;\n}\n", "export default (value: TValue[]) =>\n Array.isArray(value) ? value.filter(Boolean) : [];\n", "export default (val: unknown): val is undefined => val === undefined;\n", "import compact from './compact';\nimport isNullOrUndefined from './isNullOrUndefined';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\n\nexport default (\n object: T,\n path?: string | null,\n defaultValue?: unknown,\n): any => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n\n const result = compact(path.split(/[,[\\].]+?/)).reduce(\n (result, key) =>\n isNullOrUndefined(result) ? result : result[key as keyof {}],\n object,\n );\n\n return isUndefined(result) || result === object\n ? isUndefined(object[path as keyof T])\n ? defaultValue\n : object[path as keyof T]\n : result;\n};\n", "export default (value: unknown): value is boolean => typeof value === 'boolean';\n", "export default (value: string) => /^\\w*$/.test(value);\n", "import compact from './compact';\n\nexport default (input: string): string[] =>\n compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n", "import { FieldPath, FieldValues } from '../types';\n\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport stringToPath from './stringToPath';\n\nexport default (\n object: FieldValues,\n path: FieldPath,\n value?: unknown,\n) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n\n if (key === '__proto__') {\n return;\n }\n\n object[key] = newValue;\n object = object[key];\n }\n return object;\n};\n", "export const EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n} as const;\n\nexport const VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n} as const;\n\nexport const INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n} as const;\n", "import React from 'react';\n\nimport { FieldValues, FormProviderProps, UseFormReturn } from './types';\n\nconst HookFormContext = React.createContext(null);\n\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * \n *
\n * \n * \n * \n *
\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return ;\n * }\n * ```\n */\nexport const useFormContext = <\n TFieldValues extends FieldValues,\n TContext = any,\n TransformedValues extends FieldValues | undefined = undefined,\n>(): UseFormReturn =>\n React.useContext(HookFormContext) as UseFormReturn<\n TFieldValues,\n TContext,\n TransformedValues\n >;\n\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * \n *
\n * \n * \n * \n *
\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return ;\n * }\n * ```\n */\nexport const FormProvider = <\n TFieldValues extends FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = undefined,\n>(\n props: FormProviderProps,\n) => {\n const { children, ...data } = props;\n return (\n \n {children}\n \n );\n};\n", "import { VALIDATION_MODE } from '../constants';\nimport { Control, FieldValues, FormState, ReadFormState } from '../types';\n\nexport default (\n formState: FormState,\n control: Control,\n localProxyFormState?: ReadFormState,\n isRoot = true,\n) => {\n const result = {\n defaultValues: control._defaultValues,\n } as typeof formState;\n\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key as keyof FormState & keyof ReadFormState;\n\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n\n return result;\n};\n", "import { EmptyObject } from '../types';\n\nimport isObject from './isObject';\n\nexport default (value: unknown): value is EmptyObject =>\n isObject(value) && !Object.keys(value).length;\n", "import { VALIDATION_MODE } from '../constants';\nimport {\n Control,\n FieldValues,\n FormState,\n InternalFieldName,\n ReadFormState,\n} from '../types';\nimport isEmptyObject from '../utils/isEmptyObject';\n\nexport default (\n formStateData: Partial> & { name?: InternalFieldName },\n _proxyFormState: K,\n updateFormState: Control['_updateFormState'],\n isRoot?: boolean,\n) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n\n return (\n isEmptyObject(formState) ||\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n Object.keys(formState).find(\n (key) =>\n _proxyFormState[key as keyof ReadFormState] ===\n (!isRoot || VALIDATION_MODE.all),\n )\n );\n};\n", "export default (value: T) => (Array.isArray(value) ? value : [value]);\n", "import convertToArrayPayload from '../utils/convertToArrayPayload';\n\nexport default (\n name?: T,\n signalName?: string,\n exact?: boolean,\n) =>\n !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some(\n (currentName) =>\n currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)),\n );\n", "import React from 'react';\n\nimport { Subject } from './utils/createSubject';\n\ntype Props = {\n disabled?: boolean;\n subject: Subject;\n next: (value: T) => void;\n};\n\nexport function useSubscribe(props: Props) {\n const _props = React.useRef(props);\n _props.current = props;\n\n React.useEffect(() => {\n const subscription =\n !props.disabled &&\n _props.current.subject &&\n _props.current.subject.subscribe({\n next: _props.current.next,\n });\n\n return () => {\n subscription && subscription.unsubscribe();\n };\n }, [props.disabled]);\n}\n", "import React from 'react';\n\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport shouldSubscribeByName from './logic/shouldSubscribeByName';\nimport {\n FieldValues,\n FormState,\n InternalFieldName,\n UseFormStateProps,\n UseFormStateReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n *
\n * \n * {dirtyFields.firstName &&

Field is dirty.

}\n * \n *
\n * );\n * }\n * ```\n */\nfunction useFormState(\n props?: UseFormStateProps,\n): UseFormStateReturn {\n const methods = useFormContext();\n const { control = methods.control, disabled, name, exact } = props || {};\n const [formState, updateFormState] = React.useState(control._formState);\n const _mounted = React.useRef(true);\n const _localProxyFormState = React.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n const _name = React.useRef(name);\n\n _name.current = name;\n\n useSubscribe({\n disabled,\n next: (\n value: Partial> & { name?: InternalFieldName },\n ) =>\n _mounted.current &&\n shouldSubscribeByName(\n _name.current as InternalFieldName,\n value.name,\n exact,\n ) &&\n shouldRenderFormState(\n value,\n _localProxyFormState.current,\n control._updateFormState,\n ) &&\n updateFormState({\n ...control._formState,\n ...value,\n }),\n subject: control._subjects.state,\n });\n\n React.useEffect(() => {\n _mounted.current = true;\n _localProxyFormState.current.isValid && control._updateValid(true);\n\n return () => {\n _mounted.current = false;\n };\n }, [control]);\n\n return getProxyFormState(\n formState,\n control,\n _localProxyFormState.current,\n false,\n );\n}\n\nexport { useFormState };\n", "export default (value: unknown): value is string => typeof value === 'string';\n", "import { DeepPartial, FieldValues, Names } from '../types';\nimport get from '../utils/get';\nimport isString from '../utils/isString';\n\nexport default (\n names: string | string[] | undefined,\n _names: Names,\n formValues?: FieldValues,\n isGlobal?: boolean,\n defaultValue?: DeepPartial | unknown,\n) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n\n if (Array.isArray(names)) {\n return names.map(\n (fieldName) => (\n isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)\n ),\n );\n }\n\n isGlobal && (_names.watchAll = true);\n\n return formValues;\n};\n", "import React from 'react';\n\nimport generateWatchOutput from './logic/generateWatchOutput';\nimport shouldSubscribeByName from './logic/shouldSubscribeByName';\nimport cloneObject from './utils/cloneObject';\nimport {\n Control,\n DeepPartialSkipArrayKey,\n FieldPath,\n FieldPathValue,\n FieldPathValues,\n FieldValues,\n InternalFieldName,\n UseWatchProps,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * Subscribe to the entire form values change and re-render at the hook level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * defaultValue: {\n * name: \"data\"\n * },\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n>(props: {\n defaultValue?: DeepPartialSkipArrayKey;\n control?: Control;\n disabled?: boolean;\n exact?: boolean;\n}): DeepPartialSkipArrayKey;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * name: \"fieldA\",\n * defaultValue: \"default value\",\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath = FieldPath,\n>(props: {\n name: TFieldName;\n defaultValue?: FieldPathValue;\n control?: Control;\n disabled?: boolean;\n exact?: boolean;\n}): FieldPathValue;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @param props - defaultValue, disable subscription and match exact name.\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * control,\n * name: [\"fieldA\", \"fieldB\"],\n * defaultValue: {\n * fieldA: \"data\",\n * fieldB: \"data\"\n * },\n * exact: false,\n * })\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n TFieldNames extends\n readonly FieldPath[] = readonly FieldPath[],\n>(props: {\n name: readonly [...TFieldNames];\n defaultValue?: DeepPartialSkipArrayKey;\n control?: Control;\n disabled?: boolean;\n exact?: boolean;\n}): FieldPathValues;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * // can skip passing down the control into useWatch if the form is wrapped with the FormProvider\n * const values = useWatch()\n * ```\n */\nexport function useWatch<\n TFieldValues extends FieldValues = FieldValues,\n>(): DeepPartialSkipArrayKey;\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nexport function useWatch(\n props?: UseWatchProps,\n) {\n const methods = useFormContext();\n const {\n control = methods.control,\n name,\n defaultValue,\n disabled,\n exact,\n } = props || {};\n const _name = React.useRef(name);\n\n _name.current = name;\n\n useSubscribe({\n disabled,\n subject: control._subjects.values,\n next: (formState: { name?: InternalFieldName; values?: FieldValues }) => {\n if (\n shouldSubscribeByName(\n _name.current as InternalFieldName,\n formState.name,\n exact,\n )\n ) {\n updateValue(\n cloneObject(\n generateWatchOutput(\n _name.current as InternalFieldName | InternalFieldName[],\n control._names,\n formState.values || control._formValues,\n false,\n defaultValue,\n ),\n ),\n );\n }\n },\n });\n\n const [value, updateValue] = React.useState(\n control._getWatch(\n name as InternalFieldName,\n defaultValue as DeepPartialSkipArrayKey,\n ),\n );\n\n React.useEffect(() => control._removeUnmounted());\n\n return value;\n}\n", "import React from 'react';\n\nimport getEventValue from './logic/getEventValue';\nimport isNameInFieldArray from './logic/isNameInFieldArray';\nimport cloneObject from './utils/cloneObject';\nimport get from './utils/get';\nimport isBoolean from './utils/isBoolean';\nimport isUndefined from './utils/isUndefined';\nimport set from './utils/set';\nimport { EVENTS } from './constants';\nimport {\n ControllerFieldState,\n Field,\n FieldPath,\n FieldPathValue,\n FieldValues,\n InternalFieldName,\n UseControllerProps,\n UseControllerReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useFormState } from './useFormState';\nimport { useWatch } from './useWatch';\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n *
\n * \n *

{fieldState.isTouched && \"Touched\"}

\n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\n *
\n * );\n * }\n * ```\n */\nexport function useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath = FieldPath,\n>(\n props: UseControllerProps,\n): UseControllerReturn {\n const methods = useFormContext();\n const { name, disabled, control = methods.control, shouldUnregister } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const value = useWatch({\n control,\n name,\n defaultValue: get(\n control._formValues,\n name,\n get(control._defaultValues, name, props.defaultValue),\n ),\n exact: true,\n }) as FieldPathValue;\n const formState = useFormState({\n control,\n name,\n exact: true,\n });\n\n const _registerProps = React.useRef(\n control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }),\n );\n\n React.useEffect(() => {\n const _shouldUnregisterField =\n control._options.shouldUnregister || shouldUnregister;\n\n const updateMounted = (name: InternalFieldName, value: boolean) => {\n const field: Field = get(control._fields, name);\n\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n\n updateMounted(name, true);\n\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n\n return () => {\n (\n isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField\n )\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n\n React.useEffect(() => {\n if (get(control._fields, name)) {\n control._updateDisabledField({\n disabled,\n fields: control._fields,\n name,\n value: get(control._fields, name)._f.value,\n });\n }\n }, [disabled, name, control]);\n\n return {\n field: {\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange: React.useCallback(\n (event) =>\n _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name as InternalFieldName,\n },\n type: EVENTS.CHANGE,\n }),\n [name],\n ),\n onBlur: React.useCallback(\n () =>\n _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name as InternalFieldName,\n },\n type: EVENTS.BLUR,\n }),\n [name, control],\n ),\n ref: React.useCallback(\n (elm) => {\n const field = get(control._fields, name);\n\n if (field && elm) {\n field._f.ref = {\n focus: () => elm.focus(),\n select: () => elm.select(),\n setCustomValidity: (message: string) =>\n elm.setCustomValidity(message),\n reportValidity: () => elm.reportValidity(),\n };\n }\n },\n [control._fields, name],\n ),\n },\n formState,\n fieldState: Object.defineProperties(\n {},\n {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n },\n ) as ControllerFieldState,\n };\n}\n", "import { ControllerProps, FieldPath, FieldValues } from './types';\nimport { useController } from './useController';\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n *
\n * (\n * <>\n * \n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\n *

{fieldState.isTouched ? \"touched\" : \"\"}

\n * \n * )}\n * />\n * \n * );\n * }\n * ```\n */\nconst Controller = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath = FieldPath,\n>(\n props: ControllerProps,\n) => props.render(useController(props));\n\nexport { Controller };\n", "import { FieldValues } from '../types';\n\nimport { isObjectType } from './isObject';\n\nexport const flatten = (obj: FieldValues) => {\n const output: FieldValues = {};\n\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key])) {\n const nested = flatten(obj[key]);\n\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n } else {\n output[key] = obj[key];\n }\n }\n\n return output;\n};\n", "import React from 'react';\n\nimport { flatten } from './utils/flatten';\nimport { FieldValues, FormProps } from './types';\nimport { useFormContext } from './useFormContext';\n\nconst POST_REQUEST = 'post';\n\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n *
\n * \n *

{errors?.root?.server && 'Server error'}

\n * \n *
\n * );\n * }\n * ```\n */\nfunction Form<\n T extends FieldValues,\n U extends FieldValues | undefined = undefined,\n>(props: FormProps) {\n const methods = useFormContext();\n const [mounted, setMounted] = React.useState(false);\n const {\n control = methods.control,\n onSubmit,\n children,\n action,\n method = POST_REQUEST,\n headers,\n encType,\n onError,\n render,\n onSuccess,\n validateStatus,\n ...rest\n } = props;\n\n const submit = async (event?: React.BaseSyntheticEvent) => {\n let hasError = false;\n let type = '';\n\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n\n try {\n formDataJson = JSON.stringify(data);\n } catch {}\n\n const flattenFormValues = flatten(control._formValues);\n\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n\n const response = await fetch(action, {\n method,\n headers: {\n ...headers,\n ...(encType ? { 'Content-Type': encType } : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n\n if (\n response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)\n ) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n } else {\n onSuccess && onSuccess({ response });\n }\n } catch (error: unknown) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n\n if (hasError && props.control) {\n props.control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n props.control.setError('root.server', {\n type,\n });\n }\n };\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n return render ? (\n <>\n {render({\n submit,\n })}\n \n ) : (\n \n {children}\n \n );\n}\n\nexport { Form };\n", "import {\n InternalFieldErrors,\n InternalFieldName,\n ValidateResult,\n} from '../types';\n\nexport default (\n name: InternalFieldName,\n validateAllFieldCriteria: boolean,\n errors: InternalFieldErrors,\n type: string,\n message: ValidateResult,\n) =>\n validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name]!.types ? errors[name]!.types : {}),\n [type]: message || true,\n },\n }\n : {};\n", "export default () => {\n const d =\n typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16 + d) % 16 | 0;\n\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n", "import { FieldArrayMethodProps, InternalFieldName } from '../types';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n name: InternalFieldName,\n index: number,\n options: FieldArrayMethodProps = {},\n): string =>\n options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n", "import { VALIDATION_MODE } from '../constants';\nimport { Mode, ValidationModeFlags } from '../types';\n\nexport default (mode?: Mode): ValidationModeFlags => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n", "import { InternalFieldName, Names } from '../types';\n\nexport default (\n name: InternalFieldName,\n _names: Names,\n isBlurEvent?: boolean,\n) =>\n !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some(\n (watchName) =>\n name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length)),\n ));\n", "import { FieldRefs, InternalFieldName, Ref } from '../types';\nimport { get } from '../utils';\nimport isObject from '../utils/isObject';\n\nconst iterateFieldsByAction = (\n fields: FieldRefs,\n action: (ref: Ref, name: string) => 1 | undefined | void,\n fieldsNames?: Set | InternalFieldName[] | 0,\n abortEarly?: boolean,\n) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n\n if (field) {\n const { _f, ...currentField } = field;\n\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n } else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n } else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n } else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField as FieldRefs, action)) {\n break;\n }\n }\n }\n }\n return;\n};\nexport default iterateFieldsByAction;\n", "import {\n FieldError,\n FieldErrors,\n FieldValues,\n InternalFieldName,\n} from '../types';\nimport convertToArrayPayload from '../utils/convertToArrayPayload';\nimport get from '../utils/get';\nimport set from '../utils/set';\n\nexport default (\n errors: FieldErrors,\n error: Partial>,\n name: InternalFieldName,\n): FieldErrors => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, 'root', error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'file';\n", "export default (value: unknown): value is Function =>\n typeof value === 'function';\n", "import isWeb from './isWeb';\n\nexport default (value: unknown): value is HTMLElement => {\n if (!isWeb) {\n return false;\n }\n\n const owner = value ? ((value as HTMLElement).ownerDocument as Document) : 0;\n return (\n value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement)\n );\n};\n", "import { Message } from '../types';\nimport isString from '../utils/isString';\n\nexport default (value: unknown): value is Message => isString(value);\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLInputElement =>\n element.type === 'radio';\n", "export default (value: unknown): value is RegExp => value instanceof RegExp;\n", "import isUndefined from '../utils/isUndefined';\n\ntype CheckboxFieldResult = {\n isValid: boolean;\n value: string | string[] | boolean | undefined;\n};\n\nconst defaultResult: CheckboxFieldResult = {\n value: false,\n isValid: false,\n};\n\nconst validResult = { value: true, isValid: true };\n\nexport default (options?: HTMLInputElement[]): CheckboxFieldResult => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n\n return defaultResult;\n};\n", "type RadioFieldResult = {\n isValid: boolean;\n value: number | string | null;\n};\n\nconst defaultReturn: RadioFieldResult = {\n isValid: false,\n value: null,\n};\n\nexport default (options?: HTMLInputElement[]): RadioFieldResult =>\n Array.isArray(options)\n ? options.reduce(\n (previous, option): RadioFieldResult =>\n option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous,\n defaultReturn,\n )\n : defaultReturn;\n", "import { FieldError, Ref, ValidateResult } from '../types';\nimport isBoolean from '../utils/isBoolean';\nimport isMessage from '../utils/isMessage';\n\nexport default function getValidateError(\n result: ValidateResult,\n ref: Ref,\n type = 'validate',\n): FieldError | void {\n if (\n isMessage(result) ||\n (Array.isArray(result) && result.every(isMessage)) ||\n (isBoolean(result) && !result)\n ) {\n return {\n type,\n message: isMessage(result) ? result : '',\n ref,\n };\n }\n}\n", "import { ValidationRule } from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\n\nexport default (validationData?: ValidationRule) =>\n isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n", "import { INPUT_VALIDATION_RULES } from '../constants';\nimport {\n Field,\n FieldError,\n FieldValues,\n InternalFieldErrors,\n MaxType,\n Message,\n MinType,\n NativeFieldValue,\n} from '../types';\nimport get from '../utils/get';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isHTMLElement from '../utils/isHTMLElement';\nimport isMessage from '../utils/isMessage';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isRadioInput from '../utils/isRadioInput';\nimport isRegex from '../utils/isRegex';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\n\nimport appendErrors from './appendErrors';\nimport getCheckboxValue from './getCheckboxValue';\nimport getRadioValue from './getRadioValue';\nimport getValidateError from './getValidateError';\nimport getValueAndMessage from './getValueAndMessage';\n\nexport default async (\n field: Field,\n formValues: T,\n validateAllFieldCriteria: boolean,\n shouldUseNativeValidation?: boolean,\n isFieldArray?: boolean,\n): Promise => {\n const {\n ref,\n refs,\n required,\n maxLength,\n minLength,\n min,\n max,\n pattern,\n validate,\n name,\n valueAsNumber,\n mount,\n disabled,\n } = field._f;\n const inputValue: NativeFieldValue = get(formValues, name);\n if (!mount || disabled) {\n return {};\n }\n const inputRef: HTMLInputElement = refs ? refs[0] : (ref as HTMLInputElement);\n const setCustomValidity = (message?: string | boolean) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error: InternalFieldErrors = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty =\n ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length);\n const appendErrorsCurry = appendErrors.bind(\n null,\n name,\n validateAllFieldCriteria,\n error,\n );\n const getMinMaxMessage = (\n exceedMax: boolean,\n maxLengthMessage: Message,\n minLengthMessage: Message,\n maxType: MaxType = INPUT_VALIDATION_RULES.maxLength,\n minType: MinType = INPUT_VALIDATION_RULES.minLength,\n ) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n\n if (\n isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))\n ) {\n const { value, message } = isMessage(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue as number)) {\n const valueNumber =\n (ref as HTMLInputElement).valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n } else {\n const valueDate =\n (ref as HTMLInputElement).valueAsDate || new Date(inputValue as string);\n const convertTimeToDate = (time: unknown) =>\n new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n !!exceedMax,\n maxOutput.message,\n minOutput.message,\n INPUT_VALIDATION_RULES.max,\n INPUT_VALIDATION_RULES.min,\n );\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name]!.message);\n return error;\n }\n }\n }\n\n if (\n (maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))\n ) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax =\n !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin =\n !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n\n if (exceedMax || exceedMin) {\n getMinMaxMessage(\n exceedMax,\n maxLengthOutput.message,\n minLengthOutput.message,\n );\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name]!.message);\n return error;\n }\n }\n }\n\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(\n INPUT_VALIDATION_RULES.validate,\n validateError.message,\n ),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n } else if (isObject(validate)) {\n let validationResult = {} as FieldError;\n\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n\n const validateError = getValidateError(\n await validate[key](inputValue, formValues),\n inputRef,\n key,\n );\n\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n\n setCustomValidity(validateError.message);\n\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n\n setCustomValidity(true);\n return error;\n};\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default (data: T[], value: T | T[]): T[] => [\n ...data,\n ...convertToArrayPayload(value),\n];\n", "export default (value: T | T[]): undefined[] | undefined =>\n Array.isArray(value) ? value.map(() => undefined) : undefined;\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default function insert(data: T[], index: number): (T | undefined)[];\nexport default function insert(\n data: T[],\n index: number,\n value: T | T[],\n): T[];\nexport default function insert(\n data: T[],\n index: number,\n value?: T | T[],\n): (T | undefined)[] {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n", "import isUndefined from './isUndefined';\n\nexport default (\n data: (T | undefined)[],\n from: number,\n to: number,\n): (T | undefined)[] => {\n if (!Array.isArray(data)) {\n return [];\n }\n\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n\n return data;\n};\n", "import convertToArrayPayload from './convertToArrayPayload';\n\nexport default (data: T[], value: T | T[]): T[] => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n", "import compact from './compact';\nimport convertToArrayPayload from './convertToArrayPayload';\nimport isUndefined from './isUndefined';\n\nfunction removeAtIndexes(data: T[], indexes: number[]): T[] {\n let i = 0;\n const temp = [...data];\n\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n\n return compact(temp).length ? temp : [];\n}\n\nexport default (data: T[], index?: number | number[]): T[] =>\n isUndefined(index)\n ? []\n : removeAtIndexes(\n data,\n (convertToArrayPayload(index) as number[]).sort((a, b) => a - b),\n );\n", "export default (data: T[], indexA: number, indexB: number): void => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n", "import isEmptyObject from './isEmptyObject';\nimport isKey from './isKey';\nimport isObject from './isObject';\nimport isUndefined from './isUndefined';\nimport stringToPath from './stringToPath';\n\nfunction baseGet(object: any, updatePath: (string | number)[]) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n\n while (index < length) {\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\n }\n\n return object;\n}\n\nfunction isEmptyArray(obj: unknown[]) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\n\nexport default function unset(object: any, path: string | (string | number)[]) {\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n\n const index = paths.length - 1;\n const key = paths[index];\n\n if (childObject) {\n delete childObject[key];\n }\n\n if (\n index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))\n ) {\n unset(object, paths.slice(0, -1));\n }\n\n return object;\n}\n", "export default (fieldValues: T[], index: number, value: T) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n", "import React from 'react';\n\nimport generateId from './logic/generateId';\nimport getFocusFieldName from './logic/getFocusFieldName';\nimport getValidationModes from './logic/getValidationModes';\nimport isWatched from './logic/isWatched';\nimport iterateFieldsByAction from './logic/iterateFieldsByAction';\nimport updateFieldArrayRootError from './logic/updateFieldArrayRootError';\nimport validateField from './logic/validateField';\nimport appendAt from './utils/append';\nimport cloneObject from './utils/cloneObject';\nimport convertToArrayPayload from './utils/convertToArrayPayload';\nimport fillEmptyArray from './utils/fillEmptyArray';\nimport get from './utils/get';\nimport insertAt from './utils/insert';\nimport isEmptyObject from './utils/isEmptyObject';\nimport moveArrayAt from './utils/move';\nimport prependAt from './utils/prepend';\nimport removeArrayAt from './utils/remove';\nimport set from './utils/set';\nimport swapArrayAt from './utils/swap';\nimport unset from './utils/unset';\nimport updateAt from './utils/update';\nimport { VALIDATION_MODE } from './constants';\nimport {\n Control,\n Field,\n FieldArray,\n FieldArrayMethodProps,\n FieldArrayPath,\n FieldArrayWithId,\n FieldErrors,\n FieldPath,\n FieldValues,\n FormState,\n InternalFieldName,\n RegisterOptions,\n UseFieldArrayProps,\n UseFieldArrayReturn,\n} from './types';\nimport { useFormContext } from './useFormContext';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n *
console.log(data))}>\n * {fields.map((item, index) => (\n * \n * ))}\n * \n * \n *
\n * );\n * }\n * ```\n */\nexport function useFieldArray<\n TFieldValues extends FieldValues = FieldValues,\n TFieldArrayName extends\n FieldArrayPath = FieldArrayPath,\n TKeyName extends string = 'id',\n>(\n props: UseFieldArrayProps,\n): UseFieldArrayReturn {\n const methods = useFormContext();\n const {\n control = methods.control,\n name,\n keyName = 'id',\n shouldUnregister,\n } = props;\n const [fields, setFields] = React.useState(control._getFieldArray(name));\n const ids = React.useRef(\n control._getFieldArray(name).map(generateId),\n );\n const _fieldIds = React.useRef(fields);\n const _name = React.useRef(name);\n const _actioned = React.useRef(false);\n\n _name.current = name;\n _fieldIds.current = fields;\n control._names.array.add(name);\n\n props.rules &&\n (control as Control).register(\n name as FieldPath,\n props.rules as RegisterOptions,\n );\n\n useSubscribe({\n next: ({\n values,\n name: fieldArrayName,\n }: {\n values?: FieldValues;\n name?: InternalFieldName;\n }) => {\n if (fieldArrayName === _name.current || !fieldArrayName) {\n const fieldValues = get(values, _name.current);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n subject: control._subjects.array,\n });\n\n const updateValues = React.useCallback(\n <\n T extends Partial<\n FieldArrayWithId\n >[],\n >(\n updatedFieldArrayValues: T,\n ) => {\n _actioned.current = true;\n control._updateFieldArray(name, updatedFieldArrayValues);\n },\n [control, name],\n );\n\n const append = (\n value:\n | Partial>\n | Partial>[],\n options?: FieldArrayMethodProps,\n ) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(\n control._getFieldArray(name),\n appendValue,\n );\n control._names.focus = getFocusFieldName(\n name,\n updatedFieldArrayValues.length - 1,\n options,\n );\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n\n const prepend = (\n value:\n | Partial>\n | Partial>[],\n options?: FieldArrayMethodProps,\n ) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(\n control._getFieldArray(name),\n prependValue,\n );\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n\n const remove = (index?: number | number[]) => {\n const updatedFieldArrayValues: Partial<\n FieldArrayWithId\n >[] = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n\n const insert = (\n index: number,\n value:\n | Partial>\n | Partial>[],\n options?: FieldArrayMethodProps,\n ) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insertAt(\n control._getFieldArray(name),\n index,\n insertValue,\n );\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insertAt(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(name, updatedFieldArrayValues, insertAt, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n\n const swap = (indexA: number, indexB: number) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n swapArrayAt,\n {\n argA: indexA,\n argB: indexB,\n },\n false,\n );\n };\n\n const move = (from: number, to: number) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n moveArrayAt,\n {\n argA: from,\n argB: to,\n },\n false,\n );\n };\n\n const update = (\n index: number,\n value: FieldArray,\n ) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(\n control._getFieldArray<\n FieldArrayWithId\n >(name),\n index,\n updateValue as FieldArrayWithId,\n );\n ids.current = [...updatedFieldArrayValues].map((item, i) =>\n !item || i === index ? generateId() : ids.current[i],\n );\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(\n name,\n updatedFieldArrayValues,\n updateAt,\n {\n argA: index,\n argB: updateValue,\n },\n true,\n false,\n );\n };\n\n const replace = (\n value:\n | Partial>\n | Partial>[],\n ) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._updateFieldArray(\n name,\n [...updatedFieldArrayValues],\n (data: T): T => data,\n {},\n true,\n false,\n );\n };\n\n React.useEffect(() => {\n control._state.action = false;\n\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n } as FormState);\n\n if (\n _actioned.current &&\n (!getValidationModes(control._options.mode).isOnSubmit ||\n control._formState.isSubmitted)\n ) {\n if (control._options.resolver) {\n control._executeSchema([name]).then((result) => {\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n\n if (\n existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type\n ) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors as FieldErrors,\n });\n }\n });\n } else {\n const field: Field = get(control._fields, name);\n if (\n field &&\n field._f &&\n !(\n getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit\n )\n ) {\n validateField(\n field,\n control._formValues,\n control._options.criteriaMode === VALIDATION_MODE.all,\n control._options.shouldUseNativeValidation,\n true,\n ).then(\n (error) =>\n !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(\n control._formState.errors as FieldErrors,\n error,\n name,\n ) as FieldErrors,\n }),\n );\n }\n }\n }\n\n control._subjects.values.next({\n name,\n values: { ...control._formValues },\n });\n\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key: string) => {\n if (\n control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus\n ) {\n ref.focus();\n return 1;\n }\n return;\n });\n\n control._names.focus = '';\n\n control._updateValid();\n _actioned.current = false;\n }, [fields, name, control]);\n\n React.useEffect(() => {\n !get(control._formValues, name) && control._updateFieldArray(name);\n\n return () => {\n (control._options.shouldUnregister || shouldUnregister) &&\n control.unregister(name as FieldPath);\n };\n }, [name, control, keyName, shouldUnregister]);\n\n return {\n swap: React.useCallback(swap, [updateValues, name, control]),\n move: React.useCallback(move, [updateValues, name, control]),\n prepend: React.useCallback(prepend, [updateValues, name, control]),\n append: React.useCallback(append, [updateValues, name, control]),\n remove: React.useCallback(remove, [updateValues, name, control]),\n insert: React.useCallback(insert, [updateValues, name, control]),\n update: React.useCallback(update, [updateValues, name, control]),\n replace: React.useCallback(replace, [updateValues, name, control]),\n fields: React.useMemo(\n () =>\n fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })) as FieldArrayWithId[],\n [fields, keyName],\n ),\n };\n}\n", "import { Noop } from '../types';\n\nexport type Observer = {\n next: (value: T) => void;\n};\n\nexport type Subscription = {\n unsubscribe: Noop;\n};\n\nexport type Subject = {\n readonly observers: Observer[];\n subscribe: (value: Observer) => Subscription;\n unsubscribe: Noop;\n} & Observer;\n\nexport default (): Subject => {\n let _observers: Observer[] = [];\n\n const next = (value: T) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n\n const subscribe = (observer: Observer): Subscription => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n\n const unsubscribe = () => {\n _observers = [];\n };\n\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n", "import { Primitive } from '../types';\n\nimport isNullOrUndefined from './isNullOrUndefined';\nimport { isObjectType } from './isObject';\n\nexport default (value: unknown): value is Primitive =>\n isNullOrUndefined(value) || !isObjectType(value);\n", "import isObject from '../utils/isObject';\n\nimport isDateObject from './isDateObject';\nimport isPrimitive from './isPrimitive';\n\nexport default function deepEqual(object1: any, object2: any) {\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return object1 === object2;\n }\n\n if (isDateObject(object1) && isDateObject(object2)) {\n return object1.getTime() === object2.getTime();\n }\n\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n\n if (!keys2.includes(key)) {\n return false;\n }\n\n if (key !== 'ref') {\n const val2 = object2[key];\n\n if (\n (isDateObject(val1) && isDateObject(val2)) ||\n (isObject(val1) && isObject(val2)) ||\n (Array.isArray(val1) && Array.isArray(val2))\n ? !deepEqual(val1, val2)\n : val1 !== val2\n ) {\n return false;\n }\n }\n }\n\n return true;\n}\n", "import { FieldElement } from '../types';\n\nexport default (element: FieldElement): element is HTMLSelectElement =>\n element.type === `select-multiple`;\n", "import { FieldElement } from '../types';\n\nimport isCheckBoxInput from './isCheckBoxInput';\nimport isRadioInput from './isRadioInput';\n\nexport default (ref: FieldElement): ref is HTMLInputElement =>\n isRadioInput(ref) || isCheckBoxInput(ref);\n", "import { Ref } from '../types';\n\nimport isHTMLElement from './isHTMLElement';\n\nexport default (ref: Ref) => isHTMLElement(ref) && ref.isConnected;\n", "import isFunction from './isFunction';\n\nexport default (data: T): boolean => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n", "import deepEqual from '../utils/deepEqual';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isPrimitive from '../utils/isPrimitive';\nimport isUndefined from '../utils/isUndefined';\nimport objectHasFunction from '../utils/objectHasFunction';\n\nfunction markFieldsDirty(data: T, fields: Record = {}) {\n const isParentNodeArray = Array.isArray(data);\n\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (\n Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))\n ) {\n fields[key] = Array.isArray(data[key]) ? [] : {};\n markFieldsDirty(data[key], fields[key]);\n } else if (!isNullOrUndefined(data[key])) {\n fields[key] = true;\n }\n }\n }\n\n return fields;\n}\n\nfunction getDirtyFieldsFromDefaultValues(\n data: T,\n formValues: T,\n dirtyFieldsFromValues: Record<\n Extract,\n ReturnType | boolean\n >,\n) {\n const isParentNodeArray = Array.isArray(data);\n\n if (isObject(data) || isParentNodeArray) {\n for (const key in data) {\n if (\n Array.isArray(data[key]) ||\n (isObject(data[key]) && !objectHasFunction(data[key]))\n ) {\n if (\n isUndefined(formValues) ||\n isPrimitive(dirtyFieldsFromValues[key])\n ) {\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\n ? markFieldsDirty(data[key], [])\n : { ...markFieldsDirty(data[key]) };\n } else {\n getDirtyFieldsFromDefaultValues(\n data[key],\n isNullOrUndefined(formValues) ? {} : formValues[key],\n dirtyFieldsFromValues[key],\n );\n }\n } else {\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n }\n }\n }\n\n return dirtyFieldsFromValues;\n}\n\nexport default (defaultValues: T, formValues: T) =>\n getDirtyFieldsFromDefaultValues(\n defaultValues,\n formValues,\n markFieldsDirty(formValues),\n );\n", "import { Field, NativeFieldValue } from '../types';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n value: T,\n { valueAsNumber, valueAsDate, setValueAs }: Field['_f'],\n) =>\n isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n", "import { Field } from '../types';\nimport isCheckBox from '../utils/isCheckBoxInput';\nimport isFileInput from '../utils/isFileInput';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isRadioInput from '../utils/isRadioInput';\nimport isUndefined from '../utils/isUndefined';\n\nimport getCheckboxValue from './getCheckboxValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getRadioValue from './getRadioValue';\n\nexport default function getFieldValue(_f: Field['_f']) {\n const ref = _f.ref;\n\n if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\n return;\n }\n\n if (isFileInput(ref)) {\n return ref.files;\n }\n\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n\n if (isCheckBox(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n", "import {\n CriteriaMode,\n Field,\n FieldName,\n FieldRefs,\n FieldValues,\n InternalFieldName,\n} from '../types';\nimport { get } from '../utils';\nimport set from '../utils/set';\n\nexport default (\n fieldsNames: Set | InternalFieldName[],\n _fields: FieldRefs,\n criteriaMode?: CriteriaMode,\n shouldUseNativeValidation?: boolean | undefined,\n) => {\n const fields: Record = {};\n\n for (const name of fieldsNames) {\n const field: Field = get(_fields, name);\n\n field && set(fields, name, field._f);\n }\n\n return {\n criteriaMode,\n names: [...fieldsNames] as FieldName[],\n fields,\n shouldUseNativeValidation,\n };\n};\n", "import {\n ValidationRule,\n ValidationValue,\n ValidationValueMessage,\n} from '../types';\nimport isObject from '../utils/isObject';\nimport isRegex from '../utils/isRegex';\nimport isUndefined from '../utils/isUndefined';\n\nexport default (\n rule?: ValidationRule | ValidationValueMessage,\n) =>\n isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n", "import { Field, Validate } from '../types';\nimport isFunction from '../utils/isFunction';\nimport isObject from '../utils/isObject';\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\n\nexport default (fieldReference: Field['_f']) =>\n (!fieldReference || !fieldReference.validate) &&\n !!(\n (isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find(\n (validateFunction: Validate) =>\n validateFunction.constructor.name === ASYNC_FUNCTION,\n ))\n );\n", "import { Field } from '../types';\n\nexport default (options: Field['_f']) =>\n options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n", "import { FieldError, FieldErrors, FieldValues } from '../types';\nimport get from '../utils/get';\nimport isKey from '../utils/isKey';\n\nexport default function schemaErrorLookup(\n errors: FieldErrors,\n _fields: FieldValues,\n name: string,\n): {\n error?: FieldError;\n name: string;\n} {\n const error = get(errors, name);\n\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n\n const names = name.split('.');\n\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n\n names.pop();\n }\n\n return {\n name,\n };\n}\n", "import { ValidationModeFlags } from '../types';\n\nexport default (\n isBlurEvent: boolean,\n isTouched: boolean,\n isSubmitted: boolean,\n reValidateMode: {\n isOnBlur: boolean;\n isOnChange: boolean;\n },\n mode: Partial,\n) => {\n if (mode.isOnAll) {\n return false;\n } else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n } else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n } else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n", "import compact from '../utils/compact';\nimport get from '../utils/get';\nimport unset from '../utils/unset';\n\nexport default (ref: T, name: string) =>\n !compact(get(ref, name)).length && unset(ref, name);\n", "import { EVENTS, VALIDATION_MODE } from '../constants';\nimport {\n BatchFieldArrayUpdate,\n ChangeHandler,\n Control,\n DeepPartial,\n DelayCallback,\n EventType,\n Field,\n FieldError,\n FieldErrors,\n FieldNamesMarkedBoolean,\n FieldPath,\n FieldRefs,\n FieldValues,\n FormState,\n GetIsDirty,\n InternalFieldName,\n Names,\n Path,\n PathValue,\n ReadFormState,\n Ref,\n SetFieldValue,\n SetValueConfig,\n Subjects,\n UseFormClearErrors,\n UseFormGetFieldState,\n UseFormGetValues,\n UseFormHandleSubmit,\n UseFormProps,\n UseFormRegister,\n UseFormReset,\n UseFormResetField,\n UseFormReturn,\n UseFormSetError,\n UseFormSetFocus,\n UseFormSetValue,\n UseFormTrigger,\n UseFormUnregister,\n UseFormWatch,\n WatchInternal,\n WatchObserver,\n} from '../types';\nimport cloneObject from '../utils/cloneObject';\nimport compact from '../utils/compact';\nimport convertToArrayPayload from '../utils/convertToArrayPayload';\nimport createSubject from '../utils/createSubject';\nimport deepEqual from '../utils/deepEqual';\nimport get from '../utils/get';\nimport isBoolean from '../utils/isBoolean';\nimport isCheckBoxInput from '../utils/isCheckBoxInput';\nimport isDateObject from '../utils/isDateObject';\nimport isEmptyObject from '../utils/isEmptyObject';\nimport isFileInput from '../utils/isFileInput';\nimport isFunction from '../utils/isFunction';\nimport isHTMLElement from '../utils/isHTMLElement';\nimport isMultipleSelect from '../utils/isMultipleSelect';\nimport isNullOrUndefined from '../utils/isNullOrUndefined';\nimport isObject from '../utils/isObject';\nimport isRadioOrCheckbox from '../utils/isRadioOrCheckbox';\nimport isString from '../utils/isString';\nimport isUndefined from '../utils/isUndefined';\nimport isWeb from '../utils/isWeb';\nimport live from '../utils/live';\nimport set from '../utils/set';\nimport unset from '../utils/unset';\n\nimport generateWatchOutput from './generateWatchOutput';\nimport getDirtyFields from './getDirtyFields';\nimport getEventValue from './getEventValue';\nimport getFieldValue from './getFieldValue';\nimport getFieldValueAs from './getFieldValueAs';\nimport getResolverOptions from './getResolverOptions';\nimport getRuleValue from './getRuleValue';\nimport getValidationModes from './getValidationModes';\nimport hasPromiseValidation from './hasPromiseValidation';\nimport hasValidation from './hasValidation';\nimport isNameInFieldArray from './isNameInFieldArray';\nimport isWatched from './isWatched';\nimport iterateFieldsByAction from './iterateFieldsByAction';\nimport schemaErrorLookup from './schemaErrorLookup';\nimport skipValidation from './skipValidation';\nimport unsetEmptyArray from './unsetEmptyArray';\nimport updateFieldArrayRootError from './updateFieldArrayRootError';\nimport validateField from './validateField';\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n} as const;\n\nexport function createFormControl<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n>(\n props: UseFormProps = {},\n): Omit, 'formState'> {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState: FormState = {\n submitCount: 0,\n isDirty: false,\n isLoading: isFunction(_options.defaultValues),\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields: FieldRefs = {};\n let _defaultValues =\n isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n };\n let _names: Names = {\n mount: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n };\n let delayErrorCallback: DelayCallback | null;\n let timer = 0;\n const _proxyFormState: ReadFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _subjects: Subjects = {\n values: createSubject(),\n array: createSubject(),\n state: createSubject(),\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n const shouldDisplayAllAssociatedErrors =\n _options.criteriaMode === VALIDATION_MODE.all;\n\n const debounce =\n (callback: T) =>\n (wait: number) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n\n const _updateValid = async (shouldUpdateValid?: boolean) => {\n if (!props.disabled && (_proxyFormState.isValid || shouldUpdateValid)) {\n const isValid = _options.resolver\n ? isEmptyObject((await _executeSchema()).errors)\n : await executeBuiltInValidation(_fields, true);\n\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n\n const _updateIsValidating = (names?: string[], isValidating?: boolean) => {\n if (\n !props.disabled &&\n (_proxyFormState.isValidating || _proxyFormState.validatingFields)\n ) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n\n const _updateFieldArray: BatchFieldArrayUpdate = (\n name,\n values = [],\n method,\n args,\n shouldSetValues = true,\n shouldUpdateFieldsAndState = true,\n ) => {\n if (args && method && !props.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n\n if (\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))\n ) {\n const errors = method(\n get(_formState.errors, name),\n args.argA,\n args.argB,\n );\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n\n if (\n _proxyFormState.touchedFields &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))\n ) {\n const touchedFields = method(\n get(_formState.touchedFields, name),\n args.argA,\n args.argB,\n );\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n\n if (_proxyFormState.dirtyFields) {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n }\n\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n } else {\n set(_formValues, name, values);\n }\n };\n\n const updateErrors = (name: InternalFieldName, error: FieldError) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n\n const _setErrors = (errors: FieldErrors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n\n const updateValidAndValue = (\n name: InternalFieldName,\n shouldSkipSetValueAs: boolean,\n value?: unknown,\n ref?: Ref,\n ) => {\n const field: Field = get(_fields, name);\n\n if (field) {\n const defaultValue = get(\n _formValues,\n name,\n isUndefined(value) ? get(_defaultValues, name) : value,\n );\n\n isUndefined(defaultValue) ||\n (ref && (ref as HTMLInputElement).defaultChecked) ||\n shouldSkipSetValueAs\n ? set(\n _formValues,\n name,\n shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f),\n )\n : setFieldValue(name, defaultValue);\n\n _state.mount && _updateValid();\n }\n };\n\n const updateTouchAndDirty = (\n name: InternalFieldName,\n fieldValue: unknown,\n isBlurEvent?: boolean,\n shouldDirty?: boolean,\n shouldRender?: boolean,\n ): Partial<\n Pick, 'dirtyFields' | 'isDirty' | 'touchedFields'>\n > => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output: Partial> & { name: string } = {\n name,\n };\n\n if (!props.disabled) {\n const disabledField = !!(\n get(_fields, name) &&\n get(_fields, name)._f &&\n get(_fields, name)._f.disabled\n );\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n\n const isCurrentFieldPristine =\n disabledField || deepEqual(get(_defaultValues, name), fieldValue);\n\n isPreviousDirty = !!(\n !disabledField && get(_formState.dirtyFields, name)\n );\n isCurrentFieldPristine || disabledField\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.dirtyFields &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n (_proxyFormState.touchedFields &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n\n return shouldUpdateField ? output : {};\n };\n\n const shouldRenderByError = (\n name: InternalFieldName,\n isValid?: boolean,\n error?: FieldError,\n fieldState?: {\n dirty?: FieldNamesMarkedBoolean;\n isDirty?: boolean;\n touched?: FieldNamesMarkedBoolean;\n },\n ) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid =\n _proxyFormState.isValid &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n\n if (props.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(props.delayError);\n } else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n\n if (\n (error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid\n ) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n\n _subjects.state.next(updatedFormState);\n }\n };\n\n const _executeSchema = async (name?: InternalFieldName[]) => {\n _updateIsValidating(name, true);\n const result = await _options.resolver!(\n _formValues as TFieldValues,\n _options.context,\n getResolverOptions(\n name || _names.mount,\n _fields,\n _options.criteriaMode,\n _options.shouldUseNativeValidation,\n ),\n );\n _updateIsValidating(name);\n return result;\n };\n\n const executeSchemaAndUpdateState = async (names?: InternalFieldName[]) => {\n const { errors } = await _executeSchema(names);\n\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n } else {\n _formState.errors = errors;\n }\n\n return errors;\n };\n\n const executeBuiltInValidation = async (\n fields: FieldRefs,\n shouldOnlyCheckValid?: boolean,\n context: {\n valid: boolean;\n } = {\n valid: true,\n },\n ) => {\n for (const name in fields) {\n const field = fields[name];\n\n if (field) {\n const { _f, ...fieldValue } = field as Field;\n\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction =\n field._f && hasPromiseValidation((field as Field)._f);\n\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([name], true);\n }\n\n const fieldError = await validateField(\n field as Field,\n _formValues,\n shouldDisplayAllAssociatedErrors,\n _options.shouldUseNativeValidation && !shouldOnlyCheckValid,\n isFieldArrayRoot,\n );\n\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([name]);\n }\n\n if (fieldError[_f.name]) {\n context.valid = false;\n if (shouldOnlyCheckValid) {\n break;\n }\n }\n\n !shouldOnlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(\n _formState.errors,\n fieldError,\n _f.name,\n )\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n }\n\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation(\n fieldValue,\n shouldOnlyCheckValid,\n context,\n ));\n }\n }\n\n return context.valid;\n };\n\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field: Field = get(_fields, name);\n\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name as FieldPath);\n }\n\n _names.unMount = new Set();\n };\n\n const _getDirty: GetIsDirty = (name, data) =>\n !props.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n\n const _getWatch: WatchInternal = (\n names,\n defaultValue,\n isGlobal,\n ) =>\n generateWatchOutput(\n names,\n _names,\n {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n },\n isGlobal,\n defaultValue,\n );\n\n const _getFieldArray = (\n name: InternalFieldName,\n ): Partial[] =>\n compact(\n get(\n _state.mount ? _formValues : _defaultValues,\n name,\n props.shouldUnregister ? get(_defaultValues, name, []) : [],\n ),\n );\n\n const setFieldValue = (\n name: InternalFieldName,\n value: SetFieldValue,\n options: SetValueConfig = {},\n ) => {\n const field: Field = get(_fields, name);\n let fieldValue: unknown = value;\n\n if (field) {\n const fieldReference = field._f;\n\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach(\n (optionRef) =>\n (optionRef.selected = (\n fieldValue as InternalFieldName[]\n ).includes(optionRef.value)),\n );\n } else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.length > 1\n ? fieldReference.refs.forEach(\n (checkboxRef) =>\n (!checkboxRef.defaultChecked || !checkboxRef.disabled) &&\n (checkboxRef.checked = Array.isArray(fieldValue)\n ? !!(fieldValue as []).find(\n (data: string) => data === checkboxRef.value,\n )\n : fieldValue === checkboxRef.value),\n )\n : fieldReference.refs[0] &&\n (fieldReference.refs[0].checked = !!fieldValue);\n } else {\n fieldReference.refs.forEach(\n (radioRef: HTMLInputElement) =>\n (radioRef.checked = radioRef.value === fieldValue),\n );\n }\n } else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n } else {\n fieldReference.ref.value = fieldValue;\n\n if (!fieldReference.ref.type) {\n _subjects.values.next({\n name,\n values: { ..._formValues },\n });\n }\n }\n }\n }\n\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(\n name,\n fieldValue,\n options.shouldTouch,\n options.shouldDirty,\n true,\n );\n\n options.shouldValidate && trigger(name as Path);\n };\n\n const setValues = <\n T extends InternalFieldName,\n K extends SetFieldValue,\n U extends SetValueConfig,\n >(\n name: T,\n value: K,\n options: U,\n ) => {\n for (const fieldKey in value) {\n const fieldValue = value[fieldKey];\n const fieldName = `${name}.${fieldKey}`;\n const field = get(_fields, fieldName);\n\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n\n const setValue: UseFormSetValue = (\n name,\n value,\n options = {},\n ) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n\n set(_formValues, name, cloneValue);\n\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: { ..._formValues },\n });\n\n if (\n (_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\n options.shouldDirty\n ) {\n _subjects.state.next({\n name,\n dirtyFields: getDirtyFields(_defaultValues, _formValues),\n isDirty: _getDirty(name, cloneValue),\n });\n }\n } else {\n field && !field._f && !isNullOrUndefined(cloneValue)\n ? setValues(name, cloneValue, options)\n : setFieldValue(name, cloneValue, options);\n }\n\n isWatched(name, _names) && _subjects.state.next({ ..._formState });\n _subjects.values.next({\n name: _state.mount ? name : undefined,\n values: { ..._formValues },\n });\n };\n\n const onChange: ChangeHandler = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name as string;\n let isFieldValueUpdated = true;\n const field: Field = get(_fields, name);\n const getCurrentFieldValue = () =>\n target.type ? getFieldValue(field._f) : getEventValue(event);\n const _updateIsFieldValueUpdated = (fieldValue: any): void => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n\n if (field) {\n let error;\n let isValid;\n const fieldValue = getCurrentFieldValue();\n const isBlurEvent =\n event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation =\n (!hasValidation(field._f) &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(\n isBlurEvent,\n get(_formState.touchedFields, name),\n _formState.isSubmitted,\n validationModeAfterSubmit,\n validationModeBeforeSubmit,\n );\n const watched = isWatched(name, _names, isBlurEvent);\n\n set(_formValues, name, fieldValue);\n\n if (isBlurEvent) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n } else if (field._f.onChange) {\n field._f.onChange(event);\n }\n\n const fieldState = updateTouchAndDirty(\n name,\n fieldValue,\n isBlurEvent,\n false,\n );\n\n const shouldRender = !isEmptyObject(fieldState) || watched;\n\n !isBlurEvent &&\n _subjects.values.next({\n name,\n type: event.type,\n values: { ..._formValues },\n });\n\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid) {\n if (props.mode === 'onBlur') {\n if (isBlurEvent) {\n _updateValid();\n }\n } else {\n _updateValid();\n }\n }\n\n return (\n shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) })\n );\n }\n\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n\n if (_options.resolver) {\n const { errors } = await _executeSchema([name]);\n\n _updateIsFieldValueUpdated(fieldValue);\n\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(\n _formState.errors,\n _fields,\n name,\n );\n const errorLookupResult = schemaErrorLookup(\n errors,\n _fields,\n previousErrorLookupResult.name || name,\n );\n\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n\n isValid = isEmptyObject(errors);\n }\n } else {\n _updateIsValidating([name], true);\n error = (\n await validateField(\n field,\n _formValues,\n shouldDisplayAllAssociatedErrors,\n _options.shouldUseNativeValidation,\n )\n )[name];\n _updateIsValidating([name]);\n\n _updateIsFieldValueUpdated(fieldValue);\n\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n } else if (_proxyFormState.isValid) {\n isValid = await executeBuiltInValidation(_fields, true);\n }\n }\n }\n\n if (isFieldValueUpdated) {\n field._f.deps &&\n trigger(\n field._f.deps as\n | FieldPath\n | FieldPath[],\n );\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n\n const _focusInput = (ref: Ref, key: string) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n\n const trigger: UseFormTrigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name) as InternalFieldName[];\n\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(\n isUndefined(name) ? name : fieldNames,\n );\n\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n } else if (name) {\n validationResult = (\n await Promise.all(\n fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation(\n field && field._f ? { [fieldName]: field } : field,\n );\n }),\n )\n ).every(Boolean);\n !(!validationResult && !_formState.isValid) && _updateValid();\n } else {\n validationResult = isValid = await executeBuiltInValidation(_fields);\n }\n\n _subjects.state.next({\n ...(!isString(name) ||\n (_proxyFormState.isValid && isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(\n _fields,\n _focusInput,\n name ? fieldNames : _names.mount,\n );\n\n return validationResult;\n };\n\n const getValues: UseFormGetValues = (\n fieldNames?:\n | FieldPath\n | ReadonlyArray>,\n ) => {\n const values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n\n const getFieldState: UseFormGetFieldState = (\n name,\n formState,\n ) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n\n const clearErrors: UseFormClearErrors = (name) => {\n name &&\n convertToArrayPayload(name).forEach((inputName) =>\n unset(_formState.errors, inputName),\n );\n\n _subjects.state.next({\n errors: name ? _formState.errors : {},\n });\n };\n\n const setError: UseFormSetError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n\n const watch: UseFormWatch = (\n name?:\n | FieldPath\n | ReadonlyArray>\n | WatchObserver,\n defaultValue?: DeepPartial,\n ) =>\n isFunction(name)\n ? _subjects.values.subscribe({\n next: (payload) =>\n name(\n _getWatch(undefined, defaultValue),\n payload as {\n name?: FieldPath;\n type?: EventType;\n value?: unknown;\n },\n ),\n })\n : _getWatch(\n name as InternalFieldName | InternalFieldName[],\n defaultValue,\n true,\n );\n\n const unregister: UseFormUnregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n\n _subjects.values.next({\n values: { ..._formValues },\n });\n\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n\n !options.keepIsValid && _updateValid();\n };\n\n const _updateDisabledField: Control['_updateDisabledField'] = ({\n disabled,\n name,\n field,\n fields,\n value,\n }) => {\n if ((isBoolean(disabled) && _state.mount) || !!disabled) {\n const inputValue = disabled\n ? undefined\n : isUndefined(value)\n ? getFieldValue(field ? field._f : get(fields, name)._f)\n : value;\n set(_formValues, name, inputValue);\n updateTouchAndDirty(name, inputValue, false, false, true);\n }\n };\n\n const register: UseFormRegister = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined =\n isBoolean(options.disabled) || isBoolean(props.disabled);\n\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n\n if (field) {\n _updateDisabledField({\n field,\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : props.disabled,\n name,\n value: options.value,\n });\n } else {\n updateValidAndValue(name, true, options.value);\n }\n\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || props.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength) as number,\n maxLength: getRuleValue(options.maxLength) as number,\n pattern: getRuleValue(options.pattern) as string,\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref: HTMLInputElement | null): void => {\n if (ref) {\n register(name, options);\n field = get(_fields, name);\n\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? (ref.querySelectorAll('input,select,textarea')[0] as Ref) || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n\n if (\n radioOrCheckbox\n ? refs.find((option: Ref) => option === fieldRef)\n : fieldRef === field._f.ref\n ) {\n return;\n }\n\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n\n updateValidAndValue(name, false, undefined, fieldRef);\n } else {\n field = get(_fields, name, {});\n\n if (field._f) {\n field._f.mount = false;\n }\n\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n\n const _focusError = () =>\n _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n\n const _disableForm = (disabled?: boolean) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(\n _fields,\n (ref, name) => {\n const currentField: Field = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n },\n 0,\n false,\n );\n }\n };\n\n const handleSubmit: UseFormHandleSubmit =\n (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist && e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n\n _subjects.state.next({\n isSubmitting: true,\n });\n\n if (_options.resolver) {\n const { errors, values } = await _executeSchema();\n _formState.errors = errors;\n fieldValues = values;\n } else {\n await executeBuiltInValidation(_fields);\n }\n\n unset(_formState.errors, 'root');\n\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues as TFieldValues, e);\n } catch (error) {\n onValidError = error;\n }\n } else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n\n const resetField: UseFormResetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n } else {\n setValue(\n name,\n options.defaultValue as PathValue<\n TFieldValues,\n FieldPath\n >,\n );\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _updateValid();\n }\n\n _subjects.state.next({ ..._formState });\n }\n };\n\n const _reset: UseFormReset = (\n formValues,\n keepStateOptions = {},\n ) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n get(_formState.dirtyFields, fieldName)\n ? set(values, fieldName, get(_formValues, fieldName))\n : setValue(\n fieldName as FieldPath,\n get(values, fieldName),\n );\n }\n } else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n\n _fields = {};\n }\n\n _formValues = props.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n\n _subjects.array.next({\n values: { ...values },\n });\n\n _subjects.values.next({\n values: { ...values },\n });\n }\n\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues;\n\n _state.watch = !!props.shouldUnregister;\n\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(\n keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)\n ),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n });\n };\n\n const reset: UseFormReset = (formValues, keepStateOptions) =>\n _reset(\n isFunction(formValues)\n ? (formValues as Function)(_formValues as TFieldValues)\n : formValues,\n keepStateOptions,\n );\n\n const setFocus: UseFormSetFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n\n if (fieldRef.focus) {\n fieldRef.focus();\n options.shouldSelect && fieldRef.select();\n }\n }\n };\n\n const _updateFormState = (\n updatedFormState: Partial>,\n ) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n\n const _resetDefaultValues = () =>\n isFunction(_options.defaultValues) &&\n (_options.defaultValues as Function)().then((values: TFieldValues) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n\n return {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _executeSchema,\n _getWatch,\n _getDirty,\n _updateValid,\n _removeUnmounted,\n _updateFieldArray,\n _updateDisabledField,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _updateFormState,\n _disableForm,\n _subjects,\n _proxyFormState,\n _setErrors,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n set _formState(value) {\n _formState = value;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n}\n", "import React from 'react';\n\nimport { createFormControl } from './logic/createFormControl';\nimport getProxyFormState from './logic/getProxyFormState';\nimport shouldRenderFormState from './logic/shouldRenderFormState';\nimport deepEqual from './utils/deepEqual';\nimport isFunction from './utils/isFunction';\nimport {\n FieldValues,\n FormState,\n InternalFieldName,\n UseFormProps,\n UseFormReturn,\n} from './types';\nimport { useSubscribe } from './useSubscribe';\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n *
\n * \n * \n * {errors.exampleRequired && This field is required}\n * \n *
\n * );\n * }\n * ```\n */\nexport function useForm<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = undefined,\n>(\n props: UseFormProps = {},\n): UseFormReturn {\n const _formControl = React.useRef<\n UseFormReturn | undefined\n >();\n const _values = React.useRef();\n const [formState, updateFormState] = React.useState>({\n isDirty: false,\n isValidating: false,\n isLoading: isFunction(props.defaultValues),\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n submitCount: 0,\n dirtyFields: {},\n touchedFields: {},\n validatingFields: {},\n errors: props.errors || {},\n disabled: props.disabled || false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n });\n\n if (!_formControl.current) {\n _formControl.current = {\n ...createFormControl(props),\n formState,\n };\n }\n\n const control = _formControl.current.control;\n control._options = props;\n\n useSubscribe({\n subject: control._subjects.state,\n next: (\n value: Partial> & { name?: InternalFieldName },\n ) => {\n if (\n shouldRenderFormState(\n value,\n control._proxyFormState,\n control._updateFormState,\n true,\n )\n ) {\n updateFormState({ ...control._formState });\n }\n },\n });\n\n React.useEffect(\n () => control._disableForm(props.disabled),\n [control, props.disabled],\n );\n\n React.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n\n React.useEffect(() => {\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, control._options.resetOptions);\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n } else {\n control._resetDefaultValues();\n }\n }, [props.values, control]);\n\n React.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n }\n }, [props.errors, control]);\n\n React.useEffect(() => {\n if (!control._state.mount) {\n control._updateValid();\n control._state.mount = true;\n }\n\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n\n control._removeUnmounted();\n });\n\n React.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.values.next({\n values: control._getWatch(),\n });\n }, [props.shouldUnregister, control]);\n\n React.useEffect(() => {\n if (_formControl.current) {\n _formControl.current.watch = _formControl.current.watch.bind({});\n }\n }, [formState]);\n\n _formControl.current.formState = getProxyFormState(formState, control);\n\n return _formControl.current;\n}\n"], + "mappings": "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", + "names": ["result", "React", "name", "value", "isRadioOrCheckbox", "insert", "insertAt", "ref", "isCheckBox"] +} diff --git a/node_modules/.vite/deps/chunk-SZRZRZSM.js b/node_modules/.vite/deps/chunk-SZRZRZSM.js deleted file mode 100644 index 9da5b662..00000000 --- a/node_modules/.vite/deps/chunk-SZRZRZSM.js +++ /dev/null @@ -1,41 +0,0 @@ -import { - require_react -} from "./chunk-3TFVT2CW.js"; -import { - __toESM -} from "./chunk-4MBMRILA.js"; - -// node_modules/@radix-ui/primitive/dist/index.mjs -function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) { - return function handleEvent(event) { - originalEventHandler == null ? void 0 : originalEventHandler(event); - if (checkForDefaultPrevented === false || !event.defaultPrevented) { - return ourEventHandler == null ? void 0 : ourEventHandler(event); - } - }; -} - -// node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs -var React = __toESM(require_react(), 1); -function useCallbackRef(callback) { - const callbackRef = React.useRef(callback); - React.useEffect(() => { - callbackRef.current = callback; - }); - return React.useMemo(() => (...args) => { - var _a; - return (_a = callbackRef.current) == null ? void 0 : _a.call(callbackRef, ...args); - }, []); -} - -// node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs -var React2 = __toESM(require_react(), 1); -var useLayoutEffect2 = Boolean(globalThis == null ? void 0 : globalThis.document) ? React2.useLayoutEffect : () => { -}; - -export { - composeEventHandlers, - useCallbackRef, - useLayoutEffect2 -}; -//# sourceMappingURL=chunk-SZRZRZSM.js.map diff --git a/node_modules/.vite/deps/chunk-SZRZRZSM.js.map b/node_modules/.vite/deps/chunk-SZRZRZSM.js.map deleted file mode 100644 index 6419d63d..00000000 --- a/node_modules/.vite/deps/chunk-SZRZRZSM.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/primitive/src/primitive.tsx", "../../@radix-ui/react-use-callback-ref/src/useCallbackRef.tsx", "../../@radix-ui/react-use-layout-effect/src/useLayoutEffect.tsx"], - "sourcesContent": ["function composeEventHandlers(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !((event as unknown) as Event).defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport { composeEventHandlers };\n", "import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n", "import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n"], - "mappings": ";;;;;;;;AAAA,SAAS,qBACP,sBACA,iBACA,EAAE,2BAA2B,KAAK,IAAI,CAAC,GACvC;AACA,SAAO,SAAS,YAAY,OAAU;AACpC,iEAAuB;AAEvB,QAAI,6BAA6B,SAAS,CAAG,MAA4B,kBAAkB;AACzF,aAAO,mDAAkB;IAC3B;EACF;AACF;;;ACZA,YAAuB;AAMvB,SAAS,eAAkD,UAA4B;AACrF,QAAM,cAAoB,aAAO,QAAQ;AAEnC,EAAA,gBAAU,MAAM;AACpB,gBAAY,UAAU;EACxB,CAAC;AAGD,SAAa,cAAQ,MAAO,IAAI,SAAA;;AAAS,6BAAY,YAAZ,qCAAsB,GAAG;KAAa,CAAC,CAAC;AACnF;;;ACfA,IAAAA,SAAuB;AASvB,IAAMC,mBAAkB,QAAQ,yCAAY,QAAQ,IAAU,yBAAkB,MAAM;AAAC;", - "names": ["React", "useLayoutEffect"] -} diff --git a/node_modules/.vite/deps/chunk-TZDCYJOT.js.map b/node_modules/.vite/deps/chunk-TZDCYJOT.js.map deleted file mode 100644 index aafb0950..00000000 --- a/node_modules/.vite/deps/chunk-TZDCYJOT.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../@radix-ui/react-presence/src/Presence.tsx", "../../@radix-ui/react-presence/src/useStateMachine.tsx"], - "sourcesContent": ["import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './useStateMachine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState();\n const stylesRef = React.useRef({} as any);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied\n // a frame after the animation ends, creating a flash of visible content.\n // By manually flushing we ensure they sync within a frame, removing the flash.\n ReactDOM.flushSync(() => send('ANIMATION_END'));\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n if (node) stylesRef.current = getComputedStyle(node);\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles?: CSSStyleDeclaration) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nexport { Presence };\nexport type { PresenceProps };\n", "import * as React from 'react';\n\ntype Machine = { [k: string]: { [k: string]: S } };\ntype MachineState = keyof T;\ntype MachineEvent = keyof UnionToIntersection;\n\n// \uD83E\uDD2F https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine(\n initialState: MachineState,\n machine: M & Machine>\n) {\n return React.useReducer((state: MachineState, event: MachineEvent): MachineState => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n"], - "mappings": "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", - "names": ["node"] -} diff --git a/node_modules/.vite/deps/chunk-V27RRWZQ.js b/node_modules/.vite/deps/chunk-V27RRWZQ.js new file mode 100644 index 00000000..625c1466 --- /dev/null +++ b/node_modules/.vite/deps/chunk-V27RRWZQ.js @@ -0,0 +1,3592 @@ +import { + CSS, + add, + canUseDOM, + findFirstFocusableNode, + getEventCoordinates, + getOwnerDocument, + getWindow, + isDocument, + isHTMLElement, + isKeyboardEvent, + isNode, + isSVGElement, + isWindow, + subtract, + useEvent, + useInterval, + useIsomorphicLayoutEffect, + useLatestValue, + useLazyMemo, + useNodeRef, + usePrevious, + useUniqueId +} from "./chunk-BAWHRVBE.js"; +import { + require_react_dom +} from "./chunk-R6S4VRB5.js"; +import { + require_react +} from "./chunk-3TFVT2CW.js"; +import { + __toESM +} from "./chunk-4MBMRILA.js"; + +// node_modules/@dnd-kit/core/dist/core.esm.js +var import_react2 = __toESM(require_react()); +var import_react_dom = __toESM(require_react_dom()); + +// node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +var import_react = __toESM(require_react()); +var hiddenStyles = { + display: "none" +}; +function HiddenText(_ref) { + let { + id, + value + } = _ref; + return import_react.default.createElement("div", { + id, + style: hiddenStyles + }, value); +} +function LiveRegion(_ref) { + let { + id, + announcement, + ariaLiveType = "assertive" + } = _ref; + const visuallyHidden = { + position: "fixed", + top: 0, + left: 0, + width: 1, + height: 1, + margin: -1, + border: 0, + padding: 0, + overflow: "hidden", + clip: "rect(0 0 0 0)", + clipPath: "inset(100%)", + whiteSpace: "nowrap" + }; + return import_react.default.createElement("div", { + id, + style: visuallyHidden, + role: "status", + "aria-live": ariaLiveType, + "aria-atomic": true + }, announcement); +} +function useAnnouncement() { + const [announcement, setAnnouncement] = (0, import_react.useState)(""); + const announce = (0, import_react.useCallback)((value) => { + if (value != null) { + setAnnouncement(value); + } + }, []); + return { + announce, + announcement + }; +} + +// node_modules/@dnd-kit/core/dist/core.esm.js +var DndMonitorContext = (0, import_react2.createContext)(null); +function useDndMonitor(listener) { + const registerListener = (0, import_react2.useContext)(DndMonitorContext); + (0, import_react2.useEffect)(() => { + if (!registerListener) { + throw new Error("useDndMonitor must be used within a children of "); + } + const unsubscribe = registerListener(listener); + return unsubscribe; + }, [listener, registerListener]); +} +function useDndMonitorProvider() { + const [listeners] = (0, import_react2.useState)(() => /* @__PURE__ */ new Set()); + const registerListener = (0, import_react2.useCallback)((listener) => { + listeners.add(listener); + return () => listeners.delete(listener); + }, [listeners]); + const dispatch = (0, import_react2.useCallback)((_ref) => { + let { + type, + event + } = _ref; + listeners.forEach((listener) => { + var _listener$type; + return (_listener$type = listener[type]) == null ? void 0 : _listener$type.call(listener, event); + }); + }, [listeners]); + return [dispatch, registerListener]; +} +var defaultScreenReaderInstructions = { + draggable: "\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n " +}; +var defaultAnnouncements = { + onDragStart(_ref) { + let { + active + } = _ref; + return "Picked up draggable item " + active.id + "."; + }, + onDragOver(_ref2) { + let { + active, + over + } = _ref2; + if (over) { + return "Draggable item " + active.id + " was moved over droppable area " + over.id + "."; + } + return "Draggable item " + active.id + " is no longer over a droppable area."; + }, + onDragEnd(_ref3) { + let { + active, + over + } = _ref3; + if (over) { + return "Draggable item " + active.id + " was dropped over droppable area " + over.id; + } + return "Draggable item " + active.id + " was dropped."; + }, + onDragCancel(_ref4) { + let { + active + } = _ref4; + return "Dragging was cancelled. Draggable item " + active.id + " was dropped."; + } +}; +function Accessibility(_ref) { + let { + announcements = defaultAnnouncements, + container, + hiddenTextDescribedById, + screenReaderInstructions = defaultScreenReaderInstructions + } = _ref; + const { + announce, + announcement + } = useAnnouncement(); + const liveRegionId = useUniqueId("DndLiveRegion"); + const [mounted, setMounted] = (0, import_react2.useState)(false); + (0, import_react2.useEffect)(() => { + setMounted(true); + }, []); + useDndMonitor((0, import_react2.useMemo)(() => ({ + onDragStart(_ref2) { + let { + active + } = _ref2; + announce(announcements.onDragStart({ + active + })); + }, + onDragMove(_ref3) { + let { + active, + over + } = _ref3; + if (announcements.onDragMove) { + announce(announcements.onDragMove({ + active, + over + })); + } + }, + onDragOver(_ref4) { + let { + active, + over + } = _ref4; + announce(announcements.onDragOver({ + active, + over + })); + }, + onDragEnd(_ref5) { + let { + active, + over + } = _ref5; + announce(announcements.onDragEnd({ + active, + over + })); + }, + onDragCancel(_ref6) { + let { + active, + over + } = _ref6; + announce(announcements.onDragCancel({ + active, + over + })); + } + }), [announce, announcements])); + if (!mounted) { + return null; + } + const markup = import_react2.default.createElement(import_react2.default.Fragment, null, import_react2.default.createElement(HiddenText, { + id: hiddenTextDescribedById, + value: screenReaderInstructions.draggable + }), import_react2.default.createElement(LiveRegion, { + id: liveRegionId, + announcement + })); + return container ? (0, import_react_dom.createPortal)(markup, container) : markup; +} +var Action; +(function(Action2) { + Action2["DragStart"] = "dragStart"; + Action2["DragMove"] = "dragMove"; + Action2["DragEnd"] = "dragEnd"; + Action2["DragCancel"] = "dragCancel"; + Action2["DragOver"] = "dragOver"; + Action2["RegisterDroppable"] = "registerDroppable"; + Action2["SetDroppableDisabled"] = "setDroppableDisabled"; + Action2["UnregisterDroppable"] = "unregisterDroppable"; +})(Action || (Action = {})); +function noop() { +} +function useSensor(sensor, options) { + return (0, import_react2.useMemo)( + () => ({ + sensor, + options: options != null ? options : {} + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [sensor, options] + ); +} +function useSensors() { + for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) { + sensors[_key] = arguments[_key]; + } + return (0, import_react2.useMemo)( + () => [...sensors].filter((sensor) => sensor != null), + // eslint-disable-next-line react-hooks/exhaustive-deps + [...sensors] + ); +} +var defaultCoordinates = Object.freeze({ + x: 0, + y: 0 +}); +function distanceBetween(p1, p2) { + return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2)); +} +function getRelativeTransformOrigin(event, rect) { + const eventCoordinates = getEventCoordinates(event); + if (!eventCoordinates) { + return "0 0"; + } + const transformOrigin = { + x: (eventCoordinates.x - rect.left) / rect.width * 100, + y: (eventCoordinates.y - rect.top) / rect.height * 100 + }; + return transformOrigin.x + "% " + transformOrigin.y + "%"; +} +function sortCollisionsAsc(_ref, _ref2) { + let { + data: { + value: a + } + } = _ref; + let { + data: { + value: b + } + } = _ref2; + return a - b; +} +function sortCollisionsDesc(_ref3, _ref4) { + let { + data: { + value: a + } + } = _ref3; + let { + data: { + value: b + } + } = _ref4; + return b - a; +} +function cornersOfRectangle(_ref5) { + let { + left, + top, + height, + width + } = _ref5; + return [{ + x: left, + y: top + }, { + x: left + width, + y: top + }, { + x: left, + y: top + height + }, { + x: left + width, + y: top + height + }]; +} +function getFirstCollision(collisions, property) { + if (!collisions || collisions.length === 0) { + return null; + } + const [firstCollision] = collisions; + return property ? firstCollision[property] : firstCollision; +} +function centerOfRectangle(rect, left, top) { + if (left === void 0) { + left = rect.left; + } + if (top === void 0) { + top = rect.top; + } + return { + x: left + rect.width * 0.5, + y: top + rect.height * 0.5 + }; +} +var closestCenter = (_ref) => { + let { + collisionRect, + droppableRects, + droppableContainers + } = _ref; + const centerRect = centerOfRectangle(collisionRect, collisionRect.left, collisionRect.top); + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id + } = droppableContainer; + const rect = droppableRects.get(id); + if (rect) { + const distBetween = distanceBetween(centerOfRectangle(rect), centerRect); + collisions.push({ + id, + data: { + droppableContainer, + value: distBetween + } + }); + } + } + return collisions.sort(sortCollisionsAsc); +}; +var closestCorners = (_ref) => { + let { + collisionRect, + droppableRects, + droppableContainers + } = _ref; + const corners = cornersOfRectangle(collisionRect); + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id + } = droppableContainer; + const rect = droppableRects.get(id); + if (rect) { + const rectCorners = cornersOfRectangle(rect); + const distances = corners.reduce((accumulator, corner, index) => { + return accumulator + distanceBetween(rectCorners[index], corner); + }, 0); + const effectiveDistance = Number((distances / 4).toFixed(4)); + collisions.push({ + id, + data: { + droppableContainer, + value: effectiveDistance + } + }); + } + } + return collisions.sort(sortCollisionsAsc); +}; +function getIntersectionRatio(entry, target) { + const top = Math.max(target.top, entry.top); + const left = Math.max(target.left, entry.left); + const right = Math.min(target.left + target.width, entry.left + entry.width); + const bottom = Math.min(target.top + target.height, entry.top + entry.height); + const width = right - left; + const height = bottom - top; + if (left < right && top < bottom) { + const targetArea = target.width * target.height; + const entryArea = entry.width * entry.height; + const intersectionArea = width * height; + const intersectionRatio = intersectionArea / (targetArea + entryArea - intersectionArea); + return Number(intersectionRatio.toFixed(4)); + } + return 0; +} +var rectIntersection = (_ref) => { + let { + collisionRect, + droppableRects, + droppableContainers + } = _ref; + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id + } = droppableContainer; + const rect = droppableRects.get(id); + if (rect) { + const intersectionRatio = getIntersectionRatio(rect, collisionRect); + if (intersectionRatio > 0) { + collisions.push({ + id, + data: { + droppableContainer, + value: intersectionRatio + } + }); + } + } + } + return collisions.sort(sortCollisionsDesc); +}; +function isPointWithinRect(point, rect) { + const { + top, + left, + bottom, + right + } = rect; + return top <= point.y && point.y <= bottom && left <= point.x && point.x <= right; +} +var pointerWithin = (_ref) => { + let { + droppableContainers, + droppableRects, + pointerCoordinates + } = _ref; + if (!pointerCoordinates) { + return []; + } + const collisions = []; + for (const droppableContainer of droppableContainers) { + const { + id + } = droppableContainer; + const rect = droppableRects.get(id); + if (rect && isPointWithinRect(pointerCoordinates, rect)) { + const corners = cornersOfRectangle(rect); + const distances = corners.reduce((accumulator, corner) => { + return accumulator + distanceBetween(pointerCoordinates, corner); + }, 0); + const effectiveDistance = Number((distances / 4).toFixed(4)); + collisions.push({ + id, + data: { + droppableContainer, + value: effectiveDistance + } + }); + } + } + return collisions.sort(sortCollisionsAsc); +}; +function adjustScale(transform, rect1, rect2) { + return { + ...transform, + scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1, + scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1 + }; +} +function getRectDelta(rect1, rect2) { + return rect1 && rect2 ? { + x: rect1.left - rect2.left, + y: rect1.top - rect2.top + } : defaultCoordinates; +} +function createRectAdjustmentFn(modifier) { + return function adjustClientRect(rect) { + for (var _len = arguments.length, adjustments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + adjustments[_key - 1] = arguments[_key]; + } + return adjustments.reduce((acc, adjustment) => ({ + ...acc, + top: acc.top + modifier * adjustment.y, + bottom: acc.bottom + modifier * adjustment.y, + left: acc.left + modifier * adjustment.x, + right: acc.right + modifier * adjustment.x + }), { + ...rect + }); + }; +} +var getAdjustedRect = createRectAdjustmentFn(1); +function parseTransform(transform) { + if (transform.startsWith("matrix3d(")) { + const transformArray = transform.slice(9, -1).split(/, /); + return { + x: +transformArray[12], + y: +transformArray[13], + scaleX: +transformArray[0], + scaleY: +transformArray[5] + }; + } else if (transform.startsWith("matrix(")) { + const transformArray = transform.slice(7, -1).split(/, /); + return { + x: +transformArray[4], + y: +transformArray[5], + scaleX: +transformArray[0], + scaleY: +transformArray[3] + }; + } + return null; +} +function inverseTransform(rect, transform, transformOrigin) { + const parsedTransform = parseTransform(transform); + if (!parsedTransform) { + return rect; + } + const { + scaleX, + scaleY, + x: translateX, + y: translateY + } = parsedTransform; + const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin); + const y = rect.top - translateY - (1 - scaleY) * parseFloat(transformOrigin.slice(transformOrigin.indexOf(" ") + 1)); + const w = scaleX ? rect.width / scaleX : rect.width; + const h = scaleY ? rect.height / scaleY : rect.height; + return { + width: w, + height: h, + top: y, + right: x + w, + bottom: y + h, + left: x + }; +} +var defaultOptions = { + ignoreTransform: false +}; +function getClientRect(element, options) { + if (options === void 0) { + options = defaultOptions; + } + let rect = element.getBoundingClientRect(); + if (options.ignoreTransform) { + const { + transform, + transformOrigin + } = getWindow(element).getComputedStyle(element); + if (transform) { + rect = inverseTransform(rect, transform, transformOrigin); + } + } + const { + top, + left, + width, + height, + bottom, + right + } = rect; + return { + top, + left, + width, + height, + bottom, + right + }; +} +function getTransformAgnosticClientRect(element) { + return getClientRect(element, { + ignoreTransform: true + }); +} +function getWindowClientRect(element) { + const width = element.innerWidth; + const height = element.innerHeight; + return { + top: 0, + left: 0, + right: width, + bottom: height, + width, + height + }; +} +function isFixed(node, computedStyle) { + if (computedStyle === void 0) { + computedStyle = getWindow(node).getComputedStyle(node); + } + return computedStyle.position === "fixed"; +} +function isScrollable(element, computedStyle) { + if (computedStyle === void 0) { + computedStyle = getWindow(element).getComputedStyle(element); + } + const overflowRegex = /(auto|scroll|overlay)/; + const properties2 = ["overflow", "overflowX", "overflowY"]; + return properties2.some((property) => { + const value = computedStyle[property]; + return typeof value === "string" ? overflowRegex.test(value) : false; + }); +} +function getScrollableAncestors(element, limit) { + const scrollParents = []; + function findScrollableAncestors(node) { + if (limit != null && scrollParents.length >= limit) { + return scrollParents; + } + if (!node) { + return scrollParents; + } + if (isDocument(node) && node.scrollingElement != null && !scrollParents.includes(node.scrollingElement)) { + scrollParents.push(node.scrollingElement); + return scrollParents; + } + if (!isHTMLElement(node) || isSVGElement(node)) { + return scrollParents; + } + if (scrollParents.includes(node)) { + return scrollParents; + } + const computedStyle = getWindow(element).getComputedStyle(node); + if (node !== element) { + if (isScrollable(node, computedStyle)) { + scrollParents.push(node); + } + } + if (isFixed(node, computedStyle)) { + return scrollParents; + } + return findScrollableAncestors(node.parentNode); + } + if (!element) { + return scrollParents; + } + return findScrollableAncestors(element); +} +function getFirstScrollableAncestor(node) { + const [firstScrollableAncestor] = getScrollableAncestors(node, 1); + return firstScrollableAncestor != null ? firstScrollableAncestor : null; +} +function getScrollableElement(element) { + if (!canUseDOM || !element) { + return null; + } + if (isWindow(element)) { + return element; + } + if (!isNode(element)) { + return null; + } + if (isDocument(element) || element === getOwnerDocument(element).scrollingElement) { + return window; + } + if (isHTMLElement(element)) { + return element; + } + return null; +} +function getScrollXCoordinate(element) { + if (isWindow(element)) { + return element.scrollX; + } + return element.scrollLeft; +} +function getScrollYCoordinate(element) { + if (isWindow(element)) { + return element.scrollY; + } + return element.scrollTop; +} +function getScrollCoordinates(element) { + return { + x: getScrollXCoordinate(element), + y: getScrollYCoordinate(element) + }; +} +var Direction; +(function(Direction2) { + Direction2[Direction2["Forward"] = 1] = "Forward"; + Direction2[Direction2["Backward"] = -1] = "Backward"; +})(Direction || (Direction = {})); +function isDocumentScrollingElement(element) { + if (!canUseDOM || !element) { + return false; + } + return element === document.scrollingElement; +} +function getScrollPosition(scrollingContainer) { + const minScroll = { + x: 0, + y: 0 + }; + const dimensions = isDocumentScrollingElement(scrollingContainer) ? { + height: window.innerHeight, + width: window.innerWidth + } : { + height: scrollingContainer.clientHeight, + width: scrollingContainer.clientWidth + }; + const maxScroll = { + x: scrollingContainer.scrollWidth - dimensions.width, + y: scrollingContainer.scrollHeight - dimensions.height + }; + const isTop = scrollingContainer.scrollTop <= minScroll.y; + const isLeft = scrollingContainer.scrollLeft <= minScroll.x; + const isBottom = scrollingContainer.scrollTop >= maxScroll.y; + const isRight = scrollingContainer.scrollLeft >= maxScroll.x; + return { + isTop, + isLeft, + isBottom, + isRight, + maxScroll, + minScroll + }; +} +var defaultThreshold = { + x: 0.2, + y: 0.2 +}; +function getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, _ref, acceleration, thresholdPercentage) { + let { + top, + left, + right, + bottom + } = _ref; + if (acceleration === void 0) { + acceleration = 10; + } + if (thresholdPercentage === void 0) { + thresholdPercentage = defaultThreshold; + } + const { + isTop, + isBottom, + isLeft, + isRight + } = getScrollPosition(scrollContainer); + const direction = { + x: 0, + y: 0 + }; + const speed = { + x: 0, + y: 0 + }; + const threshold = { + height: scrollContainerRect.height * thresholdPercentage.y, + width: scrollContainerRect.width * thresholdPercentage.x + }; + if (!isTop && top <= scrollContainerRect.top + threshold.height) { + direction.y = Direction.Backward; + speed.y = acceleration * Math.abs((scrollContainerRect.top + threshold.height - top) / threshold.height); + } else if (!isBottom && bottom >= scrollContainerRect.bottom - threshold.height) { + direction.y = Direction.Forward; + speed.y = acceleration * Math.abs((scrollContainerRect.bottom - threshold.height - bottom) / threshold.height); + } + if (!isRight && right >= scrollContainerRect.right - threshold.width) { + direction.x = Direction.Forward; + speed.x = acceleration * Math.abs((scrollContainerRect.right - threshold.width - right) / threshold.width); + } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) { + direction.x = Direction.Backward; + speed.x = acceleration * Math.abs((scrollContainerRect.left + threshold.width - left) / threshold.width); + } + return { + direction, + speed + }; +} +function getScrollElementRect(element) { + if (element === document.scrollingElement) { + const { + innerWidth, + innerHeight + } = window; + return { + top: 0, + left: 0, + right: innerWidth, + bottom: innerHeight, + width: innerWidth, + height: innerHeight + }; + } + const { + top, + left, + right, + bottom + } = element.getBoundingClientRect(); + return { + top, + left, + right, + bottom, + width: element.clientWidth, + height: element.clientHeight + }; +} +function getScrollOffsets(scrollableAncestors) { + return scrollableAncestors.reduce((acc, node) => { + return add(acc, getScrollCoordinates(node)); + }, defaultCoordinates); +} +function getScrollXOffset(scrollableAncestors) { + return scrollableAncestors.reduce((acc, node) => { + return acc + getScrollXCoordinate(node); + }, 0); +} +function getScrollYOffset(scrollableAncestors) { + return scrollableAncestors.reduce((acc, node) => { + return acc + getScrollYCoordinate(node); + }, 0); +} +function scrollIntoViewIfNeeded(element, measure) { + if (measure === void 0) { + measure = getClientRect; + } + if (!element) { + return; + } + const { + top, + left, + bottom, + right + } = measure(element); + const firstScrollableAncestor = getFirstScrollableAncestor(element); + if (!firstScrollableAncestor) { + return; + } + if (bottom <= 0 || right <= 0 || top >= window.innerHeight || left >= window.innerWidth) { + element.scrollIntoView({ + block: "center", + inline: "center" + }); + } +} +var properties = [["x", ["left", "right"], getScrollXOffset], ["y", ["top", "bottom"], getScrollYOffset]]; +var Rect = class { + constructor(rect, element) { + this.rect = void 0; + this.width = void 0; + this.height = void 0; + this.top = void 0; + this.bottom = void 0; + this.right = void 0; + this.left = void 0; + const scrollableAncestors = getScrollableAncestors(element); + const scrollOffsets = getScrollOffsets(scrollableAncestors); + this.rect = { + ...rect + }; + this.width = rect.width; + this.height = rect.height; + for (const [axis, keys, getScrollOffset] of properties) { + for (const key2 of keys) { + Object.defineProperty(this, key2, { + get: () => { + const currentOffsets = getScrollOffset(scrollableAncestors); + const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets; + return this.rect[key2] + scrollOffsetsDeltla; + }, + enumerable: true + }); + } + } + Object.defineProperty(this, "rect", { + enumerable: false + }); + } +}; +var Listeners = class { + constructor(target) { + this.target = void 0; + this.listeners = []; + this.removeAll = () => { + this.listeners.forEach((listener) => { + var _this$target; + return (_this$target = this.target) == null ? void 0 : _this$target.removeEventListener(...listener); + }); + }; + this.target = target; + } + add(eventName, handler, options) { + var _this$target2; + (_this$target2 = this.target) == null ? void 0 : _this$target2.addEventListener(eventName, handler, options); + this.listeners.push([eventName, handler, options]); + } +}; +function getEventListenerTarget(target) { + const { + EventTarget + } = getWindow(target); + return target instanceof EventTarget ? target : getOwnerDocument(target); +} +function hasExceededDistance(delta, measurement) { + const dx = Math.abs(delta.x); + const dy = Math.abs(delta.y); + if (typeof measurement === "number") { + return Math.sqrt(dx ** 2 + dy ** 2) > measurement; + } + if ("x" in measurement && "y" in measurement) { + return dx > measurement.x && dy > measurement.y; + } + if ("x" in measurement) { + return dx > measurement.x; + } + if ("y" in measurement) { + return dy > measurement.y; + } + return false; +} +var EventName; +(function(EventName2) { + EventName2["Click"] = "click"; + EventName2["DragStart"] = "dragstart"; + EventName2["Keydown"] = "keydown"; + EventName2["ContextMenu"] = "contextmenu"; + EventName2["Resize"] = "resize"; + EventName2["SelectionChange"] = "selectionchange"; + EventName2["VisibilityChange"] = "visibilitychange"; +})(EventName || (EventName = {})); +function preventDefault(event) { + event.preventDefault(); +} +function stopPropagation(event) { + event.stopPropagation(); +} +var KeyboardCode; +(function(KeyboardCode2) { + KeyboardCode2["Space"] = "Space"; + KeyboardCode2["Down"] = "ArrowDown"; + KeyboardCode2["Right"] = "ArrowRight"; + KeyboardCode2["Left"] = "ArrowLeft"; + KeyboardCode2["Up"] = "ArrowUp"; + KeyboardCode2["Esc"] = "Escape"; + KeyboardCode2["Enter"] = "Enter"; + KeyboardCode2["Tab"] = "Tab"; +})(KeyboardCode || (KeyboardCode = {})); +var defaultKeyboardCodes = { + start: [KeyboardCode.Space, KeyboardCode.Enter], + cancel: [KeyboardCode.Esc], + end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab] +}; +var defaultKeyboardCoordinateGetter = (event, _ref) => { + let { + currentCoordinates + } = _ref; + switch (event.code) { + case KeyboardCode.Right: + return { + ...currentCoordinates, + x: currentCoordinates.x + 25 + }; + case KeyboardCode.Left: + return { + ...currentCoordinates, + x: currentCoordinates.x - 25 + }; + case KeyboardCode.Down: + return { + ...currentCoordinates, + y: currentCoordinates.y + 25 + }; + case KeyboardCode.Up: + return { + ...currentCoordinates, + y: currentCoordinates.y - 25 + }; + } + return void 0; +}; +var KeyboardSensor = class { + constructor(props) { + this.props = void 0; + this.autoScrollEnabled = false; + this.referenceCoordinates = void 0; + this.listeners = void 0; + this.windowListeners = void 0; + this.props = props; + const { + event: { + target + } + } = props; + this.props = props; + this.listeners = new Listeners(getOwnerDocument(target)); + this.windowListeners = new Listeners(getWindow(target)); + this.handleKeyDown = this.handleKeyDown.bind(this); + this.handleCancel = this.handleCancel.bind(this); + this.attach(); + } + attach() { + this.handleStart(); + this.windowListeners.add(EventName.Resize, this.handleCancel); + this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); + setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown)); + } + handleStart() { + const { + activeNode, + onStart + } = this.props; + const node = activeNode.node.current; + if (node) { + scrollIntoViewIfNeeded(node); + } + onStart(defaultCoordinates); + } + handleKeyDown(event) { + if (isKeyboardEvent(event)) { + const { + active, + context, + options + } = this.props; + const { + keyboardCodes = defaultKeyboardCodes, + coordinateGetter = defaultKeyboardCoordinateGetter, + scrollBehavior = "smooth" + } = options; + const { + code + } = event; + if (keyboardCodes.end.includes(code)) { + this.handleEnd(event); + return; + } + if (keyboardCodes.cancel.includes(code)) { + this.handleCancel(event); + return; + } + const { + collisionRect + } = context.current; + const currentCoordinates = collisionRect ? { + x: collisionRect.left, + y: collisionRect.top + } : defaultCoordinates; + if (!this.referenceCoordinates) { + this.referenceCoordinates = currentCoordinates; + } + const newCoordinates = coordinateGetter(event, { + active, + context: context.current, + currentCoordinates + }); + if (newCoordinates) { + const coordinatesDelta = subtract(newCoordinates, currentCoordinates); + const scrollDelta = { + x: 0, + y: 0 + }; + const { + scrollableAncestors + } = context.current; + for (const scrollContainer of scrollableAncestors) { + const direction = event.code; + const { + isTop, + isRight, + isLeft, + isBottom, + maxScroll, + minScroll + } = getScrollPosition(scrollContainer); + const scrollElementRect = getScrollElementRect(scrollContainer); + const clampedCoordinates = { + x: Math.min(direction === KeyboardCode.Right ? scrollElementRect.right - scrollElementRect.width / 2 : scrollElementRect.right, Math.max(direction === KeyboardCode.Right ? scrollElementRect.left : scrollElementRect.left + scrollElementRect.width / 2, newCoordinates.x)), + y: Math.min(direction === KeyboardCode.Down ? scrollElementRect.bottom - scrollElementRect.height / 2 : scrollElementRect.bottom, Math.max(direction === KeyboardCode.Down ? scrollElementRect.top : scrollElementRect.top + scrollElementRect.height / 2, newCoordinates.y)) + }; + const canScrollX = direction === KeyboardCode.Right && !isRight || direction === KeyboardCode.Left && !isLeft; + const canScrollY = direction === KeyboardCode.Down && !isBottom || direction === KeyboardCode.Up && !isTop; + if (canScrollX && clampedCoordinates.x !== newCoordinates.x) { + const newScrollCoordinates = scrollContainer.scrollLeft + coordinatesDelta.x; + const canScrollToNewCoordinates = direction === KeyboardCode.Right && newScrollCoordinates <= maxScroll.x || direction === KeyboardCode.Left && newScrollCoordinates >= minScroll.x; + if (canScrollToNewCoordinates && !coordinatesDelta.y) { + scrollContainer.scrollTo({ + left: newScrollCoordinates, + behavior: scrollBehavior + }); + return; + } + if (canScrollToNewCoordinates) { + scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates; + } else { + scrollDelta.x = direction === KeyboardCode.Right ? scrollContainer.scrollLeft - maxScroll.x : scrollContainer.scrollLeft - minScroll.x; + } + if (scrollDelta.x) { + scrollContainer.scrollBy({ + left: -scrollDelta.x, + behavior: scrollBehavior + }); + } + break; + } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) { + const newScrollCoordinates = scrollContainer.scrollTop + coordinatesDelta.y; + const canScrollToNewCoordinates = direction === KeyboardCode.Down && newScrollCoordinates <= maxScroll.y || direction === KeyboardCode.Up && newScrollCoordinates >= minScroll.y; + if (canScrollToNewCoordinates && !coordinatesDelta.x) { + scrollContainer.scrollTo({ + top: newScrollCoordinates, + behavior: scrollBehavior + }); + return; + } + if (canScrollToNewCoordinates) { + scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates; + } else { + scrollDelta.y = direction === KeyboardCode.Down ? scrollContainer.scrollTop - maxScroll.y : scrollContainer.scrollTop - minScroll.y; + } + if (scrollDelta.y) { + scrollContainer.scrollBy({ + top: -scrollDelta.y, + behavior: scrollBehavior + }); + } + break; + } + } + this.handleMove(event, add(subtract(newCoordinates, this.referenceCoordinates), scrollDelta)); + } + } + } + handleMove(event, coordinates) { + const { + onMove + } = this.props; + event.preventDefault(); + onMove(coordinates); + } + handleEnd(event) { + const { + onEnd + } = this.props; + event.preventDefault(); + this.detach(); + onEnd(); + } + handleCancel(event) { + const { + onCancel + } = this.props; + event.preventDefault(); + this.detach(); + onCancel(); + } + detach() { + this.listeners.removeAll(); + this.windowListeners.removeAll(); + } +}; +KeyboardSensor.activators = [{ + eventName: "onKeyDown", + handler: (event, _ref, _ref2) => { + let { + keyboardCodes = defaultKeyboardCodes, + onActivation + } = _ref; + let { + active + } = _ref2; + const { + code + } = event.nativeEvent; + if (keyboardCodes.start.includes(code)) { + const activator = active.activatorNode.current; + if (activator && event.target !== activator) { + return false; + } + event.preventDefault(); + onActivation == null ? void 0 : onActivation({ + event: event.nativeEvent + }); + return true; + } + return false; + } +}]; +function isDistanceConstraint(constraint) { + return Boolean(constraint && "distance" in constraint); +} +function isDelayConstraint(constraint) { + return Boolean(constraint && "delay" in constraint); +} +var AbstractPointerSensor = class { + constructor(props, events2, listenerTarget) { + var _getEventCoordinates; + if (listenerTarget === void 0) { + listenerTarget = getEventListenerTarget(props.event.target); + } + this.props = void 0; + this.events = void 0; + this.autoScrollEnabled = true; + this.document = void 0; + this.activated = false; + this.initialCoordinates = void 0; + this.timeoutId = null; + this.listeners = void 0; + this.documentListeners = void 0; + this.windowListeners = void 0; + this.props = props; + this.events = events2; + const { + event + } = props; + const { + target + } = event; + this.props = props; + this.events = events2; + this.document = getOwnerDocument(target); + this.documentListeners = new Listeners(this.document); + this.listeners = new Listeners(listenerTarget); + this.windowListeners = new Listeners(getWindow(target)); + this.initialCoordinates = (_getEventCoordinates = getEventCoordinates(event)) != null ? _getEventCoordinates : defaultCoordinates; + this.handleStart = this.handleStart.bind(this); + this.handleMove = this.handleMove.bind(this); + this.handleEnd = this.handleEnd.bind(this); + this.handleCancel = this.handleCancel.bind(this); + this.handleKeydown = this.handleKeydown.bind(this); + this.removeTextSelection = this.removeTextSelection.bind(this); + this.attach(); + } + attach() { + const { + events: events2, + props: { + options: { + activationConstraint, + bypassActivationConstraint + } + } + } = this; + this.listeners.add(events2.move.name, this.handleMove, { + passive: false + }); + this.listeners.add(events2.end.name, this.handleEnd); + if (events2.cancel) { + this.listeners.add(events2.cancel.name, this.handleCancel); + } + this.windowListeners.add(EventName.Resize, this.handleCancel); + this.windowListeners.add(EventName.DragStart, preventDefault); + this.windowListeners.add(EventName.VisibilityChange, this.handleCancel); + this.windowListeners.add(EventName.ContextMenu, preventDefault); + this.documentListeners.add(EventName.Keydown, this.handleKeydown); + if (activationConstraint) { + if (bypassActivationConstraint != null && bypassActivationConstraint({ + event: this.props.event, + activeNode: this.props.activeNode, + options: this.props.options + })) { + return this.handleStart(); + } + if (isDelayConstraint(activationConstraint)) { + this.timeoutId = setTimeout(this.handleStart, activationConstraint.delay); + this.handlePending(activationConstraint); + return; + } + if (isDistanceConstraint(activationConstraint)) { + this.handlePending(activationConstraint); + return; + } + } + this.handleStart(); + } + detach() { + this.listeners.removeAll(); + this.windowListeners.removeAll(); + setTimeout(this.documentListeners.removeAll, 50); + if (this.timeoutId !== null) { + clearTimeout(this.timeoutId); + this.timeoutId = null; + } + } + handlePending(constraint, offset) { + const { + active, + onPending + } = this.props; + onPending(active, constraint, this.initialCoordinates, offset); + } + handleStart() { + const { + initialCoordinates + } = this; + const { + onStart + } = this.props; + if (initialCoordinates) { + this.activated = true; + this.documentListeners.add(EventName.Click, stopPropagation, { + capture: true + }); + this.removeTextSelection(); + this.documentListeners.add(EventName.SelectionChange, this.removeTextSelection); + onStart(initialCoordinates); + } + } + handleMove(event) { + var _getEventCoordinates2; + const { + activated, + initialCoordinates, + props + } = this; + const { + onMove, + options: { + activationConstraint + } + } = props; + if (!initialCoordinates) { + return; + } + const coordinates = (_getEventCoordinates2 = getEventCoordinates(event)) != null ? _getEventCoordinates2 : defaultCoordinates; + const delta = subtract(initialCoordinates, coordinates); + if (!activated && activationConstraint) { + if (isDistanceConstraint(activationConstraint)) { + if (activationConstraint.tolerance != null && hasExceededDistance(delta, activationConstraint.tolerance)) { + return this.handleCancel(); + } + if (hasExceededDistance(delta, activationConstraint.distance)) { + return this.handleStart(); + } + } + if (isDelayConstraint(activationConstraint)) { + if (hasExceededDistance(delta, activationConstraint.tolerance)) { + return this.handleCancel(); + } + } + this.handlePending(activationConstraint, delta); + return; + } + if (event.cancelable) { + event.preventDefault(); + } + onMove(coordinates); + } + handleEnd() { + const { + onAbort, + onEnd + } = this.props; + this.detach(); + if (!this.activated) { + onAbort(this.props.active); + } + onEnd(); + } + handleCancel() { + const { + onAbort, + onCancel + } = this.props; + this.detach(); + if (!this.activated) { + onAbort(this.props.active); + } + onCancel(); + } + handleKeydown(event) { + if (event.code === KeyboardCode.Esc) { + this.handleCancel(); + } + } + removeTextSelection() { + var _this$document$getSel; + (_this$document$getSel = this.document.getSelection()) == null ? void 0 : _this$document$getSel.removeAllRanges(); + } +}; +var events = { + cancel: { + name: "pointercancel" + }, + move: { + name: "pointermove" + }, + end: { + name: "pointerup" + } +}; +var PointerSensor = class extends AbstractPointerSensor { + constructor(props) { + const { + event + } = props; + const listenerTarget = getOwnerDocument(event.target); + super(props, events, listenerTarget); + } +}; +PointerSensor.activators = [{ + eventName: "onPointerDown", + handler: (_ref, _ref2) => { + let { + nativeEvent: event + } = _ref; + let { + onActivation + } = _ref2; + if (!event.isPrimary || event.button !== 0) { + return false; + } + onActivation == null ? void 0 : onActivation({ + event + }); + return true; + } +}]; +var events$1 = { + move: { + name: "mousemove" + }, + end: { + name: "mouseup" + } +}; +var MouseButton; +(function(MouseButton2) { + MouseButton2[MouseButton2["RightClick"] = 2] = "RightClick"; +})(MouseButton || (MouseButton = {})); +var MouseSensor = class extends AbstractPointerSensor { + constructor(props) { + super(props, events$1, getOwnerDocument(props.event.target)); + } +}; +MouseSensor.activators = [{ + eventName: "onMouseDown", + handler: (_ref, _ref2) => { + let { + nativeEvent: event + } = _ref; + let { + onActivation + } = _ref2; + if (event.button === MouseButton.RightClick) { + return false; + } + onActivation == null ? void 0 : onActivation({ + event + }); + return true; + } +}]; +var events$2 = { + cancel: { + name: "touchcancel" + }, + move: { + name: "touchmove" + }, + end: { + name: "touchend" + } +}; +var TouchSensor = class extends AbstractPointerSensor { + constructor(props) { + super(props, events$2); + } + static setup() { + window.addEventListener(events$2.move.name, noop2, { + capture: false, + passive: false + }); + return function teardown() { + window.removeEventListener(events$2.move.name, noop2); + }; + function noop2() { + } + } +}; +TouchSensor.activators = [{ + eventName: "onTouchStart", + handler: (_ref, _ref2) => { + let { + nativeEvent: event + } = _ref; + let { + onActivation + } = _ref2; + const { + touches + } = event; + if (touches.length > 1) { + return false; + } + onActivation == null ? void 0 : onActivation({ + event + }); + return true; + } +}]; +var AutoScrollActivator; +(function(AutoScrollActivator2) { + AutoScrollActivator2[AutoScrollActivator2["Pointer"] = 0] = "Pointer"; + AutoScrollActivator2[AutoScrollActivator2["DraggableRect"] = 1] = "DraggableRect"; +})(AutoScrollActivator || (AutoScrollActivator = {})); +var TraversalOrder; +(function(TraversalOrder2) { + TraversalOrder2[TraversalOrder2["TreeOrder"] = 0] = "TreeOrder"; + TraversalOrder2[TraversalOrder2["ReversedTreeOrder"] = 1] = "ReversedTreeOrder"; +})(TraversalOrder || (TraversalOrder = {})); +function useAutoScroller(_ref) { + let { + acceleration, + activator = AutoScrollActivator.Pointer, + canScroll, + draggingRect, + enabled, + interval = 5, + order = TraversalOrder.TreeOrder, + pointerCoordinates, + scrollableAncestors, + scrollableAncestorRects, + delta, + threshold + } = _ref; + const scrollIntent = useScrollIntent({ + delta, + disabled: !enabled + }); + const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval(); + const scrollSpeed = (0, import_react2.useRef)({ + x: 0, + y: 0 + }); + const scrollDirection = (0, import_react2.useRef)({ + x: 0, + y: 0 + }); + const rect = (0, import_react2.useMemo)(() => { + switch (activator) { + case AutoScrollActivator.Pointer: + return pointerCoordinates ? { + top: pointerCoordinates.y, + bottom: pointerCoordinates.y, + left: pointerCoordinates.x, + right: pointerCoordinates.x + } : null; + case AutoScrollActivator.DraggableRect: + return draggingRect; + } + }, [activator, draggingRect, pointerCoordinates]); + const scrollContainerRef = (0, import_react2.useRef)(null); + const autoScroll = (0, import_react2.useCallback)(() => { + const scrollContainer = scrollContainerRef.current; + if (!scrollContainer) { + return; + } + const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x; + const scrollTop = scrollSpeed.current.y * scrollDirection.current.y; + scrollContainer.scrollBy(scrollLeft, scrollTop); + }, []); + const sortedScrollableAncestors = (0, import_react2.useMemo)(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]); + (0, import_react2.useEffect)( + () => { + if (!enabled || !scrollableAncestors.length || !rect) { + clearAutoScrollInterval(); + return; + } + for (const scrollContainer of sortedScrollableAncestors) { + if ((canScroll == null ? void 0 : canScroll(scrollContainer)) === false) { + continue; + } + const index = scrollableAncestors.indexOf(scrollContainer); + const scrollContainerRect = scrollableAncestorRects[index]; + if (!scrollContainerRect) { + continue; + } + const { + direction, + speed + } = getScrollDirectionAndSpeed(scrollContainer, scrollContainerRect, rect, acceleration, threshold); + for (const axis of ["x", "y"]) { + if (!scrollIntent[axis][direction[axis]]) { + speed[axis] = 0; + direction[axis] = 0; + } + } + if (speed.x > 0 || speed.y > 0) { + clearAutoScrollInterval(); + scrollContainerRef.current = scrollContainer; + setAutoScrollInterval(autoScroll, interval); + scrollSpeed.current = speed; + scrollDirection.current = direction; + return; + } + } + scrollSpeed.current = { + x: 0, + y: 0 + }; + scrollDirection.current = { + x: 0, + y: 0 + }; + clearAutoScrollInterval(); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [ + acceleration, + autoScroll, + canScroll, + clearAutoScrollInterval, + enabled, + interval, + // eslint-disable-next-line react-hooks/exhaustive-deps + JSON.stringify(rect), + // eslint-disable-next-line react-hooks/exhaustive-deps + JSON.stringify(scrollIntent), + setAutoScrollInterval, + scrollableAncestors, + sortedScrollableAncestors, + scrollableAncestorRects, + // eslint-disable-next-line react-hooks/exhaustive-deps + JSON.stringify(threshold) + ] + ); +} +var defaultScrollIntent = { + x: { + [Direction.Backward]: false, + [Direction.Forward]: false + }, + y: { + [Direction.Backward]: false, + [Direction.Forward]: false + } +}; +function useScrollIntent(_ref2) { + let { + delta, + disabled + } = _ref2; + const previousDelta = usePrevious(delta); + return useLazyMemo((previousIntent) => { + if (disabled || !previousDelta || !previousIntent) { + return defaultScrollIntent; + } + const direction = { + x: Math.sign(delta.x - previousDelta.x), + y: Math.sign(delta.y - previousDelta.y) + }; + return { + x: { + [Direction.Backward]: previousIntent.x[Direction.Backward] || direction.x === -1, + [Direction.Forward]: previousIntent.x[Direction.Forward] || direction.x === 1 + }, + y: { + [Direction.Backward]: previousIntent.y[Direction.Backward] || direction.y === -1, + [Direction.Forward]: previousIntent.y[Direction.Forward] || direction.y === 1 + } + }; + }, [disabled, delta, previousDelta]); +} +function useCachedNode(draggableNodes, id) { + const draggableNode = id != null ? draggableNodes.get(id) : void 0; + const node = draggableNode ? draggableNode.node.current : null; + return useLazyMemo((cachedNode) => { + var _ref; + if (id == null) { + return null; + } + return (_ref = node != null ? node : cachedNode) != null ? _ref : null; + }, [node, id]); +} +function useCombineActivators(sensors, getSyntheticHandler) { + return (0, import_react2.useMemo)(() => sensors.reduce((accumulator, sensor) => { + const { + sensor: Sensor + } = sensor; + const sensorActivators = Sensor.activators.map((activator) => ({ + eventName: activator.eventName, + handler: getSyntheticHandler(activator.handler, sensor) + })); + return [...accumulator, ...sensorActivators]; + }, []), [sensors, getSyntheticHandler]); +} +var MeasuringStrategy; +(function(MeasuringStrategy2) { + MeasuringStrategy2[MeasuringStrategy2["Always"] = 0] = "Always"; + MeasuringStrategy2[MeasuringStrategy2["BeforeDragging"] = 1] = "BeforeDragging"; + MeasuringStrategy2[MeasuringStrategy2["WhileDragging"] = 2] = "WhileDragging"; +})(MeasuringStrategy || (MeasuringStrategy = {})); +var MeasuringFrequency; +(function(MeasuringFrequency2) { + MeasuringFrequency2["Optimized"] = "optimized"; +})(MeasuringFrequency || (MeasuringFrequency = {})); +var defaultValue = /* @__PURE__ */ new Map(); +function useDroppableMeasuring(containers, _ref) { + let { + dragging, + dependencies, + config + } = _ref; + const [queue, setQueue] = (0, import_react2.useState)(null); + const { + frequency, + measure, + strategy + } = config; + const containersRef = (0, import_react2.useRef)(containers); + const disabled = isDisabled(); + const disabledRef = useLatestValue(disabled); + const measureDroppableContainers = (0, import_react2.useCallback)(function(ids) { + if (ids === void 0) { + ids = []; + } + if (disabledRef.current) { + return; + } + setQueue((value) => { + if (value === null) { + return ids; + } + return value.concat(ids.filter((id) => !value.includes(id))); + }); + }, [disabledRef]); + const timeoutId = (0, import_react2.useRef)(null); + const droppableRects = useLazyMemo((previousValue) => { + if (disabled && !dragging) { + return defaultValue; + } + if (!previousValue || previousValue === defaultValue || containersRef.current !== containers || queue != null) { + const map = /* @__PURE__ */ new Map(); + for (let container of containers) { + if (!container) { + continue; + } + if (queue && queue.length > 0 && !queue.includes(container.id) && container.rect.current) { + map.set(container.id, container.rect.current); + continue; + } + const node = container.node.current; + const rect = node ? new Rect(measure(node), node) : null; + container.rect.current = rect; + if (rect) { + map.set(container.id, rect); + } + } + return map; + } + return previousValue; + }, [containers, queue, dragging, disabled, measure]); + (0, import_react2.useEffect)(() => { + containersRef.current = containers; + }, [containers]); + (0, import_react2.useEffect)( + () => { + if (disabled) { + return; + } + measureDroppableContainers(); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [dragging, disabled] + ); + (0, import_react2.useEffect)( + () => { + if (queue && queue.length > 0) { + setQueue(null); + } + }, + //eslint-disable-next-line react-hooks/exhaustive-deps + [JSON.stringify(queue)] + ); + (0, import_react2.useEffect)( + () => { + if (disabled || typeof frequency !== "number" || timeoutId.current !== null) { + return; + } + timeoutId.current = setTimeout(() => { + measureDroppableContainers(); + timeoutId.current = null; + }, frequency); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [frequency, disabled, measureDroppableContainers, ...dependencies] + ); + return { + droppableRects, + measureDroppableContainers, + measuringScheduled: queue != null + }; + function isDisabled() { + switch (strategy) { + case MeasuringStrategy.Always: + return false; + case MeasuringStrategy.BeforeDragging: + return dragging; + default: + return !dragging; + } + } +} +function useInitialValue(value, computeFn) { + return useLazyMemo((previousValue) => { + if (!value) { + return null; + } + if (previousValue) { + return previousValue; + } + return typeof computeFn === "function" ? computeFn(value) : value; + }, [computeFn, value]); +} +function useInitialRect(node, measure) { + return useInitialValue(node, measure); +} +function useMutationObserver(_ref) { + let { + callback, + disabled + } = _ref; + const handleMutations = useEvent(callback); + const mutationObserver = (0, import_react2.useMemo)(() => { + if (disabled || typeof window === "undefined" || typeof window.MutationObserver === "undefined") { + return void 0; + } + const { + MutationObserver + } = window; + return new MutationObserver(handleMutations); + }, [handleMutations, disabled]); + (0, import_react2.useEffect)(() => { + return () => mutationObserver == null ? void 0 : mutationObserver.disconnect(); + }, [mutationObserver]); + return mutationObserver; +} +function useResizeObserver(_ref) { + let { + callback, + disabled + } = _ref; + const handleResize = useEvent(callback); + const resizeObserver = (0, import_react2.useMemo)( + () => { + if (disabled || typeof window === "undefined" || typeof window.ResizeObserver === "undefined") { + return void 0; + } + const { + ResizeObserver + } = window; + return new ResizeObserver(handleResize); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [disabled] + ); + (0, import_react2.useEffect)(() => { + return () => resizeObserver == null ? void 0 : resizeObserver.disconnect(); + }, [resizeObserver]); + return resizeObserver; +} +function defaultMeasure(element) { + return new Rect(getClientRect(element), element); +} +function useRect(element, measure, fallbackRect) { + if (measure === void 0) { + measure = defaultMeasure; + } + const [rect, setRect] = (0, import_react2.useState)(null); + function measureRect() { + setRect((currentRect) => { + if (!element) { + return null; + } + if (element.isConnected === false) { + var _ref; + return (_ref = currentRect != null ? currentRect : fallbackRect) != null ? _ref : null; + } + const newRect = measure(element); + if (JSON.stringify(currentRect) === JSON.stringify(newRect)) { + return currentRect; + } + return newRect; + }); + } + const mutationObserver = useMutationObserver({ + callback(records) { + if (!element) { + return; + } + for (const record of records) { + const { + type, + target + } = record; + if (type === "childList" && target instanceof HTMLElement && target.contains(element)) { + measureRect(); + break; + } + } + } + }); + const resizeObserver = useResizeObserver({ + callback: measureRect + }); + useIsomorphicLayoutEffect(() => { + measureRect(); + if (element) { + resizeObserver == null ? void 0 : resizeObserver.observe(element); + mutationObserver == null ? void 0 : mutationObserver.observe(document.body, { + childList: true, + subtree: true + }); + } else { + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + mutationObserver == null ? void 0 : mutationObserver.disconnect(); + } + }, [element]); + return rect; +} +function useRectDelta(rect) { + const initialRect = useInitialValue(rect); + return getRectDelta(rect, initialRect); +} +var defaultValue$1 = []; +function useScrollableAncestors(node) { + const previousNode = (0, import_react2.useRef)(node); + const ancestors = useLazyMemo((previousValue) => { + if (!node) { + return defaultValue$1; + } + if (previousValue && previousValue !== defaultValue$1 && node && previousNode.current && node.parentNode === previousNode.current.parentNode) { + return previousValue; + } + return getScrollableAncestors(node); + }, [node]); + (0, import_react2.useEffect)(() => { + previousNode.current = node; + }, [node]); + return ancestors; +} +function useScrollOffsets(elements) { + const [scrollCoordinates, setScrollCoordinates] = (0, import_react2.useState)(null); + const prevElements = (0, import_react2.useRef)(elements); + const handleScroll = (0, import_react2.useCallback)((event) => { + const scrollingElement = getScrollableElement(event.target); + if (!scrollingElement) { + return; + } + setScrollCoordinates((scrollCoordinates2) => { + if (!scrollCoordinates2) { + return null; + } + scrollCoordinates2.set(scrollingElement, getScrollCoordinates(scrollingElement)); + return new Map(scrollCoordinates2); + }); + }, []); + (0, import_react2.useEffect)(() => { + const previousElements = prevElements.current; + if (elements !== previousElements) { + cleanup(previousElements); + const entries = elements.map((element) => { + const scrollableElement = getScrollableElement(element); + if (scrollableElement) { + scrollableElement.addEventListener("scroll", handleScroll, { + passive: true + }); + return [scrollableElement, getScrollCoordinates(scrollableElement)]; + } + return null; + }).filter((entry) => entry != null); + setScrollCoordinates(entries.length ? new Map(entries) : null); + prevElements.current = elements; + } + return () => { + cleanup(elements); + cleanup(previousElements); + }; + function cleanup(elements2) { + elements2.forEach((element) => { + const scrollableElement = getScrollableElement(element); + scrollableElement == null ? void 0 : scrollableElement.removeEventListener("scroll", handleScroll); + }); + } + }, [handleScroll, elements]); + return (0, import_react2.useMemo)(() => { + if (elements.length) { + return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements); + } + return defaultCoordinates; + }, [elements, scrollCoordinates]); +} +function useScrollOffsetsDelta(scrollOffsets, dependencies) { + if (dependencies === void 0) { + dependencies = []; + } + const initialScrollOffsets = (0, import_react2.useRef)(null); + (0, import_react2.useEffect)( + () => { + initialScrollOffsets.current = null; + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + dependencies + ); + (0, import_react2.useEffect)(() => { + const hasScrollOffsets = scrollOffsets !== defaultCoordinates; + if (hasScrollOffsets && !initialScrollOffsets.current) { + initialScrollOffsets.current = scrollOffsets; + } + if (!hasScrollOffsets && initialScrollOffsets.current) { + initialScrollOffsets.current = null; + } + }, [scrollOffsets]); + return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates; +} +function useSensorSetup(sensors) { + (0, import_react2.useEffect)( + () => { + if (!canUseDOM) { + return; + } + const teardownFns = sensors.map((_ref) => { + let { + sensor + } = _ref; + return sensor.setup == null ? void 0 : sensor.setup(); + }); + return () => { + for (const teardown of teardownFns) { + teardown == null ? void 0 : teardown(); + } + }; + }, + // TO-DO: Sensors length could theoretically change which would not be a valid dependency + // eslint-disable-next-line react-hooks/exhaustive-deps + sensors.map((_ref2) => { + let { + sensor + } = _ref2; + return sensor; + }) + ); +} +function useSyntheticListeners(listeners, id) { + return (0, import_react2.useMemo)(() => { + return listeners.reduce((acc, _ref) => { + let { + eventName, + handler + } = _ref; + acc[eventName] = (event) => { + handler(event, id); + }; + return acc; + }, {}); + }, [listeners, id]); +} +function useWindowRect(element) { + return (0, import_react2.useMemo)(() => element ? getWindowClientRect(element) : null, [element]); +} +var defaultValue$2 = []; +function useRects(elements, measure) { + if (measure === void 0) { + measure = getClientRect; + } + const [firstElement] = elements; + const windowRect = useWindowRect(firstElement ? getWindow(firstElement) : null); + const [rects, setRects] = (0, import_react2.useState)(defaultValue$2); + function measureRects() { + setRects(() => { + if (!elements.length) { + return defaultValue$2; + } + return elements.map((element) => isDocumentScrollingElement(element) ? windowRect : new Rect(measure(element), element)); + }); + } + const resizeObserver = useResizeObserver({ + callback: measureRects + }); + useIsomorphicLayoutEffect(() => { + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + measureRects(); + elements.forEach((element) => resizeObserver == null ? void 0 : resizeObserver.observe(element)); + }, [elements]); + return rects; +} +function getMeasurableNode(node) { + if (!node) { + return null; + } + if (node.children.length > 1) { + return node; + } + const firstChild = node.children[0]; + return isHTMLElement(firstChild) ? firstChild : node; +} +function useDragOverlayMeasuring(_ref) { + let { + measure + } = _ref; + const [rect, setRect] = (0, import_react2.useState)(null); + const handleResize = (0, import_react2.useCallback)((entries) => { + for (const { + target + } of entries) { + if (isHTMLElement(target)) { + setRect((rect2) => { + const newRect = measure(target); + return rect2 ? { + ...rect2, + width: newRect.width, + height: newRect.height + } : newRect; + }); + break; + } + } + }, [measure]); + const resizeObserver = useResizeObserver({ + callback: handleResize + }); + const handleNodeChange = (0, import_react2.useCallback)((element) => { + const node = getMeasurableNode(element); + resizeObserver == null ? void 0 : resizeObserver.disconnect(); + if (node) { + resizeObserver == null ? void 0 : resizeObserver.observe(node); + } + setRect(node ? measure(node) : null); + }, [measure, resizeObserver]); + const [nodeRef, setRef] = useNodeRef(handleNodeChange); + return (0, import_react2.useMemo)(() => ({ + nodeRef, + rect, + setRef + }), [rect, nodeRef, setRef]); +} +var defaultSensors = [{ + sensor: PointerSensor, + options: {} +}, { + sensor: KeyboardSensor, + options: {} +}]; +var defaultData = { + current: {} +}; +var defaultMeasuringConfiguration = { + draggable: { + measure: getTransformAgnosticClientRect + }, + droppable: { + measure: getTransformAgnosticClientRect, + strategy: MeasuringStrategy.WhileDragging, + frequency: MeasuringFrequency.Optimized + }, + dragOverlay: { + measure: getClientRect + } +}; +var DroppableContainersMap = class extends Map { + get(id) { + var _super$get; + return id != null ? (_super$get = super.get(id)) != null ? _super$get : void 0 : void 0; + } + toArray() { + return Array.from(this.values()); + } + getEnabled() { + return this.toArray().filter((_ref) => { + let { + disabled + } = _ref; + return !disabled; + }); + } + getNodeFor(id) { + var _this$get$node$curren, _this$get; + return (_this$get$node$curren = (_this$get = this.get(id)) == null ? void 0 : _this$get.node.current) != null ? _this$get$node$curren : void 0; + } +}; +var defaultPublicContext = { + activatorEvent: null, + active: null, + activeNode: null, + activeNodeRect: null, + collisions: null, + containerNodeRect: null, + draggableNodes: /* @__PURE__ */ new Map(), + droppableRects: /* @__PURE__ */ new Map(), + droppableContainers: new DroppableContainersMap(), + over: null, + dragOverlay: { + nodeRef: { + current: null + }, + rect: null, + setRef: noop + }, + scrollableAncestors: [], + scrollableAncestorRects: [], + measuringConfiguration: defaultMeasuringConfiguration, + measureDroppableContainers: noop, + windowRect: null, + measuringScheduled: false +}; +var defaultInternalContext = { + activatorEvent: null, + activators: [], + active: null, + activeNodeRect: null, + ariaDescribedById: { + draggable: "" + }, + dispatch: noop, + draggableNodes: /* @__PURE__ */ new Map(), + over: null, + measureDroppableContainers: noop +}; +var InternalContext = (0, import_react2.createContext)(defaultInternalContext); +var PublicContext = (0, import_react2.createContext)(defaultPublicContext); +function getInitialState() { + return { + draggable: { + active: null, + initialCoordinates: { + x: 0, + y: 0 + }, + nodes: /* @__PURE__ */ new Map(), + translate: { + x: 0, + y: 0 + } + }, + droppable: { + containers: new DroppableContainersMap() + } + }; +} +function reducer(state, action) { + switch (action.type) { + case Action.DragStart: + return { + ...state, + draggable: { + ...state.draggable, + initialCoordinates: action.initialCoordinates, + active: action.active + } + }; + case Action.DragMove: + if (state.draggable.active == null) { + return state; + } + return { + ...state, + draggable: { + ...state.draggable, + translate: { + x: action.coordinates.x - state.draggable.initialCoordinates.x, + y: action.coordinates.y - state.draggable.initialCoordinates.y + } + } + }; + case Action.DragEnd: + case Action.DragCancel: + return { + ...state, + draggable: { + ...state.draggable, + active: null, + initialCoordinates: { + x: 0, + y: 0 + }, + translate: { + x: 0, + y: 0 + } + } + }; + case Action.RegisterDroppable: { + const { + element + } = action; + const { + id + } = element; + const containers = new DroppableContainersMap(state.droppable.containers); + containers.set(id, element); + return { + ...state, + droppable: { + ...state.droppable, + containers + } + }; + } + case Action.SetDroppableDisabled: { + const { + id, + key: key2, + disabled + } = action; + const element = state.droppable.containers.get(id); + if (!element || key2 !== element.key) { + return state; + } + const containers = new DroppableContainersMap(state.droppable.containers); + containers.set(id, { + ...element, + disabled + }); + return { + ...state, + droppable: { + ...state.droppable, + containers + } + }; + } + case Action.UnregisterDroppable: { + const { + id, + key: key2 + } = action; + const element = state.droppable.containers.get(id); + if (!element || key2 !== element.key) { + return state; + } + const containers = new DroppableContainersMap(state.droppable.containers); + containers.delete(id); + return { + ...state, + droppable: { + ...state.droppable, + containers + } + }; + } + default: { + return state; + } + } +} +function RestoreFocus(_ref) { + let { + disabled + } = _ref; + const { + active, + activatorEvent, + draggableNodes + } = (0, import_react2.useContext)(InternalContext); + const previousActivatorEvent = usePrevious(activatorEvent); + const previousActiveId = usePrevious(active == null ? void 0 : active.id); + (0, import_react2.useEffect)(() => { + if (disabled) { + return; + } + if (!activatorEvent && previousActivatorEvent && previousActiveId != null) { + if (!isKeyboardEvent(previousActivatorEvent)) { + return; + } + if (document.activeElement === previousActivatorEvent.target) { + return; + } + const draggableNode = draggableNodes.get(previousActiveId); + if (!draggableNode) { + return; + } + const { + activatorNode, + node + } = draggableNode; + if (!activatorNode.current && !node.current) { + return; + } + requestAnimationFrame(() => { + for (const element of [activatorNode.current, node.current]) { + if (!element) { + continue; + } + const focusableNode = findFirstFocusableNode(element); + if (focusableNode) { + focusableNode.focus(); + break; + } + } + }); + } + }, [activatorEvent, disabled, draggableNodes, previousActiveId, previousActivatorEvent]); + return null; +} +function applyModifiers(modifiers, _ref) { + let { + transform, + ...args + } = _ref; + return modifiers != null && modifiers.length ? modifiers.reduce((accumulator, modifier) => { + return modifier({ + transform: accumulator, + ...args + }); + }, transform) : transform; +} +function useMeasuringConfiguration(config) { + return (0, import_react2.useMemo)( + () => ({ + draggable: { + ...defaultMeasuringConfiguration.draggable, + ...config == null ? void 0 : config.draggable + }, + droppable: { + ...defaultMeasuringConfiguration.droppable, + ...config == null ? void 0 : config.droppable + }, + dragOverlay: { + ...defaultMeasuringConfiguration.dragOverlay, + ...config == null ? void 0 : config.dragOverlay + } + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [config == null ? void 0 : config.draggable, config == null ? void 0 : config.droppable, config == null ? void 0 : config.dragOverlay] + ); +} +function useLayoutShiftScrollCompensation(_ref) { + let { + activeNode, + measure, + initialRect, + config = true + } = _ref; + const initialized = (0, import_react2.useRef)(false); + const { + x, + y + } = typeof config === "boolean" ? { + x: config, + y: config + } : config; + useIsomorphicLayoutEffect(() => { + const disabled = !x && !y; + if (disabled || !activeNode) { + initialized.current = false; + return; + } + if (initialized.current || !initialRect) { + return; + } + const node = activeNode == null ? void 0 : activeNode.node.current; + if (!node || node.isConnected === false) { + return; + } + const rect = measure(node); + const rectDelta = getRectDelta(rect, initialRect); + if (!x) { + rectDelta.x = 0; + } + if (!y) { + rectDelta.y = 0; + } + initialized.current = true; + if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) { + const firstScrollableAncestor = getFirstScrollableAncestor(node); + if (firstScrollableAncestor) { + firstScrollableAncestor.scrollBy({ + top: rectDelta.y, + left: rectDelta.x + }); + } + } + }, [activeNode, x, y, initialRect, measure]); +} +var ActiveDraggableContext = (0, import_react2.createContext)({ + ...defaultCoordinates, + scaleX: 1, + scaleY: 1 +}); +var Status; +(function(Status2) { + Status2[Status2["Uninitialized"] = 0] = "Uninitialized"; + Status2[Status2["Initializing"] = 1] = "Initializing"; + Status2[Status2["Initialized"] = 2] = "Initialized"; +})(Status || (Status = {})); +var DndContext = (0, import_react2.memo)(function DndContext2(_ref) { + var _sensorContext$curren, _dragOverlay$nodeRef$, _dragOverlay$rect, _over$rect; + let { + id, + accessibility, + autoScroll = true, + children, + sensors = defaultSensors, + collisionDetection = rectIntersection, + measuring, + modifiers, + ...props + } = _ref; + const store = (0, import_react2.useReducer)(reducer, void 0, getInitialState); + const [state, dispatch] = store; + const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider(); + const [status, setStatus] = (0, import_react2.useState)(Status.Uninitialized); + const isInitialized = status === Status.Initialized; + const { + draggable: { + active: activeId, + nodes: draggableNodes, + translate + }, + droppable: { + containers: droppableContainers + } + } = state; + const node = activeId != null ? draggableNodes.get(activeId) : null; + const activeRects = (0, import_react2.useRef)({ + initial: null, + translated: null + }); + const active = (0, import_react2.useMemo)(() => { + var _node$data; + return activeId != null ? { + id: activeId, + // It's possible for the active node to unmount while dragging + data: (_node$data = node == null ? void 0 : node.data) != null ? _node$data : defaultData, + rect: activeRects + } : null; + }, [activeId, node]); + const activeRef = (0, import_react2.useRef)(null); + const [activeSensor, setActiveSensor] = (0, import_react2.useState)(null); + const [activatorEvent, setActivatorEvent] = (0, import_react2.useState)(null); + const latestProps = useLatestValue(props, Object.values(props)); + const draggableDescribedById = useUniqueId("DndDescribedBy", id); + const enabledDroppableContainers = (0, import_react2.useMemo)(() => droppableContainers.getEnabled(), [droppableContainers]); + const measuringConfiguration = useMeasuringConfiguration(measuring); + const { + droppableRects, + measureDroppableContainers, + measuringScheduled + } = useDroppableMeasuring(enabledDroppableContainers, { + dragging: isInitialized, + dependencies: [translate.x, translate.y], + config: measuringConfiguration.droppable + }); + const activeNode = useCachedNode(draggableNodes, activeId); + const activationCoordinates = (0, import_react2.useMemo)(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]); + const autoScrollOptions = getAutoScrollerOptions(); + const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure); + useLayoutShiftScrollCompensation({ + activeNode: activeId != null ? draggableNodes.get(activeId) : null, + config: autoScrollOptions.layoutShiftCompensation, + initialRect: initialActiveNodeRect, + measure: measuringConfiguration.draggable.measure + }); + const activeNodeRect = useRect(activeNode, measuringConfiguration.draggable.measure, initialActiveNodeRect); + const containerNodeRect = useRect(activeNode ? activeNode.parentElement : null); + const sensorContext = (0, import_react2.useRef)({ + activatorEvent: null, + active: null, + activeNode, + collisionRect: null, + collisions: null, + droppableRects, + draggableNodes, + draggingNode: null, + draggingNodeRect: null, + droppableContainers, + over: null, + scrollableAncestors: [], + scrollAdjustedTranslate: null + }); + const overNode = droppableContainers.getNodeFor((_sensorContext$curren = sensorContext.current.over) == null ? void 0 : _sensorContext$curren.id); + const dragOverlay = useDragOverlayMeasuring({ + measure: measuringConfiguration.dragOverlay.measure + }); + const draggingNode = (_dragOverlay$nodeRef$ = dragOverlay.nodeRef.current) != null ? _dragOverlay$nodeRef$ : activeNode; + const draggingNodeRect = isInitialized ? (_dragOverlay$rect = dragOverlay.rect) != null ? _dragOverlay$rect : activeNodeRect : null; + const usesDragOverlay = Boolean(dragOverlay.nodeRef.current && dragOverlay.rect); + const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect); + const windowRect = useWindowRect(draggingNode ? getWindow(draggingNode) : null); + const scrollableAncestors = useScrollableAncestors(isInitialized ? overNode != null ? overNode : activeNode : null); + const scrollableAncestorRects = useRects(scrollableAncestors); + const modifiedTranslate = applyModifiers(modifiers, { + transform: { + x: translate.x - nodeRectDelta.x, + y: translate.y - nodeRectDelta.y, + scaleX: 1, + scaleY: 1 + }, + activatorEvent, + active, + activeNodeRect, + containerNodeRect, + draggingNodeRect, + over: sensorContext.current.over, + overlayNodeRect: dragOverlay.rect, + scrollableAncestors, + scrollableAncestorRects, + windowRect + }); + const pointerCoordinates = activationCoordinates ? add(activationCoordinates, translate) : null; + const scrollOffsets = useScrollOffsets(scrollableAncestors); + const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets); + const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [activeNodeRect]); + const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment); + const collisionRect = draggingNodeRect ? getAdjustedRect(draggingNodeRect, modifiedTranslate) : null; + const collisions = active && collisionRect ? collisionDetection({ + active, + collisionRect, + droppableRects, + droppableContainers: enabledDroppableContainers, + pointerCoordinates + }) : null; + const overId = getFirstCollision(collisions, "id"); + const [over, setOver] = (0, import_react2.useState)(null); + const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta); + const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect); + const activeSensorRef = (0, import_react2.useRef)(null); + const instantiateSensor = (0, import_react2.useCallback)( + (event, _ref2) => { + let { + sensor: Sensor, + options + } = _ref2; + if (activeRef.current == null) { + return; + } + const activeNode2 = draggableNodes.get(activeRef.current); + if (!activeNode2) { + return; + } + const activatorEvent2 = event.nativeEvent; + const sensorInstance = new Sensor({ + active: activeRef.current, + activeNode: activeNode2, + event: activatorEvent2, + options, + // Sensors need to be instantiated with refs for arguments that change over time + // otherwise they are frozen in time with the stale arguments + context: sensorContext, + onAbort(id2) { + const draggableNode = draggableNodes.get(id2); + if (!draggableNode) { + return; + } + const { + onDragAbort + } = latestProps.current; + const event2 = { + id: id2 + }; + onDragAbort == null ? void 0 : onDragAbort(event2); + dispatchMonitorEvent({ + type: "onDragAbort", + event: event2 + }); + }, + onPending(id2, constraint, initialCoordinates, offset) { + const draggableNode = draggableNodes.get(id2); + if (!draggableNode) { + return; + } + const { + onDragPending + } = latestProps.current; + const event2 = { + id: id2, + constraint, + initialCoordinates, + offset + }; + onDragPending == null ? void 0 : onDragPending(event2); + dispatchMonitorEvent({ + type: "onDragPending", + event: event2 + }); + }, + onStart(initialCoordinates) { + const id2 = activeRef.current; + if (id2 == null) { + return; + } + const draggableNode = draggableNodes.get(id2); + if (!draggableNode) { + return; + } + const { + onDragStart + } = latestProps.current; + const event2 = { + activatorEvent: activatorEvent2, + active: { + id: id2, + data: draggableNode.data, + rect: activeRects + } + }; + (0, import_react_dom.unstable_batchedUpdates)(() => { + onDragStart == null ? void 0 : onDragStart(event2); + setStatus(Status.Initializing); + dispatch({ + type: Action.DragStart, + initialCoordinates, + active: id2 + }); + dispatchMonitorEvent({ + type: "onDragStart", + event: event2 + }); + setActiveSensor(activeSensorRef.current); + setActivatorEvent(activatorEvent2); + }); + }, + onMove(coordinates) { + dispatch({ + type: Action.DragMove, + coordinates + }); + }, + onEnd: createHandler(Action.DragEnd), + onCancel: createHandler(Action.DragCancel) + }); + activeSensorRef.current = sensorInstance; + function createHandler(type) { + return async function handler() { + const { + active: active2, + collisions: collisions2, + over: over2, + scrollAdjustedTranslate: scrollAdjustedTranslate2 + } = sensorContext.current; + let event2 = null; + if (active2 && scrollAdjustedTranslate2) { + const { + cancelDrop + } = latestProps.current; + event2 = { + activatorEvent: activatorEvent2, + active: active2, + collisions: collisions2, + delta: scrollAdjustedTranslate2, + over: over2 + }; + if (type === Action.DragEnd && typeof cancelDrop === "function") { + const shouldCancel = await Promise.resolve(cancelDrop(event2)); + if (shouldCancel) { + type = Action.DragCancel; + } + } + } + activeRef.current = null; + (0, import_react_dom.unstable_batchedUpdates)(() => { + dispatch({ + type + }); + setStatus(Status.Uninitialized); + setOver(null); + setActiveSensor(null); + setActivatorEvent(null); + activeSensorRef.current = null; + const eventName = type === Action.DragEnd ? "onDragEnd" : "onDragCancel"; + if (event2) { + const handler2 = latestProps.current[eventName]; + handler2 == null ? void 0 : handler2(event2); + dispatchMonitorEvent({ + type: eventName, + event: event2 + }); + } + }); + }; + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [draggableNodes] + ); + const bindActivatorToSensorInstantiator = (0, import_react2.useCallback)((handler, sensor) => { + return (event, active2) => { + const nativeEvent = event.nativeEvent; + const activeDraggableNode = draggableNodes.get(active2); + if ( + // Another sensor is already instantiating + activeRef.current !== null || // No active draggable + !activeDraggableNode || // Event has already been captured + nativeEvent.dndKit || nativeEvent.defaultPrevented + ) { + return; + } + const activationContext = { + active: activeDraggableNode + }; + const shouldActivate = handler(event, sensor.options, activationContext); + if (shouldActivate === true) { + nativeEvent.dndKit = { + capturedBy: sensor.sensor + }; + activeRef.current = active2; + instantiateSensor(event, sensor); + } + }; + }, [draggableNodes, instantiateSensor]); + const activators = useCombineActivators(sensors, bindActivatorToSensorInstantiator); + useSensorSetup(sensors); + useIsomorphicLayoutEffect(() => { + if (activeNodeRect && status === Status.Initializing) { + setStatus(Status.Initialized); + } + }, [activeNodeRect, status]); + (0, import_react2.useEffect)( + () => { + const { + onDragMove + } = latestProps.current; + const { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + over: over2 + } = sensorContext.current; + if (!active2 || !activatorEvent2) { + return; + } + const event = { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + delta: { + x: scrollAdjustedTranslate.x, + y: scrollAdjustedTranslate.y + }, + over: over2 + }; + (0, import_react_dom.unstable_batchedUpdates)(() => { + onDragMove == null ? void 0 : onDragMove(event); + dispatchMonitorEvent({ + type: "onDragMove", + event + }); + }); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y] + ); + (0, import_react2.useEffect)( + () => { + const { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + droppableContainers: droppableContainers2, + scrollAdjustedTranslate: scrollAdjustedTranslate2 + } = sensorContext.current; + if (!active2 || activeRef.current == null || !activatorEvent2 || !scrollAdjustedTranslate2) { + return; + } + const { + onDragOver + } = latestProps.current; + const overContainer = droppableContainers2.get(overId); + const over2 = overContainer && overContainer.rect.current ? { + id: overContainer.id, + rect: overContainer.rect.current, + data: overContainer.data, + disabled: overContainer.disabled + } : null; + const event = { + active: active2, + activatorEvent: activatorEvent2, + collisions: collisions2, + delta: { + x: scrollAdjustedTranslate2.x, + y: scrollAdjustedTranslate2.y + }, + over: over2 + }; + (0, import_react_dom.unstable_batchedUpdates)(() => { + setOver(over2); + onDragOver == null ? void 0 : onDragOver(event); + dispatchMonitorEvent({ + type: "onDragOver", + event + }); + }); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [overId] + ); + useIsomorphicLayoutEffect(() => { + sensorContext.current = { + activatorEvent, + active, + activeNode, + collisionRect, + collisions, + droppableRects, + draggableNodes, + draggingNode, + draggingNodeRect, + droppableContainers, + over, + scrollableAncestors, + scrollAdjustedTranslate + }; + activeRects.current = { + initial: draggingNodeRect, + translated: collisionRect + }; + }, [active, activeNode, collisions, collisionRect, draggableNodes, draggingNode, draggingNodeRect, droppableRects, droppableContainers, over, scrollableAncestors, scrollAdjustedTranslate]); + useAutoScroller({ + ...autoScrollOptions, + delta: translate, + draggingRect: collisionRect, + pointerCoordinates, + scrollableAncestors, + scrollableAncestorRects + }); + const publicContext = (0, import_react2.useMemo)(() => { + const context = { + active, + activeNode, + activeNodeRect, + activatorEvent, + collisions, + containerNodeRect, + dragOverlay, + draggableNodes, + droppableContainers, + droppableRects, + over, + measureDroppableContainers, + scrollableAncestors, + scrollableAncestorRects, + measuringConfiguration, + measuringScheduled, + windowRect + }; + return context; + }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect]); + const internalContext = (0, import_react2.useMemo)(() => { + const context = { + activatorEvent, + activators, + active, + activeNodeRect, + ariaDescribedById: { + draggable: draggableDescribedById + }, + dispatch, + draggableNodes, + over, + measureDroppableContainers + }; + return context; + }, [activatorEvent, activators, active, activeNodeRect, dispatch, draggableDescribedById, draggableNodes, over, measureDroppableContainers]); + return import_react2.default.createElement(DndMonitorContext.Provider, { + value: registerMonitorListener + }, import_react2.default.createElement(InternalContext.Provider, { + value: internalContext + }, import_react2.default.createElement(PublicContext.Provider, { + value: publicContext + }, import_react2.default.createElement(ActiveDraggableContext.Provider, { + value: transform + }, children)), import_react2.default.createElement(RestoreFocus, { + disabled: (accessibility == null ? void 0 : accessibility.restoreFocus) === false + })), import_react2.default.createElement(Accessibility, { + ...accessibility, + hiddenTextDescribedById: draggableDescribedById + })); + function getAutoScrollerOptions() { + const activeSensorDisablesAutoscroll = (activeSensor == null ? void 0 : activeSensor.autoScrollEnabled) === false; + const autoScrollGloballyDisabled = typeof autoScroll === "object" ? autoScroll.enabled === false : autoScroll === false; + const enabled = isInitialized && !activeSensorDisablesAutoscroll && !autoScrollGloballyDisabled; + if (typeof autoScroll === "object") { + return { + ...autoScroll, + enabled + }; + } + return { + enabled + }; + } +}); +var NullContext = (0, import_react2.createContext)(null); +var defaultRole = "button"; +var ID_PREFIX = "Draggable"; +function useDraggable(_ref) { + let { + id, + data, + disabled = false, + attributes + } = _ref; + const key2 = useUniqueId(ID_PREFIX); + const { + activators, + activatorEvent, + active, + activeNodeRect, + ariaDescribedById, + draggableNodes, + over + } = (0, import_react2.useContext)(InternalContext); + const { + role = defaultRole, + roleDescription = "draggable", + tabIndex = 0 + } = attributes != null ? attributes : {}; + const isDragging = (active == null ? void 0 : active.id) === id; + const transform = (0, import_react2.useContext)(isDragging ? ActiveDraggableContext : NullContext); + const [node, setNodeRef] = useNodeRef(); + const [activatorNode, setActivatorNodeRef] = useNodeRef(); + const listeners = useSyntheticListeners(activators, id); + const dataRef = useLatestValue(data); + useIsomorphicLayoutEffect( + () => { + draggableNodes.set(id, { + id, + key: key2, + node, + activatorNode, + data: dataRef + }); + return () => { + const node2 = draggableNodes.get(id); + if (node2 && node2.key === key2) { + draggableNodes.delete(id); + } + }; + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [draggableNodes, id] + ); + const memoizedAttributes = (0, import_react2.useMemo)(() => ({ + role, + tabIndex, + "aria-disabled": disabled, + "aria-pressed": isDragging && role === defaultRole ? true : void 0, + "aria-roledescription": roleDescription, + "aria-describedby": ariaDescribedById.draggable + }), [disabled, role, tabIndex, isDragging, roleDescription, ariaDescribedById.draggable]); + return { + active, + activatorEvent, + activeNodeRect, + attributes: memoizedAttributes, + isDragging, + listeners: disabled ? void 0 : listeners, + node, + over, + setNodeRef, + setActivatorNodeRef, + transform + }; +} +function useDndContext() { + return (0, import_react2.useContext)(PublicContext); +} +var ID_PREFIX$1 = "Droppable"; +var defaultResizeObserverConfig = { + timeout: 25 +}; +function useDroppable(_ref) { + let { + data, + disabled = false, + id, + resizeObserverConfig + } = _ref; + const key2 = useUniqueId(ID_PREFIX$1); + const { + active, + dispatch, + over, + measureDroppableContainers + } = (0, import_react2.useContext)(InternalContext); + const previous = (0, import_react2.useRef)({ + disabled + }); + const resizeObserverConnected = (0, import_react2.useRef)(false); + const rect = (0, import_react2.useRef)(null); + const callbackId = (0, import_react2.useRef)(null); + const { + disabled: resizeObserverDisabled, + updateMeasurementsFor, + timeout: resizeObserverTimeout + } = { + ...defaultResizeObserverConfig, + ...resizeObserverConfig + }; + const ids = useLatestValue(updateMeasurementsFor != null ? updateMeasurementsFor : id); + const handleResize = (0, import_react2.useCallback)( + () => { + if (!resizeObserverConnected.current) { + resizeObserverConnected.current = true; + return; + } + if (callbackId.current != null) { + clearTimeout(callbackId.current); + } + callbackId.current = setTimeout(() => { + measureDroppableContainers(Array.isArray(ids.current) ? ids.current : [ids.current]); + callbackId.current = null; + }, resizeObserverTimeout); + }, + //eslint-disable-next-line react-hooks/exhaustive-deps + [resizeObserverTimeout] + ); + const resizeObserver = useResizeObserver({ + callback: handleResize, + disabled: resizeObserverDisabled || !active + }); + const handleNodeChange = (0, import_react2.useCallback)((newElement, previousElement) => { + if (!resizeObserver) { + return; + } + if (previousElement) { + resizeObserver.unobserve(previousElement); + resizeObserverConnected.current = false; + } + if (newElement) { + resizeObserver.observe(newElement); + } + }, [resizeObserver]); + const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange); + const dataRef = useLatestValue(data); + (0, import_react2.useEffect)(() => { + if (!resizeObserver || !nodeRef.current) { + return; + } + resizeObserver.disconnect(); + resizeObserverConnected.current = false; + resizeObserver.observe(nodeRef.current); + }, [nodeRef, resizeObserver]); + (0, import_react2.useEffect)( + () => { + dispatch({ + type: Action.RegisterDroppable, + element: { + id, + key: key2, + disabled, + node: nodeRef, + rect, + data: dataRef + } + }); + return () => dispatch({ + type: Action.UnregisterDroppable, + key: key2, + id + }); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [id] + ); + (0, import_react2.useEffect)(() => { + if (disabled !== previous.current.disabled) { + dispatch({ + type: Action.SetDroppableDisabled, + id, + key: key2, + disabled + }); + previous.current.disabled = disabled; + } + }, [id, key2, disabled, dispatch]); + return { + active, + rect, + isOver: (over == null ? void 0 : over.id) === id, + node: nodeRef, + over, + setNodeRef + }; +} +function AnimationManager(_ref) { + let { + animation, + children + } = _ref; + const [clonedChildren, setClonedChildren] = (0, import_react2.useState)(null); + const [element, setElement] = (0, import_react2.useState)(null); + const previousChildren = usePrevious(children); + if (!children && !clonedChildren && previousChildren) { + setClonedChildren(previousChildren); + } + useIsomorphicLayoutEffect(() => { + if (!element) { + return; + } + const key2 = clonedChildren == null ? void 0 : clonedChildren.key; + const id = clonedChildren == null ? void 0 : clonedChildren.props.id; + if (key2 == null || id == null) { + setClonedChildren(null); + return; + } + Promise.resolve(animation(id, element)).then(() => { + setClonedChildren(null); + }); + }, [animation, clonedChildren, element]); + return import_react2.default.createElement(import_react2.default.Fragment, null, children, clonedChildren ? (0, import_react2.cloneElement)(clonedChildren, { + ref: setElement + }) : null); +} +var defaultTransform = { + x: 0, + y: 0, + scaleX: 1, + scaleY: 1 +}; +function NullifiedContextProvider(_ref) { + let { + children + } = _ref; + return import_react2.default.createElement(InternalContext.Provider, { + value: defaultInternalContext + }, import_react2.default.createElement(ActiveDraggableContext.Provider, { + value: defaultTransform + }, children)); +} +var baseStyles = { + position: "fixed", + touchAction: "none" +}; +var defaultTransition = (activatorEvent) => { + const isKeyboardActivator = isKeyboardEvent(activatorEvent); + return isKeyboardActivator ? "transform 250ms ease" : void 0; +}; +var PositionedOverlay = (0, import_react2.forwardRef)((_ref, ref) => { + let { + as, + activatorEvent, + adjustScale: adjustScale2, + children, + className, + rect, + style, + transform, + transition = defaultTransition + } = _ref; + if (!rect) { + return null; + } + const scaleAdjustedTransform = adjustScale2 ? transform : { + ...transform, + scaleX: 1, + scaleY: 1 + }; + const styles = { + ...baseStyles, + width: rect.width, + height: rect.height, + top: rect.top, + left: rect.left, + transform: CSS.Transform.toString(scaleAdjustedTransform), + transformOrigin: adjustScale2 && activatorEvent ? getRelativeTransformOrigin(activatorEvent, rect) : void 0, + transition: typeof transition === "function" ? transition(activatorEvent) : transition, + ...style + }; + return import_react2.default.createElement(as, { + className, + style: styles, + ref + }, children); +}); +var defaultDropAnimationSideEffects = (options) => (_ref) => { + let { + active, + dragOverlay + } = _ref; + const originalStyles = {}; + const { + styles, + className + } = options; + if (styles != null && styles.active) { + for (const [key2, value] of Object.entries(styles.active)) { + if (value === void 0) { + continue; + } + originalStyles[key2] = active.node.style.getPropertyValue(key2); + active.node.style.setProperty(key2, value); + } + } + if (styles != null && styles.dragOverlay) { + for (const [key2, value] of Object.entries(styles.dragOverlay)) { + if (value === void 0) { + continue; + } + dragOverlay.node.style.setProperty(key2, value); + } + } + if (className != null && className.active) { + active.node.classList.add(className.active); + } + if (className != null && className.dragOverlay) { + dragOverlay.node.classList.add(className.dragOverlay); + } + return function cleanup() { + for (const [key2, value] of Object.entries(originalStyles)) { + active.node.style.setProperty(key2, value); + } + if (className != null && className.active) { + active.node.classList.remove(className.active); + } + }; +}; +var defaultKeyframeResolver = (_ref2) => { + let { + transform: { + initial, + final + } + } = _ref2; + return [{ + transform: CSS.Transform.toString(initial) + }, { + transform: CSS.Transform.toString(final) + }]; +}; +var defaultDropAnimationConfiguration = { + duration: 250, + easing: "ease", + keyframes: defaultKeyframeResolver, + sideEffects: defaultDropAnimationSideEffects({ + styles: { + active: { + opacity: "0" + } + } + }) +}; +function useDropAnimation(_ref3) { + let { + config, + draggableNodes, + droppableContainers, + measuringConfiguration + } = _ref3; + return useEvent((id, node) => { + if (config === null) { + return; + } + const activeDraggable = draggableNodes.get(id); + if (!activeDraggable) { + return; + } + const activeNode = activeDraggable.node.current; + if (!activeNode) { + return; + } + const measurableNode = getMeasurableNode(node); + if (!measurableNode) { + return; + } + const { + transform + } = getWindow(node).getComputedStyle(node); + const parsedTransform = parseTransform(transform); + if (!parsedTransform) { + return; + } + const animation = typeof config === "function" ? config : createDefaultDropAnimation(config); + scrollIntoViewIfNeeded(activeNode, measuringConfiguration.draggable.measure); + return animation({ + active: { + id, + data: activeDraggable.data, + node: activeNode, + rect: measuringConfiguration.draggable.measure(activeNode) + }, + draggableNodes, + dragOverlay: { + node, + rect: measuringConfiguration.dragOverlay.measure(measurableNode) + }, + droppableContainers, + measuringConfiguration, + transform: parsedTransform + }); + }); +} +function createDefaultDropAnimation(options) { + const { + duration, + easing, + sideEffects, + keyframes + } = { + ...defaultDropAnimationConfiguration, + ...options + }; + return (_ref4) => { + let { + active, + dragOverlay, + transform, + ...rest + } = _ref4; + if (!duration) { + return; + } + const delta = { + x: dragOverlay.rect.left - active.rect.left, + y: dragOverlay.rect.top - active.rect.top + }; + const scale = { + scaleX: transform.scaleX !== 1 ? active.rect.width * transform.scaleX / dragOverlay.rect.width : 1, + scaleY: transform.scaleY !== 1 ? active.rect.height * transform.scaleY / dragOverlay.rect.height : 1 + }; + const finalTransform = { + x: transform.x - delta.x, + y: transform.y - delta.y, + ...scale + }; + const animationKeyframes = keyframes({ + ...rest, + active, + dragOverlay, + transform: { + initial: transform, + final: finalTransform + } + }); + const [firstKeyframe] = animationKeyframes; + const lastKeyframe = animationKeyframes[animationKeyframes.length - 1]; + if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) { + return; + } + const cleanup = sideEffects == null ? void 0 : sideEffects({ + active, + dragOverlay, + ...rest + }); + const animation = dragOverlay.node.animate(animationKeyframes, { + duration, + easing, + fill: "forwards" + }); + return new Promise((resolve) => { + animation.onfinish = () => { + cleanup == null ? void 0 : cleanup(); + resolve(); + }; + }); + }; +} +var key = 0; +function useKey(id) { + return (0, import_react2.useMemo)(() => { + if (id == null) { + return; + } + key++; + return key; + }, [id]); +} +var DragOverlay = import_react2.default.memo((_ref) => { + let { + adjustScale: adjustScale2 = false, + children, + dropAnimation: dropAnimationConfig, + style, + transition, + modifiers, + wrapperElement = "div", + className, + zIndex = 999 + } = _ref; + const { + activatorEvent, + active, + activeNodeRect, + containerNodeRect, + draggableNodes, + droppableContainers, + dragOverlay, + over, + measuringConfiguration, + scrollableAncestors, + scrollableAncestorRects, + windowRect + } = useDndContext(); + const transform = (0, import_react2.useContext)(ActiveDraggableContext); + const key2 = useKey(active == null ? void 0 : active.id); + const modifiedTransform = applyModifiers(modifiers, { + activatorEvent, + active, + activeNodeRect, + containerNodeRect, + draggingNodeRect: dragOverlay.rect, + over, + overlayNodeRect: dragOverlay.rect, + scrollableAncestors, + scrollableAncestorRects, + transform, + windowRect + }); + const initialRect = useInitialValue(activeNodeRect); + const dropAnimation = useDropAnimation({ + config: dropAnimationConfig, + draggableNodes, + droppableContainers, + measuringConfiguration + }); + const ref = initialRect ? dragOverlay.setRef : void 0; + return import_react2.default.createElement(NullifiedContextProvider, null, import_react2.default.createElement(AnimationManager, { + animation: dropAnimation + }, active && key2 ? import_react2.default.createElement(PositionedOverlay, { + key: key2, + id: active.id, + ref, + as: wrapperElement, + activatorEvent, + adjustScale: adjustScale2, + className, + transition, + rect: initialRect, + style: { + zIndex, + ...style + }, + transform: modifiedTransform + }, children) : null)); +}); + +export { + useDndMonitor, + defaultScreenReaderInstructions, + defaultAnnouncements, + useSensor, + useSensors, + defaultCoordinates, + getFirstCollision, + closestCenter, + closestCorners, + rectIntersection, + pointerWithin, + getClientRect, + getScrollableAncestors, + KeyboardCode, + defaultKeyboardCoordinateGetter, + KeyboardSensor, + PointerSensor, + MouseSensor, + TouchSensor, + AutoScrollActivator, + TraversalOrder, + MeasuringStrategy, + MeasuringFrequency, + applyModifiers, + DndContext, + useDraggable, + useDndContext, + useDroppable, + defaultDropAnimationSideEffects, + defaultDropAnimationConfiguration, + DragOverlay +}; +//# sourceMappingURL=chunk-V27RRWZQ.js.map diff --git a/node_modules/.vite/deps/chunk-V27RRWZQ.js.map b/node_modules/.vite/deps/chunk-V27RRWZQ.js.map new file mode 100644 index 00000000..5211e051 --- /dev/null +++ b/node_modules/.vite/deps/chunk-V27RRWZQ.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@dnd-kit/accessibility/src/components/HiddenText/HiddenText.tsx", "../../@dnd-kit/accessibility/src/components/LiveRegion/LiveRegion.tsx", "../../@dnd-kit/accessibility/src/hooks/useAnnouncement.ts", "../../@dnd-kit/core/src/components/DndMonitor/context.ts", "../../@dnd-kit/core/src/components/DndMonitor/useDndMonitor.ts", "../../@dnd-kit/core/src/components/DndMonitor/useDndMonitorProvider.tsx", "../../@dnd-kit/core/src/components/Accessibility/defaults.ts", "../../@dnd-kit/core/src/components/Accessibility/Accessibility.tsx", "../../@dnd-kit/core/src/store/actions.ts", "../../@dnd-kit/core/src/utilities/other/noop.ts", "../../@dnd-kit/core/src/sensors/useSensor.ts", "../../@dnd-kit/core/src/sensors/useSensors.ts", "../../@dnd-kit/core/src/utilities/coordinates/constants.ts", "../../@dnd-kit/core/src/utilities/coordinates/distanceBetweenPoints.ts", "../../@dnd-kit/core/src/utilities/coordinates/getRelativeTransformOrigin.ts", "../../@dnd-kit/core/src/utilities/algorithms/helpers.ts", "../../@dnd-kit/core/src/utilities/algorithms/closestCenter.ts", "../../@dnd-kit/core/src/utilities/algorithms/closestCorners.ts", "../../@dnd-kit/core/src/utilities/algorithms/rectIntersection.ts", "../../@dnd-kit/core/src/utilities/algorithms/pointerWithin.ts", "../../@dnd-kit/core/src/utilities/rect/adjustScale.ts", "../../@dnd-kit/core/src/utilities/rect/getRectDelta.ts", "../../@dnd-kit/core/src/utilities/rect/rectAdjustment.ts", "../../@dnd-kit/core/src/utilities/transform/parseTransform.ts", "../../@dnd-kit/core/src/utilities/transform/inverseTransform.ts", "../../@dnd-kit/core/src/utilities/rect/getRect.ts", "../../@dnd-kit/core/src/utilities/rect/getWindowClientRect.ts", "../../@dnd-kit/core/src/utilities/scroll/isFixed.ts", "../../@dnd-kit/core/src/utilities/scroll/isScrollable.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollableAncestors.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollableElement.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollCoordinates.ts", "../../@dnd-kit/core/src/types/direction.ts", "../../@dnd-kit/core/src/utilities/scroll/documentScrollingElement.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollPosition.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollDirectionAndSpeed.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollElementRect.ts", "../../@dnd-kit/core/src/utilities/scroll/getScrollOffsets.ts", "../../@dnd-kit/core/src/utilities/scroll/scrollIntoViewIfNeeded.ts", "../../@dnd-kit/core/src/utilities/rect/Rect.ts", "../../@dnd-kit/core/src/sensors/utilities/Listeners.ts", "../../@dnd-kit/core/src/sensors/utilities/getEventListenerTarget.ts", "../../@dnd-kit/core/src/sensors/utilities/hasExceededDistance.ts", "../../@dnd-kit/core/src/sensors/events.ts", "../../@dnd-kit/core/src/sensors/keyboard/types.ts", "../../@dnd-kit/core/src/sensors/keyboard/defaults.ts", "../../@dnd-kit/core/src/sensors/keyboard/KeyboardSensor.ts", "../../@dnd-kit/core/src/sensors/pointer/AbstractPointerSensor.ts", "../../@dnd-kit/core/src/sensors/pointer/PointerSensor.ts", "../../@dnd-kit/core/src/sensors/mouse/MouseSensor.ts", "../../@dnd-kit/core/src/sensors/touch/TouchSensor.ts", "../../@dnd-kit/core/src/hooks/utilities/useAutoScroller.ts", "../../@dnd-kit/core/src/hooks/utilities/useCachedNode.ts", "../../@dnd-kit/core/src/hooks/utilities/useCombineActivators.ts", "../../@dnd-kit/core/src/hooks/utilities/useDroppableMeasuring.ts", "../../@dnd-kit/core/src/hooks/utilities/useInitialValue.ts", "../../@dnd-kit/core/src/hooks/utilities/useInitialRect.ts", "../../@dnd-kit/core/src/hooks/utilities/useMutationObserver.ts", "../../@dnd-kit/core/src/hooks/utilities/useResizeObserver.ts", "../../@dnd-kit/core/src/hooks/utilities/useRect.ts", "../../@dnd-kit/core/src/hooks/utilities/useRectDelta.ts", "../../@dnd-kit/core/src/hooks/utilities/useScrollableAncestors.ts", "../../@dnd-kit/core/src/hooks/utilities/useScrollOffsets.ts", "../../@dnd-kit/core/src/hooks/utilities/useScrollOffsetsDelta.ts", "../../@dnd-kit/core/src/hooks/utilities/useSensorSetup.ts", "../../@dnd-kit/core/src/hooks/utilities/useSyntheticListeners.ts", "../../@dnd-kit/core/src/hooks/utilities/useWindowRect.ts", "../../@dnd-kit/core/src/hooks/utilities/useRects.ts", "../../@dnd-kit/core/src/utilities/nodes/getMeasurableNode.ts", "../../@dnd-kit/core/src/hooks/utilities/useDragOverlayMeasuring.ts", "../../@dnd-kit/core/src/components/DndContext/defaults.ts", "../../@dnd-kit/core/src/store/constructors.ts", "../../@dnd-kit/core/src/store/context.ts", "../../@dnd-kit/core/src/store/reducer.ts", "../../@dnd-kit/core/src/components/Accessibility/components/RestoreFocus.tsx", "../../@dnd-kit/core/src/modifiers/applyModifiers.ts", "../../@dnd-kit/core/src/components/DndContext/hooks/useMeasuringConfiguration.ts", "../../@dnd-kit/core/src/components/DndContext/hooks/useLayoutShiftScrollCompensation.ts", "../../@dnd-kit/core/src/components/DndContext/DndContext.tsx", "../../@dnd-kit/core/src/hooks/useDraggable.ts", "../../@dnd-kit/core/src/hooks/useDndContext.ts", "../../@dnd-kit/core/src/hooks/useDroppable.ts", "../../@dnd-kit/core/src/components/DragOverlay/components/AnimationManager/AnimationManager.tsx", "../../@dnd-kit/core/src/components/DragOverlay/components/NullifiedContextProvider/NullifiedContextProvider.tsx", "../../@dnd-kit/core/src/components/DragOverlay/components/PositionedOverlay/PositionedOverlay.tsx", "../../@dnd-kit/core/src/components/DragOverlay/hooks/useDropAnimation.ts", "../../@dnd-kit/core/src/components/DragOverlay/hooks/useKey.ts", "../../@dnd-kit/core/src/components/DragOverlay/DragOverlay.tsx"], + "sourcesContent": ["import React from 'react';\n\ninterface Props {\n id: string;\n value: string;\n}\n\nconst hiddenStyles: React.CSSProperties = {\n display: 'none',\n};\n\nexport function HiddenText({id, value}: Props) {\n return (\n
\n {value}\n
\n );\n}\n", "import React from 'react';\n\nexport interface Props {\n id: string;\n announcement: string;\n ariaLiveType?: \"polite\" | \"assertive\" | \"off\";\n}\n\nexport function LiveRegion({id, announcement, ariaLiveType = \"assertive\"}: Props) {\n // Hide element visually but keep it readable by screen readers\n const visuallyHidden: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(100%)',\n whiteSpace: 'nowrap',\n };\n \n return (\n \n {announcement}\n \n );\n}\n", "import {useCallback, useState} from 'react';\n\nexport function useAnnouncement() {\n const [announcement, setAnnouncement] = useState('');\n const announce = useCallback((value: string | undefined) => {\n if (value != null) {\n setAnnouncement(value);\n }\n }, []);\n\n return {announce, announcement} as const;\n}\n", "import {createContext} from 'react';\n\nimport type {RegisterListener} from './types';\n\nexport const DndMonitorContext = createContext(null);\n", "import {useContext, useEffect} from 'react';\n\nimport {DndMonitorContext} from './context';\nimport type {DndMonitorListener} from './types';\n\nexport function useDndMonitor(listener: DndMonitorListener) {\n const registerListener = useContext(DndMonitorContext);\n\n useEffect(() => {\n if (!registerListener) {\n throw new Error(\n 'useDndMonitor must be used within a children of '\n );\n }\n\n const unsubscribe = registerListener(listener);\n\n return unsubscribe;\n }, [listener, registerListener]);\n}\n", "import {useCallback, useState} from 'react';\n\nimport type {DndMonitorListener, DndMonitorEvent} from './types';\n\nexport function useDndMonitorProvider() {\n const [listeners] = useState(() => new Set());\n\n const registerListener = useCallback(\n (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n [listeners]\n );\n\n const dispatch = useCallback(\n ({type, event}: DndMonitorEvent) => {\n listeners.forEach((listener) => listener[type]?.(event as any));\n },\n [listeners]\n );\n\n return [dispatch, registerListener] as const;\n}\n", "import type {Announcements, ScreenReaderInstructions} from './types';\n\nexport const defaultScreenReaderInstructions: ScreenReaderInstructions = {\n draggable: `\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n `,\n};\n\nexport const defaultAnnouncements: Announcements = {\n onDragStart({active}) {\n return `Picked up draggable item ${active.id}.`;\n },\n onDragOver({active, over}) {\n if (over) {\n return `Draggable item ${active.id} was moved over droppable area ${over.id}.`;\n }\n\n return `Draggable item ${active.id} is no longer over a droppable area.`;\n },\n onDragEnd({active, over}) {\n if (over) {\n return `Draggable item ${active.id} was dropped over droppable area ${over.id}`;\n }\n\n return `Draggable item ${active.id} was dropped.`;\n },\n onDragCancel({active}) {\n return `Dragging was cancelled. Draggable item ${active.id} was dropped.`;\n },\n};\n", "import React, {useEffect, useMemo, useState} from 'react';\nimport {createPortal} from 'react-dom';\nimport {useUniqueId} from '@dnd-kit/utilities';\nimport {HiddenText, LiveRegion, useAnnouncement} from '@dnd-kit/accessibility';\n\nimport {DndMonitorListener, useDndMonitor} from '../DndMonitor';\n\nimport type {Announcements, ScreenReaderInstructions} from './types';\nimport {\n defaultAnnouncements,\n defaultScreenReaderInstructions,\n} from './defaults';\n\ninterface Props {\n announcements?: Announcements;\n container?: Element;\n screenReaderInstructions?: ScreenReaderInstructions;\n hiddenTextDescribedById: string;\n}\n\nexport function Accessibility({\n announcements = defaultAnnouncements,\n container,\n hiddenTextDescribedById,\n screenReaderInstructions = defaultScreenReaderInstructions,\n}: Props) {\n const {announce, announcement} = useAnnouncement();\n const liveRegionId = useUniqueId(`DndLiveRegion`);\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useDndMonitor(\n useMemo(\n () => ({\n onDragStart({active}) {\n announce(announcements.onDragStart({active}));\n },\n onDragMove({active, over}) {\n if (announcements.onDragMove) {\n announce(announcements.onDragMove({active, over}));\n }\n },\n onDragOver({active, over}) {\n announce(announcements.onDragOver({active, over}));\n },\n onDragEnd({active, over}) {\n announce(announcements.onDragEnd({active, over}));\n },\n onDragCancel({active, over}) {\n announce(announcements.onDragCancel({active, over}));\n },\n }),\n [announce, announcements]\n )\n );\n\n if (!mounted) {\n return null;\n }\n\n const markup = (\n <>\n \n \n \n );\n\n return container ? createPortal(markup, container) : markup;\n}\n", "import type {Coordinates, UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\nexport enum Action {\n DragStart = 'dragStart',\n DragMove = 'dragMove',\n DragEnd = 'dragEnd',\n DragCancel = 'dragCancel',\n DragOver = 'dragOver',\n RegisterDroppable = 'registerDroppable',\n SetDroppableDisabled = 'setDroppableDisabled',\n UnregisterDroppable = 'unregisterDroppable',\n}\n\nexport type Actions =\n | {\n type: Action.DragStart;\n active: UniqueIdentifier;\n initialCoordinates: Coordinates;\n }\n | {type: Action.DragMove; coordinates: Coordinates}\n | {type: Action.DragEnd}\n | {type: Action.DragCancel}\n | {\n type: Action.RegisterDroppable;\n element: DroppableContainer;\n }\n | {\n type: Action.SetDroppableDisabled;\n id: UniqueIdentifier;\n key: UniqueIdentifier;\n disabled: boolean;\n }\n | {\n type: Action.UnregisterDroppable;\n id: UniqueIdentifier;\n key: UniqueIdentifier;\n };\n", "export function noop(..._args: any) {}\n", "import {useMemo} from 'react';\n\nimport type {Sensor, SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensor(\n sensor: Sensor,\n options?: T\n): SensorDescriptor {\n return useMemo(\n () => ({\n sensor,\n options: options ?? ({} as T),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [sensor, options]\n );\n}\n", "import {useMemo} from 'react';\n\nimport type {SensorDescriptor, SensorOptions} from './types';\n\nexport function useSensors(\n ...sensors: (SensorDescriptor | undefined | null)[]\n): SensorDescriptor[] {\n return useMemo(\n () =>\n [...sensors].filter(\n (sensor): sensor is SensorDescriptor => sensor != null\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...sensors]\n );\n}\n", "import type {Coordinates} from '../../types';\n\nexport const defaultCoordinates: Coordinates = Object.freeze({\n x: 0,\n y: 0,\n});\n", "import type {Coordinates} from '../../types';\n\n/**\n * Returns the distance between two points\n */\nexport function distanceBetween(p1: Coordinates, p2: Coordinates) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n}\n", "import {getEventCoordinates} from '@dnd-kit/utilities';\nimport type {ClientRect} from '../../types';\n\nexport function getRelativeTransformOrigin(\n event: MouseEvent | TouchEvent | KeyboardEvent,\n rect: ClientRect\n) {\n const eventCoordinates = getEventCoordinates(event);\n\n if (!eventCoordinates) {\n return '0 0';\n }\n\n const transformOrigin = {\n x: ((eventCoordinates.x - rect.left) / rect.width) * 100,\n y: ((eventCoordinates.y - rect.top) / rect.height) * 100,\n };\n\n return `${transformOrigin.x}% ${transformOrigin.y}%`;\n}\n", "/* eslint-disable no-redeclare */\nimport type {ClientRect} from '../../types';\n\nimport type {Collision, CollisionDescriptor} from './types';\n\n/**\n * Sort collisions from smallest to greatest value\n */\nexport function sortCollisionsAsc(\n {data: {value: a}}: CollisionDescriptor,\n {data: {value: b}}: CollisionDescriptor\n) {\n return a - b;\n}\n\n/**\n * Sort collisions from greatest to smallest value\n */\nexport function sortCollisionsDesc(\n {data: {value: a}}: CollisionDescriptor,\n {data: {value: b}}: CollisionDescriptor\n) {\n return b - a;\n}\n\n/**\n * Returns the coordinates of the corners of a given rectangle:\n * [TopLeft {x, y}, TopRight {x, y}, BottomLeft {x, y}, BottomRight {x, y}]\n */\nexport function cornersOfRectangle({left, top, height, width}: ClientRect) {\n return [\n {\n x: left,\n y: top,\n },\n {\n x: left + width,\n y: top,\n },\n {\n x: left,\n y: top + height,\n },\n {\n x: left + width,\n y: top + height,\n },\n ];\n}\n\n/**\n * Returns the first collision, or null if there isn't one.\n * If a property is specified, returns the specified property of the first collision.\n */\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined\n): Collision | null;\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined,\n property: T\n): Collision[T] | null;\nexport function getFirstCollision(\n collisions: Collision[] | null | undefined,\n property?: keyof Collision\n) {\n if (!collisions || collisions.length === 0) {\n return null;\n }\n\n const [firstCollision] = collisions;\n\n return property ? firstCollision[property] : firstCollision;\n}\n", "import {distanceBetween} from '../coordinates';\nimport type {Coordinates, ClientRect} from '../../types';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {sortCollisionsAsc} from './helpers';\n\n/**\n * Returns the coordinates of the center of a given ClientRect\n */\nfunction centerOfRectangle(\n rect: ClientRect,\n left = rect.left,\n top = rect.top\n): Coordinates {\n return {\n x: left + rect.width * 0.5,\n y: top + rect.height * 0.5,\n };\n}\n\n/**\n * Returns the closest rectangles from an array of rectangles to the center of a given\n * rectangle.\n */\nexport const closestCenter: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const centerRect = centerOfRectangle(\n collisionRect,\n collisionRect.left,\n collisionRect.top\n );\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const distBetween = distanceBetween(centerOfRectangle(rect), centerRect);\n\n collisions.push({id, data: {droppableContainer, value: distBetween}});\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n", "import {distanceBetween} from '../coordinates';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {cornersOfRectangle, sortCollisionsAsc} from './helpers';\n\n/**\n * Returns the closest rectangles from an array of rectangles to the corners of\n * another rectangle.\n */\nexport const closestCorners: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const corners = cornersOfRectangle(collisionRect);\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const rectCorners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner, index) => {\n return accumulator + distanceBetween(rectCorners[index], corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n\n collisions.push({\n id,\n data: {droppableContainer, value: effectiveDistance},\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n", "import type {ClientRect} from '../../types';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {sortCollisionsDesc} from './helpers';\n\n/**\n * Returns the intersecting rectangle area between two rectangles\n */\nexport function getIntersectionRatio(\n entry: ClientRect,\n target: ClientRect\n): number {\n const top = Math.max(target.top, entry.top);\n const left = Math.max(target.left, entry.left);\n const right = Math.min(target.left + target.width, entry.left + entry.width);\n const bottom = Math.min(target.top + target.height, entry.top + entry.height);\n const width = right - left;\n const height = bottom - top;\n\n if (left < right && top < bottom) {\n const targetArea = target.width * target.height;\n const entryArea = entry.width * entry.height;\n const intersectionArea = width * height;\n const intersectionRatio =\n intersectionArea / (targetArea + entryArea - intersectionArea);\n\n return Number(intersectionRatio.toFixed(4));\n }\n\n // Rectangles do not overlap, or overlap has an area of zero (edge/corner overlap)\n return 0;\n}\n\n/**\n * Returns the rectangles that has the greatest intersection area with a given\n * rectangle in an array of rectangles.\n */\nexport const rectIntersection: CollisionDetection = ({\n collisionRect,\n droppableRects,\n droppableContainers,\n}) => {\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect) {\n const intersectionRatio = getIntersectionRatio(rect, collisionRect);\n\n if (intersectionRatio > 0) {\n collisions.push({\n id,\n data: {droppableContainer, value: intersectionRatio},\n });\n }\n }\n }\n\n return collisions.sort(sortCollisionsDesc);\n};\n", "import type {Coordinates, ClientRect} from '../../types';\nimport {distanceBetween} from '../coordinates';\n\nimport type {CollisionDescriptor, CollisionDetection} from './types';\nimport {cornersOfRectangle, sortCollisionsAsc} from './helpers';\n\n/**\n * Check if a given point is contained within a bounding rectangle\n */\nfunction isPointWithinRect(point: Coordinates, rect: ClientRect): boolean {\n const {top, left, bottom, right} = rect;\n\n return (\n top <= point.y && point.y <= bottom && left <= point.x && point.x <= right\n );\n}\n\n/**\n * Returns the rectangles that the pointer is hovering over\n */\nexport const pointerWithin: CollisionDetection = ({\n droppableContainers,\n droppableRects,\n pointerCoordinates,\n}) => {\n if (!pointerCoordinates) {\n return [];\n }\n\n const collisions: CollisionDescriptor[] = [];\n\n for (const droppableContainer of droppableContainers) {\n const {id} = droppableContainer;\n const rect = droppableRects.get(id);\n\n if (rect && isPointWithinRect(pointerCoordinates, rect)) {\n /* There may be more than a single rectangle intersecting\n * with the pointer coordinates. In order to sort the\n * colliding rectangles, we measure the distance between\n * the pointer and the corners of the intersecting rectangle\n */\n const corners = cornersOfRectangle(rect);\n const distances = corners.reduce((accumulator, corner) => {\n return accumulator + distanceBetween(pointerCoordinates, corner);\n }, 0);\n const effectiveDistance = Number((distances / 4).toFixed(4));\n\n collisions.push({\n id,\n data: {droppableContainer, value: effectiveDistance},\n });\n }\n }\n\n return collisions.sort(sortCollisionsAsc);\n};\n", "import type {Transform} from '@dnd-kit/utilities';\nimport type {ClientRect} from '../../types';\n\nexport function adjustScale(\n transform: Transform,\n rect1: ClientRect | null,\n rect2: ClientRect | null\n): Transform {\n return {\n ...transform,\n scaleX: rect1 && rect2 ? rect1.width / rect2.width : 1,\n scaleY: rect1 && rect2 ? rect1.height / rect2.height : 1,\n };\n}\n", "import type {Coordinates, ClientRect} from '../../types';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getRectDelta(\n rect1: ClientRect | null,\n rect2: ClientRect | null\n): Coordinates {\n return rect1 && rect2\n ? {\n x: rect1.left - rect2.left,\n y: rect1.top - rect2.top,\n }\n : defaultCoordinates;\n}\n", "import type {Coordinates, ClientRect} from '../../types';\n\nexport function createRectAdjustmentFn(modifier: number) {\n return function adjustClientRect(\n rect: ClientRect,\n ...adjustments: Coordinates[]\n ): ClientRect {\n return adjustments.reduce(\n (acc, adjustment) => ({\n ...acc,\n top: acc.top + modifier * adjustment.y,\n bottom: acc.bottom + modifier * adjustment.y,\n left: acc.left + modifier * adjustment.x,\n right: acc.right + modifier * adjustment.x,\n }),\n {...rect}\n );\n };\n}\n\nexport const getAdjustedRect = createRectAdjustmentFn(1);\n", "import type {Transform} from '@dnd-kit/utilities';\n\nexport function parseTransform(transform: string): Transform | null {\n if (transform.startsWith('matrix3d(')) {\n const transformArray = transform.slice(9, -1).split(/, /);\n\n return {\n x: +transformArray[12],\n y: +transformArray[13],\n scaleX: +transformArray[0],\n scaleY: +transformArray[5],\n };\n } else if (transform.startsWith('matrix(')) {\n const transformArray = transform.slice(7, -1).split(/, /);\n\n return {\n x: +transformArray[4],\n y: +transformArray[5],\n scaleX: +transformArray[0],\n scaleY: +transformArray[3],\n };\n }\n\n return null;\n}\n", "import type {ClientRect} from '../../types';\n\nimport {parseTransform} from './parseTransform';\n\nexport function inverseTransform(\n rect: ClientRect,\n transform: string,\n transformOrigin: string\n): ClientRect {\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return rect;\n }\n\n const {scaleX, scaleY, x: translateX, y: translateY} = parsedTransform;\n\n const x = rect.left - translateX - (1 - scaleX) * parseFloat(transformOrigin);\n const y =\n rect.top -\n translateY -\n (1 - scaleY) *\n parseFloat(transformOrigin.slice(transformOrigin.indexOf(' ') + 1));\n const w = scaleX ? rect.width / scaleX : rect.width;\n const h = scaleY ? rect.height / scaleY : rect.height;\n\n return {\n width: w,\n height: h,\n top: y,\n right: x + w,\n bottom: y + h,\n left: x,\n };\n}\n", "import {getWindow} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {inverseTransform} from '../transform';\n\ninterface Options {\n ignoreTransform?: boolean;\n}\n\nconst defaultOptions: Options = {ignoreTransform: false};\n\n/**\n * Returns the bounding client rect of an element relative to the viewport.\n */\nexport function getClientRect(\n element: Element,\n options: Options = defaultOptions\n) {\n let rect: ClientRect = element.getBoundingClientRect();\n\n if (options.ignoreTransform) {\n const {transform, transformOrigin} =\n getWindow(element).getComputedStyle(element);\n\n if (transform) {\n rect = inverseTransform(rect, transform, transformOrigin);\n }\n }\n\n const {top, left, width, height, bottom, right} = rect;\n\n return {\n top,\n left,\n width,\n height,\n bottom,\n right,\n };\n}\n\n/**\n * Returns the bounding client rect of an element relative to the viewport.\n *\n * @remarks\n * The ClientRect returned by this method does not take into account transforms\n * applied to the element it measures.\n *\n */\nexport function getTransformAgnosticClientRect(element: Element): ClientRect {\n return getClientRect(element, {ignoreTransform: true});\n}\n", "import type {ClientRect} from '../../types';\n\nexport function getWindowClientRect(element: typeof window): ClientRect {\n const width = element.innerWidth;\n const height = element.innerHeight;\n\n return {\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n width,\n height,\n };\n}\n", "import {getWindow} from '@dnd-kit/utilities';\n\nexport function isFixed(\n node: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(node).getComputedStyle(node)\n): boolean {\n return computedStyle.position === 'fixed';\n}\n", "import {getWindow} from '@dnd-kit/utilities';\n\nexport function isScrollable(\n element: HTMLElement,\n computedStyle: CSSStyleDeclaration = getWindow(element).getComputedStyle(\n element\n )\n): boolean {\n const overflowRegex = /(auto|scroll|overlay)/;\n const properties = ['overflow', 'overflowX', 'overflowY'];\n\n return properties.some((property) => {\n const value = computedStyle[property as keyof CSSStyleDeclaration];\n\n return typeof value === 'string' ? overflowRegex.test(value) : false;\n });\n}\n", "import {\n getWindow,\n isDocument,\n isHTMLElement,\n isSVGElement,\n} from '@dnd-kit/utilities';\n\nimport {isFixed} from './isFixed';\nimport {isScrollable} from './isScrollable';\n\nexport function getScrollableAncestors(\n element: Node | null,\n limit?: number\n): Element[] {\n const scrollParents: Element[] = [];\n\n function findScrollableAncestors(node: Node | null): Element[] {\n if (limit != null && scrollParents.length >= limit) {\n return scrollParents;\n }\n\n if (!node) {\n return scrollParents;\n }\n\n if (\n isDocument(node) &&\n node.scrollingElement != null &&\n !scrollParents.includes(node.scrollingElement)\n ) {\n scrollParents.push(node.scrollingElement);\n\n return scrollParents;\n }\n\n if (!isHTMLElement(node) || isSVGElement(node)) {\n return scrollParents;\n }\n\n if (scrollParents.includes(node)) {\n return scrollParents;\n }\n\n const computedStyle = getWindow(element).getComputedStyle(node);\n\n if (node !== element) {\n if (isScrollable(node, computedStyle)) {\n scrollParents.push(node);\n }\n }\n\n if (isFixed(node, computedStyle)) {\n return scrollParents;\n }\n\n return findScrollableAncestors(node.parentNode);\n }\n\n if (!element) {\n return scrollParents;\n }\n\n return findScrollableAncestors(element);\n}\n\nexport function getFirstScrollableAncestor(node: Node | null): Element | null {\n const [firstScrollableAncestor] = getScrollableAncestors(node, 1);\n\n return firstScrollableAncestor ?? null;\n}\n", "import {\n canUseDOM,\n isHTMLElement,\n isDocument,\n getOwnerDocument,\n isNode,\n isWindow,\n} from '@dnd-kit/utilities';\n\nexport function getScrollableElement(element: EventTarget | null) {\n if (!canUseDOM || !element) {\n return null;\n }\n\n if (isWindow(element)) {\n return element;\n }\n\n if (!isNode(element)) {\n return null;\n }\n\n if (\n isDocument(element) ||\n element === getOwnerDocument(element).scrollingElement\n ) {\n return window;\n }\n\n if (isHTMLElement(element)) {\n return element;\n }\n\n return null;\n}\n", "import {isWindow} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\n\nexport function getScrollXCoordinate(element: Element | typeof window): number {\n if (isWindow(element)) {\n return element.scrollX;\n }\n\n return element.scrollLeft;\n}\n\nexport function getScrollYCoordinate(element: Element | typeof window): number {\n if (isWindow(element)) {\n return element.scrollY;\n }\n\n return element.scrollTop;\n}\n\nexport function getScrollCoordinates(\n element: Element | typeof window\n): Coordinates {\n return {\n x: getScrollXCoordinate(element),\n y: getScrollYCoordinate(element),\n };\n}\n", "export enum Direction {\n Forward = 1,\n Backward = -1,\n}\n", "import {canUseDOM} from '@dnd-kit/utilities';\n\nexport function isDocumentScrollingElement(element: Element | null) {\n if (!canUseDOM || !element) {\n return false;\n }\n\n return element === document.scrollingElement;\n}\n", "import {isDocumentScrollingElement} from './documentScrollingElement';\n\nexport function getScrollPosition(scrollingContainer: Element) {\n const minScroll = {\n x: 0,\n y: 0,\n };\n const dimensions = isDocumentScrollingElement(scrollingContainer)\n ? {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n : {\n height: scrollingContainer.clientHeight,\n width: scrollingContainer.clientWidth,\n };\n const maxScroll = {\n x: scrollingContainer.scrollWidth - dimensions.width,\n y: scrollingContainer.scrollHeight - dimensions.height,\n };\n\n const isTop = scrollingContainer.scrollTop <= minScroll.y;\n const isLeft = scrollingContainer.scrollLeft <= minScroll.x;\n const isBottom = scrollingContainer.scrollTop >= maxScroll.y;\n const isRight = scrollingContainer.scrollLeft >= maxScroll.x;\n\n return {\n isTop,\n isLeft,\n isBottom,\n isRight,\n maxScroll,\n minScroll,\n };\n}\n", "import {Direction, ClientRect} from '../../types';\nimport {getScrollPosition} from './getScrollPosition';\n\ninterface PositionalCoordinates\n extends Pick {}\n\nconst defaultThreshold = {\n x: 0.2,\n y: 0.2,\n};\n\nexport function getScrollDirectionAndSpeed(\n scrollContainer: Element,\n scrollContainerRect: ClientRect,\n {top, left, right, bottom}: PositionalCoordinates,\n acceleration = 10,\n thresholdPercentage = defaultThreshold\n) {\n const {isTop, isBottom, isLeft, isRight} = getScrollPosition(scrollContainer);\n\n const direction = {\n x: 0,\n y: 0,\n };\n const speed = {\n x: 0,\n y: 0,\n };\n const threshold = {\n height: scrollContainerRect.height * thresholdPercentage.y,\n width: scrollContainerRect.width * thresholdPercentage.x,\n };\n\n if (!isTop && top <= scrollContainerRect.top + threshold.height) {\n // Scroll Up\n direction.y = Direction.Backward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.top + threshold.height - top) / threshold.height\n );\n } else if (\n !isBottom &&\n bottom >= scrollContainerRect.bottom - threshold.height\n ) {\n // Scroll Down\n direction.y = Direction.Forward;\n speed.y =\n acceleration *\n Math.abs(\n (scrollContainerRect.bottom - threshold.height - bottom) /\n threshold.height\n );\n }\n\n if (!isRight && right >= scrollContainerRect.right - threshold.width) {\n // Scroll Right\n direction.x = Direction.Forward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.right - threshold.width - right) / threshold.width\n );\n } else if (!isLeft && left <= scrollContainerRect.left + threshold.width) {\n // Scroll Left\n direction.x = Direction.Backward;\n speed.x =\n acceleration *\n Math.abs(\n (scrollContainerRect.left + threshold.width - left) / threshold.width\n );\n }\n\n return {\n direction,\n speed,\n };\n}\n", "export function getScrollElementRect(element: Element) {\n if (element === document.scrollingElement) {\n const {innerWidth, innerHeight} = window;\n\n return {\n top: 0,\n left: 0,\n right: innerWidth,\n bottom: innerHeight,\n width: innerWidth,\n height: innerHeight,\n };\n }\n\n const {top, left, right, bottom} = element.getBoundingClientRect();\n\n return {\n top,\n left,\n right,\n bottom,\n width: element.clientWidth,\n height: element.clientHeight,\n };\n}\n", "import {add} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {\n getScrollCoordinates,\n getScrollXCoordinate,\n getScrollYCoordinate,\n} from './getScrollCoordinates';\nimport {defaultCoordinates} from '../coordinates';\n\nexport function getScrollOffsets(scrollableAncestors: Element[]): Coordinates {\n return scrollableAncestors.reduce((acc, node) => {\n return add(acc, getScrollCoordinates(node));\n }, defaultCoordinates);\n}\n\nexport function getScrollXOffset(scrollableAncestors: Element[]): number {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollXCoordinate(node);\n }, 0);\n}\n\nexport function getScrollYOffset(scrollableAncestors: Element[]): number {\n return scrollableAncestors.reduce((acc, node) => {\n return acc + getScrollYCoordinate(node);\n }, 0);\n}\n", "import type {ClientRect} from '../../types';\nimport {getClientRect} from '../rect/getRect';\nimport {getFirstScrollableAncestor} from './getScrollableAncestors';\n\nexport function scrollIntoViewIfNeeded(\n element: HTMLElement | null | undefined,\n measure: (node: HTMLElement) => ClientRect = getClientRect\n) {\n if (!element) {\n return;\n }\n\n const {top, left, bottom, right} = measure(element);\n const firstScrollableAncestor = getFirstScrollableAncestor(element);\n\n if (!firstScrollableAncestor) {\n return;\n }\n\n if (\n bottom <= 0 ||\n right <= 0 ||\n top >= window.innerHeight ||\n left >= window.innerWidth\n ) {\n element.scrollIntoView({\n block: 'center',\n inline: 'center',\n });\n }\n}\n", "import type {ClientRect} from '../../types/rect';\nimport {\n getScrollableAncestors,\n getScrollOffsets,\n getScrollXOffset,\n getScrollYOffset,\n} from '../scroll';\n\nconst properties = [\n ['x', ['left', 'right'], getScrollXOffset],\n ['y', ['top', 'bottom'], getScrollYOffset],\n] as const;\n\nexport class Rect {\n constructor(rect: ClientRect, element: Element) {\n const scrollableAncestors = getScrollableAncestors(element);\n const scrollOffsets = getScrollOffsets(scrollableAncestors);\n\n this.rect = {...rect};\n this.width = rect.width;\n this.height = rect.height;\n\n for (const [axis, keys, getScrollOffset] of properties) {\n for (const key of keys) {\n Object.defineProperty(this, key, {\n get: () => {\n const currentOffsets = getScrollOffset(scrollableAncestors);\n const scrollOffsetsDeltla = scrollOffsets[axis] - currentOffsets;\n\n return this.rect[key] + scrollOffsetsDeltla;\n },\n enumerable: true,\n });\n }\n }\n\n Object.defineProperty(this, 'rect', {enumerable: false});\n }\n\n private rect: ClientRect;\n\n public width: number;\n\n public height: number;\n\n // The below properties are set by the `Object.defineProperty` calls in the constructor\n // @ts-ignore\n public top: number;\n // @ts-ignore\n public bottom: number;\n // @ts-ignore\n public right: number;\n // @ts-ignore\n public left: number;\n}\n", "export class Listeners {\n private listeners: [\n string,\n EventListenerOrEventListenerObject,\n AddEventListenerOptions | boolean | undefined\n ][] = [];\n\n constructor(private target: EventTarget | null) {}\n\n public add(\n eventName: string,\n handler: (event: T) => void,\n options?: AddEventListenerOptions | boolean\n ) {\n this.target?.addEventListener(eventName, handler as EventListener, options);\n this.listeners.push([eventName, handler as EventListener, options]);\n }\n\n public removeAll = () => {\n this.listeners.forEach((listener) =>\n this.target?.removeEventListener(...listener)\n );\n };\n}\n", "import {getOwnerDocument, getWindow} from '@dnd-kit/utilities';\n\nexport function getEventListenerTarget(\n target: EventTarget | null\n): EventTarget | Document {\n // If the `event.target` element is removed from the document events will still be targeted\n // at it, and hence won't always bubble up to the window or document anymore.\n // If there is any risk of an element being removed while it is being dragged,\n // the best practice is to attach the event listeners directly to the target.\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\n\n const {EventTarget} = getWindow(target);\n\n return target instanceof EventTarget ? target : getOwnerDocument(target);\n}\n", "import type {Coordinates, DistanceMeasurement} from '../../types';\n\nexport function hasExceededDistance(\n delta: Coordinates,\n measurement: DistanceMeasurement\n): boolean {\n const dx = Math.abs(delta.x);\n const dy = Math.abs(delta.y);\n\n if (typeof measurement === 'number') {\n return Math.sqrt(dx ** 2 + dy ** 2) > measurement;\n }\n\n if ('x' in measurement && 'y' in measurement) {\n return dx > measurement.x && dy > measurement.y;\n }\n\n if ('x' in measurement) {\n return dx > measurement.x;\n }\n\n if ('y' in measurement) {\n return dy > measurement.y;\n }\n\n return false;\n}\n", "export enum EventName {\n Click = 'click',\n DragStart = 'dragstart',\n Keydown = 'keydown',\n ContextMenu = 'contextmenu',\n Resize = 'resize',\n SelectionChange = 'selectionchange',\n VisibilityChange = 'visibilitychange',\n}\n\nexport function preventDefault(event: Event) {\n event.preventDefault();\n}\n\nexport function stopPropagation(event: Event) {\n event.stopPropagation();\n}\n", "import type {Coordinates, UniqueIdentifier} from '../../types';\nimport type {SensorContext} from '../types';\n\nexport enum KeyboardCode {\n Space = 'Space',\n Down = 'ArrowDown',\n Right = 'ArrowRight',\n Left = 'ArrowLeft',\n Up = 'ArrowUp',\n Esc = 'Escape',\n Enter = 'Enter',\n Tab = 'Tab',\n}\n\nexport type KeyboardCodes = {\n start: KeyboardEvent['code'][];\n cancel: KeyboardEvent['code'][];\n end: KeyboardEvent['code'][];\n};\n\nexport type KeyboardCoordinateGetter = (\n event: KeyboardEvent,\n args: {\n active: UniqueIdentifier;\n currentCoordinates: Coordinates;\n context: SensorContext;\n }\n) => Coordinates | void;\n", "import {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\n\nexport const defaultKeyboardCodes: KeyboardCodes = {\n start: [KeyboardCode.Space, KeyboardCode.Enter],\n cancel: [KeyboardCode.Esc],\n end: [KeyboardCode.Space, KeyboardCode.Enter, KeyboardCode.Tab],\n};\n\nexport const defaultKeyboardCoordinateGetter: KeyboardCoordinateGetter = (\n event,\n {currentCoordinates}\n) => {\n switch (event.code) {\n case KeyboardCode.Right:\n return {\n ...currentCoordinates,\n x: currentCoordinates.x + 25,\n };\n case KeyboardCode.Left:\n return {\n ...currentCoordinates,\n x: currentCoordinates.x - 25,\n };\n case KeyboardCode.Down:\n return {\n ...currentCoordinates,\n y: currentCoordinates.y + 25,\n };\n case KeyboardCode.Up:\n return {\n ...currentCoordinates,\n y: currentCoordinates.y - 25,\n };\n }\n\n return undefined;\n};\n", "import {\n add as getAdjustedCoordinates,\n subtract as getCoordinatesDelta,\n getOwnerDocument,\n getWindow,\n isKeyboardEvent,\n} from '@dnd-kit/utilities';\n\nimport type {Coordinates} from '../../types';\nimport {\n defaultCoordinates,\n getScrollPosition,\n getScrollElementRect,\n} from '../../utilities';\nimport {scrollIntoViewIfNeeded} from '../../utilities/scroll';\nimport {EventName} from '../events';\nimport {Listeners} from '../utilities';\nimport type {\n Activators,\n SensorInstance,\n SensorProps,\n SensorOptions,\n} from '../types';\n\nimport {KeyboardCoordinateGetter, KeyboardCode, KeyboardCodes} from './types';\nimport {\n defaultKeyboardCodes,\n defaultKeyboardCoordinateGetter,\n} from './defaults';\n\nexport interface KeyboardSensorOptions extends SensorOptions {\n keyboardCodes?: KeyboardCodes;\n coordinateGetter?: KeyboardCoordinateGetter;\n scrollBehavior?: ScrollBehavior;\n onActivation?({event}: {event: KeyboardEvent}): void;\n}\n\nexport type KeyboardSensorProps = SensorProps;\n\nexport class KeyboardSensor implements SensorInstance {\n public autoScrollEnabled = false;\n private referenceCoordinates: Coordinates | undefined;\n private listeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(private props: KeyboardSensorProps) {\n const {\n event: {target},\n } = props;\n\n this.props = props;\n this.listeners = new Listeners(getOwnerDocument(target));\n this.windowListeners = new Listeners(getWindow(target));\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n\n this.attach();\n }\n\n private attach() {\n this.handleStart();\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n\n setTimeout(() => this.listeners.add(EventName.Keydown, this.handleKeyDown));\n }\n\n private handleStart() {\n const {activeNode, onStart} = this.props;\n const node = activeNode.node.current;\n\n if (node) {\n scrollIntoViewIfNeeded(node);\n }\n\n onStart(defaultCoordinates);\n }\n\n private handleKeyDown(event: Event) {\n if (isKeyboardEvent(event)) {\n const {active, context, options} = this.props;\n const {\n keyboardCodes = defaultKeyboardCodes,\n coordinateGetter = defaultKeyboardCoordinateGetter,\n scrollBehavior = 'smooth',\n } = options;\n const {code} = event;\n\n if (keyboardCodes.end.includes(code)) {\n this.handleEnd(event);\n return;\n }\n\n if (keyboardCodes.cancel.includes(code)) {\n this.handleCancel(event);\n return;\n }\n\n const {collisionRect} = context.current;\n const currentCoordinates = collisionRect\n ? {x: collisionRect.left, y: collisionRect.top}\n : defaultCoordinates;\n\n if (!this.referenceCoordinates) {\n this.referenceCoordinates = currentCoordinates;\n }\n\n const newCoordinates = coordinateGetter(event, {\n active,\n context: context.current,\n currentCoordinates,\n });\n\n if (newCoordinates) {\n const coordinatesDelta = getCoordinatesDelta(\n newCoordinates,\n currentCoordinates\n );\n const scrollDelta = {\n x: 0,\n y: 0,\n };\n const {scrollableAncestors} = context.current;\n\n for (const scrollContainer of scrollableAncestors) {\n const direction = event.code;\n const {isTop, isRight, isLeft, isBottom, maxScroll, minScroll} =\n getScrollPosition(scrollContainer);\n const scrollElementRect = getScrollElementRect(scrollContainer);\n\n const clampedCoordinates = {\n x: Math.min(\n direction === KeyboardCode.Right\n ? scrollElementRect.right - scrollElementRect.width / 2\n : scrollElementRect.right,\n Math.max(\n direction === KeyboardCode.Right\n ? scrollElementRect.left\n : scrollElementRect.left + scrollElementRect.width / 2,\n newCoordinates.x\n )\n ),\n y: Math.min(\n direction === KeyboardCode.Down\n ? scrollElementRect.bottom - scrollElementRect.height / 2\n : scrollElementRect.bottom,\n Math.max(\n direction === KeyboardCode.Down\n ? scrollElementRect.top\n : scrollElementRect.top + scrollElementRect.height / 2,\n newCoordinates.y\n )\n ),\n };\n\n const canScrollX =\n (direction === KeyboardCode.Right && !isRight) ||\n (direction === KeyboardCode.Left && !isLeft);\n const canScrollY =\n (direction === KeyboardCode.Down && !isBottom) ||\n (direction === KeyboardCode.Up && !isTop);\n\n if (canScrollX && clampedCoordinates.x !== newCoordinates.x) {\n const newScrollCoordinates =\n scrollContainer.scrollLeft + coordinatesDelta.x;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Right &&\n newScrollCoordinates <= maxScroll.x) ||\n (direction === KeyboardCode.Left &&\n newScrollCoordinates >= minScroll.x);\n\n if (canScrollToNewCoordinates && !coordinatesDelta.y) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n left: newScrollCoordinates,\n behavior: scrollBehavior,\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.x = scrollContainer.scrollLeft - newScrollCoordinates;\n } else {\n scrollDelta.x =\n direction === KeyboardCode.Right\n ? scrollContainer.scrollLeft - maxScroll.x\n : scrollContainer.scrollLeft - minScroll.x;\n }\n\n if (scrollDelta.x) {\n scrollContainer.scrollBy({\n left: -scrollDelta.x,\n behavior: scrollBehavior,\n });\n }\n break;\n } else if (canScrollY && clampedCoordinates.y !== newCoordinates.y) {\n const newScrollCoordinates =\n scrollContainer.scrollTop + coordinatesDelta.y;\n const canScrollToNewCoordinates =\n (direction === KeyboardCode.Down &&\n newScrollCoordinates <= maxScroll.y) ||\n (direction === KeyboardCode.Up &&\n newScrollCoordinates >= minScroll.y);\n\n if (canScrollToNewCoordinates && !coordinatesDelta.x) {\n // We don't need to update coordinates, the scroll adjustment alone will trigger\n // logic to auto-detect the new container we are over\n scrollContainer.scrollTo({\n top: newScrollCoordinates,\n behavior: scrollBehavior,\n });\n return;\n }\n\n if (canScrollToNewCoordinates) {\n scrollDelta.y = scrollContainer.scrollTop - newScrollCoordinates;\n } else {\n scrollDelta.y =\n direction === KeyboardCode.Down\n ? scrollContainer.scrollTop - maxScroll.y\n : scrollContainer.scrollTop - minScroll.y;\n }\n\n if (scrollDelta.y) {\n scrollContainer.scrollBy({\n top: -scrollDelta.y,\n behavior: scrollBehavior,\n });\n }\n\n break;\n }\n }\n\n this.handleMove(\n event,\n getAdjustedCoordinates(\n getCoordinatesDelta(newCoordinates, this.referenceCoordinates),\n scrollDelta\n )\n );\n }\n }\n }\n\n private handleMove(event: Event, coordinates: Coordinates) {\n const {onMove} = this.props;\n\n event.preventDefault();\n onMove(coordinates);\n }\n\n private handleEnd(event: Event) {\n const {onEnd} = this.props;\n\n event.preventDefault();\n this.detach();\n onEnd();\n }\n\n private handleCancel(event: Event) {\n const {onCancel} = this.props;\n\n event.preventDefault();\n this.detach();\n onCancel();\n }\n\n private detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n }\n\n static activators: Activators = [\n {\n eventName: 'onKeyDown' as const,\n handler: (\n event: React.KeyboardEvent,\n {keyboardCodes = defaultKeyboardCodes, onActivation},\n {active}\n ) => {\n const {code} = event.nativeEvent;\n\n if (keyboardCodes.start.includes(code)) {\n const activator = active.activatorNode.current;\n\n if (activator && event.target !== activator) {\n return false;\n }\n\n event.preventDefault();\n\n onActivation?.({event: event.nativeEvent});\n\n return true;\n }\n\n return false;\n },\n },\n ];\n}\n", "import {\n subtract as getCoordinatesDelta,\n getEventCoordinates,\n getOwnerDocument,\n getWindow,\n} from '@dnd-kit/utilities';\n\nimport {defaultCoordinates} from '../../utilities';\nimport {\n getEventListenerTarget,\n hasExceededDistance,\n Listeners,\n} from '../utilities';\nimport {EventName, preventDefault, stopPropagation} from '../events';\nimport {KeyboardCode} from '../keyboard';\nimport type {SensorInstance, SensorProps, SensorOptions} from '../types';\nimport type {Coordinates, DistanceMeasurement} from '../../types';\n\ninterface DistanceConstraint {\n distance: DistanceMeasurement;\n tolerance?: DistanceMeasurement;\n}\n\ninterface DelayConstraint {\n delay: number;\n tolerance: DistanceMeasurement;\n}\n\ninterface EventDescriptor {\n name: keyof DocumentEventMap;\n passive?: boolean;\n}\n\nexport interface PointerEventHandlers {\n cancel?: EventDescriptor;\n move: EventDescriptor;\n end: EventDescriptor;\n}\n\nexport type PointerActivationConstraint =\n | DelayConstraint\n | DistanceConstraint\n | (DelayConstraint & DistanceConstraint);\n\nfunction isDistanceConstraint(\n constraint: PointerActivationConstraint\n): constraint is PointerActivationConstraint & DistanceConstraint {\n return Boolean(constraint && 'distance' in constraint);\n}\n\nfunction isDelayConstraint(\n constraint: PointerActivationConstraint\n): constraint is DelayConstraint {\n return Boolean(constraint && 'delay' in constraint);\n}\n\nexport interface AbstractPointerSensorOptions extends SensorOptions {\n activationConstraint?: PointerActivationConstraint;\n bypassActivationConstraint?(\n props: Pick\n ): boolean;\n onActivation?({event}: {event: Event}): void;\n}\n\nexport type AbstractPointerSensorProps =\n SensorProps;\n\nexport class AbstractPointerSensor implements SensorInstance {\n public autoScrollEnabled = true;\n private document: Document;\n private activated: boolean = false;\n private initialCoordinates: Coordinates;\n private timeoutId: NodeJS.Timeout | null = null;\n private listeners: Listeners;\n private documentListeners: Listeners;\n private windowListeners: Listeners;\n\n constructor(\n private props: AbstractPointerSensorProps,\n private events: PointerEventHandlers,\n listenerTarget = getEventListenerTarget(props.event.target)\n ) {\n const {event} = props;\n const {target} = event;\n\n this.props = props;\n this.events = events;\n this.document = getOwnerDocument(target);\n this.documentListeners = new Listeners(this.document);\n this.listeners = new Listeners(listenerTarget);\n this.windowListeners = new Listeners(getWindow(target));\n this.initialCoordinates = getEventCoordinates(event) ?? defaultCoordinates;\n this.handleStart = this.handleStart.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleKeydown = this.handleKeydown.bind(this);\n this.removeTextSelection = this.removeTextSelection.bind(this);\n\n this.attach();\n }\n\n private attach() {\n const {\n events,\n props: {\n options: {activationConstraint, bypassActivationConstraint},\n },\n } = this;\n\n this.listeners.add(events.move.name, this.handleMove, {passive: false});\n this.listeners.add(events.end.name, this.handleEnd);\n\n if (events.cancel) {\n this.listeners.add(events.cancel.name, this.handleCancel);\n }\n\n this.windowListeners.add(EventName.Resize, this.handleCancel);\n this.windowListeners.add(EventName.DragStart, preventDefault);\n this.windowListeners.add(EventName.VisibilityChange, this.handleCancel);\n this.windowListeners.add(EventName.ContextMenu, preventDefault);\n this.documentListeners.add(EventName.Keydown, this.handleKeydown);\n\n if (activationConstraint) {\n if (\n bypassActivationConstraint?.({\n event: this.props.event,\n activeNode: this.props.activeNode,\n options: this.props.options,\n })\n ) {\n return this.handleStart();\n }\n\n if (isDelayConstraint(activationConstraint)) {\n this.timeoutId = setTimeout(\n this.handleStart,\n activationConstraint.delay\n );\n this.handlePending(activationConstraint);\n return;\n }\n\n if (isDistanceConstraint(activationConstraint)) {\n this.handlePending(activationConstraint);\n return;\n }\n }\n\n this.handleStart();\n }\n\n private detach() {\n this.listeners.removeAll();\n this.windowListeners.removeAll();\n\n // Wait until the next event loop before removing document listeners\n // This is necessary because we listen for `click` and `selection` events on the document\n setTimeout(this.documentListeners.removeAll, 50);\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n private handlePending(\n constraint: PointerActivationConstraint,\n offset?: Coordinates | undefined\n ): void {\n const {active, onPending} = this.props;\n onPending(active, constraint, this.initialCoordinates, offset);\n }\n\n private handleStart() {\n const {initialCoordinates} = this;\n const {onStart} = this.props;\n\n if (initialCoordinates) {\n this.activated = true;\n\n // Stop propagation of click events once activation constraints are met\n this.documentListeners.add(EventName.Click, stopPropagation, {\n capture: true,\n });\n\n // Remove any text selection from the document\n this.removeTextSelection();\n\n // Prevent further text selection while dragging\n this.documentListeners.add(\n EventName.SelectionChange,\n this.removeTextSelection\n );\n\n onStart(initialCoordinates);\n }\n }\n\n private handleMove(event: Event) {\n const {activated, initialCoordinates, props} = this;\n const {\n onMove,\n options: {activationConstraint},\n } = props;\n\n if (!initialCoordinates) {\n return;\n }\n\n const coordinates = getEventCoordinates(event) ?? defaultCoordinates;\n const delta = getCoordinatesDelta(initialCoordinates, coordinates);\n\n // Constraint validation\n if (!activated && activationConstraint) {\n if (isDistanceConstraint(activationConstraint)) {\n if (\n activationConstraint.tolerance != null &&\n hasExceededDistance(delta, activationConstraint.tolerance)\n ) {\n return this.handleCancel();\n }\n\n if (hasExceededDistance(delta, activationConstraint.distance)) {\n return this.handleStart();\n }\n }\n\n if (isDelayConstraint(activationConstraint)) {\n if (hasExceededDistance(delta, activationConstraint.tolerance)) {\n return this.handleCancel();\n }\n }\n\n this.handlePending(activationConstraint, delta);\n return;\n }\n\n if (event.cancelable) {\n event.preventDefault();\n }\n\n onMove(coordinates);\n }\n\n private handleEnd() {\n const {onAbort, onEnd} = this.props;\n\n this.detach();\n if (!this.activated) {\n onAbort(this.props.active);\n }\n onEnd();\n }\n\n private handleCancel() {\n const {onAbort, onCancel} = this.props;\n\n this.detach();\n if (!this.activated) {\n onAbort(this.props.active);\n }\n onCancel();\n }\n\n private handleKeydown(event: KeyboardEvent) {\n if (event.code === KeyboardCode.Esc) {\n this.handleCancel();\n }\n }\n\n private removeTextSelection() {\n this.document.getSelection()?.removeAllRanges();\n }\n}\n", "import type {PointerEvent} from 'react';\nimport {getOwnerDocument} from '@dnd-kit/utilities';\n\nimport type {SensorProps} from '../types';\nimport {\n AbstractPointerSensor,\n AbstractPointerSensorOptions,\n PointerEventHandlers,\n} from './AbstractPointerSensor';\n\nconst events: PointerEventHandlers = {\n cancel: {name: 'pointercancel'},\n move: {name: 'pointermove'},\n end: {name: 'pointerup'},\n};\n\nexport interface PointerSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type PointerSensorProps = SensorProps;\n\nexport class PointerSensor extends AbstractPointerSensor {\n constructor(props: PointerSensorProps) {\n const {event} = props;\n // Pointer events stop firing if the target is unmounted while dragging\n // Therefore we attach listeners to the owner document instead\n const listenerTarget = getOwnerDocument(event.target);\n\n super(props, events, listenerTarget);\n }\n\n static activators = [\n {\n eventName: 'onPointerDown' as const,\n handler: (\n {nativeEvent: event}: PointerEvent,\n {onActivation}: PointerSensorOptions\n ) => {\n if (!event.isPrimary || event.button !== 0) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n}\n", "import type {MouseEvent} from 'react';\nimport {getOwnerDocument} from '@dnd-kit/utilities';\n\nimport type {SensorProps} from '../types';\nimport {\n AbstractPointerSensor,\n PointerEventHandlers,\n AbstractPointerSensorOptions,\n} from '../pointer';\n\nconst events: PointerEventHandlers = {\n move: {name: 'mousemove'},\n end: {name: 'mouseup'},\n};\n\nenum MouseButton {\n RightClick = 2,\n}\n\nexport interface MouseSensorOptions extends AbstractPointerSensorOptions {}\n\nexport type MouseSensorProps = SensorProps;\n\nexport class MouseSensor extends AbstractPointerSensor {\n constructor(props: MouseSensorProps) {\n super(props, events, getOwnerDocument(props.event.target));\n }\n\n static activators = [\n {\n eventName: 'onMouseDown' as const,\n handler: (\n {nativeEvent: event}: MouseEvent,\n {onActivation}: MouseSensorOptions\n ) => {\n if (event.button === MouseButton.RightClick) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n}\n", "import type {TouchEvent} from 'react';\n\nimport {\n AbstractPointerSensor,\n PointerSensorProps,\n PointerEventHandlers,\n PointerSensorOptions,\n} from '../pointer';\nimport type {SensorProps} from '../types';\n\nconst events: PointerEventHandlers = {\n cancel: {name: 'touchcancel'},\n move: {name: 'touchmove'},\n end: {name: 'touchend'},\n};\n\nexport interface TouchSensorOptions extends PointerSensorOptions {}\n\nexport type TouchSensorProps = SensorProps;\n\nexport class TouchSensor extends AbstractPointerSensor {\n constructor(props: PointerSensorProps) {\n super(props, events);\n }\n\n static activators = [\n {\n eventName: 'onTouchStart' as const,\n handler: (\n {nativeEvent: event}: TouchEvent,\n {onActivation}: TouchSensorOptions\n ) => {\n const {touches} = event;\n\n if (touches.length > 1) {\n return false;\n }\n\n onActivation?.({event});\n\n return true;\n },\n },\n ];\n\n static setup() {\n // Adding a non-capture and non-passive `touchmove` listener in order\n // to force `event.preventDefault()` calls to work in dynamically added\n // touchmove event handlers. This is required for iOS Safari.\n window.addEventListener(events.move.name, noop, {\n capture: false,\n passive: false,\n });\n\n return function teardown() {\n window.removeEventListener(events.move.name, noop);\n };\n\n // We create a new handler because the teardown function of another sensor\n // could remove our event listener if we use a referentially equal listener.\n function noop() {}\n }\n}\n", "import {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {useInterval, useLazyMemo, usePrevious} from '@dnd-kit/utilities';\n\nimport {getScrollDirectionAndSpeed} from '../../utilities';\nimport {Direction} from '../../types';\nimport type {Coordinates, ClientRect} from '../../types';\n\nexport type ScrollAncestorSortingFn = (ancestors: Element[]) => Element[];\n\nexport enum AutoScrollActivator {\n Pointer,\n DraggableRect,\n}\n\nexport interface Options {\n acceleration?: number;\n activator?: AutoScrollActivator;\n canScroll?: CanScroll;\n enabled?: boolean;\n interval?: number;\n layoutShiftCompensation?:\n | boolean\n | {\n x: boolean;\n y: boolean;\n };\n order?: TraversalOrder;\n threshold?: {\n x: number;\n y: number;\n };\n}\n\ninterface Arguments extends Options {\n draggingRect: ClientRect | null;\n enabled: boolean;\n pointerCoordinates: Coordinates | null;\n scrollableAncestors: Element[];\n scrollableAncestorRects: ClientRect[];\n delta: Coordinates;\n}\n\nexport type CanScroll = (element: Element) => boolean;\n\nexport enum TraversalOrder {\n TreeOrder,\n ReversedTreeOrder,\n}\n\ninterface ScrollDirection {\n x: 0 | Direction;\n y: 0 | Direction;\n}\n\nexport function useAutoScroller({\n acceleration,\n activator = AutoScrollActivator.Pointer,\n canScroll,\n draggingRect,\n enabled,\n interval = 5,\n order = TraversalOrder.TreeOrder,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n delta,\n threshold,\n}: Arguments) {\n const scrollIntent = useScrollIntent({delta, disabled: !enabled});\n const [setAutoScrollInterval, clearAutoScrollInterval] = useInterval();\n const scrollSpeed = useRef({x: 0, y: 0});\n const scrollDirection = useRef({x: 0, y: 0});\n const rect = useMemo(() => {\n switch (activator) {\n case AutoScrollActivator.Pointer:\n return pointerCoordinates\n ? {\n top: pointerCoordinates.y,\n bottom: pointerCoordinates.y,\n left: pointerCoordinates.x,\n right: pointerCoordinates.x,\n }\n : null;\n case AutoScrollActivator.DraggableRect:\n return draggingRect;\n }\n }, [activator, draggingRect, pointerCoordinates]);\n const scrollContainerRef = useRef(null);\n const autoScroll = useCallback(() => {\n const scrollContainer = scrollContainerRef.current;\n\n if (!scrollContainer) {\n return;\n }\n\n const scrollLeft = scrollSpeed.current.x * scrollDirection.current.x;\n const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;\n\n scrollContainer.scrollBy(scrollLeft, scrollTop);\n }, []);\n const sortedScrollableAncestors = useMemo(\n () =>\n order === TraversalOrder.TreeOrder\n ? [...scrollableAncestors].reverse()\n : scrollableAncestors,\n [order, scrollableAncestors]\n );\n\n useEffect(\n () => {\n if (!enabled || !scrollableAncestors.length || !rect) {\n clearAutoScrollInterval();\n return;\n }\n\n for (const scrollContainer of sortedScrollableAncestors) {\n if (canScroll?.(scrollContainer) === false) {\n continue;\n }\n\n const index = scrollableAncestors.indexOf(scrollContainer);\n const scrollContainerRect = scrollableAncestorRects[index];\n\n if (!scrollContainerRect) {\n continue;\n }\n\n const {direction, speed} = getScrollDirectionAndSpeed(\n scrollContainer,\n scrollContainerRect,\n rect,\n acceleration,\n threshold\n );\n\n for (const axis of ['x', 'y'] as const) {\n if (!scrollIntent[axis][direction[axis] as Direction]) {\n speed[axis] = 0;\n direction[axis] = 0;\n }\n }\n\n if (speed.x > 0 || speed.y > 0) {\n clearAutoScrollInterval();\n\n scrollContainerRef.current = scrollContainer;\n setAutoScrollInterval(autoScroll, interval);\n\n scrollSpeed.current = speed;\n scrollDirection.current = direction;\n\n return;\n }\n }\n\n scrollSpeed.current = {x: 0, y: 0};\n scrollDirection.current = {x: 0, y: 0};\n clearAutoScrollInterval();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n acceleration,\n autoScroll,\n canScroll,\n clearAutoScrollInterval,\n enabled,\n interval,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(rect),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(scrollIntent),\n setAutoScrollInterval,\n scrollableAncestors,\n sortedScrollableAncestors,\n scrollableAncestorRects,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n ]\n );\n}\n\ninterface ScrollIntent {\n x: Record;\n y: Record;\n}\n\nconst defaultScrollIntent: ScrollIntent = {\n x: {[Direction.Backward]: false, [Direction.Forward]: false},\n y: {[Direction.Backward]: false, [Direction.Forward]: false},\n};\n\nfunction useScrollIntent({\n delta,\n disabled,\n}: {\n delta: Coordinates;\n disabled: boolean;\n}): ScrollIntent {\n const previousDelta = usePrevious(delta);\n\n return useLazyMemo(\n (previousIntent) => {\n if (disabled || !previousDelta || !previousIntent) {\n // Reset scroll intent tracking when auto-scrolling is disabled\n return defaultScrollIntent;\n }\n\n const direction = {\n x: Math.sign(delta.x - previousDelta.x),\n y: Math.sign(delta.y - previousDelta.y),\n };\n\n // Keep track of the user intent to scroll in each direction for both axis\n return {\n x: {\n [Direction.Backward]:\n previousIntent.x[Direction.Backward] || direction.x === -1,\n [Direction.Forward]:\n previousIntent.x[Direction.Forward] || direction.x === 1,\n },\n y: {\n [Direction.Backward]:\n previousIntent.y[Direction.Backward] || direction.y === -1,\n [Direction.Forward]:\n previousIntent.y[Direction.Forward] || direction.y === 1,\n },\n };\n },\n [disabled, delta, previousDelta]\n );\n}\n", "import {useLazyMemo} from '@dnd-kit/utilities';\n\nimport type {DraggableNode, DraggableNodes} from '../../store';\nimport type {UniqueIdentifier} from '../../types';\n\nexport function useCachedNode(\n draggableNodes: DraggableNodes,\n id: UniqueIdentifier | null\n): DraggableNode['node']['current'] {\n const draggableNode = id != null ? draggableNodes.get(id) : undefined;\n const node = draggableNode ? draggableNode.node.current : null;\n\n return useLazyMemo(\n (cachedNode) => {\n if (id == null) {\n return null;\n }\n\n // In some cases, the draggable node can unmount while dragging\n // This is the case for virtualized lists. In those situations,\n // we fall back to the last known value for that node.\n return node ?? cachedNode ?? null;\n },\n [node, id]\n );\n}\n", "import {useMemo} from 'react';\n\nimport type {SensorActivatorFunction, SensorDescriptor} from '../../sensors';\nimport type {\n SyntheticListener,\n SyntheticListeners,\n} from './useSyntheticListeners';\n\nexport function useCombineActivators(\n sensors: SensorDescriptor[],\n getSyntheticHandler: (\n handler: SensorActivatorFunction,\n sensor: SensorDescriptor\n ) => SyntheticListener['handler']\n): SyntheticListeners {\n return useMemo(\n () =>\n sensors.reduce((accumulator, sensor) => {\n const {sensor: Sensor} = sensor;\n\n const sensorActivators = Sensor.activators.map((activator) => ({\n eventName: activator.eventName,\n handler: getSyntheticHandler(activator.handler, sensor),\n }));\n\n return [...accumulator, ...sensorActivators];\n }, []),\n [sensors, getSyntheticHandler]\n );\n}\n", "import {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLatestValue, useLazyMemo} from '@dnd-kit/utilities';\n\nimport {Rect} from '../../utilities/rect';\nimport type {DroppableContainer, RectMap} from '../../store/types';\nimport type {ClientRect, UniqueIdentifier} from '../../types';\n\ninterface Arguments {\n dragging: boolean;\n dependencies: any[];\n config: DroppableMeasuring;\n}\n\nexport enum MeasuringStrategy {\n Always,\n BeforeDragging,\n WhileDragging,\n}\n\nexport enum MeasuringFrequency {\n Optimized = 'optimized',\n}\n\ntype MeasuringFunction = (element: HTMLElement) => ClientRect;\n\nexport interface DroppableMeasuring {\n measure: MeasuringFunction;\n strategy: MeasuringStrategy;\n frequency: MeasuringFrequency | number;\n}\n\nconst defaultValue: RectMap = new Map();\n\nexport function useDroppableMeasuring(\n containers: DroppableContainer[],\n {dragging, dependencies, config}: Arguments\n) {\n const [queue, setQueue] = useState(null);\n const {frequency, measure, strategy} = config;\n const containersRef = useRef(containers);\n const disabled = isDisabled();\n const disabledRef = useLatestValue(disabled);\n const measureDroppableContainers = useCallback(\n (ids: UniqueIdentifier[] = []) => {\n if (disabledRef.current) {\n return;\n }\n\n setQueue((value) => {\n if (value === null) {\n return ids;\n }\n\n return value.concat(ids.filter((id) => !value.includes(id)));\n });\n },\n [disabledRef]\n );\n const timeoutId = useRef(null);\n const droppableRects = useLazyMemo(\n (previousValue) => {\n if (disabled && !dragging) {\n return defaultValue;\n }\n\n if (\n !previousValue ||\n previousValue === defaultValue ||\n containersRef.current !== containers ||\n queue != null\n ) {\n const map: RectMap = new Map();\n\n for (let container of containers) {\n if (!container) {\n continue;\n }\n\n if (\n queue &&\n queue.length > 0 &&\n !queue.includes(container.id) &&\n container.rect.current\n ) {\n // This container does not need to be re-measured\n map.set(container.id, container.rect.current);\n continue;\n }\n\n const node = container.node.current;\n const rect = node ? new Rect(measure(node), node) : null;\n\n container.rect.current = rect;\n\n if (rect) {\n map.set(container.id, rect);\n }\n }\n\n return map;\n }\n\n return previousValue;\n },\n [containers, queue, dragging, disabled, measure]\n );\n\n useEffect(() => {\n containersRef.current = containers;\n }, [containers]);\n\n useEffect(\n () => {\n if (disabled) {\n return;\n }\n\n measureDroppableContainers();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dragging, disabled]\n );\n\n useEffect(\n () => {\n if (queue && queue.length > 0) {\n setQueue(null);\n }\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(queue)]\n );\n\n useEffect(\n () => {\n if (\n disabled ||\n typeof frequency !== 'number' ||\n timeoutId.current !== null\n ) {\n return;\n }\n\n timeoutId.current = setTimeout(() => {\n measureDroppableContainers();\n timeoutId.current = null;\n }, frequency);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [frequency, disabled, measureDroppableContainers, ...dependencies]\n );\n\n return {\n droppableRects,\n measureDroppableContainers,\n measuringScheduled: queue != null,\n };\n\n function isDisabled() {\n switch (strategy) {\n case MeasuringStrategy.Always:\n return false;\n case MeasuringStrategy.BeforeDragging:\n return dragging;\n default:\n return !dragging;\n }\n }\n}\n", "import {useLazyMemo} from '@dnd-kit/utilities';\n\ntype AnyFunction = (...args: any) => any;\n\nexport function useInitialValue<\n T,\n U extends AnyFunction | undefined = undefined\n>(\n value: T | null,\n computeFn?: U\n): U extends AnyFunction ? ReturnType | null : T | null {\n return useLazyMemo(\n (previousValue) => {\n if (!value) {\n return null;\n }\n\n if (previousValue) {\n return previousValue;\n }\n\n return typeof computeFn === 'function' ? computeFn(value) : value;\n },\n [computeFn, value]\n );\n}\n", "import type {ClientRect} from '../../types';\nimport {useInitialValue} from './useInitialValue';\n\nexport function useInitialRect(\n node: HTMLElement | null,\n measure: (node: HTMLElement) => ClientRect\n) {\n return useInitialValue(node, measure);\n}\n", "import {useEffect, useMemo} from 'react';\nimport {useEvent} from '@dnd-kit/utilities';\n\ninterface Arguments {\n callback: MutationCallback;\n disabled?: boolean;\n}\n\n/**\n * Returns a new MutationObserver instance.\n * If `MutationObserver` is undefined in the execution environment, returns `undefined`.\n */\nexport function useMutationObserver({callback, disabled}: Arguments) {\n const handleMutations = useEvent(callback);\n const mutationObserver = useMemo(() => {\n if (\n disabled ||\n typeof window === 'undefined' ||\n typeof window.MutationObserver === 'undefined'\n ) {\n return undefined;\n }\n\n const {MutationObserver} = window;\n\n return new MutationObserver(handleMutations);\n }, [handleMutations, disabled]);\n\n useEffect(() => {\n return () => mutationObserver?.disconnect();\n }, [mutationObserver]);\n\n return mutationObserver;\n}\n", "import {useEffect, useMemo} from 'react';\nimport {useEvent} from '@dnd-kit/utilities';\n\ninterface Arguments {\n callback: ResizeObserverCallback;\n disabled?: boolean;\n}\n\n/**\n * Returns a new ResizeObserver instance bound to the `onResize` callback.\n * If `ResizeObserver` is undefined in the execution environment, returns `undefined`.\n */\nexport function useResizeObserver({callback, disabled}: Arguments) {\n const handleResize = useEvent(callback);\n const resizeObserver = useMemo(\n () => {\n if (\n disabled ||\n typeof window === 'undefined' ||\n typeof window.ResizeObserver === 'undefined'\n ) {\n return undefined;\n }\n\n const {ResizeObserver} = window;\n\n return new ResizeObserver(handleResize);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [disabled]\n );\n\n useEffect(() => {\n return () => resizeObserver?.disconnect();\n }, [resizeObserver]);\n\n return resizeObserver;\n}\n", "import {useState} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {getClientRect, Rect} from '../../utilities';\n\nimport {useMutationObserver} from './useMutationObserver';\nimport {useResizeObserver} from './useResizeObserver';\n\nfunction defaultMeasure(element: HTMLElement) {\n return new Rect(getClientRect(element), element);\n}\n\nexport function useRect(\n element: HTMLElement | null,\n measure: (element: HTMLElement) => ClientRect = defaultMeasure,\n fallbackRect?: ClientRect | null\n) {\n const [rect, setRect] = useState(null);\n\n function measureRect() {\n setRect((currentRect): ClientRect | null => {\n if (!element) {\n return null;\n }\n \n if (element.isConnected === false) {\n // Fall back to last rect we measured if the element is\n // no longer connected to the DOM.\n return currentRect ?? fallbackRect ?? null;\n }\n \n const newRect = measure(element);\n \n if (JSON.stringify(currentRect) === JSON.stringify(newRect)) {\n return currentRect;\n }\n \n return newRect;\n });\n }\n \n const mutationObserver = useMutationObserver({\n callback(records) {\n if (!element) {\n return;\n }\n\n for (const record of records) {\n const {type, target} = record;\n\n if (\n type === 'childList' &&\n target instanceof HTMLElement &&\n target.contains(element)\n ) {\n measureRect();\n break;\n }\n }\n },\n });\n const resizeObserver = useResizeObserver({callback: measureRect});\n\n useIsomorphicLayoutEffect(() => {\n measureRect();\n\n if (element) {\n resizeObserver?.observe(element);\n mutationObserver?.observe(document.body, {\n childList: true,\n subtree: true,\n });\n } else {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n }\n }, [element]);\n\n return rect;\n}\n", "import type {ClientRect} from '../../types';\nimport {getRectDelta} from '../../utilities';\n\nimport {useInitialValue} from './useInitialValue';\n\nexport function useRectDelta(rect: ClientRect | null) {\n const initialRect = useInitialValue(rect);\n\n return getRectDelta(rect, initialRect);\n}\n", "import {useEffect, useRef} from 'react';\nimport {useLazyMemo} from '@dnd-kit/utilities';\n\nimport {getScrollableAncestors} from '../../utilities';\n\nconst defaultValue: Element[] = [];\n\nexport function useScrollableAncestors(node: HTMLElement | null) {\n const previousNode = useRef(node);\n\n const ancestors = useLazyMemo(\n (previousValue) => {\n if (!node) {\n return defaultValue;\n }\n\n if (\n previousValue &&\n previousValue !== defaultValue &&\n node &&\n previousNode.current &&\n node.parentNode === previousNode.current.parentNode\n ) {\n return previousValue;\n }\n\n return getScrollableAncestors(node);\n },\n [node]\n );\n\n useEffect(() => {\n previousNode.current = node;\n }, [node]);\n\n return ancestors;\n}\n", "import {useState, useCallback, useMemo, useRef, useEffect} from 'react';\nimport {add} from '@dnd-kit/utilities';\n\nimport {\n defaultCoordinates,\n getScrollableElement,\n getScrollCoordinates,\n getScrollOffsets,\n} from '../../utilities';\nimport type {Coordinates} from '../../types';\n\ntype ScrollCoordinates = Map;\n\nexport function useScrollOffsets(elements: Element[]): Coordinates {\n const [\n scrollCoordinates,\n setScrollCoordinates,\n ] = useState(null);\n const prevElements = useRef(elements);\n\n // To-do: Throttle the handleScroll callback\n const handleScroll = useCallback((event: Event) => {\n const scrollingElement = getScrollableElement(event.target);\n\n if (!scrollingElement) {\n return;\n }\n\n setScrollCoordinates((scrollCoordinates) => {\n if (!scrollCoordinates) {\n return null;\n }\n\n scrollCoordinates.set(\n scrollingElement,\n getScrollCoordinates(scrollingElement)\n );\n\n return new Map(scrollCoordinates);\n });\n }, []);\n\n useEffect(() => {\n const previousElements = prevElements.current;\n\n if (elements !== previousElements) {\n cleanup(previousElements);\n\n const entries = elements\n .map((element) => {\n const scrollableElement = getScrollableElement(element);\n\n if (scrollableElement) {\n scrollableElement.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n\n return [\n scrollableElement,\n getScrollCoordinates(scrollableElement),\n ] as const;\n }\n\n return null;\n })\n .filter(\n (\n entry\n ): entry is [\n HTMLElement | (Window & typeof globalThis),\n Coordinates\n ] => entry != null\n );\n\n setScrollCoordinates(entries.length ? new Map(entries) : null);\n\n prevElements.current = elements;\n }\n\n return () => {\n cleanup(elements);\n cleanup(previousElements);\n };\n\n function cleanup(elements: Element[]) {\n elements.forEach((element) => {\n const scrollableElement = getScrollableElement(element);\n\n scrollableElement?.removeEventListener('scroll', handleScroll);\n });\n }\n }, [handleScroll, elements]);\n\n return useMemo(() => {\n if (elements.length) {\n return scrollCoordinates\n ? Array.from(scrollCoordinates.values()).reduce(\n (acc, coordinates) => add(acc, coordinates),\n defaultCoordinates\n )\n : getScrollOffsets(elements);\n }\n\n return defaultCoordinates;\n }, [elements, scrollCoordinates]);\n}\n", "import {useEffect, useRef} from 'react';\nimport {Coordinates, subtract} from '@dnd-kit/utilities';\n\nimport {defaultCoordinates} from '../../utilities';\n\nexport function useScrollOffsetsDelta(\n scrollOffsets: Coordinates,\n dependencies: any[] = []\n) {\n const initialScrollOffsets = useRef(null);\n\n useEffect(\n () => {\n initialScrollOffsets.current = null;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n dependencies\n );\n\n useEffect(() => {\n const hasScrollOffsets = scrollOffsets !== defaultCoordinates;\n\n if (hasScrollOffsets && !initialScrollOffsets.current) {\n initialScrollOffsets.current = scrollOffsets;\n }\n\n if (!hasScrollOffsets && initialScrollOffsets.current) {\n initialScrollOffsets.current = null;\n }\n }, [scrollOffsets]);\n\n return initialScrollOffsets.current\n ? subtract(scrollOffsets, initialScrollOffsets.current)\n : defaultCoordinates;\n}\n", "import {useEffect} from 'react';\nimport {canUseDOM} from '@dnd-kit/utilities';\n\nimport type {SensorDescriptor} from '../../sensors';\n\nexport function useSensorSetup(sensors: SensorDescriptor[]) {\n useEffect(\n () => {\n if (!canUseDOM) {\n return;\n }\n\n const teardownFns = sensors.map(({sensor}) => sensor.setup?.());\n\n return () => {\n for (const teardown of teardownFns) {\n teardown?.();\n }\n };\n },\n // TO-DO: Sensors length could theoretically change which would not be a valid dependency\n // eslint-disable-next-line react-hooks/exhaustive-deps\n sensors.map(({sensor}) => sensor)\n );\n}\n", "import {useMemo} from 'react';\n\nimport type {SyntheticEventName, UniqueIdentifier} from '../../types';\n\nexport type SyntheticListener = {\n eventName: SyntheticEventName;\n handler: (event: React.SyntheticEvent, id: UniqueIdentifier) => void;\n};\n\nexport type SyntheticListeners = SyntheticListener[];\n\nexport type SyntheticListenerMap = Record;\n\nexport function useSyntheticListeners(\n listeners: SyntheticListeners,\n id: UniqueIdentifier\n): SyntheticListenerMap {\n return useMemo(() => {\n return listeners.reduce(\n (acc, {eventName, handler}) => {\n acc[eventName] = (event: React.SyntheticEvent) => {\n handler(event, id);\n };\n\n return acc;\n },\n {} as SyntheticListenerMap\n );\n }, [listeners, id]);\n}\n", "import {useMemo} from 'react';\n\nimport {getWindowClientRect} from '../../utilities/rect';\n\nexport function useWindowRect(element: typeof window | null) {\n return useMemo(() => (element ? getWindowClientRect(element) : null), [\n element,\n ]);\n}\n", "import {useState} from 'react';\nimport {getWindow, useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport type {ClientRect} from '../../types';\nimport {Rect, getClientRect} from '../../utilities/rect';\nimport {isDocumentScrollingElement} from '../../utilities';\n\nimport {useResizeObserver} from './useResizeObserver';\nimport {useWindowRect} from './useWindowRect';\n\nconst defaultValue: Rect[] = [];\n\nexport function useRects(\n elements: Element[],\n measure: (element: Element) => ClientRect = getClientRect\n): ClientRect[] {\n const [firstElement] = elements;\n const windowRect = useWindowRect(\n firstElement ? getWindow(firstElement) : null\n );\n const [rects, setRects] = useState(defaultValue);\n\n function measureRects() {\n setRects(() => {\n if (!elements.length) {\n return defaultValue;\n }\n\n return elements.map((element) =>\n isDocumentScrollingElement(element)\n ? (windowRect as ClientRect)\n : new Rect(measure(element), element)\n );\n });\n }\n\n const resizeObserver = useResizeObserver({callback: measureRects});\n\n useIsomorphicLayoutEffect(() => {\n resizeObserver?.disconnect();\n measureRects();\n elements.forEach((element) => resizeObserver?.observe(element));\n }, [elements]);\n\n return rects;\n}\n", "import {isHTMLElement} from '@dnd-kit/utilities';\n\nexport function getMeasurableNode(\n node: HTMLElement | undefined | null\n): HTMLElement | null {\n if (!node) {\n return null;\n }\n\n if (node.children.length > 1) {\n return node;\n }\n const firstChild = node.children[0];\n\n return isHTMLElement(firstChild) ? firstChild : node;\n}\n", "import {useMemo, useCallback, useState} from 'react';\nimport {isHTMLElement, useNodeRef} from '@dnd-kit/utilities';\n\nimport {useResizeObserver} from './useResizeObserver';\nimport {getMeasurableNode} from '../../utilities/nodes';\nimport type {PublicContextDescriptor} from '../../store';\nimport type {ClientRect} from '../../types';\n\ninterface Arguments {\n measure(element: HTMLElement): ClientRect;\n}\n\nexport function useDragOverlayMeasuring({\n measure,\n}: Arguments): PublicContextDescriptor['dragOverlay'] {\n const [rect, setRect] = useState(null);\n const handleResize = useCallback(\n (entries: ResizeObserverEntry[]) => {\n for (const {target} of entries) {\n if (isHTMLElement(target)) {\n setRect((rect) => {\n const newRect = measure(target);\n\n return rect\n ? {...rect, width: newRect.width, height: newRect.height}\n : newRect;\n });\n break;\n }\n }\n },\n [measure]\n );\n const resizeObserver = useResizeObserver({callback: handleResize});\n const handleNodeChange = useCallback(\n (element) => {\n const node = getMeasurableNode(element);\n\n resizeObserver?.disconnect();\n\n if (node) {\n resizeObserver?.observe(node);\n }\n\n setRect(node ? measure(node) : null);\n },\n [measure, resizeObserver]\n );\n const [nodeRef, setRef] = useNodeRef(handleNodeChange);\n\n return useMemo(\n () => ({\n nodeRef,\n rect,\n setRef,\n }),\n [rect, nodeRef, setRef]\n );\n}\n", "import type {DeepRequired} from '@dnd-kit/utilities';\n\nimport type {DataRef} from '../../store/types';\nimport {KeyboardSensor, PointerSensor} from '../../sensors';\nimport {MeasuringStrategy, MeasuringFrequency} from '../../hooks/utilities';\nimport {\n getClientRect,\n getTransformAgnosticClientRect,\n} from '../../utilities/rect';\n\nimport type {MeasuringConfiguration} from './types';\n\nexport const defaultSensors = [\n {sensor: PointerSensor, options: {}},\n {sensor: KeyboardSensor, options: {}},\n];\n\nexport const defaultData: DataRef = {current: {}};\n\nexport const defaultMeasuringConfiguration: DeepRequired = {\n draggable: {\n measure: getTransformAgnosticClientRect,\n },\n droppable: {\n measure: getTransformAgnosticClientRect,\n strategy: MeasuringStrategy.WhileDragging,\n frequency: MeasuringFrequency.Optimized,\n },\n dragOverlay: {\n measure: getClientRect,\n },\n};\n", "import type {UniqueIdentifier} from '../types';\nimport type {DroppableContainer} from './types';\n\ntype Identifier = UniqueIdentifier | null | undefined;\n\nexport class DroppableContainersMap extends Map<\n UniqueIdentifier,\n DroppableContainer\n> {\n get(id: Identifier) {\n return id != null ? super.get(id) ?? undefined : undefined;\n }\n\n toArray(): DroppableContainer[] {\n return Array.from(this.values());\n }\n\n getEnabled(): DroppableContainer[] {\n return this.toArray().filter(({disabled}) => !disabled);\n }\n\n getNodeFor(id: Identifier) {\n return this.get(id)?.node.current ?? undefined;\n }\n}\n", "import {createContext} from 'react';\n\nimport {noop} from '../utilities/other';\nimport {defaultMeasuringConfiguration} from '../components/DndContext/defaults';\nimport {DroppableContainersMap} from './constructors';\nimport type {InternalContextDescriptor, PublicContextDescriptor} from './types';\n\nexport const defaultPublicContext: PublicContextDescriptor = {\n activatorEvent: null,\n active: null,\n activeNode: null,\n activeNodeRect: null,\n collisions: null,\n containerNodeRect: null,\n draggableNodes: new Map(),\n droppableRects: new Map(),\n droppableContainers: new DroppableContainersMap(),\n over: null,\n dragOverlay: {\n nodeRef: {\n current: null,\n },\n rect: null,\n setRef: noop,\n },\n scrollableAncestors: [],\n scrollableAncestorRects: [],\n measuringConfiguration: defaultMeasuringConfiguration,\n measureDroppableContainers: noop,\n windowRect: null,\n measuringScheduled: false,\n};\n\nexport const defaultInternalContext: InternalContextDescriptor = {\n activatorEvent: null,\n activators: [],\n active: null,\n activeNodeRect: null,\n ariaDescribedById: {\n draggable: '',\n },\n dispatch: noop,\n draggableNodes: new Map(),\n over: null,\n measureDroppableContainers: noop,\n};\n\nexport const InternalContext = createContext(\n defaultInternalContext\n);\n\nexport const PublicContext = createContext(\n defaultPublicContext\n);\n", "import {Action, Actions} from './actions';\nimport {DroppableContainersMap} from './constructors';\nimport type {State} from './types';\n\nexport function getInitialState(): State {\n return {\n draggable: {\n active: null,\n initialCoordinates: {x: 0, y: 0},\n nodes: new Map(),\n translate: {x: 0, y: 0},\n },\n droppable: {\n containers: new DroppableContainersMap(),\n },\n };\n}\n\nexport function reducer(state: State, action: Actions): State {\n switch (action.type) {\n case Action.DragStart:\n return {\n ...state,\n draggable: {\n ...state.draggable,\n initialCoordinates: action.initialCoordinates,\n active: action.active,\n },\n };\n case Action.DragMove:\n if (state.draggable.active == null) {\n return state;\n }\n\n return {\n ...state,\n draggable: {\n ...state.draggable,\n translate: {\n x: action.coordinates.x - state.draggable.initialCoordinates.x,\n y: action.coordinates.y - state.draggable.initialCoordinates.y,\n },\n },\n };\n case Action.DragEnd:\n case Action.DragCancel:\n return {\n ...state,\n draggable: {\n ...state.draggable,\n active: null,\n initialCoordinates: {x: 0, y: 0},\n translate: {x: 0, y: 0},\n },\n };\n\n case Action.RegisterDroppable: {\n const {element} = action;\n const {id} = element;\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, element);\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n case Action.SetDroppableDisabled: {\n const {id, key, disabled} = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.set(id, {\n ...element,\n disabled,\n });\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n case Action.UnregisterDroppable: {\n const {id, key} = action;\n const element = state.droppable.containers.get(id);\n\n if (!element || key !== element.key) {\n return state;\n }\n\n const containers = new DroppableContainersMap(state.droppable.containers);\n containers.delete(id);\n\n return {\n ...state,\n droppable: {\n ...state.droppable,\n containers,\n },\n };\n }\n\n default: {\n return state;\n }\n }\n}\n", "import {useContext, useEffect} from 'react';\nimport {\n findFirstFocusableNode,\n isKeyboardEvent,\n usePrevious,\n} from '@dnd-kit/utilities';\n\nimport {InternalContext} from '../../../store';\n\ninterface Props {\n disabled: boolean;\n}\n\nexport function RestoreFocus({disabled}: Props) {\n const {active, activatorEvent, draggableNodes} = useContext(InternalContext);\n const previousActivatorEvent = usePrevious(activatorEvent);\n const previousActiveId = usePrevious(active?.id);\n\n // Restore keyboard focus on the activator node\n useEffect(() => {\n if (disabled) {\n return;\n }\n\n if (!activatorEvent && previousActivatorEvent && previousActiveId != null) {\n if (!isKeyboardEvent(previousActivatorEvent)) {\n return;\n }\n\n if (document.activeElement === previousActivatorEvent.target) {\n // No need to restore focus\n return;\n }\n\n const draggableNode = draggableNodes.get(previousActiveId);\n\n if (!draggableNode) {\n return;\n }\n\n const {activatorNode, node} = draggableNode;\n\n if (!activatorNode.current && !node.current) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const element of [activatorNode.current, node.current]) {\n if (!element) {\n continue;\n }\n\n const focusableNode = findFirstFocusableNode(element);\n\n if (focusableNode) {\n focusableNode.focus();\n break;\n }\n }\n });\n }\n }, [\n activatorEvent,\n disabled,\n draggableNodes,\n previousActiveId,\n previousActivatorEvent,\n ]);\n\n return null;\n}\n", "import type {FirstArgument, Transform} from '@dnd-kit/utilities';\n\nimport type {Modifiers, Modifier} from './types';\n\nexport function applyModifiers(\n modifiers: Modifiers | undefined,\n {transform, ...args}: FirstArgument\n): Transform {\n return modifiers?.length\n ? modifiers.reduce((accumulator, modifier) => {\n return modifier({\n transform: accumulator,\n ...args,\n });\n }, transform)\n : transform;\n}\n", "import {useMemo} from 'react';\nimport type {DeepRequired} from '@dnd-kit/utilities';\n\nimport {defaultMeasuringConfiguration} from '../defaults';\nimport type {MeasuringConfiguration} from '../types';\n\nexport function useMeasuringConfiguration(\n config: MeasuringConfiguration | undefined\n): DeepRequired {\n return useMemo(\n () => ({\n draggable: {\n ...defaultMeasuringConfiguration.draggable,\n ...config?.draggable,\n },\n droppable: {\n ...defaultMeasuringConfiguration.droppable,\n ...config?.droppable,\n },\n dragOverlay: {\n ...defaultMeasuringConfiguration.dragOverlay,\n ...config?.dragOverlay,\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config?.draggable, config?.droppable, config?.dragOverlay]\n );\n}\n", "import {useRef} from 'react';\nimport {useIsomorphicLayoutEffect} from '@dnd-kit/utilities';\n\nimport {getRectDelta} from '../../../utilities/rect';\nimport {getFirstScrollableAncestor} from '../../../utilities/scroll';\nimport type {ClientRect} from '../../../types';\nimport type {DraggableNode} from '../../../store';\nimport type {MeasuringFunction} from '../types';\n\ninterface Options {\n activeNode: DraggableNode | null | undefined;\n config: boolean | {x: boolean; y: boolean} | undefined;\n initialRect: ClientRect | null;\n measure: MeasuringFunction;\n}\n\nexport function useLayoutShiftScrollCompensation({\n activeNode,\n measure,\n initialRect,\n config = true,\n}: Options) {\n const initialized = useRef(false);\n const {x, y} = typeof config === 'boolean' ? {x: config, y: config} : config;\n\n useIsomorphicLayoutEffect(() => {\n const disabled = !x && !y;\n\n if (disabled || !activeNode) {\n initialized.current = false;\n return;\n }\n\n if (initialized.current || !initialRect) {\n // Return early if layout shift scroll compensation was already attempted\n // or if there is no initialRect to compare to.\n return;\n }\n\n // Get the most up to date node ref for the active draggable\n const node = activeNode?.node.current;\n\n if (!node || node.isConnected === false) {\n // Return early if there is no attached node ref or if the node is\n // disconnected from the document.\n return;\n }\n\n const rect = measure(node);\n const rectDelta = getRectDelta(rect, initialRect);\n\n if (!x) {\n rectDelta.x = 0;\n }\n\n if (!y) {\n rectDelta.y = 0;\n }\n\n // Only perform layout shift scroll compensation once\n initialized.current = true;\n\n if (Math.abs(rectDelta.x) > 0 || Math.abs(rectDelta.y) > 0) {\n const firstScrollableAncestor = getFirstScrollableAncestor(node);\n\n if (firstScrollableAncestor) {\n firstScrollableAncestor.scrollBy({\n top: rectDelta.y,\n left: rectDelta.x,\n });\n }\n }\n }, [activeNode, x, y, initialRect, measure]);\n}\n", "import React, {\n memo,\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {unstable_batchedUpdates} from 'react-dom';\nimport {\n add,\n getEventCoordinates,\n getWindow,\n useLatestValue,\n useIsomorphicLayoutEffect,\n useUniqueId,\n} from '@dnd-kit/utilities';\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {\n Action,\n PublicContext,\n InternalContext,\n PublicContextDescriptor,\n InternalContextDescriptor,\n getInitialState,\n reducer,\n} from '../../store';\nimport {DndMonitorContext, useDndMonitorProvider} from '../DndMonitor';\nimport {\n useAutoScroller,\n useCachedNode,\n useCombineActivators,\n useDragOverlayMeasuring,\n useDroppableMeasuring,\n useInitialRect,\n useRect,\n useRectDelta,\n useRects,\n useScrollableAncestors,\n useScrollOffsets,\n useScrollOffsetsDelta,\n useSensorSetup,\n useWindowRect,\n} from '../../hooks/utilities';\nimport type {AutoScrollOptions, SyntheticListener} from '../../hooks/utilities';\nimport type {\n Sensor,\n SensorContext,\n SensorDescriptor,\n SensorActivatorFunction,\n SensorInstance,\n} from '../../sensors';\nimport {\n adjustScale,\n CollisionDetection,\n defaultCoordinates,\n getAdjustedRect,\n getFirstCollision,\n rectIntersection,\n} from '../../utilities';\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport type {Active, Over} from '../../store/types';\nimport type {\n DragStartEvent,\n DragCancelEvent,\n DragEndEvent,\n DragMoveEvent,\n DragOverEvent,\n UniqueIdentifier,\n DragPendingEvent,\n DragAbortEvent,\n} from '../../types';\nimport {\n Accessibility,\n Announcements,\n RestoreFocus,\n ScreenReaderInstructions,\n} from '../Accessibility';\n\nimport {defaultData, defaultSensors} from './defaults';\nimport {\n useLayoutShiftScrollCompensation,\n useMeasuringConfiguration,\n} from './hooks';\nimport type {MeasuringConfiguration} from './types';\n\nexport interface Props {\n id?: string;\n accessibility?: {\n announcements?: Announcements;\n container?: Element;\n restoreFocus?: boolean;\n screenReaderInstructions?: ScreenReaderInstructions;\n };\n autoScroll?: boolean | AutoScrollOptions;\n cancelDrop?: CancelDrop;\n children?: React.ReactNode;\n collisionDetection?: CollisionDetection;\n measuring?: MeasuringConfiguration;\n modifiers?: Modifiers;\n sensors?: SensorDescriptor[];\n onDragAbort?(event: DragAbortEvent): void;\n onDragPending?(event: DragPendingEvent): void;\n onDragStart?(event: DragStartEvent): void;\n onDragMove?(event: DragMoveEvent): void;\n onDragOver?(event: DragOverEvent): void;\n onDragEnd?(event: DragEndEvent): void;\n onDragCancel?(event: DragCancelEvent): void;\n}\n\nexport interface CancelDropArguments extends DragEndEvent {}\n\nexport type CancelDrop = (\n args: CancelDropArguments\n) => boolean | Promise;\n\ninterface DndEvent extends Event {\n dndKit?: {\n capturedBy: Sensor;\n };\n}\n\nexport const ActiveDraggableContext = createContext({\n ...defaultCoordinates,\n scaleX: 1,\n scaleY: 1,\n});\n\nenum Status {\n Uninitialized,\n Initializing,\n Initialized,\n}\n\nexport const DndContext = memo(function DndContext({\n id,\n accessibility,\n autoScroll = true,\n children,\n sensors = defaultSensors,\n collisionDetection = rectIntersection,\n measuring,\n modifiers,\n ...props\n}: Props) {\n const store = useReducer(reducer, undefined, getInitialState);\n const [state, dispatch] = store;\n const [dispatchMonitorEvent, registerMonitorListener] =\n useDndMonitorProvider();\n const [status, setStatus] = useState(Status.Uninitialized);\n const isInitialized = status === Status.Initialized;\n const {\n draggable: {active: activeId, nodes: draggableNodes, translate},\n droppable: {containers: droppableContainers},\n } = state;\n const node = activeId != null ? draggableNodes.get(activeId) : null;\n const activeRects = useRef({\n initial: null,\n translated: null,\n });\n const active = useMemo(\n () =>\n activeId != null\n ? {\n id: activeId,\n // It's possible for the active node to unmount while dragging\n data: node?.data ?? defaultData,\n rect: activeRects,\n }\n : null,\n [activeId, node]\n );\n const activeRef = useRef(null);\n const [activeSensor, setActiveSensor] = useState(null);\n const [activatorEvent, setActivatorEvent] = useState(null);\n const latestProps = useLatestValue(props, Object.values(props));\n const draggableDescribedById = useUniqueId(`DndDescribedBy`, id);\n const enabledDroppableContainers = useMemo(\n () => droppableContainers.getEnabled(),\n [droppableContainers]\n );\n const measuringConfiguration = useMeasuringConfiguration(measuring);\n const {droppableRects, measureDroppableContainers, measuringScheduled} =\n useDroppableMeasuring(enabledDroppableContainers, {\n dragging: isInitialized,\n dependencies: [translate.x, translate.y],\n config: measuringConfiguration.droppable,\n });\n const activeNode = useCachedNode(draggableNodes, activeId);\n const activationCoordinates = useMemo(\n () => (activatorEvent ? getEventCoordinates(activatorEvent) : null),\n [activatorEvent]\n );\n const autoScrollOptions = getAutoScrollerOptions();\n const initialActiveNodeRect = useInitialRect(\n activeNode,\n measuringConfiguration.draggable.measure\n );\n\n useLayoutShiftScrollCompensation({\n activeNode: activeId != null ? draggableNodes.get(activeId) : null,\n config: autoScrollOptions.layoutShiftCompensation,\n initialRect: initialActiveNodeRect,\n measure: measuringConfiguration.draggable.measure,\n });\n\n const activeNodeRect = useRect(\n activeNode,\n measuringConfiguration.draggable.measure,\n initialActiveNodeRect\n );\n const containerNodeRect = useRect(\n activeNode ? activeNode.parentElement : null\n );\n const sensorContext = useRef({\n activatorEvent: null,\n active: null,\n activeNode,\n collisionRect: null,\n collisions: null,\n droppableRects,\n draggableNodes,\n draggingNode: null,\n draggingNodeRect: null,\n droppableContainers,\n over: null,\n scrollableAncestors: [],\n scrollAdjustedTranslate: null,\n });\n const overNode = droppableContainers.getNodeFor(\n sensorContext.current.over?.id\n );\n const dragOverlay = useDragOverlayMeasuring({\n measure: measuringConfiguration.dragOverlay.measure,\n });\n\n // Use the rect of the drag overlay if it is mounted\n const draggingNode = dragOverlay.nodeRef.current ?? activeNode;\n const draggingNodeRect = isInitialized\n ? dragOverlay.rect ?? activeNodeRect\n : null;\n const usesDragOverlay = Boolean(\n dragOverlay.nodeRef.current && dragOverlay.rect\n );\n // The delta between the previous and new position of the draggable node\n // is only relevant when there is no drag overlay\n const nodeRectDelta = useRectDelta(usesDragOverlay ? null : activeNodeRect);\n\n // Get the window rect of the dragging node\n const windowRect = useWindowRect(\n draggingNode ? getWindow(draggingNode) : null\n );\n\n // Get scrollable ancestors of the dragging node\n const scrollableAncestors = useScrollableAncestors(\n isInitialized ? overNode ?? activeNode : null\n );\n const scrollableAncestorRects = useRects(scrollableAncestors);\n\n // Apply modifiers\n const modifiedTranslate = applyModifiers(modifiers, {\n transform: {\n x: translate.x - nodeRectDelta.x,\n y: translate.y - nodeRectDelta.y,\n scaleX: 1,\n scaleY: 1,\n },\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect,\n over: sensorContext.current.over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect,\n });\n\n const pointerCoordinates = activationCoordinates\n ? add(activationCoordinates, translate)\n : null;\n\n const scrollOffsets = useScrollOffsets(scrollableAncestors);\n // Represents the scroll delta since dragging was initiated\n const scrollAdjustment = useScrollOffsetsDelta(scrollOffsets);\n // Represents the scroll delta since the last time the active node rect was measured\n const activeNodeScrollDelta = useScrollOffsetsDelta(scrollOffsets, [\n activeNodeRect,\n ]);\n\n const scrollAdjustedTranslate = add(modifiedTranslate, scrollAdjustment);\n\n const collisionRect = draggingNodeRect\n ? getAdjustedRect(draggingNodeRect, modifiedTranslate)\n : null;\n\n const collisions =\n active && collisionRect\n ? collisionDetection({\n active,\n collisionRect,\n droppableRects,\n droppableContainers: enabledDroppableContainers,\n pointerCoordinates,\n })\n : null;\n const overId = getFirstCollision(collisions, 'id');\n const [over, setOver] = useState(null);\n\n // When there is no drag overlay used, we need to account for the\n // window scroll delta\n const appliedTranslate = usesDragOverlay\n ? modifiedTranslate\n : add(modifiedTranslate, activeNodeScrollDelta);\n\n const transform = adjustScale(\n appliedTranslate,\n over?.rect ?? null,\n activeNodeRect\n );\n\n const activeSensorRef = useRef(null);\n const instantiateSensor = useCallback(\n (\n event: React.SyntheticEvent,\n {sensor: Sensor, options}: SensorDescriptor\n ) => {\n if (activeRef.current == null) {\n return;\n }\n\n const activeNode = draggableNodes.get(activeRef.current);\n\n if (!activeNode) {\n return;\n }\n\n const activatorEvent = event.nativeEvent;\n\n const sensorInstance = new Sensor({\n active: activeRef.current,\n activeNode,\n event: activatorEvent,\n options,\n // Sensors need to be instantiated with refs for arguments that change over time\n // otherwise they are frozen in time with the stale arguments\n context: sensorContext,\n onAbort(id) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragAbort} = latestProps.current;\n const event: DragAbortEvent = {id};\n onDragAbort?.(event);\n dispatchMonitorEvent({type: 'onDragAbort', event});\n },\n onPending(id, constraint, initialCoordinates, offset) {\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragPending} = latestProps.current;\n const event: DragPendingEvent = {\n id,\n constraint,\n initialCoordinates,\n offset,\n };\n\n onDragPending?.(event);\n dispatchMonitorEvent({type: 'onDragPending', event});\n },\n onStart(initialCoordinates) {\n const id = activeRef.current;\n\n if (id == null) {\n return;\n }\n\n const draggableNode = draggableNodes.get(id);\n\n if (!draggableNode) {\n return;\n }\n\n const {onDragStart} = latestProps.current;\n const event: DragStartEvent = {\n activatorEvent,\n active: {id, data: draggableNode.data, rect: activeRects},\n };\n\n unstable_batchedUpdates(() => {\n onDragStart?.(event);\n setStatus(Status.Initializing);\n dispatch({\n type: Action.DragStart,\n initialCoordinates,\n active: id,\n });\n dispatchMonitorEvent({type: 'onDragStart', event});\n setActiveSensor(activeSensorRef.current);\n setActivatorEvent(activatorEvent);\n });\n },\n onMove(coordinates) {\n dispatch({\n type: Action.DragMove,\n coordinates,\n });\n },\n onEnd: createHandler(Action.DragEnd),\n onCancel: createHandler(Action.DragCancel),\n });\n\n activeSensorRef.current = sensorInstance;\n\n function createHandler(type: Action.DragEnd | Action.DragCancel) {\n return async function handler() {\n const {active, collisions, over, scrollAdjustedTranslate} =\n sensorContext.current;\n let event: DragEndEvent | null = null;\n\n if (active && scrollAdjustedTranslate) {\n const {cancelDrop} = latestProps.current;\n\n event = {\n activatorEvent,\n active: active,\n collisions,\n delta: scrollAdjustedTranslate,\n over,\n };\n\n if (type === Action.DragEnd && typeof cancelDrop === 'function') {\n const shouldCancel = await Promise.resolve(cancelDrop(event));\n\n if (shouldCancel) {\n type = Action.DragCancel;\n }\n }\n }\n\n activeRef.current = null;\n\n unstable_batchedUpdates(() => {\n dispatch({type});\n setStatus(Status.Uninitialized);\n setOver(null);\n setActiveSensor(null);\n setActivatorEvent(null);\n activeSensorRef.current = null;\n\n const eventName =\n type === Action.DragEnd ? 'onDragEnd' : 'onDragCancel';\n\n if (event) {\n const handler = latestProps.current[eventName];\n\n handler?.(event);\n dispatchMonitorEvent({type: eventName, event});\n }\n });\n };\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes]\n );\n\n const bindActivatorToSensorInstantiator = useCallback(\n (\n handler: SensorActivatorFunction,\n sensor: SensorDescriptor\n ): SyntheticListener['handler'] => {\n return (event, active) => {\n const nativeEvent = event.nativeEvent as DndEvent;\n const activeDraggableNode = draggableNodes.get(active);\n\n if (\n // Another sensor is already instantiating\n activeRef.current !== null ||\n // No active draggable\n !activeDraggableNode ||\n // Event has already been captured\n nativeEvent.dndKit ||\n nativeEvent.defaultPrevented\n ) {\n return;\n }\n\n const activationContext = {\n active: activeDraggableNode,\n };\n const shouldActivate = handler(\n event,\n sensor.options,\n activationContext\n );\n\n if (shouldActivate === true) {\n nativeEvent.dndKit = {\n capturedBy: sensor.sensor,\n };\n\n activeRef.current = active;\n instantiateSensor(event, sensor);\n }\n };\n },\n [draggableNodes, instantiateSensor]\n );\n\n const activators = useCombineActivators(\n sensors,\n bindActivatorToSensorInstantiator\n );\n\n useSensorSetup(sensors);\n\n useIsomorphicLayoutEffect(() => {\n if (activeNodeRect && status === Status.Initializing) {\n setStatus(Status.Initialized);\n }\n }, [activeNodeRect, status]);\n\n useEffect(\n () => {\n const {onDragMove} = latestProps.current;\n const {active, activatorEvent, collisions, over} = sensorContext.current;\n\n if (!active || !activatorEvent) {\n return;\n }\n\n const event: DragMoveEvent = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y,\n },\n over,\n };\n\n unstable_batchedUpdates(() => {\n onDragMove?.(event);\n dispatchMonitorEvent({type: 'onDragMove', event});\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]\n );\n\n useEffect(\n () => {\n const {\n active,\n activatorEvent,\n collisions,\n droppableContainers,\n scrollAdjustedTranslate,\n } = sensorContext.current;\n\n if (\n !active ||\n activeRef.current == null ||\n !activatorEvent ||\n !scrollAdjustedTranslate\n ) {\n return;\n }\n\n const {onDragOver} = latestProps.current;\n const overContainer = droppableContainers.get(overId);\n const over =\n overContainer && overContainer.rect.current\n ? {\n id: overContainer.id,\n rect: overContainer.rect.current,\n data: overContainer.data,\n disabled: overContainer.disabled,\n }\n : null;\n const event: DragOverEvent = {\n active,\n activatorEvent,\n collisions,\n delta: {\n x: scrollAdjustedTranslate.x,\n y: scrollAdjustedTranslate.y,\n },\n over,\n };\n\n unstable_batchedUpdates(() => {\n setOver(over);\n onDragOver?.(event);\n dispatchMonitorEvent({type: 'onDragOver', event});\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [overId]\n );\n\n useIsomorphicLayoutEffect(() => {\n sensorContext.current = {\n activatorEvent,\n active,\n activeNode,\n collisionRect,\n collisions,\n droppableRects,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate,\n };\n\n activeRects.current = {\n initial: draggingNodeRect,\n translated: collisionRect,\n };\n }, [\n active,\n activeNode,\n collisions,\n collisionRect,\n draggableNodes,\n draggingNode,\n draggingNodeRect,\n droppableRects,\n droppableContainers,\n over,\n scrollableAncestors,\n scrollAdjustedTranslate,\n ]);\n\n useAutoScroller({\n ...autoScrollOptions,\n delta: translate,\n draggingRect: collisionRect,\n pointerCoordinates,\n scrollableAncestors,\n scrollableAncestorRects,\n });\n\n const publicContext = useMemo(() => {\n const context: PublicContextDescriptor = {\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect,\n };\n\n return context;\n }, [\n active,\n activeNode,\n activeNodeRect,\n activatorEvent,\n collisions,\n containerNodeRect,\n dragOverlay,\n draggableNodes,\n droppableContainers,\n droppableRects,\n over,\n measureDroppableContainers,\n scrollableAncestors,\n scrollableAncestorRects,\n measuringConfiguration,\n measuringScheduled,\n windowRect,\n ]);\n\n const internalContext = useMemo(() => {\n const context: InternalContextDescriptor = {\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n ariaDescribedById: {\n draggable: draggableDescribedById,\n },\n dispatch,\n draggableNodes,\n over,\n measureDroppableContainers,\n };\n\n return context;\n }, [\n activatorEvent,\n activators,\n active,\n activeNodeRect,\n dispatch,\n draggableDescribedById,\n draggableNodes,\n over,\n measureDroppableContainers,\n ]);\n\n return (\n \n \n \n \n {children}\n \n \n \n \n \n \n );\n\n function getAutoScrollerOptions() {\n const activeSensorDisablesAutoscroll =\n activeSensor?.autoScrollEnabled === false;\n const autoScrollGloballyDisabled =\n typeof autoScroll === 'object'\n ? autoScroll.enabled === false\n : autoScroll === false;\n const enabled =\n isInitialized &&\n !activeSensorDisablesAutoscroll &&\n !autoScrollGloballyDisabled;\n\n if (typeof autoScroll === 'object') {\n return {\n ...autoScroll,\n enabled,\n };\n }\n\n return {enabled};\n }\n});\n", "import {createContext, useContext, useMemo} from 'react';\nimport {\n Transform,\n useNodeRef,\n useIsomorphicLayoutEffect,\n useLatestValue,\n useUniqueId,\n} from '@dnd-kit/utilities';\n\nimport {InternalContext, Data} from '../store';\nimport type {UniqueIdentifier} from '../types';\nimport {ActiveDraggableContext} from '../components/DndContext';\nimport {useSyntheticListeners, SyntheticListenerMap} from './utilities';\n\nexport interface UseDraggableArguments {\n id: UniqueIdentifier;\n data?: Data;\n disabled?: boolean;\n attributes?: {\n role?: string;\n roleDescription?: string;\n tabIndex?: number;\n };\n}\n\nexport interface DraggableAttributes {\n role: string;\n tabIndex: number;\n 'aria-disabled': boolean;\n 'aria-pressed': boolean | undefined;\n 'aria-roledescription': string;\n 'aria-describedby': string;\n}\n\nexport type DraggableSyntheticListeners = SyntheticListenerMap | undefined;\n\nconst NullContext = createContext(null);\n\nconst defaultRole = 'button';\n\nconst ID_PREFIX = 'Draggable';\n\nexport function useDraggable({\n id,\n data,\n disabled = false,\n attributes,\n}: UseDraggableArguments) {\n const key = useUniqueId(ID_PREFIX);\n const {\n activators,\n activatorEvent,\n active,\n activeNodeRect,\n ariaDescribedById,\n draggableNodes,\n over,\n } = useContext(InternalContext);\n const {\n role = defaultRole,\n roleDescription = 'draggable',\n tabIndex = 0,\n } = attributes ?? {};\n const isDragging = active?.id === id;\n const transform: Transform | null = useContext(\n isDragging ? ActiveDraggableContext : NullContext\n );\n const [node, setNodeRef] = useNodeRef();\n const [activatorNode, setActivatorNodeRef] = useNodeRef();\n const listeners = useSyntheticListeners(activators, id);\n const dataRef = useLatestValue(data);\n\n useIsomorphicLayoutEffect(\n () => {\n draggableNodes.set(id, {id, key, node, activatorNode, data: dataRef});\n\n return () => {\n const node = draggableNodes.get(id);\n\n if (node && node.key === key) {\n draggableNodes.delete(id);\n }\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [draggableNodes, id]\n );\n\n const memoizedAttributes: DraggableAttributes = useMemo(\n () => ({\n role,\n tabIndex,\n 'aria-disabled': disabled,\n 'aria-pressed': isDragging && role === defaultRole ? true : undefined,\n 'aria-roledescription': roleDescription,\n 'aria-describedby': ariaDescribedById.draggable,\n }),\n [\n disabled,\n role,\n tabIndex,\n isDragging,\n roleDescription,\n ariaDescribedById.draggable,\n ]\n );\n\n return {\n active,\n activatorEvent,\n activeNodeRect,\n attributes: memoizedAttributes,\n isDragging,\n listeners: disabled ? undefined : listeners,\n node,\n over,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n };\n}\n", "import {ContextType, useContext} from 'react';\nimport {PublicContext} from '../store';\n\nexport function useDndContext() {\n return useContext(PublicContext);\n}\n\nexport type UseDndContextReturnValue = ContextType;\n", "import {useCallback, useContext, useEffect, useRef} from 'react';\nimport {useLatestValue, useNodeRef, useUniqueId} from '@dnd-kit/utilities';\n\nimport {InternalContext, Action, Data} from '../store';\nimport type {ClientRect, UniqueIdentifier} from '../types';\n\nimport {useResizeObserver} from './utilities';\n\ninterface ResizeObserverConfig {\n /** Whether the ResizeObserver should be disabled entirely */\n disabled?: boolean;\n /** Resize events may affect the layout and position of other droppable containers.\n * Specify an array of `UniqueIdentifier` of droppable containers that should also be re-measured\n * when this droppable container resizes. Specifying an empty array re-measures all droppable containers.\n */\n updateMeasurementsFor?: UniqueIdentifier[];\n /** Represents the debounce timeout between when resize events are observed and when elements are re-measured */\n timeout?: number;\n}\n\nexport interface UseDroppableArguments {\n id: UniqueIdentifier;\n disabled?: boolean;\n data?: Data;\n resizeObserverConfig?: ResizeObserverConfig;\n}\n\nconst ID_PREFIX = 'Droppable';\n\nconst defaultResizeObserverConfig = {\n timeout: 25,\n};\n\nexport function useDroppable({\n data,\n disabled = false,\n id,\n resizeObserverConfig,\n}: UseDroppableArguments) {\n const key = useUniqueId(ID_PREFIX);\n const {active, dispatch, over, measureDroppableContainers} =\n useContext(InternalContext);\n const previous = useRef({disabled});\n const resizeObserverConnected = useRef(false);\n const rect = useRef(null);\n const callbackId = useRef(null);\n const {\n disabled: resizeObserverDisabled,\n updateMeasurementsFor,\n timeout: resizeObserverTimeout,\n } = {\n ...defaultResizeObserverConfig,\n ...resizeObserverConfig,\n };\n const ids = useLatestValue(updateMeasurementsFor ?? id);\n const handleResize = useCallback(\n () => {\n if (!resizeObserverConnected.current) {\n // ResizeObserver invokes the `handleResize` callback as soon as `observe` is called,\n // assuming the element is rendered and displayed.\n resizeObserverConnected.current = true;\n return;\n }\n\n if (callbackId.current != null) {\n clearTimeout(callbackId.current);\n }\n\n callbackId.current = setTimeout(() => {\n measureDroppableContainers(\n Array.isArray(ids.current) ? ids.current : [ids.current]\n );\n callbackId.current = null;\n }, resizeObserverTimeout);\n },\n //eslint-disable-next-line react-hooks/exhaustive-deps\n [resizeObserverTimeout]\n );\n const resizeObserver = useResizeObserver({\n callback: handleResize,\n disabled: resizeObserverDisabled || !active,\n });\n const handleNodeChange = useCallback(\n (newElement: HTMLElement | null, previousElement: HTMLElement | null) => {\n if (!resizeObserver) {\n return;\n }\n\n if (previousElement) {\n resizeObserver.unobserve(previousElement);\n resizeObserverConnected.current = false;\n }\n\n if (newElement) {\n resizeObserver.observe(newElement);\n }\n },\n [resizeObserver]\n );\n const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);\n const dataRef = useLatestValue(data);\n\n useEffect(() => {\n if (!resizeObserver || !nodeRef.current) {\n return;\n }\n\n resizeObserver.disconnect();\n resizeObserverConnected.current = false;\n resizeObserver.observe(nodeRef.current);\n }, [nodeRef, resizeObserver]);\n\n useEffect(\n () => {\n dispatch({\n type: Action.RegisterDroppable,\n element: {\n id,\n key,\n disabled,\n node: nodeRef,\n rect,\n data: dataRef,\n },\n });\n\n return () =>\n dispatch({\n type: Action.UnregisterDroppable,\n key,\n id,\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [id]\n );\n\n useEffect(() => {\n if (disabled !== previous.current.disabled) {\n dispatch({\n type: Action.SetDroppableDisabled,\n id,\n key,\n disabled,\n });\n\n previous.current.disabled = disabled;\n }\n }, [id, key, disabled, dispatch]);\n\n return {\n active,\n rect,\n isOver: over?.id === id,\n node: nodeRef,\n over,\n setNodeRef,\n };\n}\n", "import React, {cloneElement, useState} from 'react';\nimport {useIsomorphicLayoutEffect, usePrevious} from '@dnd-kit/utilities';\n\nimport type {UniqueIdentifier} from '../../../../types';\n\nexport type Animation = (\n key: UniqueIdentifier,\n node: HTMLElement\n) => Promise | void;\n\nexport interface Props {\n animation: Animation;\n children: React.ReactElement | null;\n}\n\nexport function AnimationManager({animation, children}: Props) {\n const [\n clonedChildren,\n setClonedChildren,\n ] = useState(null);\n const [element, setElement] = useState(null);\n const previousChildren = usePrevious(children);\n\n if (!children && !clonedChildren && previousChildren) {\n setClonedChildren(previousChildren);\n }\n\n useIsomorphicLayoutEffect(() => {\n if (!element) {\n return;\n }\n\n const key = clonedChildren?.key;\n const id = clonedChildren?.props.id;\n\n if (key == null || id == null) {\n setClonedChildren(null);\n return;\n }\n\n Promise.resolve(animation(id, element)).then(() => {\n setClonedChildren(null);\n });\n }, [animation, clonedChildren, element]);\n\n return (\n <>\n {children}\n {clonedChildren ? cloneElement(clonedChildren, {ref: setElement}) : null}\n \n );\n}\n", "import React from 'react';\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {InternalContext, defaultInternalContext} from '../../../../store';\nimport {ActiveDraggableContext} from '../../../DndContext';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst defaultTransform: Transform = {\n x: 0,\n y: 0,\n scaleX: 1,\n scaleY: 1,\n};\n\nexport function NullifiedContextProvider({children}: Props) {\n return (\n \n \n {children}\n \n \n );\n}\n", "import React, {forwardRef} from 'react';\nimport {CSS, isKeyboardEvent} from '@dnd-kit/utilities';\n\nimport type {Transform} from '@dnd-kit/utilities';\n\nimport {getRelativeTransformOrigin} from '../../../../utilities';\nimport type {ClientRect, UniqueIdentifier} from '../../../../types';\n\ntype TransitionGetter = (\n activatorEvent: Event | null\n) => React.CSSProperties['transition'] | undefined;\n\nexport interface Props {\n as: keyof JSX.IntrinsicElements;\n activatorEvent: Event | null;\n adjustScale?: boolean;\n children?: React.ReactNode;\n className?: string;\n id: UniqueIdentifier;\n rect: ClientRect | null;\n style?: React.CSSProperties;\n transition?: string | TransitionGetter;\n transform: Transform;\n}\n\nconst baseStyles: React.CSSProperties = {\n position: 'fixed',\n touchAction: 'none',\n};\n\nconst defaultTransition: TransitionGetter = (activatorEvent) => {\n const isKeyboardActivator = isKeyboardEvent(activatorEvent);\n\n return isKeyboardActivator ? 'transform 250ms ease' : undefined;\n};\n\nexport const PositionedOverlay = forwardRef(\n (\n {\n as,\n activatorEvent,\n adjustScale,\n children,\n className,\n rect,\n style,\n transform,\n transition = defaultTransition,\n },\n ref\n ) => {\n if (!rect) {\n return null;\n }\n\n const scaleAdjustedTransform = adjustScale\n ? transform\n : {\n ...transform,\n scaleX: 1,\n scaleY: 1,\n };\n const styles: React.CSSProperties | undefined = {\n ...baseStyles,\n width: rect.width,\n height: rect.height,\n top: rect.top,\n left: rect.left,\n transform: CSS.Transform.toString(scaleAdjustedTransform),\n transformOrigin:\n adjustScale && activatorEvent\n ? getRelativeTransformOrigin(\n activatorEvent as MouseEvent | KeyboardEvent | TouchEvent,\n rect\n )\n : undefined,\n transition:\n typeof transition === 'function'\n ? transition(activatorEvent)\n : transition,\n ...style,\n };\n\n return React.createElement(\n as,\n {\n className,\n style: styles,\n ref,\n },\n children\n );\n }\n);\n", "import {CSS, useEvent, getWindow} from '@dnd-kit/utilities';\nimport type {DeepRequired, Transform} from '@dnd-kit/utilities';\n\nimport type {\n Active,\n DraggableNode,\n DraggableNodes,\n DroppableContainers,\n} from '../../../store';\nimport type {ClientRect, UniqueIdentifier} from '../../../types';\nimport {getMeasurableNode} from '../../../utilities/nodes';\nimport {scrollIntoViewIfNeeded} from '../../../utilities/scroll';\nimport {parseTransform} from '../../../utilities/transform';\nimport type {MeasuringConfiguration} from '../../DndContext';\nimport type {Animation} from '../components';\n\ninterface SharedParameters {\n active: {\n id: UniqueIdentifier;\n data: Active['data'];\n node: HTMLElement;\n rect: ClientRect;\n };\n dragOverlay: {\n node: HTMLElement;\n rect: ClientRect;\n };\n draggableNodes: DraggableNodes;\n droppableContainers: DroppableContainers;\n measuringConfiguration: DeepRequired;\n}\n\nexport interface KeyframeResolverParameters extends SharedParameters {\n transform: {\n initial: Transform;\n final: Transform;\n };\n}\n\nexport type KeyframeResolver = (\n parameters: KeyframeResolverParameters\n) => Keyframe[];\n\nexport interface DropAnimationOptions {\n keyframes?: KeyframeResolver;\n duration?: number;\n easing?: string;\n sideEffects?: DropAnimationSideEffects | null;\n}\n\nexport type DropAnimation = DropAnimationFunction | DropAnimationOptions;\n\ninterface Arguments {\n draggableNodes: DraggableNodes;\n droppableContainers: DroppableContainers;\n measuringConfiguration: DeepRequired;\n config?: DropAnimation | null;\n}\n\nexport interface DropAnimationFunctionArguments extends SharedParameters {\n transform: Transform;\n}\n\nexport type DropAnimationFunction = (\n args: DropAnimationFunctionArguments\n) => Promise | void;\n\ntype CleanupFunction = () => void;\n\nexport interface DropAnimationSideEffectsParameters extends SharedParameters {}\n\nexport type DropAnimationSideEffects = (\n parameters: DropAnimationSideEffectsParameters\n) => CleanupFunction | void;\n\ntype ExtractStringProperties = {\n [K in keyof T]?: T[K] extends string ? string : never;\n};\n\ntype Styles = ExtractStringProperties;\n\ninterface DefaultDropAnimationSideEffectsOptions {\n className?: {\n active?: string;\n dragOverlay?: string;\n };\n styles?: {\n active?: Styles;\n dragOverlay?: Styles;\n };\n}\n\nexport const defaultDropAnimationSideEffects = (\n options: DefaultDropAnimationSideEffectsOptions\n): DropAnimationSideEffects => ({active, dragOverlay}) => {\n const originalStyles: Record = {};\n const {styles, className} = options;\n\n if (styles?.active) {\n for (const [key, value] of Object.entries(styles.active)) {\n if (value === undefined) {\n continue;\n }\n\n originalStyles[key] = active.node.style.getPropertyValue(key);\n active.node.style.setProperty(key, value);\n }\n }\n\n if (styles?.dragOverlay) {\n for (const [key, value] of Object.entries(styles.dragOverlay)) {\n if (value === undefined) {\n continue;\n }\n\n dragOverlay.node.style.setProperty(key, value);\n }\n }\n\n if (className?.active) {\n active.node.classList.add(className.active);\n }\n\n if (className?.dragOverlay) {\n dragOverlay.node.classList.add(className.dragOverlay);\n }\n\n return function cleanup() {\n for (const [key, value] of Object.entries(originalStyles)) {\n active.node.style.setProperty(key, value);\n }\n\n if (className?.active) {\n active.node.classList.remove(className.active);\n }\n };\n};\n\nconst defaultKeyframeResolver: KeyframeResolver = ({\n transform: {initial, final},\n}) => [\n {\n transform: CSS.Transform.toString(initial),\n },\n {\n transform: CSS.Transform.toString(final),\n },\n];\n\nexport const defaultDropAnimationConfiguration: Required = {\n duration: 250,\n easing: 'ease',\n keyframes: defaultKeyframeResolver,\n sideEffects: defaultDropAnimationSideEffects({\n styles: {\n active: {\n opacity: '0',\n },\n },\n }),\n};\n\nexport function useDropAnimation({\n config,\n draggableNodes,\n droppableContainers,\n measuringConfiguration,\n}: Arguments) {\n return useEvent((id, node) => {\n if (config === null) {\n return;\n }\n\n const activeDraggable: DraggableNode | undefined = draggableNodes.get(id);\n\n if (!activeDraggable) {\n return;\n }\n\n const activeNode = activeDraggable.node.current;\n\n if (!activeNode) {\n return;\n }\n\n const measurableNode = getMeasurableNode(node);\n\n if (!measurableNode) {\n return;\n }\n const {transform} = getWindow(node).getComputedStyle(node);\n const parsedTransform = parseTransform(transform);\n\n if (!parsedTransform) {\n return;\n }\n\n const animation: DropAnimationFunction =\n typeof config === 'function'\n ? config\n : createDefaultDropAnimation(config);\n\n scrollIntoViewIfNeeded(\n activeNode,\n measuringConfiguration.draggable.measure\n );\n\n return animation({\n active: {\n id,\n data: activeDraggable.data,\n node: activeNode,\n rect: measuringConfiguration.draggable.measure(activeNode),\n },\n draggableNodes,\n dragOverlay: {\n node,\n rect: measuringConfiguration.dragOverlay.measure(measurableNode),\n },\n droppableContainers,\n measuringConfiguration,\n transform: parsedTransform,\n });\n });\n}\n\nfunction createDefaultDropAnimation(\n options: DropAnimationOptions | undefined\n): DropAnimationFunction {\n const {duration, easing, sideEffects, keyframes} = {\n ...defaultDropAnimationConfiguration,\n ...options,\n };\n\n return ({active, dragOverlay, transform, ...rest}) => {\n if (!duration) {\n // Do not animate if animation duration is zero.\n return;\n }\n\n const delta = {\n x: dragOverlay.rect.left - active.rect.left,\n y: dragOverlay.rect.top - active.rect.top,\n };\n\n const scale = {\n scaleX:\n transform.scaleX !== 1\n ? (active.rect.width * transform.scaleX) / dragOverlay.rect.width\n : 1,\n scaleY:\n transform.scaleY !== 1\n ? (active.rect.height * transform.scaleY) / dragOverlay.rect.height\n : 1,\n };\n const finalTransform = {\n x: transform.x - delta.x,\n y: transform.y - delta.y,\n ...scale,\n };\n\n const animationKeyframes = keyframes({\n ...rest,\n active,\n dragOverlay,\n transform: {initial: transform, final: finalTransform},\n });\n\n const [firstKeyframe] = animationKeyframes;\n const lastKeyframe = animationKeyframes[animationKeyframes.length - 1];\n\n if (JSON.stringify(firstKeyframe) === JSON.stringify(lastKeyframe)) {\n // The start and end keyframes are the same, infer that there is no animation needed.\n return;\n }\n\n const cleanup = sideEffects?.({active, dragOverlay, ...rest});\n const animation = dragOverlay.node.animate(animationKeyframes, {\n duration,\n easing,\n fill: 'forwards',\n });\n\n return new Promise((resolve) => {\n animation.onfinish = () => {\n cleanup?.();\n resolve();\n };\n });\n };\n}\n", "import {useMemo} from 'react';\n\nimport type {UniqueIdentifier} from '../../../types';\n\nlet key = 0;\n\nexport function useKey(id: UniqueIdentifier | undefined) {\n return useMemo(() => {\n if (id == null) {\n return;\n }\n\n key++;\n return key;\n }, [id]);\n}\n", "import React, {useContext} from 'react';\n\nimport {applyModifiers, Modifiers} from '../../modifiers';\nimport {ActiveDraggableContext} from '../DndContext';\nimport {useDndContext} from '../../hooks';\nimport {useInitialValue} from '../../hooks/utilities';\n\nimport {\n AnimationManager,\n NullifiedContextProvider,\n PositionedOverlay,\n} from './components';\nimport type {PositionedOverlayProps} from './components';\n\nimport {useDropAnimation, useKey} from './hooks';\nimport type {DropAnimation} from './hooks';\n\nexport interface Props\n extends Pick<\n PositionedOverlayProps,\n 'adjustScale' | 'children' | 'className' | 'style' | 'transition'\n > {\n dropAnimation?: DropAnimation | null | undefined;\n modifiers?: Modifiers;\n wrapperElement?: keyof JSX.IntrinsicElements;\n zIndex?: number;\n}\n\nexport const DragOverlay = React.memo(\n ({\n adjustScale = false,\n children,\n dropAnimation: dropAnimationConfig,\n style,\n transition,\n modifiers,\n wrapperElement = 'div',\n className,\n zIndex = 999,\n }: Props) => {\n const {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggableNodes,\n droppableContainers,\n dragOverlay,\n over,\n measuringConfiguration,\n scrollableAncestors,\n scrollableAncestorRects,\n windowRect,\n } = useDndContext();\n const transform = useContext(ActiveDraggableContext);\n const key = useKey(active?.id);\n const modifiedTransform = applyModifiers(modifiers, {\n activatorEvent,\n active,\n activeNodeRect,\n containerNodeRect,\n draggingNodeRect: dragOverlay.rect,\n over,\n overlayNodeRect: dragOverlay.rect,\n scrollableAncestors,\n scrollableAncestorRects,\n transform,\n windowRect,\n });\n const initialRect = useInitialValue(activeNodeRect);\n const dropAnimation = useDropAnimation({\n config: dropAnimationConfig,\n draggableNodes,\n droppableContainers,\n measuringConfiguration,\n });\n // We need to wait for the active node to be measured before connecting the drag overlay ref\n // otherwise collisions can be computed against a mispositioned drag overlay\n const ref = initialRect ? dragOverlay.setRef : undefined;\n\n return (\n \n \n {active && key ? (\n \n {children}\n \n ) : null}\n \n \n );\n }\n);\n"], + "mappings": "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", + "names": ["hiddenStyles", "display", "HiddenText", "id", "value", "React", "style", "LiveRegion", "announcement", "ariaLiveType", "visuallyHidden", "position", "top", "left", "width", "height", "margin", "border", "padding", "overflow", "clip", "clipPath", "whiteSpace", "role", "useAnnouncement", "setAnnouncement", "useState", "announce", "useCallback", "DndMonitorContext", "createContext", "useDndMonitor", "listener", "registerListener", "useContext", "useEffect", "Error", "unsubscribe", "useDndMonitorProvider", "listeners", "useState", "Set", "useCallback", "add", "delete", "dispatch", "type", "event", "forEach", "defaultScreenReaderInstructions", "draggable", "defaultAnnouncements", "onDragStart", "active", "id", "onDragOver", "over", "onDragEnd", "onDragCancel", "Accessibility", "announcements", "container", "hiddenTextDescribedById", "screenReaderInstructions", "announce", "announcement", "useAnnouncement", "liveRegionId", "useUniqueId", "mounted", "setMounted", "useMemo", "onDragMove", "markup", "React", "HiddenText", "value", "LiveRegion", "createPortal", "Action", "noop", "useSensor", "sensor", "options", "useSensors", "sensors", "filter", "defaultCoordinates", "Object", "freeze", "x", "y", "distanceBetween", "p1", "p2", "Math", "sqrt", "pow", "getRelativeTransformOrigin", "rect", "eventCoordinates", "getEventCoordinates", "transformOrigin", "left", "width", "top", "height", "sortCollisionsAsc", "data", "a", "b", "sortCollisionsDesc", "cornersOfRectangle", "getFirstCollision", "collisions", "property", "length", "firstCollision", "centerOfRectangle", "closestCenter", "collisionRect", "droppableRects", "droppableContainers", "centerRect", "droppableContainer", "get", "distBetween", "push", "sort", "closestCorners", "corners", "rectCorners", "distances", "reduce", "accumulator", "corner", "index", "effectiveDistance", "Number", "toFixed", "getIntersectionRatio", "entry", "target", "max", "right", "min", "bottom", "targetArea", "entryArea", "intersectionArea", "intersectionRatio", "rectIntersection", "isPointWithinRect", "point", "pointerWithin", "pointerCoordinates", "adjustScale", "transform", "rect1", "rect2", "scaleX", "scaleY", "getRectDelta", "createRectAdjustmentFn", "modifier", "adjustClientRect", "adjustments", "acc", "adjustment", "getAdjustedRect", "parseTransform", "startsWith", "transformArray", "slice", "split", "inverseTransform", "parsedTransform", "translateX", "translateY", "parseFloat", "indexOf", "w", "h", "defaultOptions", "ignoreTransform", "getClientRect", "element", "getBoundingClientRect", "getWindow", "getComputedStyle", "getTransformAgnosticClientRect", "getWindowClientRect", "innerWidth", "innerHeight", "isFixed", "node", "computedStyle", "position", "isScrollable", "overflowRegex", "properties", "some", "test", "getScrollableAncestors", "limit", "scrollParents", "findScrollableAncestors", "isDocument", "scrollingElement", "includes", "isHTMLElement", "isSVGElement", "parentNode", "getFirstScrollableAncestor", "firstScrollableAncestor", "getScrollableElement", "canUseDOM", "isWindow", "isNode", "getOwnerDocument", "window", "getScrollXCoordinate", "scrollX", "scrollLeft", "getScrollYCoordinate", "scrollY", "scrollTop", "getScrollCoordinates", "Direction", "isDocumentScrollingElement", "document", "getScrollPosition", "scrollingContainer", "minScroll", "dimensions", "clientHeight", "clientWidth", "maxScroll", "scrollWidth", "scrollHeight", "isTop", "isLeft", "isBottom", "isRight", "defaultThreshold", "getScrollDirectionAndSpeed", "scrollContainer", "scrollContainerRect", "acceleration", "thresholdPercentage", "direction", "speed", "threshold", "Backward", "abs", "Forward", "getScrollElementRect", "getScrollOffsets", "scrollableAncestors", "getScrollXOffset", "getScrollYOffset", "scrollIntoViewIfNeeded", "measure", "scrollIntoView", "block", "inline", "Rect", "constructor", "scrollOffsets", "axis", "keys", "getScrollOffset", "key", "defineProperty", "currentOffsets", "scrollOffsetsDeltla", "enumerable", "Listeners", "removeAll", "removeEventListener", "eventName", "handler", "addEventListener", "getEventListenerTarget", "EventTarget", "hasExceededDistance", "delta", "measurement", "dx", "dy", "EventName", "preventDefault", "stopPropagation", "KeyboardCode", "defaultKeyboardCodes", "start", "Space", "Enter", "cancel", "Esc", "end", "Tab", "defaultKeyboardCoordinateGetter", "currentCoordinates", "code", "Right", "Left", "Down", "Up", "undefined", "KeyboardSensor", "props", "autoScrollEnabled", "referenceCoordinates", "windowListeners", "handleKeyDown", "bind", "handleCancel", "attach", "handleStart", "Resize", "VisibilityChange", "setTimeout", "Keydown", "activeNode", "onStart", "current", "isKeyboardEvent", "context", "keyboardCodes", "coordinateGetter", "scrollBehavior", "handleEnd", "newCoordinates", "coordinatesDelta", "getCoordinatesDelta", "scrollDelta", "scrollElementRect", "clampedCoordinates", "canScrollX", "canScrollY", "newScrollCoordinates", "canScrollToNewCoordinates", "scrollTo", "behavior", "scrollBy", "handleMove", "getAdjustedCoordinates", "coordinates", "onMove", "onEnd", "detach", "onCancel", "activators", "onActivation", "nativeEvent", "activator", "activatorNode", "isDistanceConstraint", "constraint", "Boolean", "isDelayConstraint", "AbstractPointerSensor", "events", "listenerTarget", "activated", "initialCoordinates", "timeoutId", "documentListeners", "handleKeydown", "removeTextSelection", "activationConstraint", "bypassActivationConstraint", "move", "name", "passive", "DragStart", "ContextMenu", "delay", "handlePending", "clearTimeout", "offset", "onPending", "Click", "capture", "SelectionChange", "tolerance", "distance", "cancelable", "onAbort", "getSelection", "removeAllRanges", "PointerSensor", "isPrimary", "button", "MouseButton", "MouseSensor", "RightClick", "TouchSensor", "setup", "teardown", "touches", "AutoScrollActivator", "TraversalOrder", "useAutoScroller", "Pointer", "canScroll", "draggingRect", "enabled", "interval", "order", "TreeOrder", "scrollableAncestorRects", "scrollIntent", "useScrollIntent", "disabled", "setAutoScrollInterval", "clearAutoScrollInterval", "useInterval", "scrollSpeed", "useRef", "scrollDirection", "DraggableRect", "scrollContainerRef", "autoScroll", "sortedScrollableAncestors", "reverse", "JSON", "stringify", "defaultScrollIntent", "previousDelta", "usePrevious", "useLazyMemo", "previousIntent", "sign", "useCachedNode", "draggableNodes", "draggableNode", "cachedNode", "useCombineActivators", "getSyntheticHandler", "Sensor", "sensorActivators", "map", "MeasuringStrategy", "MeasuringFrequency", "defaultValue", "Map", "useDroppableMeasuring", "containers", "dragging", "dependencies", "config", "queue", "setQueue", "frequency", "strategy", "containersRef", "isDisabled", "disabledRef", "useLatestValue", "measureDroppableContainers", "ids", "concat", "previousValue", "set", "measuringScheduled", "Always", "BeforeDragging", "useInitialValue", "computeFn", "useInitialRect", "useMutationObserver", "callback", "handleMutations", "useEvent", "mutationObserver", "MutationObserver", "disconnect", "useResizeObserver", "handleResize", "resizeObserver", "ResizeObserver", "defaultMeasure", "useRect", "fallbackRect", "setRect", "measureRect", "currentRect", "isConnected", "newRect", "records", "record", "HTMLElement", "contains", "useIsomorphicLayoutEffect", "observe", "body", "childList", "subtree", "useRectDelta", "initialRect", "useScrollableAncestors", "previousNode", "ancestors", "useScrollOffsets", "elements", "scrollCoordinates", "setScrollCoordinates", "prevElements", "handleScroll", "previousElements", "cleanup", "entries", "scrollableElement", "Array", "from", "values", "useScrollOffsetsDelta", "initialScrollOffsets", "hasScrollOffsets", "subtract", "useSensorSetup", "teardownFns", "useSyntheticListeners", "useWindowRect", "useRects", "firstElement", "windowRect", "rects", "setRects", "measureRects", "getMeasurableNode", "children", "firstChild", "useDragOverlayMeasuring", "handleNodeChange", "nodeRef", "setRef", "useNodeRef", "defaultSensors", "defaultData", "defaultMeasuringConfiguration", "droppable", "WhileDragging", "Optimized", "dragOverlay", "DroppableContainersMap", "toArray", "getEnabled", "getNodeFor", "defaultPublicContext", "activatorEvent", "activeNodeRect", "containerNodeRect", "measuringConfiguration", "defaultInternalContext", "ariaDescribedById", "InternalContext", "PublicContext", "getInitialState", "nodes", "translate", "reducer", "state", "action", "DragMove", "DragEnd", "DragCancel", "RegisterDroppable", "SetDroppableDisabled", "UnregisterDroppable", "RestoreFocus", "previousActivatorEvent", "previousActiveId", "activeElement", "requestAnimationFrame", "focusableNode", "findFirstFocusableNode", "focus", "applyModifiers", "modifiers", "args", "useMeasuringConfiguration", "useLayoutShiftScrollCompensation", "initialized", "rectDelta", "ActiveDraggableContext", "Status", "DndContext", "memo", "accessibility", "collisionDetection", "measuring", "store", "useReducer", "dispatchMonitorEvent", "registerMonitorListener", "status", "setStatus", "Uninitialized", "isInitialized", "Initialized", "activeId", "activeRects", "initial", "translated", "activeRef", "activeSensor", "setActiveSensor", "setActivatorEvent", "latestProps", "draggableDescribedById", "enabledDroppableContainers", "activationCoordinates", "autoScrollOptions", "getAutoScrollerOptions", "initialActiveNodeRect", "layoutShiftCompensation", "parentElement", "sensorContext", "draggingNode", "draggingNodeRect", "scrollAdjustedTranslate", "overNode", "usesDragOverlay", "nodeRectDelta", "modifiedTranslate", "overlayNodeRect", "scrollAdjustment", "activeNodeScrollDelta", "overId", "setOver", "appliedTranslate", "activeSensorRef", "instantiateSensor", "sensorInstance", "onDragAbort", "onDragPending", "unstable_batchedUpdates", "Initializing", "createHandler", "cancelDrop", "shouldCancel", "Promise", "resolve", "bindActivatorToSensorInstantiator", "activeDraggableNode", "dndKit", "defaultPrevented", "activationContext", "shouldActivate", "capturedBy", "overContainer", "publicContext", "internalContext", "Provider", "restoreFocus", "activeSensorDisablesAutoscroll", "autoScrollGloballyDisabled", "NullContext", "defaultRole", "ID_PREFIX", "useDraggable", "attributes", "role", "roleDescription", "tabIndex", "isDragging", "setNodeRef", "setActivatorNodeRef", "dataRef", "memoizedAttributes", "useDndContext", "defaultResizeObserverConfig", "timeout", "useDroppable", "resizeObserverConfig", "previous", "resizeObserverConnected", "callbackId", "resizeObserverDisabled", "updateMeasurementsFor", "resizeObserverTimeout", "isArray", "newElement", "previousElement", "unobserve", "isOver", "AnimationManager", "animation", "clonedChildren", "setClonedChildren", "setElement", "previousChildren", "then", "cloneElement", "ref", "defaultTransform", "NullifiedContextProvider", "baseStyles", "touchAction", "defaultTransition", "isKeyboardActivator", "PositionedOverlay", "forwardRef", "as", "className", "style", "transition", "scaleAdjustedTransform", "styles", "CSS", "Transform", "toString", "createElement", "defaultDropAnimationSideEffects", "originalStyles", "getPropertyValue", "setProperty", "classList", "remove", "defaultKeyframeResolver", "final", "defaultDropAnimationConfiguration", "duration", "easing", "keyframes", "sideEffects", "opacity", "useDropAnimation", "activeDraggable", "measurableNode", "createDefaultDropAnimation", "rest", "scale", "finalTransform", "animationKeyframes", "firstKeyframe", "lastKeyframe", "animate", "fill", "onfinish", "useKey", "DragOverlay", "dropAnimation", "dropAnimationConfig", "wrapperElement", "zIndex", "modifiedTransform"] +} diff --git a/node_modules/.vite/deps/chunk-Z3MJAI5R.js b/node_modules/.vite/deps/chunk-Z3MJAI5R.js new file mode 100644 index 00000000..b17a4911 --- /dev/null +++ b/node_modules/.vite/deps/chunk-Z3MJAI5R.js @@ -0,0 +1,17537 @@ +import { + __export +} from "./chunk-4MBMRILA.js"; + +// node_modules/@azure/msal-browser/dist/utils/BrowserUtils.mjs +var BrowserUtils_exports = {}; +__export(BrowserUtils_exports, { + blockAPICallsBeforeInitialize: () => blockAPICallsBeforeInitialize, + blockAcquireTokenInPopups: () => blockAcquireTokenInPopups, + blockNonBrowserEnvironment: () => blockNonBrowserEnvironment, + blockRedirectInIframe: () => blockRedirectInIframe, + blockReloadInHiddenIframes: () => blockReloadInHiddenIframes, + clearHash: () => clearHash, + createGuid: () => createGuid, + getCurrentUri: () => getCurrentUri, + getHomepage: () => getHomepage, + invoke: () => invoke, + invokeAsync: () => invokeAsync, + isInIframe: () => isInIframe, + isInPopup: () => isInPopup, + preconnect: () => preconnect, + preflightCheck: () => preflightCheck, + redirectPreflightCheck: () => redirectPreflightCheck, + replaceHash: () => replaceHash +}); + +// node_modules/@azure/msal-common/dist/utils/Constants.mjs +var Constants = { + LIBRARY_NAME: "MSAL.JS", + SKU: "msal.js.common", + // default authority + DEFAULT_AUTHORITY: "https://login.microsoftonline.com/common/", + DEFAULT_AUTHORITY_HOST: "login.microsoftonline.com", + DEFAULT_COMMON_TENANT: "common", + // ADFS String + ADFS: "adfs", + DSTS: "dstsv2", + // Default AAD Instance Discovery Endpoint + AAD_INSTANCE_DISCOVERY_ENDPT: "https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=", + // CIAM URL + CIAM_AUTH_URL: ".ciamlogin.com", + AAD_TENANT_DOMAIN_SUFFIX: ".onmicrosoft.com", + // Resource delimiter - used for certain cache entries + RESOURCE_DELIM: "|", + // Placeholder for non-existent account ids/objects + NO_ACCOUNT: "NO_ACCOUNT", + // Claims + CLAIMS: "claims", + // Consumer UTID + CONSUMER_UTID: "9188040d-6c67-4c5b-b112-36a304b66dad", + // Default scopes + OPENID_SCOPE: "openid", + PROFILE_SCOPE: "profile", + OFFLINE_ACCESS_SCOPE: "offline_access", + EMAIL_SCOPE: "email", + CODE_GRANT_TYPE: "authorization_code", + RT_GRANT_TYPE: "refresh_token", + S256_CODE_CHALLENGE_METHOD: "S256", + URL_FORM_CONTENT_TYPE: "application/x-www-form-urlencoded;charset=utf-8", + AUTHORIZATION_PENDING: "authorization_pending", + NOT_DEFINED: "not_defined", + EMPTY_STRING: "", + NOT_APPLICABLE: "N/A", + NOT_AVAILABLE: "Not Available", + FORWARD_SLASH: "/", + IMDS_ENDPOINT: "http://169.254.169.254/metadata/instance/compute/location", + IMDS_VERSION: "2020-06-01", + IMDS_TIMEOUT: 2e3, + AZURE_REGION_AUTO_DISCOVER_FLAG: "TryAutoDetect", + REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: "login.microsoft.com", + KNOWN_PUBLIC_CLOUDS: [ + "login.microsoftonline.com", + "login.windows.net", + "login.microsoft.com", + "sts.windows.net" + ], + SHR_NONCE_VALIDITY: 240, + INVALID_INSTANCE: "invalid_instance" +}; +var HttpStatus = { + SUCCESS: 200, + SUCCESS_RANGE_START: 200, + SUCCESS_RANGE_END: 299, + REDIRECT: 302, + CLIENT_ERROR: 400, + CLIENT_ERROR_RANGE_START: 400, + BAD_REQUEST: 400, + UNAUTHORIZED: 401, + NOT_FOUND: 404, + REQUEST_TIMEOUT: 408, + GONE: 410, + TOO_MANY_REQUESTS: 429, + CLIENT_ERROR_RANGE_END: 499, + SERVER_ERROR: 500, + SERVER_ERROR_RANGE_START: 500, + SERVICE_UNAVAILABLE: 503, + GATEWAY_TIMEOUT: 504, + SERVER_ERROR_RANGE_END: 599, + MULTI_SIDED_ERROR: 600 +}; +var HttpMethod = { + GET: "GET", + POST: "POST" +}; +var OIDC_DEFAULT_SCOPES = [ + Constants.OPENID_SCOPE, + Constants.PROFILE_SCOPE, + Constants.OFFLINE_ACCESS_SCOPE +]; +var OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, Constants.EMAIL_SCOPE]; +var HeaderNames = { + CONTENT_TYPE: "Content-Type", + CONTENT_LENGTH: "Content-Length", + RETRY_AFTER: "Retry-After", + CCS_HEADER: "X-AnchorMailbox", + WWWAuthenticate: "WWW-Authenticate", + AuthenticationInfo: "Authentication-Info", + X_MS_REQUEST_ID: "x-ms-request-id", + X_MS_HTTP_VERSION: "x-ms-httpver" +}; +var PersistentCacheKeys = { + ACTIVE_ACCOUNT_FILTERS: "active-account-filters" + // new cache entry for active_account for a more robust version for browser +}; +var AADAuthorityConstants = { + COMMON: "common", + ORGANIZATIONS: "organizations", + CONSUMERS: "consumers" +}; +var ClaimsRequestKeys = { + ACCESS_TOKEN: "access_token", + XMS_CC: "xms_cc" +}; +var PromptValue = { + LOGIN: "login", + SELECT_ACCOUNT: "select_account", + CONSENT: "consent", + NONE: "none", + CREATE: "create", + NO_SESSION: "no_session" +}; +var OAuthResponseType = { + CODE: "code", + IDTOKEN_TOKEN: "id_token token", + IDTOKEN_TOKEN_REFRESHTOKEN: "id_token token refresh_token" +}; +var ServerResponseType = { + QUERY: "query", + FRAGMENT: "fragment" +}; +var ResponseMode = { + QUERY: "query", + FRAGMENT: "fragment", + FORM_POST: "form_post" +}; +var GrantType = { + IMPLICIT_GRANT: "implicit", + AUTHORIZATION_CODE_GRANT: "authorization_code", + CLIENT_CREDENTIALS_GRANT: "client_credentials", + RESOURCE_OWNER_PASSWORD_GRANT: "password", + REFRESH_TOKEN_GRANT: "refresh_token", + DEVICE_CODE_GRANT: "device_code", + JWT_BEARER: "urn:ietf:params:oauth:grant-type:jwt-bearer" +}; +var CacheAccountType = { + MSSTS_ACCOUNT_TYPE: "MSSTS", + ADFS_ACCOUNT_TYPE: "ADFS", + MSAV1_ACCOUNT_TYPE: "MSA", + GENERIC_ACCOUNT_TYPE: "Generic" + // NTLM, Kerberos, FBA, Basic etc +}; +var Separators = { + CACHE_KEY_SEPARATOR: "-", + CLIENT_INFO_SEPARATOR: "." +}; +var CredentialType = { + ID_TOKEN: "IdToken", + ACCESS_TOKEN: "AccessToken", + ACCESS_TOKEN_WITH_AUTH_SCHEME: "AccessToken_With_AuthScheme", + REFRESH_TOKEN: "RefreshToken" +}; +var APP_METADATA = "appmetadata"; +var CLIENT_INFO = "client_info"; +var THE_FAMILY_ID = "1"; +var AUTHORITY_METADATA_CONSTANTS = { + CACHE_KEY: "authority-metadata", + REFRESH_TIME_SECONDS: 3600 * 24 + // 24 Hours +}; +var AuthorityMetadataSource = { + CONFIG: "config", + CACHE: "cache", + NETWORK: "network", + HARDCODED_VALUES: "hardcoded_values" +}; +var SERVER_TELEM_CONSTANTS = { + SCHEMA_VERSION: 5, + MAX_LAST_HEADER_BYTES: 330, + MAX_CACHED_ERRORS: 50, + CACHE_KEY: "server-telemetry", + CATEGORY_SEPARATOR: "|", + VALUE_SEPARATOR: ",", + OVERFLOW_TRUE: "1", + OVERFLOW_FALSE: "0", + UNKNOWN_ERROR: "unknown_error" +}; +var AuthenticationScheme = { + BEARER: "Bearer", + POP: "pop", + SSH: "ssh-cert" +}; +var ThrottlingConstants = { + // Default time to throttle RequestThumbprint in seconds + DEFAULT_THROTTLE_TIME_SECONDS: 60, + // Default maximum time to throttle in seconds, overrides what the server sends back + DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600, + // Prefix for storing throttling entries + THROTTLING_PREFIX: "throttling", + // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling + X_MS_LIB_CAPABILITY_VALUE: "retry-after, h429" +}; +var Errors = { + INVALID_GRANT_ERROR: "invalid_grant", + CLIENT_MISMATCH_ERROR: "client_mismatch" +}; +var PasswordGrantConstants = { + username: "username", + password: "password" +}; +var RegionDiscoverySources = { + FAILED_AUTO_DETECTION: "1", + INTERNAL_CACHE: "2", + ENVIRONMENT_VARIABLE: "3", + IMDS: "4" +}; +var RegionDiscoveryOutcomes = { + CONFIGURED_NO_AUTO_DETECTION: "2", + AUTO_DETECTION_REQUESTED_SUCCESSFUL: "4", + AUTO_DETECTION_REQUESTED_FAILED: "5" +}; +var CacheOutcome = { + // When a token is found in the cache or the cache is not supposed to be hit when making the request + NOT_APPLICABLE: "0", + // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested + FORCE_REFRESH_OR_CLAIMS: "1", + // When the token request goes to the identity provider because no cached access token exists + NO_CACHED_ACCESS_TOKEN: "2", + // When the token request goes to the identity provider because cached access token expired + CACHED_ACCESS_TOKEN_EXPIRED: "3", + // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed + PROACTIVELY_REFRESHED: "4" +}; +var JsonWebTokenTypes = { + Jwt: "JWT", + Jwk: "JWK", + Pop: "pop" +}; +var DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300; + +// node_modules/@azure/msal-common/dist/error/AuthErrorCodes.mjs +var AuthErrorCodes_exports = {}; +__export(AuthErrorCodes_exports, { + postRequestFailed: () => postRequestFailed, + unexpectedError: () => unexpectedError +}); +var unexpectedError = "unexpected_error"; +var postRequestFailed = "post_request_failed"; + +// node_modules/@azure/msal-common/dist/error/AuthError.mjs +var AuthErrorMessages = { + [unexpectedError]: "Unexpected error in authentication.", + [postRequestFailed]: "Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details." +}; +var AuthErrorMessage = { + unexpectedError: { + code: unexpectedError, + desc: AuthErrorMessages[unexpectedError] + }, + postRequestFailed: { + code: postRequestFailed, + desc: AuthErrorMessages[postRequestFailed] + } +}; +var AuthError = class _AuthError extends Error { + constructor(errorCode, errorMessage, suberror) { + const errorString = errorMessage ? `${errorCode}: ${errorMessage}` : errorCode; + super(errorString); + Object.setPrototypeOf(this, _AuthError.prototype); + this.errorCode = errorCode || Constants.EMPTY_STRING; + this.errorMessage = errorMessage || Constants.EMPTY_STRING; + this.subError = suberror || Constants.EMPTY_STRING; + this.name = "AuthError"; + } + setCorrelationId(correlationId) { + this.correlationId = correlationId; + } +}; +function createAuthError(code, additionalMessage) { + return new AuthError(code, additionalMessage ? `${AuthErrorMessages[code]} ${additionalMessage}` : AuthErrorMessages[code]); +} + +// node_modules/@azure/msal-common/dist/error/ClientAuthErrorCodes.mjs +var ClientAuthErrorCodes_exports = {}; +__export(ClientAuthErrorCodes_exports, { + authTimeNotFound: () => authTimeNotFound, + authorizationCodeMissingFromServerResponse: () => authorizationCodeMissingFromServerResponse, + bindingKeyNotRemoved: () => bindingKeyNotRemoved, + cannotAppendScopeSet: () => cannotAppendScopeSet, + cannotRemoveEmptyScope: () => cannotRemoveEmptyScope, + clientInfoDecodingError: () => clientInfoDecodingError, + clientInfoEmptyError: () => clientInfoEmptyError, + deviceCodeExpired: () => deviceCodeExpired, + deviceCodePollingCancelled: () => deviceCodePollingCancelled, + deviceCodeUnknownError: () => deviceCodeUnknownError, + emptyInputScopeSet: () => emptyInputScopeSet, + endSessionEndpointNotSupported: () => endSessionEndpointNotSupported, + endpointResolutionError: () => endpointResolutionError, + hashNotDeserialized: () => hashNotDeserialized, + invalidAssertion: () => invalidAssertion, + invalidCacheEnvironment: () => invalidCacheEnvironment, + invalidCacheRecord: () => invalidCacheRecord, + invalidClientCredential: () => invalidClientCredential, + invalidState: () => invalidState, + keyIdMissing: () => keyIdMissing, + maxAgeTranspired: () => maxAgeTranspired, + methodNotImplemented: () => methodNotImplemented, + missingTenantIdError: () => missingTenantIdError, + multipleMatchingAccounts: () => multipleMatchingAccounts, + multipleMatchingAppMetadata: () => multipleMatchingAppMetadata, + multipleMatchingTokens: () => multipleMatchingTokens, + nestedAppAuthBridgeDisabled: () => nestedAppAuthBridgeDisabled, + networkError: () => networkError, + noAccountFound: () => noAccountFound, + noAccountInSilentRequest: () => noAccountInSilentRequest, + noCryptoObject: () => noCryptoObject, + noNetworkConnectivity: () => noNetworkConnectivity, + nonceMismatch: () => nonceMismatch, + nullOrEmptyToken: () => nullOrEmptyToken, + openIdConfigError: () => openIdConfigError, + requestCannotBeMade: () => requestCannotBeMade, + stateMismatch: () => stateMismatch, + stateNotFound: () => stateNotFound, + tokenClaimsCnfRequiredForSignedJwt: () => tokenClaimsCnfRequiredForSignedJwt, + tokenParsingError: () => tokenParsingError, + tokenRefreshRequired: () => tokenRefreshRequired, + unexpectedCredentialType: () => unexpectedCredentialType, + userCanceled: () => userCanceled, + userTimeoutReached: () => userTimeoutReached +}); +var clientInfoDecodingError = "client_info_decoding_error"; +var clientInfoEmptyError = "client_info_empty_error"; +var tokenParsingError = "token_parsing_error"; +var nullOrEmptyToken = "null_or_empty_token"; +var endpointResolutionError = "endpoints_resolution_error"; +var networkError = "network_error"; +var openIdConfigError = "openid_config_error"; +var hashNotDeserialized = "hash_not_deserialized"; +var invalidState = "invalid_state"; +var stateMismatch = "state_mismatch"; +var stateNotFound = "state_not_found"; +var nonceMismatch = "nonce_mismatch"; +var authTimeNotFound = "auth_time_not_found"; +var maxAgeTranspired = "max_age_transpired"; +var multipleMatchingTokens = "multiple_matching_tokens"; +var multipleMatchingAccounts = "multiple_matching_accounts"; +var multipleMatchingAppMetadata = "multiple_matching_appMetadata"; +var requestCannotBeMade = "request_cannot_be_made"; +var cannotRemoveEmptyScope = "cannot_remove_empty_scope"; +var cannotAppendScopeSet = "cannot_append_scopeset"; +var emptyInputScopeSet = "empty_input_scopeset"; +var deviceCodePollingCancelled = "device_code_polling_cancelled"; +var deviceCodeExpired = "device_code_expired"; +var deviceCodeUnknownError = "device_code_unknown_error"; +var noAccountInSilentRequest = "no_account_in_silent_request"; +var invalidCacheRecord = "invalid_cache_record"; +var invalidCacheEnvironment = "invalid_cache_environment"; +var noAccountFound = "no_account_found"; +var noCryptoObject = "no_crypto_object"; +var unexpectedCredentialType = "unexpected_credential_type"; +var invalidAssertion = "invalid_assertion"; +var invalidClientCredential = "invalid_client_credential"; +var tokenRefreshRequired = "token_refresh_required"; +var userTimeoutReached = "user_timeout_reached"; +var tokenClaimsCnfRequiredForSignedJwt = "token_claims_cnf_required_for_signedjwt"; +var authorizationCodeMissingFromServerResponse = "authorization_code_missing_from_server_response"; +var bindingKeyNotRemoved = "binding_key_not_removed"; +var endSessionEndpointNotSupported = "end_session_endpoint_not_supported"; +var keyIdMissing = "key_id_missing"; +var noNetworkConnectivity = "no_network_connectivity"; +var userCanceled = "user_canceled"; +var missingTenantIdError = "missing_tenant_id_error"; +var methodNotImplemented = "method_not_implemented"; +var nestedAppAuthBridgeDisabled = "nested_app_auth_bridge_disabled"; + +// node_modules/@azure/msal-common/dist/error/ClientAuthError.mjs +var ClientAuthErrorMessages = { + [clientInfoDecodingError]: "The client info could not be parsed/decoded correctly", + [clientInfoEmptyError]: "The client info was empty", + [tokenParsingError]: "Token cannot be parsed", + [nullOrEmptyToken]: "The token is null or empty", + [endpointResolutionError]: "Endpoints cannot be resolved", + [networkError]: "Network request failed", + [openIdConfigError]: "Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.", + [hashNotDeserialized]: "The hash parameters could not be deserialized", + [invalidState]: "State was not the expected format", + [stateMismatch]: "State mismatch error", + [stateNotFound]: "State not found", + [nonceMismatch]: "Nonce mismatch error", + [authTimeNotFound]: "Max Age was requested and the ID token is missing the auth_time variable. auth_time is an optional claim and is not enabled by default - it must be enabled. See https://aka.ms/msaljs/optional-claims for more information.", + [maxAgeTranspired]: "Max Age is set to 0, or too much time has elapsed since the last end-user authentication.", + [multipleMatchingTokens]: "The cache contains multiple tokens satisfying the requirements. Call AcquireToken again providing more requirements such as authority or account.", + [multipleMatchingAccounts]: "The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account", + [multipleMatchingAppMetadata]: "The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata", + [requestCannotBeMade]: "Token request cannot be made without authorization code or refresh token.", + [cannotRemoveEmptyScope]: "Cannot remove null or empty scope from ScopeSet", + [cannotAppendScopeSet]: "Cannot append ScopeSet", + [emptyInputScopeSet]: "Empty input ScopeSet cannot be processed", + [deviceCodePollingCancelled]: "Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.", + [deviceCodeExpired]: "Device code is expired.", + [deviceCodeUnknownError]: "Device code stopped polling for unknown reasons.", + [noAccountInSilentRequest]: "Please pass an account object, silent flow is not supported without account information", + [invalidCacheRecord]: "Cache record object was null or undefined.", + [invalidCacheEnvironment]: "Invalid environment when attempting to create cache entry", + [noAccountFound]: "No account found in cache for given key.", + [noCryptoObject]: "No crypto object detected.", + [unexpectedCredentialType]: "Unexpected credential type.", + [invalidAssertion]: "Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515", + [invalidClientCredential]: "Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential", + [tokenRefreshRequired]: "Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.", + [userTimeoutReached]: "User defined timeout for device code polling reached", + [tokenClaimsCnfRequiredForSignedJwt]: "Cannot generate a POP jwt if the token_claims are not populated", + [authorizationCodeMissingFromServerResponse]: "Server response does not contain an authorization code to proceed", + [bindingKeyNotRemoved]: "Could not remove the credential's binding key from storage.", + [endSessionEndpointNotSupported]: "The provided authority does not support logout", + [keyIdMissing]: "A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.", + [noNetworkConnectivity]: "No network connectivity. Check your internet connection.", + [userCanceled]: "User cancelled the flow.", + [missingTenantIdError]: "A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.", + [methodNotImplemented]: "This method has not been implemented", + [nestedAppAuthBridgeDisabled]: "The nested app auth bridge is disabled" +}; +var ClientAuthErrorMessage = { + clientInfoDecodingError: { + code: clientInfoDecodingError, + desc: ClientAuthErrorMessages[clientInfoDecodingError] + }, + clientInfoEmptyError: { + code: clientInfoEmptyError, + desc: ClientAuthErrorMessages[clientInfoEmptyError] + }, + tokenParsingError: { + code: tokenParsingError, + desc: ClientAuthErrorMessages[tokenParsingError] + }, + nullOrEmptyToken: { + code: nullOrEmptyToken, + desc: ClientAuthErrorMessages[nullOrEmptyToken] + }, + endpointResolutionError: { + code: endpointResolutionError, + desc: ClientAuthErrorMessages[endpointResolutionError] + }, + networkError: { + code: networkError, + desc: ClientAuthErrorMessages[networkError] + }, + unableToGetOpenidConfigError: { + code: openIdConfigError, + desc: ClientAuthErrorMessages[openIdConfigError] + }, + hashNotDeserialized: { + code: hashNotDeserialized, + desc: ClientAuthErrorMessages[hashNotDeserialized] + }, + invalidStateError: { + code: invalidState, + desc: ClientAuthErrorMessages[invalidState] + }, + stateMismatchError: { + code: stateMismatch, + desc: ClientAuthErrorMessages[stateMismatch] + }, + stateNotFoundError: { + code: stateNotFound, + desc: ClientAuthErrorMessages[stateNotFound] + }, + nonceMismatchError: { + code: nonceMismatch, + desc: ClientAuthErrorMessages[nonceMismatch] + }, + authTimeNotFoundError: { + code: authTimeNotFound, + desc: ClientAuthErrorMessages[authTimeNotFound] + }, + maxAgeTranspired: { + code: maxAgeTranspired, + desc: ClientAuthErrorMessages[maxAgeTranspired] + }, + multipleMatchingTokens: { + code: multipleMatchingTokens, + desc: ClientAuthErrorMessages[multipleMatchingTokens] + }, + multipleMatchingAccounts: { + code: multipleMatchingAccounts, + desc: ClientAuthErrorMessages[multipleMatchingAccounts] + }, + multipleMatchingAppMetadata: { + code: multipleMatchingAppMetadata, + desc: ClientAuthErrorMessages[multipleMatchingAppMetadata] + }, + tokenRequestCannotBeMade: { + code: requestCannotBeMade, + desc: ClientAuthErrorMessages[requestCannotBeMade] + }, + removeEmptyScopeError: { + code: cannotRemoveEmptyScope, + desc: ClientAuthErrorMessages[cannotRemoveEmptyScope] + }, + appendScopeSetError: { + code: cannotAppendScopeSet, + desc: ClientAuthErrorMessages[cannotAppendScopeSet] + }, + emptyInputScopeSetError: { + code: emptyInputScopeSet, + desc: ClientAuthErrorMessages[emptyInputScopeSet] + }, + DeviceCodePollingCancelled: { + code: deviceCodePollingCancelled, + desc: ClientAuthErrorMessages[deviceCodePollingCancelled] + }, + DeviceCodeExpired: { + code: deviceCodeExpired, + desc: ClientAuthErrorMessages[deviceCodeExpired] + }, + DeviceCodeUnknownError: { + code: deviceCodeUnknownError, + desc: ClientAuthErrorMessages[deviceCodeUnknownError] + }, + NoAccountInSilentRequest: { + code: noAccountInSilentRequest, + desc: ClientAuthErrorMessages[noAccountInSilentRequest] + }, + invalidCacheRecord: { + code: invalidCacheRecord, + desc: ClientAuthErrorMessages[invalidCacheRecord] + }, + invalidCacheEnvironment: { + code: invalidCacheEnvironment, + desc: ClientAuthErrorMessages[invalidCacheEnvironment] + }, + noAccountFound: { + code: noAccountFound, + desc: ClientAuthErrorMessages[noAccountFound] + }, + noCryptoObj: { + code: noCryptoObject, + desc: ClientAuthErrorMessages[noCryptoObject] + }, + unexpectedCredentialType: { + code: unexpectedCredentialType, + desc: ClientAuthErrorMessages[unexpectedCredentialType] + }, + invalidAssertion: { + code: invalidAssertion, + desc: ClientAuthErrorMessages[invalidAssertion] + }, + invalidClientCredential: { + code: invalidClientCredential, + desc: ClientAuthErrorMessages[invalidClientCredential] + }, + tokenRefreshRequired: { + code: tokenRefreshRequired, + desc: ClientAuthErrorMessages[tokenRefreshRequired] + }, + userTimeoutReached: { + code: userTimeoutReached, + desc: ClientAuthErrorMessages[userTimeoutReached] + }, + tokenClaimsRequired: { + code: tokenClaimsCnfRequiredForSignedJwt, + desc: ClientAuthErrorMessages[tokenClaimsCnfRequiredForSignedJwt] + }, + noAuthorizationCodeFromServer: { + code: authorizationCodeMissingFromServerResponse, + desc: ClientAuthErrorMessages[authorizationCodeMissingFromServerResponse] + }, + bindingKeyNotRemovedError: { + code: bindingKeyNotRemoved, + desc: ClientAuthErrorMessages[bindingKeyNotRemoved] + }, + logoutNotSupported: { + code: endSessionEndpointNotSupported, + desc: ClientAuthErrorMessages[endSessionEndpointNotSupported] + }, + keyIdMissing: { + code: keyIdMissing, + desc: ClientAuthErrorMessages[keyIdMissing] + }, + noNetworkConnectivity: { + code: noNetworkConnectivity, + desc: ClientAuthErrorMessages[noNetworkConnectivity] + }, + userCanceledError: { + code: userCanceled, + desc: ClientAuthErrorMessages[userCanceled] + }, + missingTenantIdError: { + code: missingTenantIdError, + desc: ClientAuthErrorMessages[missingTenantIdError] + }, + nestedAppAuthBridgeDisabled: { + code: nestedAppAuthBridgeDisabled, + desc: ClientAuthErrorMessages[nestedAppAuthBridgeDisabled] + } +}; +var ClientAuthError = class _ClientAuthError extends AuthError { + constructor(errorCode, additionalMessage) { + super(errorCode, additionalMessage ? `${ClientAuthErrorMessages[errorCode]}: ${additionalMessage}` : ClientAuthErrorMessages[errorCode]); + this.name = "ClientAuthError"; + Object.setPrototypeOf(this, _ClientAuthError.prototype); + } +}; +function createClientAuthError(errorCode, additionalMessage) { + return new ClientAuthError(errorCode, additionalMessage); +} + +// node_modules/@azure/msal-common/dist/crypto/ICrypto.mjs +var DEFAULT_CRYPTO_IMPLEMENTATION = { + createNewGuid: () => { + throw createClientAuthError(methodNotImplemented); + }, + base64Decode: () => { + throw createClientAuthError(methodNotImplemented); + }, + base64Encode: () => { + throw createClientAuthError(methodNotImplemented); + }, + base64UrlEncode: () => { + throw createClientAuthError(methodNotImplemented); + }, + encodeKid: () => { + throw createClientAuthError(methodNotImplemented); + }, + async getPublicKeyThumbprint() { + throw createClientAuthError(methodNotImplemented); + }, + async removeTokenBindingKey() { + throw createClientAuthError(methodNotImplemented); + }, + async clearKeystore() { + throw createClientAuthError(methodNotImplemented); + }, + async signJwt() { + throw createClientAuthError(methodNotImplemented); + }, + async hashString() { + throw createClientAuthError(methodNotImplemented); + } +}; + +// node_modules/@azure/msal-common/dist/logger/Logger.mjs +var LogLevel; +(function(LogLevel2) { + LogLevel2[LogLevel2["Error"] = 0] = "Error"; + LogLevel2[LogLevel2["Warning"] = 1] = "Warning"; + LogLevel2[LogLevel2["Info"] = 2] = "Info"; + LogLevel2[LogLevel2["Verbose"] = 3] = "Verbose"; + LogLevel2[LogLevel2["Trace"] = 4] = "Trace"; +})(LogLevel || (LogLevel = {})); +var Logger = class _Logger { + constructor(loggerOptions, packageName, packageVersion) { + this.level = LogLevel.Info; + const defaultLoggerCallback = () => { + return; + }; + const setLoggerOptions = loggerOptions || _Logger.createDefaultLoggerOptions(); + this.localCallback = setLoggerOptions.loggerCallback || defaultLoggerCallback; + this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false; + this.level = typeof setLoggerOptions.logLevel === "number" ? setLoggerOptions.logLevel : LogLevel.Info; + this.correlationId = setLoggerOptions.correlationId || Constants.EMPTY_STRING; + this.packageName = packageName || Constants.EMPTY_STRING; + this.packageVersion = packageVersion || Constants.EMPTY_STRING; + } + static createDefaultLoggerOptions() { + return { + loggerCallback: () => { + }, + piiLoggingEnabled: false, + logLevel: LogLevel.Info + }; + } + /** + * Create new Logger with existing configurations. + */ + clone(packageName, packageVersion, correlationId) { + return new _Logger({ + loggerCallback: this.localCallback, + piiLoggingEnabled: this.piiLoggingEnabled, + logLevel: this.level, + correlationId: correlationId || this.correlationId + }, packageName, packageVersion); + } + /** + * Log message with required options. + */ + logMessage(logMessage, options) { + if (options.logLevel > this.level || !this.piiLoggingEnabled && options.containsPii) { + return; + } + const timestamp = (/* @__PURE__ */ new Date()).toUTCString(); + const logHeader = `[${timestamp}] : [${options.correlationId || this.correlationId || ""}]`; + const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`; + this.executeCallback(options.logLevel, log, options.containsPii || false); + } + /** + * Execute callback with message. + */ + executeCallback(level, message, containsPii) { + if (this.localCallback) { + this.localCallback(level, message, containsPii); + } + } + /** + * Logs error messages. + */ + error(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Error, + containsPii: false, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs error messages with PII. + */ + errorPii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Error, + containsPii: true, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs warning messages. + */ + warning(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Warning, + containsPii: false, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs warning messages with PII. + */ + warningPii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Warning, + containsPii: true, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs info messages. + */ + info(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Info, + containsPii: false, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs info messages with PII. + */ + infoPii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Info, + containsPii: true, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs verbose messages. + */ + verbose(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Verbose, + containsPii: false, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs verbose messages with PII. + */ + verbosePii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Verbose, + containsPii: true, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs trace messages. + */ + trace(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Trace, + containsPii: false, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Logs trace messages with PII. + */ + tracePii(message, correlationId) { + this.logMessage(message, { + logLevel: LogLevel.Trace, + containsPii: true, + correlationId: correlationId || Constants.EMPTY_STRING + }); + } + /** + * Returns whether PII Logging is enabled or not. + */ + isPiiLoggingEnabled() { + return this.piiLoggingEnabled || false; + } +}; + +// node_modules/@azure/msal-common/dist/packageMetadata.mjs +var name = "@azure/msal-common"; +var version = "15.10.0"; + +// node_modules/@azure/msal-common/dist/authority/AuthorityOptions.mjs +var AzureCloudInstance = { + // AzureCloudInstance is not specified. + None: "none", + // Microsoft Azure public cloud + AzurePublic: "https://login.microsoftonline.com", + // Microsoft PPE + AzurePpe: "https://login.windows-ppe.net", + // Microsoft Chinese national/regional cloud + AzureChina: "https://login.chinacloudapi.cn", + // Microsoft German national/regional cloud ("Black Forest") + AzureGermany: "https://login.microsoftonline.de", + // US Government cloud + AzureUsGovernment: "https://login.microsoftonline.us" +}; + +// node_modules/@azure/msal-common/dist/error/ClientConfigurationErrorCodes.mjs +var ClientConfigurationErrorCodes_exports = {}; +__export(ClientConfigurationErrorCodes_exports, { + authorityMismatch: () => authorityMismatch, + authorityUriInsecure: () => authorityUriInsecure, + cannotAllowPlatformBroker: () => cannotAllowPlatformBroker, + cannotSetOIDCOptions: () => cannotSetOIDCOptions, + claimsRequestParsingError: () => claimsRequestParsingError, + emptyInputScopesError: () => emptyInputScopesError, + invalidAuthenticationHeader: () => invalidAuthenticationHeader, + invalidAuthorityMetadata: () => invalidAuthorityMetadata, + invalidAuthorizePostBodyParameters: () => invalidAuthorizePostBodyParameters, + invalidClaims: () => invalidClaims, + invalidCloudDiscoveryMetadata: () => invalidCloudDiscoveryMetadata, + invalidCodeChallengeMethod: () => invalidCodeChallengeMethod, + invalidRequestMethodForEAR: () => invalidRequestMethodForEAR, + logoutRequestEmpty: () => logoutRequestEmpty, + missingNonceAuthenticationHeader: () => missingNonceAuthenticationHeader, + missingSshJwk: () => missingSshJwk, + missingSshKid: () => missingSshKid, + pkceParamsMissing: () => pkceParamsMissing, + redirectUriEmpty: () => redirectUriEmpty, + tokenRequestEmpty: () => tokenRequestEmpty, + untrustedAuthority: () => untrustedAuthority, + urlEmptyError: () => urlEmptyError, + urlParseError: () => urlParseError +}); +var redirectUriEmpty = "redirect_uri_empty"; +var claimsRequestParsingError = "claims_request_parsing_error"; +var authorityUriInsecure = "authority_uri_insecure"; +var urlParseError = "url_parse_error"; +var urlEmptyError = "empty_url_error"; +var emptyInputScopesError = "empty_input_scopes_error"; +var invalidClaims = "invalid_claims"; +var tokenRequestEmpty = "token_request_empty"; +var logoutRequestEmpty = "logout_request_empty"; +var invalidCodeChallengeMethod = "invalid_code_challenge_method"; +var pkceParamsMissing = "pkce_params_missing"; +var invalidCloudDiscoveryMetadata = "invalid_cloud_discovery_metadata"; +var invalidAuthorityMetadata = "invalid_authority_metadata"; +var untrustedAuthority = "untrusted_authority"; +var missingSshJwk = "missing_ssh_jwk"; +var missingSshKid = "missing_ssh_kid"; +var missingNonceAuthenticationHeader = "missing_nonce_authentication_header"; +var invalidAuthenticationHeader = "invalid_authentication_header"; +var cannotSetOIDCOptions = "cannot_set_OIDCOptions"; +var cannotAllowPlatformBroker = "cannot_allow_platform_broker"; +var authorityMismatch = "authority_mismatch"; +var invalidRequestMethodForEAR = "invalid_request_method_for_EAR"; +var invalidAuthorizePostBodyParameters = "invalid_authorize_post_body_parameters"; + +// node_modules/@azure/msal-common/dist/error/ClientConfigurationError.mjs +var ClientConfigurationErrorMessages = { + [redirectUriEmpty]: "A redirect URI is required for all calls, and none has been set.", + [claimsRequestParsingError]: "Could not parse the given claims request object.", + [authorityUriInsecure]: "Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options", + [urlParseError]: "URL could not be parsed into appropriate segments.", + [urlEmptyError]: "URL was empty or null.", + [emptyInputScopesError]: "Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.", + [invalidClaims]: "Given claims parameter must be a stringified JSON object.", + [tokenRequestEmpty]: "Token request was empty and not found in cache.", + [logoutRequestEmpty]: "The logout request was null or undefined.", + [invalidCodeChallengeMethod]: 'code_challenge_method passed is invalid. Valid values are "plain" and "S256".', + [pkceParamsMissing]: "Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request", + [invalidCloudDiscoveryMetadata]: "Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields", + [invalidAuthorityMetadata]: "Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.", + [untrustedAuthority]: "The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.", + [missingSshJwk]: "Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.", + [missingSshKid]: "Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.", + [missingNonceAuthenticationHeader]: "Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.", + [invalidAuthenticationHeader]: "Invalid authentication header provided", + [cannotSetOIDCOptions]: "Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.", + [cannotAllowPlatformBroker]: "Cannot set allowPlatformBroker parameter to true when not in AAD protocol mode.", + [authorityMismatch]: "Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.", + [invalidAuthorizePostBodyParameters]: "Invalid authorize post body parameters provided. If you are using authorizePostBodyParameters, the request method must be POST. Please check the request method and parameters.", + [invalidRequestMethodForEAR]: "Invalid request method for EAR protocol mode. The request method cannot be GET when using EAR protocol mode. Please change the request method to POST." +}; +var ClientConfigurationErrorMessage = { + redirectUriNotSet: { + code: redirectUriEmpty, + desc: ClientConfigurationErrorMessages[redirectUriEmpty] + }, + claimsRequestParsingError: { + code: claimsRequestParsingError, + desc: ClientConfigurationErrorMessages[claimsRequestParsingError] + }, + authorityUriInsecure: { + code: authorityUriInsecure, + desc: ClientConfigurationErrorMessages[authorityUriInsecure] + }, + urlParseError: { + code: urlParseError, + desc: ClientConfigurationErrorMessages[urlParseError] + }, + urlEmptyError: { + code: urlEmptyError, + desc: ClientConfigurationErrorMessages[urlEmptyError] + }, + emptyScopesError: { + code: emptyInputScopesError, + desc: ClientConfigurationErrorMessages[emptyInputScopesError] + }, + invalidClaimsRequest: { + code: invalidClaims, + desc: ClientConfigurationErrorMessages[invalidClaims] + }, + tokenRequestEmptyError: { + code: tokenRequestEmpty, + desc: ClientConfigurationErrorMessages[tokenRequestEmpty] + }, + logoutRequestEmptyError: { + code: logoutRequestEmpty, + desc: ClientConfigurationErrorMessages[logoutRequestEmpty] + }, + invalidCodeChallengeMethod: { + code: invalidCodeChallengeMethod, + desc: ClientConfigurationErrorMessages[invalidCodeChallengeMethod] + }, + invalidCodeChallengeParams: { + code: pkceParamsMissing, + desc: ClientConfigurationErrorMessages[pkceParamsMissing] + }, + invalidCloudDiscoveryMetadata: { + code: invalidCloudDiscoveryMetadata, + desc: ClientConfigurationErrorMessages[invalidCloudDiscoveryMetadata] + }, + invalidAuthorityMetadata: { + code: invalidAuthorityMetadata, + desc: ClientConfigurationErrorMessages[invalidAuthorityMetadata] + }, + untrustedAuthority: { + code: untrustedAuthority, + desc: ClientConfigurationErrorMessages[untrustedAuthority] + }, + missingSshJwk: { + code: missingSshJwk, + desc: ClientConfigurationErrorMessages[missingSshJwk] + }, + missingSshKid: { + code: missingSshKid, + desc: ClientConfigurationErrorMessages[missingSshKid] + }, + missingNonceAuthenticationHeader: { + code: missingNonceAuthenticationHeader, + desc: ClientConfigurationErrorMessages[missingNonceAuthenticationHeader] + }, + invalidAuthenticationHeader: { + code: invalidAuthenticationHeader, + desc: ClientConfigurationErrorMessages[invalidAuthenticationHeader] + }, + cannotSetOIDCOptions: { + code: cannotSetOIDCOptions, + desc: ClientConfigurationErrorMessages[cannotSetOIDCOptions] + }, + cannotAllowPlatformBroker: { + code: cannotAllowPlatformBroker, + desc: ClientConfigurationErrorMessages[cannotAllowPlatformBroker] + }, + authorityMismatch: { + code: authorityMismatch, + desc: ClientConfigurationErrorMessages[authorityMismatch] + }, + invalidAuthorizePostBodyParameters: { + code: invalidAuthorizePostBodyParameters, + desc: ClientConfigurationErrorMessages[invalidAuthorizePostBodyParameters] + }, + invalidRequestMethodForEAR: { + code: invalidRequestMethodForEAR, + desc: ClientConfigurationErrorMessages[invalidRequestMethodForEAR] + } +}; +var ClientConfigurationError = class _ClientConfigurationError extends AuthError { + constructor(errorCode) { + super(errorCode, ClientConfigurationErrorMessages[errorCode]); + this.name = "ClientConfigurationError"; + Object.setPrototypeOf(this, _ClientConfigurationError.prototype); + } +}; +function createClientConfigurationError(errorCode) { + return new ClientConfigurationError(errorCode); +} + +// node_modules/@azure/msal-common/dist/utils/StringUtils.mjs +var StringUtils = class { + /** + * Check if stringified object is empty + * @param strObj + */ + static isEmptyObj(strObj) { + if (strObj) { + try { + const obj = JSON.parse(strObj); + return Object.keys(obj).length === 0; + } catch (e) { + } + } + return true; + } + static startsWith(str, search) { + return str.indexOf(search) === 0; + } + static endsWith(str, search) { + return str.length >= search.length && str.lastIndexOf(search) === str.length - search.length; + } + /** + * Parses string into an object. + * + * @param query + */ + static queryStringToObject(query) { + const obj = {}; + const params = query.split("&"); + const decode = (s) => decodeURIComponent(s.replace(/\+/g, " ")); + params.forEach((pair) => { + if (pair.trim()) { + const [key, value] = pair.split(/=(.+)/g, 2); + if (key && value) { + obj[decode(key)] = decode(value); + } + } + }); + return obj; + } + /** + * Trims entries in an array. + * + * @param arr + */ + static trimArrayEntries(arr) { + return arr.map((entry) => entry.trim()); + } + /** + * Removes empty strings from array + * @param arr + */ + static removeEmptyStringsFromArray(arr) { + return arr.filter((entry) => { + return !!entry; + }); + } + /** + * Attempts to parse a string into JSON + * @param str + */ + static jsonParseHelper(str) { + try { + return JSON.parse(str); + } catch (e) { + return null; + } + } + /** + * Tests if a given string matches a given pattern, with support for wildcards and queries. + * @param pattern Wildcard pattern to string match. Supports "*" for wildcards and "?" for queries + * @param input String to match against + */ + static matchPattern(pattern, input) { + const regex = new RegExp(pattern.replace(/\\/g, "\\\\").replace(/\*/g, "[^ ]*").replace(/\?/g, "\\?")); + return regex.test(input); + } +}; + +// node_modules/@azure/msal-common/dist/request/ScopeSet.mjs +var ScopeSet = class _ScopeSet { + constructor(inputScopes) { + const scopeArr = inputScopes ? StringUtils.trimArrayEntries([...inputScopes]) : []; + const filteredInput = scopeArr ? StringUtils.removeEmptyStringsFromArray(scopeArr) : []; + if (!filteredInput || !filteredInput.length) { + throw createClientConfigurationError(emptyInputScopesError); + } + this.scopes = /* @__PURE__ */ new Set(); + filteredInput.forEach((scope) => this.scopes.add(scope)); + } + /** + * Factory method to create ScopeSet from space-delimited string + * @param inputScopeString + * @param appClientId + * @param scopesRequired + */ + static fromString(inputScopeString) { + const scopeString = inputScopeString || Constants.EMPTY_STRING; + const inputScopes = scopeString.split(" "); + return new _ScopeSet(inputScopes); + } + /** + * Creates the set of scopes to search for in cache lookups + * @param inputScopeString + * @returns + */ + static createSearchScopes(inputScopeString) { + const scopeSet = new _ScopeSet(inputScopeString); + if (!scopeSet.containsOnlyOIDCScopes()) { + scopeSet.removeOIDCScopes(); + } else { + scopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE); + } + return scopeSet; + } + /** + * Check if a given scope is present in this set of scopes. + * @param scope + */ + containsScope(scope) { + const lowerCaseScopes = this.printScopesLowerCase().split(" "); + const lowerCaseScopesSet = new _ScopeSet(lowerCaseScopes); + return scope ? lowerCaseScopesSet.scopes.has(scope.toLowerCase()) : false; + } + /** + * Check if a set of scopes is present in this set of scopes. + * @param scopeSet + */ + containsScopeSet(scopeSet) { + if (!scopeSet || scopeSet.scopes.size <= 0) { + return false; + } + return this.scopes.size >= scopeSet.scopes.size && scopeSet.asArray().every((scope) => this.containsScope(scope)); + } + /** + * Check if set of scopes contains only the defaults + */ + containsOnlyOIDCScopes() { + let defaultScopeCount = 0; + OIDC_SCOPES.forEach((defaultScope) => { + if (this.containsScope(defaultScope)) { + defaultScopeCount += 1; + } + }); + return this.scopes.size === defaultScopeCount; + } + /** + * Appends single scope if passed + * @param newScope + */ + appendScope(newScope) { + if (newScope) { + this.scopes.add(newScope.trim()); + } + } + /** + * Appends multiple scopes if passed + * @param newScopes + */ + appendScopes(newScopes) { + try { + newScopes.forEach((newScope) => this.appendScope(newScope)); + } catch (e) { + throw createClientAuthError(cannotAppendScopeSet); + } + } + /** + * Removes element from set of scopes. + * @param scope + */ + removeScope(scope) { + if (!scope) { + throw createClientAuthError(cannotRemoveEmptyScope); + } + this.scopes.delete(scope.trim()); + } + /** + * Removes default scopes from set of scopes + * Primarily used to prevent cache misses if the default scopes are not returned from the server + */ + removeOIDCScopes() { + OIDC_SCOPES.forEach((defaultScope) => { + this.scopes.delete(defaultScope); + }); + } + /** + * Combines an array of scopes with the current set of scopes. + * @param otherScopes + */ + unionScopeSets(otherScopes) { + if (!otherScopes) { + throw createClientAuthError(emptyInputScopeSet); + } + const unionScopes = /* @__PURE__ */ new Set(); + otherScopes.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); + this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase())); + return unionScopes; + } + /** + * Check if scopes intersect between this set and another. + * @param otherScopes + */ + intersectingScopeSets(otherScopes) { + if (!otherScopes) { + throw createClientAuthError(emptyInputScopeSet); + } + if (!otherScopes.containsOnlyOIDCScopes()) { + otherScopes.removeOIDCScopes(); + } + const unionScopes = this.unionScopeSets(otherScopes); + const sizeOtherScopes = otherScopes.getScopeCount(); + const sizeThisScopes = this.getScopeCount(); + const sizeUnionScopes = unionScopes.size; + return sizeUnionScopes < sizeThisScopes + sizeOtherScopes; + } + /** + * Returns size of set of scopes. + */ + getScopeCount() { + return this.scopes.size; + } + /** + * Returns the scopes as an array of string values + */ + asArray() { + const array = []; + this.scopes.forEach((val) => array.push(val)); + return array; + } + /** + * Prints scopes into a space-delimited string + */ + printScopes() { + if (this.scopes) { + const scopeArr = this.asArray(); + return scopeArr.join(" "); + } + return Constants.EMPTY_STRING; + } + /** + * Prints scopes into a space-delimited lower-case string (used for caching) + */ + printScopesLowerCase() { + return this.printScopes().toLowerCase(); + } +}; + +// node_modules/@azure/msal-common/dist/account/AccountInfo.mjs +function tenantIdMatchesHomeTenant(tenantId, homeAccountId) { + return !!tenantId && !!homeAccountId && tenantId === homeAccountId.split(".")[1]; +} +function buildTenantProfile(homeAccountId, localAccountId, tenantId, idTokenClaims) { + if (idTokenClaims) { + const { oid, sub, tid, name: name3, tfp, acr, preferred_username, upn, login_hint } = idTokenClaims; + const tenantId2 = tid || tfp || acr || ""; + return { + tenantId: tenantId2, + localAccountId: oid || sub || "", + name: name3, + username: preferred_username || upn || "", + loginHint: login_hint, + isHomeTenant: tenantIdMatchesHomeTenant(tenantId2, homeAccountId) + }; + } else { + return { + tenantId, + localAccountId, + username: "", + isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId) + }; + } +} +function updateAccountTenantProfileData(baseAccountInfo, tenantProfile, idTokenClaims, idTokenSecret) { + let updatedAccountInfo = baseAccountInfo; + if (tenantProfile) { + const { isHomeTenant, ...tenantProfileOverride } = tenantProfile; + updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride }; + } + if (idTokenClaims) { + const { isHomeTenant, ...claimsSourcedTenantProfile } = buildTenantProfile(baseAccountInfo.homeAccountId, baseAccountInfo.localAccountId, baseAccountInfo.tenantId, idTokenClaims); + updatedAccountInfo = { + ...updatedAccountInfo, + ...claimsSourcedTenantProfile, + idTokenClaims, + idToken: idTokenSecret + }; + return updatedAccountInfo; + } + return updatedAccountInfo; +} + +// node_modules/@azure/msal-common/dist/account/AuthToken.mjs +var AuthToken_exports = {}; +__export(AuthToken_exports, { + checkMaxAge: () => checkMaxAge, + extractTokenClaims: () => extractTokenClaims, + getJWSPayload: () => getJWSPayload +}); +function extractTokenClaims(encodedToken, base64Decode2) { + const jswPayload = getJWSPayload(encodedToken); + try { + const base64Decoded = base64Decode2(jswPayload); + return JSON.parse(base64Decoded); + } catch (err) { + throw createClientAuthError(tokenParsingError); + } +} +function getJWSPayload(authToken) { + if (!authToken) { + throw createClientAuthError(nullOrEmptyToken); + } + const tokenPartsRegex = /^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$/; + const matches = tokenPartsRegex.exec(authToken); + if (!matches || matches.length < 4) { + throw createClientAuthError(tokenParsingError); + } + return matches[2]; +} +function checkMaxAge(authTime, maxAge) { + const fiveMinuteSkew = 3e5; + if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) { + throw createClientAuthError(maxAgeTranspired); + } +} + +// node_modules/@azure/msal-common/dist/utils/UrlUtils.mjs +var UrlUtils_exports = {}; +__export(UrlUtils_exports, { + getDeserializedResponse: () => getDeserializedResponse, + mapToQueryString: () => mapToQueryString, + stripLeadingHashOrQuery: () => stripLeadingHashOrQuery +}); +function stripLeadingHashOrQuery(responseString) { + if (responseString.startsWith("#/")) { + return responseString.substring(2); + } else if (responseString.startsWith("#") || responseString.startsWith("?")) { + return responseString.substring(1); + } + return responseString; +} +function getDeserializedResponse(responseString) { + if (!responseString || responseString.indexOf("=") < 0) { + return null; + } + try { + const normalizedResponse = stripLeadingHashOrQuery(responseString); + const deserializedHash = Object.fromEntries(new URLSearchParams(normalizedResponse)); + if (deserializedHash.code || deserializedHash.ear_jwe || deserializedHash.error || deserializedHash.error_description || deserializedHash.state) { + return deserializedHash; + } + } catch (e) { + throw createClientAuthError(hashNotDeserialized); + } + return null; +} +function mapToQueryString(parameters, encodeExtraParams = true, extraQueryParameters) { + const queryParameterArray = new Array(); + parameters.forEach((value, key) => { + if (!encodeExtraParams && extraQueryParameters && key in extraQueryParameters) { + queryParameterArray.push(`${key}=${value}`); + } else { + queryParameterArray.push(`${key}=${encodeURIComponent(value)}`); + } + }); + return queryParameterArray.join("&"); +} + +// node_modules/@azure/msal-common/dist/url/UrlString.mjs +var UrlString = class _UrlString { + get urlString() { + return this._urlString; + } + constructor(url) { + this._urlString = url; + if (!this._urlString) { + throw createClientConfigurationError(urlEmptyError); + } + if (!url.includes("#")) { + this._urlString = _UrlString.canonicalizeUri(url); + } + } + /** + * Ensure urls are lower case and end with a / character. + * @param url + */ + static canonicalizeUri(url) { + if (url) { + let lowerCaseUrl = url.toLowerCase(); + if (StringUtils.endsWith(lowerCaseUrl, "?")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -1); + } else if (StringUtils.endsWith(lowerCaseUrl, "?/")) { + lowerCaseUrl = lowerCaseUrl.slice(0, -2); + } + if (!StringUtils.endsWith(lowerCaseUrl, "/")) { + lowerCaseUrl += "/"; + } + return lowerCaseUrl; + } + return url; + } + /** + * Throws if urlString passed is not a valid authority URI string. + */ + validateAsUri() { + let components; + try { + components = this.getUrlComponents(); + } catch (e) { + throw createClientConfigurationError(urlParseError); + } + if (!components.HostNameAndPort || !components.PathSegments) { + throw createClientConfigurationError(urlParseError); + } + if (!components.Protocol || components.Protocol.toLowerCase() !== "https:") { + throw createClientConfigurationError(authorityUriInsecure); + } + } + /** + * Given a url and a query string return the url with provided query string appended + * @param url + * @param queryString + */ + static appendQueryString(url, queryString) { + if (!queryString) { + return url; + } + return url.indexOf("?") < 0 ? `${url}?${queryString}` : `${url}&${queryString}`; + } + /** + * Returns a url with the hash removed + * @param url + */ + static removeHashFromUrl(url) { + return _UrlString.canonicalizeUri(url.split("#")[0]); + } + /** + * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d + * @param href The url + * @param tenantId The tenant id to replace + */ + replaceTenantPath(tenantId) { + const urlObject = this.getUrlComponents(); + const pathArray = urlObject.PathSegments; + if (tenantId && pathArray.length !== 0 && (pathArray[0] === AADAuthorityConstants.COMMON || pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) { + pathArray[0] = tenantId; + } + return _UrlString.constructAuthorityUriFromObject(urlObject); + } + /** + * Parses out the components from a url string. + * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url. + */ + getUrlComponents() { + const regEx = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?"); + const match = this.urlString.match(regEx); + if (!match) { + throw createClientConfigurationError(urlParseError); + } + const urlComponents = { + Protocol: match[1], + HostNameAndPort: match[4], + AbsolutePath: match[5], + QueryString: match[7] + }; + let pathSegments = urlComponents.AbsolutePath.split("/"); + pathSegments = pathSegments.filter((val) => val && val.length > 0); + urlComponents.PathSegments = pathSegments; + if (urlComponents.QueryString && urlComponents.QueryString.endsWith("/")) { + urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length - 1); + } + return urlComponents; + } + static getDomainFromUrl(url) { + const regEx = RegExp("^([^:/?#]+://)?([^/?#]*)"); + const match = url.match(regEx); + if (!match) { + throw createClientConfigurationError(urlParseError); + } + return match[2]; + } + static getAbsoluteUrl(relativeUrl, baseUrl) { + if (relativeUrl[0] === Constants.FORWARD_SLASH) { + const url = new _UrlString(baseUrl); + const baseComponents = url.getUrlComponents(); + return baseComponents.Protocol + "//" + baseComponents.HostNameAndPort + relativeUrl; + } + return relativeUrl; + } + static constructAuthorityUriFromObject(urlObject) { + return new _UrlString(urlObject.Protocol + "//" + urlObject.HostNameAndPort + "/" + urlObject.PathSegments.join("/")); + } + /** + * Check if the hash of the URL string contains known properties + * @deprecated This API will be removed in a future version + */ + static hashContainsKnownProperties(response) { + return !!getDeserializedResponse(response); + } +}; + +// node_modules/@azure/msal-common/dist/authority/AuthorityMetadata.mjs +var rawMetdataJSON = { + endpointMetadata: { + "login.microsoftonline.com": { + token_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token", + jwks_uri: "https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys", + issuer: "https://login.microsoftonline.com/{tenantid}/v2.0", + authorization_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize", + end_session_endpoint: "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout" + }, + "login.chinacloudapi.cn": { + token_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token", + jwks_uri: "https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys", + issuer: "https://login.partner.microsoftonline.cn/{tenantid}/v2.0", + authorization_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize", + end_session_endpoint: "https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout" + }, + "login.microsoftonline.us": { + token_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token", + jwks_uri: "https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys", + issuer: "https://login.microsoftonline.us/{tenantid}/v2.0", + authorization_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize", + end_session_endpoint: "https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout" + } + }, + instanceDiscoveryMetadata: { + metadata: [ + { + preferred_network: "login.microsoftonline.com", + preferred_cache: "login.windows.net", + aliases: [ + "login.microsoftonline.com", + "login.windows.net", + "login.microsoft.com", + "sts.windows.net" + ] + }, + { + preferred_network: "login.partner.microsoftonline.cn", + preferred_cache: "login.partner.microsoftonline.cn", + aliases: [ + "login.partner.microsoftonline.cn", + "login.chinacloudapi.cn" + ] + }, + { + preferred_network: "login.microsoftonline.de", + preferred_cache: "login.microsoftonline.de", + aliases: ["login.microsoftonline.de"] + }, + { + preferred_network: "login.microsoftonline.us", + preferred_cache: "login.microsoftonline.us", + aliases: [ + "login.microsoftonline.us", + "login.usgovcloudapi.net" + ] + }, + { + preferred_network: "login-us.microsoftonline.com", + preferred_cache: "login-us.microsoftonline.com", + aliases: ["login-us.microsoftonline.com"] + } + ] + } +}; +var EndpointMetadata = rawMetdataJSON.endpointMetadata; +var InstanceDiscoveryMetadata = rawMetdataJSON.instanceDiscoveryMetadata; +var InstanceDiscoveryMetadataAliases = /* @__PURE__ */ new Set(); +InstanceDiscoveryMetadata.metadata.forEach((metadataEntry) => { + metadataEntry.aliases.forEach((alias) => { + InstanceDiscoveryMetadataAliases.add(alias); + }); +}); +function getAliasesFromStaticSources(staticAuthorityOptions, logger) { + var _a; + let staticAliases; + const canonicalAuthority = staticAuthorityOptions.canonicalAuthority; + if (canonicalAuthority) { + const authorityHost = new UrlString(canonicalAuthority).getUrlComponents().HostNameAndPort; + staticAliases = getAliasesFromMetadata(authorityHost, (_a = staticAuthorityOptions.cloudDiscoveryMetadata) == null ? void 0 : _a.metadata, AuthorityMetadataSource.CONFIG, logger) || getAliasesFromMetadata(authorityHost, InstanceDiscoveryMetadata.metadata, AuthorityMetadataSource.HARDCODED_VALUES, logger) || staticAuthorityOptions.knownAuthorities; + } + return staticAliases || []; +} +function getAliasesFromMetadata(authorityHost, cloudDiscoveryMetadata, source, logger) { + logger == null ? void 0 : logger.trace(`getAliasesFromMetadata called with source: ${source}`); + if (authorityHost && cloudDiscoveryMetadata) { + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(cloudDiscoveryMetadata, authorityHost); + if (metadata) { + logger == null ? void 0 : logger.trace(`getAliasesFromMetadata: found cloud discovery metadata in ${source}, returning aliases`); + return metadata.aliases; + } else { + logger == null ? void 0 : logger.trace(`getAliasesFromMetadata: did not find cloud discovery metadata in ${source}`); + } + } + return null; +} +function getCloudDiscoveryMetadataFromHardcodedValues(authorityHost) { + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(InstanceDiscoveryMetadata.metadata, authorityHost); + return metadata; +} +function getCloudDiscoveryMetadataFromNetworkResponse(response, authorityHost) { + for (let i = 0; i < response.length; i++) { + const metadata = response[i]; + if (metadata.aliases.includes(authorityHost)) { + return metadata; + } + } + return null; +} + +// node_modules/@azure/msal-common/dist/error/CacheErrorCodes.mjs +var CacheErrorCodes_exports = {}; +__export(CacheErrorCodes_exports, { + cacheErrorUnknown: () => cacheErrorUnknown, + cacheQuotaExceeded: () => cacheQuotaExceeded +}); +var cacheQuotaExceeded = "cache_quota_exceeded"; +var cacheErrorUnknown = "cache_error_unknown"; + +// node_modules/@azure/msal-common/dist/error/CacheError.mjs +var CacheErrorMessages = { + [cacheQuotaExceeded]: "Exceeded cache storage capacity.", + [cacheErrorUnknown]: "Unexpected error occurred when using cache storage." +}; +var CacheError = class _CacheError extends AuthError { + constructor(errorCode, errorMessage) { + const message = errorMessage || (CacheErrorMessages[errorCode] ? CacheErrorMessages[errorCode] : CacheErrorMessages[cacheErrorUnknown]); + super(`${errorCode}: ${message}`); + Object.setPrototypeOf(this, _CacheError.prototype); + this.name = "CacheError"; + this.errorCode = errorCode; + this.errorMessage = message; + } +}; +function createCacheError(e) { + if (!(e instanceof Error)) { + return new CacheError(cacheErrorUnknown); + } + if (e.name === "QuotaExceededError" || e.name === "NS_ERROR_DOM_QUOTA_REACHED" || e.message.includes("exceeded the quota")) { + return new CacheError(cacheQuotaExceeded); + } else { + return new CacheError(e.name, e.message); + } +} + +// node_modules/@azure/msal-common/dist/cache/CacheManager.mjs +var CacheManager = class { + constructor(clientId, cryptoImpl, logger, performanceClient, staticAuthorityOptions) { + this.clientId = clientId; + this.cryptoImpl = cryptoImpl; + this.commonLogger = logger.clone(name, version); + this.staticAuthorityOptions = staticAuthorityOptions; + this.performanceClient = performanceClient; + } + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter, correlationId) { + return this.buildTenantProfiles(this.getAccountsFilteredBy(accountFilter, correlationId), correlationId, accountFilter); + } + /** + * Gets first tenanted AccountInfo object found based on provided filters + */ + getAccountInfoFilteredBy(accountFilter, correlationId) { + const allAccounts = this.getAllAccounts(accountFilter, correlationId); + if (allAccounts.length > 1) { + const sortedAccounts = allAccounts.sort((account) => { + return account.idTokenClaims ? -1 : 1; + }); + return sortedAccounts[0]; + } else if (allAccounts.length === 1) { + return allAccounts[0]; + } else { + return null; + } + } + /** + * Returns a single matching + * @param accountFilter + * @returns + */ + getBaseAccountInfo(accountFilter, correlationId) { + const accountEntities = this.getAccountsFilteredBy(accountFilter, correlationId); + if (accountEntities.length > 0) { + return accountEntities[0].getAccountInfo(); + } else { + return null; + } + } + /** + * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters + * and builds the account info objects from the matching ID token's claims + * @param cachedAccounts + * @param accountFilter + * @returns Array of AccountInfo objects that match account and tenant profile filters + */ + buildTenantProfiles(cachedAccounts, correlationId, accountFilter) { + return cachedAccounts.flatMap((accountEntity) => { + return this.getTenantProfilesFromAccountEntity(accountEntity, correlationId, accountFilter == null ? void 0 : accountFilter.tenantId, accountFilter); + }); + } + getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter) { + let tenantedAccountInfo = null; + let idTokenClaims; + if (tenantProfileFilter) { + if (!this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter)) { + return null; + } + } + const idToken = this.getIdToken(accountInfo, correlationId, tokenKeys, tenantProfile.tenantId); + if (idToken) { + idTokenClaims = extractTokenClaims(idToken.secret, this.cryptoImpl.base64Decode); + if (!this.idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter)) { + return null; + } + } + tenantedAccountInfo = updateAccountTenantProfileData(accountInfo, tenantProfile, idTokenClaims, idToken == null ? void 0 : idToken.secret); + return tenantedAccountInfo; + } + getTenantProfilesFromAccountEntity(accountEntity, correlationId, targetTenantId, tenantProfileFilter) { + const accountInfo = accountEntity.getAccountInfo(); + let searchTenantProfiles = accountInfo.tenantProfiles || /* @__PURE__ */ new Map(); + const tokenKeys = this.getTokenKeys(); + if (targetTenantId) { + const tenantProfile = searchTenantProfiles.get(targetTenantId); + if (tenantProfile) { + searchTenantProfiles = /* @__PURE__ */ new Map([ + [targetTenantId, tenantProfile] + ]); + } else { + return []; + } + } + const matchingTenantProfiles = []; + searchTenantProfiles.forEach((tenantProfile) => { + const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(accountInfo, tokenKeys, tenantProfile, correlationId, tenantProfileFilter); + if (tenantedAccountInfo) { + matchingTenantProfiles.push(tenantedAccountInfo); + } + }); + return matchingTenantProfiles; + } + tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter) { + if (!!tenantProfileFilter.localAccountId && !this.matchLocalAccountIdFromTenantProfile(tenantProfile, tenantProfileFilter.localAccountId)) { + return false; + } + if (!!tenantProfileFilter.name && !(tenantProfile.name === tenantProfileFilter.name)) { + return false; + } + if (tenantProfileFilter.isHomeTenant !== void 0 && !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)) { + return false; + } + return true; + } + idTokenClaimsMatchTenantProfileFilter(idTokenClaims, tenantProfileFilter) { + if (tenantProfileFilter) { + if (!!tenantProfileFilter.localAccountId && !this.matchLocalAccountIdFromTokenClaims(idTokenClaims, tenantProfileFilter.localAccountId)) { + return false; + } + if (!!tenantProfileFilter.loginHint && !this.matchLoginHintFromTokenClaims(idTokenClaims, tenantProfileFilter.loginHint)) { + return false; + } + if (!!tenantProfileFilter.username && !this.matchUsername(idTokenClaims.preferred_username, tenantProfileFilter.username)) { + return false; + } + if (!!tenantProfileFilter.name && !this.matchName(idTokenClaims, tenantProfileFilter.name)) { + return false; + } + if (!!tenantProfileFilter.sid && !this.matchSid(idTokenClaims, tenantProfileFilter.sid)) { + return false; + } + } + return true; + } + /** + * saves a cache record + * @param cacheRecord {CacheRecord} + * @param storeInCache {?StoreInCache} + * @param correlationId {?string} correlation id + */ + async saveCacheRecord(cacheRecord, correlationId, storeInCache) { + var _a; + if (!cacheRecord) { + throw createClientAuthError(invalidCacheRecord); + } + try { + if (!!cacheRecord.account) { + await this.setAccount(cacheRecord.account, correlationId); + } + if (!!cacheRecord.idToken && (storeInCache == null ? void 0 : storeInCache.idToken) !== false) { + await this.setIdTokenCredential(cacheRecord.idToken, correlationId); + } + if (!!cacheRecord.accessToken && (storeInCache == null ? void 0 : storeInCache.accessToken) !== false) { + await this.saveAccessToken(cacheRecord.accessToken, correlationId); + } + if (!!cacheRecord.refreshToken && (storeInCache == null ? void 0 : storeInCache.refreshToken) !== false) { + await this.setRefreshTokenCredential(cacheRecord.refreshToken, correlationId); + } + if (!!cacheRecord.appMetadata) { + this.setAppMetadata(cacheRecord.appMetadata, correlationId); + } + } catch (e) { + (_a = this.commonLogger) == null ? void 0 : _a.error(`CacheManager.saveCacheRecord: failed`); + if (e instanceof AuthError) { + throw e; + } else { + throw createCacheError(e); + } + } + } + /** + * saves access token credential + * @param credential + */ + async saveAccessToken(credential, correlationId) { + const accessTokenFilter = { + clientId: credential.clientId, + credentialType: credential.credentialType, + environment: credential.environment, + homeAccountId: credential.homeAccountId, + realm: credential.realm, + tokenType: credential.tokenType, + requestedClaimsHash: credential.requestedClaimsHash + }; + const tokenKeys = this.getTokenKeys(); + const currentScopes = ScopeSet.fromString(credential.target); + tokenKeys.accessToken.forEach((key) => { + if (!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) { + return; + } + const tokenEntity = this.getAccessTokenCredential(key, correlationId); + if (tokenEntity && this.credentialMatchesFilter(tokenEntity, accessTokenFilter)) { + const tokenScopeSet = ScopeSet.fromString(tokenEntity.target); + if (tokenScopeSet.intersectingScopeSets(currentScopes)) { + this.removeAccessToken(key, correlationId); + } + } + }); + await this.setAccessTokenCredential(credential, correlationId); + } + /** + * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache + * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared + * @param accountFilter - An object containing Account properties to filter by + */ + getAccountsFilteredBy(accountFilter, correlationId) { + const allAccountKeys = this.getAccountKeys(); + const matchingAccounts = []; + allAccountKeys.forEach((cacheKey) => { + var _a; + const entity = this.getAccount(cacheKey, correlationId); + if (!entity) { + return; + } + if (!!accountFilter.homeAccountId && !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) { + return; + } + if (!!accountFilter.username && !this.matchUsername(entity.username, accountFilter.username)) { + return; + } + if (!!accountFilter.environment && !this.matchEnvironment(entity, accountFilter.environment)) { + return; + } + if (!!accountFilter.realm && !this.matchRealm(entity, accountFilter.realm)) { + return; + } + if (!!accountFilter.nativeAccountId && !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) { + return; + } + if (!!accountFilter.authorityType && !this.matchAuthorityType(entity, accountFilter.authorityType)) { + return; + } + const tenantProfileFilter = { + localAccountId: accountFilter == null ? void 0 : accountFilter.localAccountId, + name: accountFilter == null ? void 0 : accountFilter.name + }; + const matchingTenantProfiles = (_a = entity.tenantProfiles) == null ? void 0 : _a.filter((tenantProfile) => { + return this.tenantProfileMatchesFilter(tenantProfile, tenantProfileFilter); + }); + if (matchingTenantProfiles && matchingTenantProfiles.length === 0) { + return; + } + matchingAccounts.push(entity); + }); + return matchingAccounts; + } + /** + * Returns whether or not the given credential entity matches the filter + * @param entity + * @param filter + * @returns + */ + credentialMatchesFilter(entity, filter) { + if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) { + return false; + } + if (!!filter.userAssertionHash && !this.matchUserAssertionHash(entity, filter.userAssertionHash)) { + return false; + } + if (typeof filter.homeAccountId === "string" && !this.matchHomeAccountId(entity, filter.homeAccountId)) { + return false; + } + if (!!filter.environment && !this.matchEnvironment(entity, filter.environment)) { + return false; + } + if (!!filter.realm && !this.matchRealm(entity, filter.realm)) { + return false; + } + if (!!filter.credentialType && !this.matchCredentialType(entity, filter.credentialType)) { + return false; + } + if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) { + return false; + } + if (!!filter.target && !this.matchTarget(entity, filter.target)) { + return false; + } + if (filter.requestedClaimsHash || entity.requestedClaimsHash) { + if (entity.requestedClaimsHash !== filter.requestedClaimsHash) { + return false; + } + } + if (entity.credentialType === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) { + if (!!filter.tokenType && !this.matchTokenType(entity, filter.tokenType)) { + return false; + } + if (filter.tokenType === AuthenticationScheme.SSH) { + if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) { + return false; + } + } + } + return true; + } + /** + * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata + * @param filter + */ + getAppMetadataFilteredBy(filter) { + const allCacheKeys = this.getKeys(); + const matchingAppMetadata = {}; + allCacheKeys.forEach((cacheKey) => { + if (!this.isAppMetadata(cacheKey)) { + return; + } + const entity = this.getAppMetadata(cacheKey); + if (!entity) { + return; + } + if (!!filter.environment && !this.matchEnvironment(entity, filter.environment)) { + return; + } + if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) { + return; + } + matchingAppMetadata[cacheKey] = entity; + }); + return matchingAppMetadata; + } + /** + * retrieve authorityMetadata that contains a matching alias + * @param filter + */ + getAuthorityMetadataByAlias(host) { + const allCacheKeys = this.getAuthorityMetadataKeys(); + let matchedEntity = null; + allCacheKeys.forEach((cacheKey) => { + if (!this.isAuthorityMetadata(cacheKey) || cacheKey.indexOf(this.clientId) === -1) { + return; + } + const entity = this.getAuthorityMetadata(cacheKey); + if (!entity) { + return; + } + if (entity.aliases.indexOf(host) === -1) { + return; + } + matchedEntity = entity; + }); + return matchedEntity; + } + /** + * Removes all accounts and related tokens from cache. + */ + removeAllAccounts(correlationId) { + const accounts = this.getAllAccounts({}, correlationId); + accounts.forEach((account) => { + this.removeAccount(account, correlationId); + }); + } + /** + * Removes the account and related tokens for a given account key + * @param account + */ + removeAccount(account, correlationId) { + this.removeAccountContext(account, correlationId); + const accountKeys = this.getAccountKeys(); + const keyFilter = (key) => { + return key.includes(account.homeAccountId) && key.includes(account.environment); + }; + accountKeys.filter(keyFilter).forEach((key) => { + this.removeItem(key, correlationId); + this.performanceClient.incrementFields({ accountsRemoved: 1 }, correlationId); + }); + } + /** + * Removes credentials associated with the provided account + * @param account + */ + removeAccountContext(account, correlationId) { + const allTokenKeys = this.getTokenKeys(); + const keyFilter = (key) => { + return key.includes(account.homeAccountId) && key.includes(account.environment); + }; + allTokenKeys.idToken.filter(keyFilter).forEach((key) => { + this.removeIdToken(key, correlationId); + }); + allTokenKeys.accessToken.filter(keyFilter).forEach((key) => { + this.removeAccessToken(key, correlationId); + }); + allTokenKeys.refreshToken.filter(keyFilter).forEach((key) => { + this.removeRefreshToken(key, correlationId); + }); + } + /** + * Removes accessToken from the cache + * @param key + * @param correlationId + */ + removeAccessToken(key, correlationId) { + const credential = this.getAccessTokenCredential(key, correlationId); + this.removeItem(key, correlationId); + this.performanceClient.incrementFields({ accessTokensRemoved: 1 }, correlationId); + if (!credential || credential.credentialType.toLowerCase() !== CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase() || credential.tokenType !== AuthenticationScheme.POP) { + return; + } + const kid = credential.keyId; + if (kid) { + void this.cryptoImpl.removeTokenBindingKey(kid).catch(() => { + var _a; + this.commonLogger.error(`Failed to remove token binding key ${kid}`, correlationId); + (_a = this.performanceClient) == null ? void 0 : _a.incrementFields({ removeTokenBindingKeyFailure: 1 }, correlationId); + }); + } + } + /** + * Removes all app metadata objects from cache. + */ + removeAppMetadata(correlationId) { + const allCacheKeys = this.getKeys(); + allCacheKeys.forEach((cacheKey) => { + if (this.isAppMetadata(cacheKey)) { + this.removeItem(cacheKey, correlationId); + } + }); + return true; + } + /** + * Retrieve IdTokenEntity from cache + * @param account {AccountInfo} + * @param tokenKeys {?TokenKeys} + * @param targetRealm {?string} + * @param performanceClient {?IPerformanceClient} + * @param correlationId {?string} + */ + getIdToken(account, correlationId, tokenKeys, targetRealm, performanceClient) { + this.commonLogger.trace("CacheManager - getIdToken called"); + const idTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: CredentialType.ID_TOKEN, + clientId: this.clientId, + realm: targetRealm + }; + const idTokenMap = this.getIdTokensByFilter(idTokenFilter, correlationId, tokenKeys); + const numIdTokens = idTokenMap.size; + if (numIdTokens < 1) { + this.commonLogger.info("CacheManager:getIdToken - No token found"); + return null; + } else if (numIdTokens > 1) { + let tokensToBeRemoved = idTokenMap; + if (!targetRealm) { + const homeIdTokenMap = /* @__PURE__ */ new Map(); + idTokenMap.forEach((idToken, key) => { + if (idToken.realm === account.tenantId) { + homeIdTokenMap.set(key, idToken); + } + }); + const numHomeIdTokens = homeIdTokenMap.size; + if (numHomeIdTokens < 1) { + this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result"); + return idTokenMap.values().next().value; + } else if (numHomeIdTokens === 1) { + this.commonLogger.info("CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile"); + return homeIdTokenMap.values().next().value; + } else { + tokensToBeRemoved = homeIdTokenMap; + } + } + this.commonLogger.info("CacheManager:getIdToken - Multiple matching ID tokens found, clearing them"); + tokensToBeRemoved.forEach((idToken, key) => { + this.removeIdToken(key, correlationId); + }); + if (performanceClient && correlationId) { + performanceClient.addFields({ multiMatchedID: idTokenMap.size }, correlationId); + } + return null; + } + this.commonLogger.info("CacheManager:getIdToken - Returning ID token"); + return idTokenMap.values().next().value; + } + /** + * Gets all idTokens matching the given filter + * @param filter + * @returns + */ + getIdTokensByFilter(filter, correlationId, tokenKeys) { + const idTokenKeys = tokenKeys && tokenKeys.idToken || this.getTokenKeys().idToken; + const idTokens = /* @__PURE__ */ new Map(); + idTokenKeys.forEach((key) => { + if (!this.idTokenKeyMatchesFilter(key, { + clientId: this.clientId, + ...filter + })) { + return; + } + const idToken = this.getIdTokenCredential(key, correlationId); + if (idToken && this.credentialMatchesFilter(idToken, filter)) { + idTokens.set(key, idToken); + } + }); + return idTokens; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + * @returns + */ + idTokenKeyMatchesFilter(inputKey, filter) { + const key = inputKey.toLowerCase(); + if (filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + return true; + } + /** + * Removes idToken from the cache + * @param key + */ + removeIdToken(key, correlationId) { + this.removeItem(key, correlationId); + } + /** + * Removes refresh token from the cache + * @param key + */ + removeRefreshToken(key, correlationId) { + this.removeItem(key, correlationId); + } + /** + * Retrieve AccessTokenEntity from cache + * @param account {AccountInfo} + * @param request {BaseAuthRequest} + * @param correlationId {?string} + * @param tokenKeys {?TokenKeys} + * @param performanceClient {?IPerformanceClient} + */ + getAccessToken(account, request, tokenKeys, targetRealm) { + const correlationId = request.correlationId; + this.commonLogger.trace("CacheManager - getAccessToken called", correlationId); + const scopes = ScopeSet.createSearchScopes(request.scopes); + const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER; + const credentialType = authScheme && authScheme.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase() ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME : CredentialType.ACCESS_TOKEN; + const accessTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType, + clientId: this.clientId, + realm: targetRealm || account.tenantId, + target: scopes, + tokenType: authScheme, + keyId: request.sshKid, + requestedClaimsHash: request.requestedClaimsHash + }; + const accessTokenKeys = tokenKeys && tokenKeys.accessToken || this.getTokenKeys().accessToken; + const accessTokens = []; + accessTokenKeys.forEach((key) => { + if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) { + const accessToken = this.getAccessTokenCredential(key, correlationId); + if (accessToken && this.credentialMatchesFilter(accessToken, accessTokenFilter)) { + accessTokens.push(accessToken); + } + } + }); + const numAccessTokens = accessTokens.length; + if (numAccessTokens < 1) { + this.commonLogger.info("CacheManager:getAccessToken - No token found", correlationId); + return null; + } else if (numAccessTokens > 1) { + this.commonLogger.info("CacheManager:getAccessToken - Multiple access tokens found, clearing them", correlationId); + accessTokens.forEach((accessToken) => { + this.removeAccessToken(this.generateCredentialKey(accessToken), correlationId); + }); + this.performanceClient.addFields({ multiMatchedAT: accessTokens.length }, correlationId); + return null; + } + this.commonLogger.info("CacheManager:getAccessToken - Returning access token", correlationId); + return accessTokens[0]; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + * @param keyMustContainAllScopes + * @returns + */ + accessTokenKeyMatchesFilter(inputKey, filter, keyMustContainAllScopes) { + const key = inputKey.toLowerCase(); + if (filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) { + return false; + } + if (filter.requestedClaimsHash && key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1) { + return false; + } + if (filter.target) { + const scopes = filter.target.asArray(); + for (let i = 0; i < scopes.length; i++) { + if (keyMustContainAllScopes && !key.includes(scopes[i].toLowerCase())) { + return false; + } else if (!keyMustContainAllScopes && key.includes(scopes[i].toLowerCase())) { + return true; + } + } + } + return true; + } + /** + * Gets all access tokens matching the filter + * @param filter + * @returns + */ + getAccessTokensByFilter(filter, correlationId) { + const tokenKeys = this.getTokenKeys(); + const accessTokens = []; + tokenKeys.accessToken.forEach((key) => { + if (!this.accessTokenKeyMatchesFilter(key, filter, true)) { + return; + } + const accessToken = this.getAccessTokenCredential(key, correlationId); + if (accessToken && this.credentialMatchesFilter(accessToken, filter)) { + accessTokens.push(accessToken); + } + }); + return accessTokens; + } + /** + * Helper to retrieve the appropriate refresh token from cache + * @param account {AccountInfo} + * @param familyRT {boolean} + * @param correlationId {?string} + * @param tokenKeys {?TokenKeys} + * @param performanceClient {?IPerformanceClient} + */ + getRefreshToken(account, familyRT, correlationId, tokenKeys, performanceClient) { + this.commonLogger.trace("CacheManager - getRefreshToken called"); + const id = familyRT ? THE_FAMILY_ID : void 0; + const refreshTokenFilter = { + homeAccountId: account.homeAccountId, + environment: account.environment, + credentialType: CredentialType.REFRESH_TOKEN, + clientId: this.clientId, + familyId: id + }; + const refreshTokenKeys = tokenKeys && tokenKeys.refreshToken || this.getTokenKeys().refreshToken; + const refreshTokens = []; + refreshTokenKeys.forEach((key) => { + if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) { + const refreshToken = this.getRefreshTokenCredential(key, correlationId); + if (refreshToken && this.credentialMatchesFilter(refreshToken, refreshTokenFilter)) { + refreshTokens.push(refreshToken); + } + } + }); + const numRefreshTokens = refreshTokens.length; + if (numRefreshTokens < 1) { + this.commonLogger.info("CacheManager:getRefreshToken - No refresh token found."); + return null; + } + if (numRefreshTokens > 1 && performanceClient && correlationId) { + performanceClient.addFields({ multiMatchedRT: numRefreshTokens }, correlationId); + } + this.commonLogger.info("CacheManager:getRefreshToken - returning refresh token"); + return refreshTokens[0]; + } + /** + * Validate the cache key against filter before retrieving and parsing cache value + * @param key + * @param filter + */ + refreshTokenKeyMatchesFilter(inputKey, filter) { + const key = inputKey.toLowerCase(); + if (filter.familyId && key.indexOf(filter.familyId.toLowerCase()) === -1) { + return false; + } + if (!filter.familyId && filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) { + return false; + } + if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) { + return false; + } + return true; + } + /** + * Retrieve AppMetadataEntity from cache + */ + readAppMetadataFromCache(environment) { + const appMetadataFilter = { + environment, + clientId: this.clientId + }; + const appMetadata = this.getAppMetadataFilteredBy(appMetadataFilter); + const appMetadataEntries = Object.keys(appMetadata).map((key) => appMetadata[key]); + const numAppMetadata = appMetadataEntries.length; + if (numAppMetadata < 1) { + return null; + } else if (numAppMetadata > 1) { + throw createClientAuthError(multipleMatchingAppMetadata); + } + return appMetadataEntries[0]; + } + /** + * Return the family_id value associated with FOCI + * @param environment + * @param clientId + */ + isAppMetadataFOCI(environment) { + const appMetadata = this.readAppMetadataFromCache(environment); + return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID); + } + /** + * helper to match account ids + * @param value + * @param homeAccountId + */ + matchHomeAccountId(entity, homeAccountId) { + return !!(typeof entity.homeAccountId === "string" && homeAccountId === entity.homeAccountId); + } + /** + * helper to match account ids + * @param entity + * @param localAccountId + * @returns + */ + matchLocalAccountIdFromTokenClaims(tokenClaims, localAccountId) { + const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub; + return localAccountId === idTokenLocalAccountId; + } + matchLocalAccountIdFromTenantProfile(tenantProfile, localAccountId) { + return tenantProfile.localAccountId === localAccountId; + } + /** + * helper to match names + * @param entity + * @param name + * @returns true if the downcased name properties are present and match in the filter and the entity + */ + matchName(claims, name3) { + var _a; + return !!(name3.toLowerCase() === ((_a = claims.name) == null ? void 0 : _a.toLowerCase())); + } + /** + * helper to match usernames + * @param entity + * @param username + * @returns + */ + matchUsername(cachedUsername, filterUsername) { + return !!(cachedUsername && typeof cachedUsername === "string" && (filterUsername == null ? void 0 : filterUsername.toLowerCase()) === cachedUsername.toLowerCase()); + } + /** + * helper to match assertion + * @param value + * @param oboAssertion + */ + matchUserAssertionHash(entity, userAssertionHash) { + return !!(entity.userAssertionHash && userAssertionHash === entity.userAssertionHash); + } + /** + * helper to match environment + * @param value + * @param environment + */ + matchEnvironment(entity, environment) { + if (this.staticAuthorityOptions) { + const staticAliases = getAliasesFromStaticSources(this.staticAuthorityOptions, this.commonLogger); + if (staticAliases.includes(environment) && staticAliases.includes(entity.environment)) { + return true; + } + } + const cloudMetadata = this.getAuthorityMetadataByAlias(environment); + if (cloudMetadata && cloudMetadata.aliases.indexOf(entity.environment) > -1) { + return true; + } + return false; + } + /** + * helper to match credential type + * @param entity + * @param credentialType + */ + matchCredentialType(entity, credentialType) { + return entity.credentialType && credentialType.toLowerCase() === entity.credentialType.toLowerCase(); + } + /** + * helper to match client ids + * @param entity + * @param clientId + */ + matchClientId(entity, clientId) { + return !!(entity.clientId && clientId === entity.clientId); + } + /** + * helper to match family ids + * @param entity + * @param familyId + */ + matchFamilyId(entity, familyId) { + return !!(entity.familyId && familyId === entity.familyId); + } + /** + * helper to match realm + * @param entity + * @param realm + */ + matchRealm(entity, realm) { + var _a; + return !!(((_a = entity.realm) == null ? void 0 : _a.toLowerCase()) === realm.toLowerCase()); + } + /** + * helper to match nativeAccountId + * @param entity + * @param nativeAccountId + * @returns boolean indicating the match result + */ + matchNativeAccountId(entity, nativeAccountId) { + return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId); + } + /** + * helper to match loginHint which can be either: + * 1. login_hint ID token claim + * 2. username in cached account object + * 3. upn in ID token claims + * @param entity + * @param loginHint + * @returns + */ + matchLoginHintFromTokenClaims(tokenClaims, loginHint) { + if (tokenClaims.login_hint === loginHint) { + return true; + } + if (tokenClaims.preferred_username === loginHint) { + return true; + } + if (tokenClaims.upn === loginHint) { + return true; + } + return false; + } + /** + * Helper to match sid + * @param entity + * @param sid + * @returns true if the sid claim is present and matches the filter + */ + matchSid(idTokenClaims, sid) { + return idTokenClaims.sid === sid; + } + matchAuthorityType(entity, authorityType) { + return !!(entity.authorityType && authorityType.toLowerCase() === entity.authorityType.toLowerCase()); + } + /** + * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise. + * @param entity + * @param target + */ + matchTarget(entity, target) { + const isNotAccessTokenCredential = entity.credentialType !== CredentialType.ACCESS_TOKEN && entity.credentialType !== CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; + if (isNotAccessTokenCredential || !entity.target) { + return false; + } + const entityScopeSet = ScopeSet.fromString(entity.target); + return entityScopeSet.containsScopeSet(target); + } + /** + * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise + * @param entity + * @param tokenType + */ + matchTokenType(entity, tokenType) { + return !!(entity.tokenType && entity.tokenType === tokenType); + } + /** + * Returns true if the credential's keyId matches the one in the request, false otherwise + * @param entity + * @param keyId + */ + matchKeyId(entity, keyId) { + return !!(entity.keyId && entity.keyId === keyId); + } + /** + * returns if a given cache entity is of the type appmetadata + * @param key + */ + isAppMetadata(key) { + return key.indexOf(APP_METADATA) !== -1; + } + /** + * returns if a given cache entity is of the type authoritymetadata + * @param key + */ + isAuthorityMetadata(key) { + return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1; + } + /** + * returns cache key used for cloud instance metadata + */ + generateAuthorityMetadataCacheKey(authority) { + return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`; + } + /** + * Helper to convert serialized data to object + * @param obj + * @param json + */ + static toObject(obj, json) { + for (const propertyName in json) { + obj[propertyName] = json[propertyName]; + } + return obj; + } +}; +var DefaultStorageClass = class extends CacheManager { + async setAccount() { + throw createClientAuthError(methodNotImplemented); + } + getAccount() { + throw createClientAuthError(methodNotImplemented); + } + async setIdTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + getIdTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + async setAccessTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + getAccessTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + async setRefreshTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + getRefreshTokenCredential() { + throw createClientAuthError(methodNotImplemented); + } + setAppMetadata() { + throw createClientAuthError(methodNotImplemented); + } + getAppMetadata() { + throw createClientAuthError(methodNotImplemented); + } + setServerTelemetry() { + throw createClientAuthError(methodNotImplemented); + } + getServerTelemetry() { + throw createClientAuthError(methodNotImplemented); + } + setAuthorityMetadata() { + throw createClientAuthError(methodNotImplemented); + } + getAuthorityMetadata() { + throw createClientAuthError(methodNotImplemented); + } + getAuthorityMetadataKeys() { + throw createClientAuthError(methodNotImplemented); + } + setThrottlingCache() { + throw createClientAuthError(methodNotImplemented); + } + getThrottlingCache() { + throw createClientAuthError(methodNotImplemented); + } + removeItem() { + throw createClientAuthError(methodNotImplemented); + } + getKeys() { + throw createClientAuthError(methodNotImplemented); + } + getAccountKeys() { + throw createClientAuthError(methodNotImplemented); + } + getTokenKeys() { + throw createClientAuthError(methodNotImplemented); + } + generateCredentialKey() { + throw createClientAuthError(methodNotImplemented); + } + generateAccountKey() { + throw createClientAuthError(methodNotImplemented); + } +}; + +// node_modules/@azure/msal-common/dist/authority/ProtocolMode.mjs +var ProtocolMode = { + /** + * Auth Code + PKCE with Entra ID (formerly AAD) specific optimizations and features + */ + AAD: "AAD", + /** + * Auth Code + PKCE without Entra ID specific optimizations and features. For use only with non-Microsoft owned authorities. + * Support is limited for this mode. + */ + OIDC: "OIDC", + /** + * Encrypted Authorize Response (EAR) with Entra ID specific optimizations and features + */ + EAR: "EAR" +}; + +// node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceEvent.mjs +var PerformanceEvents = { + /** + * acquireTokenByCode API (msal-browser and msal-node). + * Used to acquire tokens by trading an authorization code against the token endpoint. + */ + AcquireTokenByCode: "acquireTokenByCode", + /** + * acquireTokenByRefreshToken API (msal-browser and msal-node). + * Used to renew an access token using a refresh token against the token endpoint. + */ + AcquireTokenByRefreshToken: "acquireTokenByRefreshToken", + /** + * acquireTokenSilent API (msal-browser and msal-node). + * Used to silently acquire a new access token (from the cache or the network). + */ + AcquireTokenSilent: "acquireTokenSilent", + /** + * acquireTokenSilentAsync (msal-browser). + * Internal API for acquireTokenSilent. + */ + AcquireTokenSilentAsync: "acquireTokenSilentAsync", + /** + * acquireTokenPopup (msal-browser). + * Used to acquire a new access token interactively through pop ups + */ + AcquireTokenPopup: "acquireTokenPopup", + /** + * acquireTokenPreRedirect (msal-browser). + * First part of the redirect flow. + * Used to acquire a new access token interactively through redirects. + */ + AcquireTokenPreRedirect: "acquireTokenPreRedirect", + /** + * acquireTokenRedirect (msal-browser). + * Second part of the redirect flow. + * Used to acquire a new access token interactively through redirects. + */ + AcquireTokenRedirect: "acquireTokenRedirect", + /** + * getPublicKeyThumbprint API in CryptoOpts class (msal-browser). + * Used to generate a public/private keypair and generate a public key thumbprint for pop requests. + */ + CryptoOptsGetPublicKeyThumbprint: "cryptoOptsGetPublicKeyThumbprint", + /** + * signJwt API in CryptoOpts class (msal-browser). + * Used to signed a pop token. + */ + CryptoOptsSignJwt: "cryptoOptsSignJwt", + /** + * acquireToken API in the SilentCacheClient class (msal-browser). + * Used to read access tokens from the cache. + */ + SilentCacheClientAcquireToken: "silentCacheClientAcquireToken", + /** + * acquireToken API in the SilentIframeClient class (msal-browser). + * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe. + */ + SilentIframeClientAcquireToken: "silentIframeClientAcquireToken", + AwaitConcurrentIframe: "awaitConcurrentIframe", + /** + * acquireToken API in SilentRereshClient (msal-browser). + * Used to acquire a new set of tokens from the token endpoint using a refresh token. + */ + SilentRefreshClientAcquireToken: "silentRefreshClientAcquireToken", + /** + * ssoSilent API (msal-browser). + * Used to silently acquire an authorization code and set of tokens using a hidden iframe. + */ + SsoSilent: "ssoSilent", + /** + * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser). + * Used to load authority metadata for a request. + */ + StandardInteractionClientGetDiscoveredAuthority: "standardInteractionClientGetDiscoveredAuthority", + /** + * acquireToken APIs in msal-browser. + * Used to make an /authorize endpoint call with native brokering enabled. + */ + FetchAccountIdWithNativeBroker: "fetchAccountIdWithNativeBroker", + /** + * acquireToken API in NativeInteractionClient class (msal-browser). + * Used to acquire a token from Native component when native brokering is enabled. + */ + NativeInteractionClientAcquireToken: "nativeInteractionClientAcquireToken", + /** + * Time spent creating default headers for requests to token endpoint + */ + BaseClientCreateTokenRequestHeaders: "baseClientCreateTokenRequestHeaders", + /** + * Time spent sending/waiting for the response of a request to the token endpoint + */ + NetworkClientSendPostRequestAsync: "networkClientSendPostRequestAsync", + RefreshTokenClientExecutePostToTokenEndpoint: "refreshTokenClientExecutePostToTokenEndpoint", + AuthorizationCodeClientExecutePostToTokenEndpoint: "authorizationCodeClientExecutePostToTokenEndpoint", + /** + * Used to measure the time taken for completing embedded-broker handshake (PW-Broker). + */ + BrokerHandhshake: "brokerHandshake", + /** + * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) . + */ + AcquireTokenByRefreshTokenInBroker: "acquireTokenByRefreshTokenInBroker", + /** + * Time taken for token acquisition by broker + */ + AcquireTokenByBroker: "acquireTokenByBroker", + /** + * Time spent on the network for refresh token acquisition + */ + RefreshTokenClientExecuteTokenRequest: "refreshTokenClientExecuteTokenRequest", + /** + * Time taken for acquiring refresh token , records RT size + */ + RefreshTokenClientAcquireToken: "refreshTokenClientAcquireToken", + /** + * Time taken for acquiring cached refresh token + */ + RefreshTokenClientAcquireTokenWithCachedRefreshToken: "refreshTokenClientAcquireTokenWithCachedRefreshToken", + /** + * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common). + */ + RefreshTokenClientAcquireTokenByRefreshToken: "refreshTokenClientAcquireTokenByRefreshToken", + /** + * Helper function to create token request body in RefreshTokenClient (msal-common). + */ + RefreshTokenClientCreateTokenRequestBody: "refreshTokenClientCreateTokenRequestBody", + /** + * acquireTokenFromCache (msal-browser). + * Internal API for acquiring token from cache + */ + AcquireTokenFromCache: "acquireTokenFromCache", + SilentFlowClientAcquireCachedToken: "silentFlowClientAcquireCachedToken", + SilentFlowClientGenerateResultFromCacheRecord: "silentFlowClientGenerateResultFromCacheRecord", + /** + * acquireTokenBySilentIframe (msal-browser). + * Internal API for acquiring token by silent Iframe + */ + AcquireTokenBySilentIframe: "acquireTokenBySilentIframe", + /** + * Internal API for initializing base request in BaseInteractionClient (msal-browser) + */ + InitializeBaseRequest: "initializeBaseRequest", + /** + * Internal API for initializing silent request in SilentCacheClient (msal-browser) + */ + InitializeSilentRequest: "initializeSilentRequest", + InitializeClientApplication: "initializeClientApplication", + InitializeCache: "initializeCache", + /** + * Helper function in SilentIframeClient class (msal-browser). + */ + SilentIframeClientTokenHelper: "silentIframeClientTokenHelper", + /** + * SilentHandler + */ + SilentHandlerInitiateAuthRequest: "silentHandlerInitiateAuthRequest", + SilentHandlerMonitorIframeForHash: "silentHandlerMonitorIframeForHash", + SilentHandlerLoadFrame: "silentHandlerLoadFrame", + SilentHandlerLoadFrameSync: "silentHandlerLoadFrameSync", + /** + * Helper functions in StandardInteractionClient class (msal-browser) + */ + StandardInteractionClientCreateAuthCodeClient: "standardInteractionClientCreateAuthCodeClient", + StandardInteractionClientGetClientConfiguration: "standardInteractionClientGetClientConfiguration", + StandardInteractionClientInitializeAuthorizationRequest: "standardInteractionClientInitializeAuthorizationRequest", + /** + * getAuthCodeUrl API (msal-browser and msal-node). + */ + GetAuthCodeUrl: "getAuthCodeUrl", + GetStandardParams: "getStandardParams", + /** + * Functions from InteractionHandler (msal-browser) + */ + HandleCodeResponseFromServer: "handleCodeResponseFromServer", + HandleCodeResponse: "handleCodeResponse", + HandleResponseEar: "handleResponseEar", + HandleResponsePlatformBroker: "handleResponsePlatformBroker", + HandleResponseCode: "handleResponseCode", + UpdateTokenEndpointAuthority: "updateTokenEndpointAuthority", + /** + * APIs in Authorization Code Client (msal-common) + */ + AuthClientAcquireToken: "authClientAcquireToken", + AuthClientExecuteTokenRequest: "authClientExecuteTokenRequest", + AuthClientCreateTokenRequestBody: "authClientCreateTokenRequestBody", + /** + * Generate functions in PopTokenGenerator (msal-common) + */ + PopTokenGenerateCnf: "popTokenGenerateCnf", + PopTokenGenerateKid: "popTokenGenerateKid", + /** + * handleServerTokenResponse API in ResponseHandler (msal-common) + */ + HandleServerTokenResponse: "handleServerTokenResponse", + DeserializeResponse: "deserializeResponse", + /** + * Authority functions + */ + AuthorityFactoryCreateDiscoveredInstance: "authorityFactoryCreateDiscoveredInstance", + AuthorityResolveEndpointsAsync: "authorityResolveEndpointsAsync", + AuthorityResolveEndpointsFromLocalSources: "authorityResolveEndpointsFromLocalSources", + AuthorityGetCloudDiscoveryMetadataFromNetwork: "authorityGetCloudDiscoveryMetadataFromNetwork", + AuthorityUpdateCloudDiscoveryMetadata: "authorityUpdateCloudDiscoveryMetadata", + AuthorityGetEndpointMetadataFromNetwork: "authorityGetEndpointMetadataFromNetwork", + AuthorityUpdateEndpointMetadata: "authorityUpdateEndpointMetadata", + AuthorityUpdateMetadataWithRegionalInformation: "authorityUpdateMetadataWithRegionalInformation", + /** + * Region Discovery functions + */ + RegionDiscoveryDetectRegion: "regionDiscoveryDetectRegion", + RegionDiscoveryGetRegionFromIMDS: "regionDiscoveryGetRegionFromIMDS", + RegionDiscoveryGetCurrentVersion: "regionDiscoveryGetCurrentVersion", + AcquireTokenByCodeAsync: "acquireTokenByCodeAsync", + GetEndpointMetadataFromNetwork: "getEndpointMetadataFromNetwork", + GetCloudDiscoveryMetadataFromNetworkMeasurement: "getCloudDiscoveryMetadataFromNetworkMeasurement", + HandleRedirectPromiseMeasurement: "handleRedirectPromise", + HandleNativeRedirectPromiseMeasurement: "handleNativeRedirectPromise", + UpdateCloudDiscoveryMetadataMeasurement: "updateCloudDiscoveryMetadataMeasurement", + UsernamePasswordClientAcquireToken: "usernamePasswordClientAcquireToken", + NativeMessageHandlerHandshake: "nativeMessageHandlerHandshake", + NativeGenerateAuthResult: "nativeGenerateAuthResult", + RemoveHiddenIframe: "removeHiddenIframe", + /** + * Cache operations + */ + ClearTokensAndKeysWithClaims: "clearTokensAndKeysWithClaims", + CacheManagerGetRefreshToken: "cacheManagerGetRefreshToken", + ImportExistingCache: "importExistingCache", + SetUserData: "setUserData", + LocalStorageUpdated: "localStorageUpdated", + /** + * Crypto Operations + */ + GeneratePkceCodes: "generatePkceCodes", + GenerateCodeVerifier: "generateCodeVerifier", + GenerateCodeChallengeFromVerifier: "generateCodeChallengeFromVerifier", + Sha256Digest: "sha256Digest", + GetRandomValues: "getRandomValues", + GenerateHKDF: "generateHKDF", + GenerateBaseKey: "generateBaseKey", + Base64Decode: "base64Decode", + UrlEncodeArr: "urlEncodeArr", + Encrypt: "encrypt", + Decrypt: "decrypt", + GenerateEarKey: "generateEarKey", + DecryptEarResponse: "decryptEarResponse" +}; +var PerformanceEventAbbreviations = /* @__PURE__ */ new Map([ + [PerformanceEvents.AcquireTokenByCode, "ATByCode"], + [PerformanceEvents.AcquireTokenByRefreshToken, "ATByRT"], + [PerformanceEvents.AcquireTokenSilent, "ATS"], + [PerformanceEvents.AcquireTokenSilentAsync, "ATSAsync"], + [PerformanceEvents.AcquireTokenPopup, "ATPopup"], + [PerformanceEvents.AcquireTokenRedirect, "ATRedirect"], + [ + PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, + "CryptoGetPKThumb" + ], + [PerformanceEvents.CryptoOptsSignJwt, "CryptoSignJwt"], + [PerformanceEvents.SilentCacheClientAcquireToken, "SltCacheClientAT"], + [PerformanceEvents.SilentIframeClientAcquireToken, "SltIframeClientAT"], + [PerformanceEvents.SilentRefreshClientAcquireToken, "SltRClientAT"], + [PerformanceEvents.SsoSilent, "SsoSlt"], + [ + PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, + "StdIntClientGetDiscAuth" + ], + [ + PerformanceEvents.FetchAccountIdWithNativeBroker, + "FetchAccIdWithNtvBroker" + ], + [ + PerformanceEvents.NativeInteractionClientAcquireToken, + "NtvIntClientAT" + ], + [ + PerformanceEvents.BaseClientCreateTokenRequestHeaders, + "BaseClientCreateTReqHead" + ], + [ + PerformanceEvents.NetworkClientSendPostRequestAsync, + "NetClientSendPost" + ], + [ + PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint, + "RTClientExecPost" + ], + [ + PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint, + "AuthCodeClientExecPost" + ], + [PerformanceEvents.BrokerHandhshake, "BrokerHandshake"], + [ + PerformanceEvents.AcquireTokenByRefreshTokenInBroker, + "ATByRTInBroker" + ], + [PerformanceEvents.AcquireTokenByBroker, "ATByBroker"], + [ + PerformanceEvents.RefreshTokenClientExecuteTokenRequest, + "RTClientExecTReq" + ], + [PerformanceEvents.RefreshTokenClientAcquireToken, "RTClientAT"], + [ + PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, + "RTClientATWithCachedRT" + ], + [ + PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, + "RTClientATByRT" + ], + [ + PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, + "RTClientCreateTReqBody" + ], + [PerformanceEvents.AcquireTokenFromCache, "ATFromCache"], + [ + PerformanceEvents.SilentFlowClientAcquireCachedToken, + "SltFlowClientATCached" + ], + [ + PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, + "SltFlowClientGenResFromCache" + ], + [PerformanceEvents.AcquireTokenBySilentIframe, "ATBySltIframe"], + [PerformanceEvents.InitializeBaseRequest, "InitBaseReq"], + [PerformanceEvents.InitializeSilentRequest, "InitSltReq"], + [ + PerformanceEvents.InitializeClientApplication, + "InitClientApplication" + ], + [PerformanceEvents.InitializeCache, "InitCache"], + [PerformanceEvents.ImportExistingCache, "importCache"], + [PerformanceEvents.SetUserData, "setUserData"], + [PerformanceEvents.LocalStorageUpdated, "localStorageUpdated"], + [PerformanceEvents.SilentIframeClientTokenHelper, "SIClientTHelper"], + [ + PerformanceEvents.SilentHandlerInitiateAuthRequest, + "SHandlerInitAuthReq" + ], + [ + PerformanceEvents.SilentHandlerMonitorIframeForHash, + "SltHandlerMonitorIframeForHash" + ], + [PerformanceEvents.SilentHandlerLoadFrame, "SHandlerLoadFrame"], + [PerformanceEvents.SilentHandlerLoadFrameSync, "SHandlerLoadFrameSync"], + [ + PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, + "StdIntClientCreateAuthCodeClient" + ], + [ + PerformanceEvents.StandardInteractionClientGetClientConfiguration, + "StdIntClientGetClientConf" + ], + [ + PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, + "StdIntClientInitAuthReq" + ], + [PerformanceEvents.GetAuthCodeUrl, "GetAuthCodeUrl"], + [ + PerformanceEvents.HandleCodeResponseFromServer, + "HandleCodeResFromServer" + ], + [PerformanceEvents.HandleCodeResponse, "HandleCodeResp"], + [PerformanceEvents.HandleResponseEar, "HandleRespEar"], + [PerformanceEvents.HandleResponseCode, "HandleRespCode"], + [ + PerformanceEvents.HandleResponsePlatformBroker, + "HandleRespPlatBroker" + ], + [PerformanceEvents.UpdateTokenEndpointAuthority, "UpdTEndpointAuth"], + [PerformanceEvents.AuthClientAcquireToken, "AuthClientAT"], + [PerformanceEvents.AuthClientExecuteTokenRequest, "AuthClientExecTReq"], + [ + PerformanceEvents.AuthClientCreateTokenRequestBody, + "AuthClientCreateTReqBody" + ], + [PerformanceEvents.PopTokenGenerateCnf, "PopTGenCnf"], + [PerformanceEvents.PopTokenGenerateKid, "PopTGenKid"], + [PerformanceEvents.HandleServerTokenResponse, "HandleServerTRes"], + [PerformanceEvents.DeserializeResponse, "DeserializeRes"], + [ + PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, + "AuthFactCreateDiscInst" + ], + [ + PerformanceEvents.AuthorityResolveEndpointsAsync, + "AuthResolveEndpointsAsync" + ], + [ + PerformanceEvents.AuthorityResolveEndpointsFromLocalSources, + "AuthResolveEndpointsFromLocal" + ], + [ + PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, + "AuthGetCDMetaFromNet" + ], + [ + PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, + "AuthUpdCDMeta" + ], + [ + PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, + "AuthUpdCDMetaFromNet" + ], + [ + PerformanceEvents.AuthorityUpdateEndpointMetadata, + "AuthUpdEndpointMeta" + ], + [ + PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, + "AuthUpdMetaWithRegInfo" + ], + [PerformanceEvents.RegionDiscoveryDetectRegion, "RegDiscDetectReg"], + [ + PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, + "RegDiscGetRegFromIMDS" + ], + [ + PerformanceEvents.RegionDiscoveryGetCurrentVersion, + "RegDiscGetCurrentVer" + ], + [PerformanceEvents.AcquireTokenByCodeAsync, "ATByCodeAsync"], + [ + PerformanceEvents.GetEndpointMetadataFromNetwork, + "GetEndpointMetaFromNet" + ], + [ + PerformanceEvents.GetCloudDiscoveryMetadataFromNetworkMeasurement, + "GetCDMetaFromNet" + ], + [ + PerformanceEvents.HandleRedirectPromiseMeasurement, + "HandleRedirectPromise" + ], + [ + PerformanceEvents.HandleNativeRedirectPromiseMeasurement, + "HandleNtvRedirectPromise" + ], + [ + PerformanceEvents.UpdateCloudDiscoveryMetadataMeasurement, + "UpdateCDMeta" + ], + [ + PerformanceEvents.UsernamePasswordClientAcquireToken, + "UserPassClientAT" + ], + [ + PerformanceEvents.NativeMessageHandlerHandshake, + "NtvMsgHandlerHandshake" + ], + [PerformanceEvents.NativeGenerateAuthResult, "NtvGenAuthRes"], + [PerformanceEvents.RemoveHiddenIframe, "RemoveHiddenIframe"], + [ + PerformanceEvents.ClearTokensAndKeysWithClaims, + "ClearTAndKeysWithClaims" + ], + [PerformanceEvents.CacheManagerGetRefreshToken, "CacheManagerGetRT"], + [PerformanceEvents.GeneratePkceCodes, "GenPkceCodes"], + [PerformanceEvents.GenerateCodeVerifier, "GenCodeVerifier"], + [ + PerformanceEvents.GenerateCodeChallengeFromVerifier, + "GenCodeChallengeFromVerifier" + ], + [PerformanceEvents.Sha256Digest, "Sha256Digest"], + [PerformanceEvents.GetRandomValues, "GetRandomValues"], + [PerformanceEvents.GenerateHKDF, "genHKDF"], + [PerformanceEvents.GenerateBaseKey, "genBaseKey"], + [PerformanceEvents.Base64Decode, "b64Decode"], + [PerformanceEvents.UrlEncodeArr, "urlEncArr"], + [PerformanceEvents.Encrypt, "encrypt"], + [PerformanceEvents.Decrypt, "decrypt"], + [PerformanceEvents.GenerateEarKey, "genEarKey"], + [PerformanceEvents.DecryptEarResponse, "decryptEarResp"] +]); +var PerformanceEventStatus = { + NotStarted: 0, + InProgress: 1, + Completed: 2 +}; +var IntFields = /* @__PURE__ */ new Set([ + "accessTokenSize", + "durationMs", + "idTokenSize", + "matsSilentStatus", + "matsHttpStatus", + "refreshTokenSize", + "queuedTimeMs", + "startTimeMs", + "status", + "multiMatchedAT", + "multiMatchedID", + "multiMatchedRT", + "unencryptedCacheCount", + "encryptedCacheExpiredCount", + "oldAccountCount", + "oldAccessCount", + "oldIdCount", + "oldRefreshCount", + "currAccountCount", + "currAccessCount", + "currIdCount", + "currRefreshCount", + "expiredCacheRemovedCount", + "upgradedCacheCount" +]); + +// node_modules/@azure/msal-common/dist/telemetry/performance/StubPerformanceClient.mjs +var StubPerformanceMeasurement = class { + startMeasurement() { + return; + } + endMeasurement() { + return; + } + flushMeasurement() { + return null; + } +}; +var StubPerformanceClient = class { + generateId() { + return "callback-id"; + } + startMeasurement(measureName, correlationId) { + return { + end: () => null, + discard: () => { + }, + add: () => { + }, + increment: () => { + }, + event: { + eventId: this.generateId(), + status: PerformanceEventStatus.InProgress, + authority: "", + libraryName: "", + libraryVersion: "", + clientId: "", + name: measureName, + startTimeMs: Date.now(), + correlationId: correlationId || "" + }, + measurement: new StubPerformanceMeasurement() + }; + } + startPerformanceMeasurement() { + return new StubPerformanceMeasurement(); + } + calculateQueuedTime() { + return 0; + } + addQueueMeasurement() { + return; + } + setPreQueueTime() { + return; + } + endMeasurement() { + return null; + } + discardMeasurements() { + return; + } + removePerformanceCallback() { + return true; + } + addPerformanceCallback() { + return ""; + } + emitEvents() { + return; + } + addFields() { + return; + } + incrementFields() { + return; + } + cacheEventByCorrelationId() { + return; + } +}; + +// node_modules/@azure/msal-common/dist/config/ClientConfiguration.mjs +var DEFAULT_SYSTEM_OPTIONS = { + tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, + preventCorsPreflight: false +}; +var DEFAULT_LOGGER_IMPLEMENTATION = { + loggerCallback: () => { + }, + piiLoggingEnabled: false, + logLevel: LogLevel.Info, + correlationId: Constants.EMPTY_STRING +}; +var DEFAULT_CACHE_OPTIONS = { + claimsBasedCachingEnabled: false +}; +var DEFAULT_NETWORK_IMPLEMENTATION = { + async sendGetRequestAsync() { + throw createClientAuthError(methodNotImplemented); + }, + async sendPostRequestAsync() { + throw createClientAuthError(methodNotImplemented); + } +}; +var DEFAULT_LIBRARY_INFO = { + sku: Constants.SKU, + version, + cpu: Constants.EMPTY_STRING, + os: Constants.EMPTY_STRING +}; +var DEFAULT_CLIENT_CREDENTIALS = { + clientSecret: Constants.EMPTY_STRING, + clientAssertion: void 0 +}; +var DEFAULT_AZURE_CLOUD_OPTIONS = { + azureCloudInstance: AzureCloudInstance.None, + tenant: `${Constants.DEFAULT_COMMON_TENANT}` +}; +var DEFAULT_TELEMETRY_OPTIONS = { + application: { + appName: "", + appVersion: "" + } +}; +function buildClientConfiguration({ authOptions: userAuthOptions, systemOptions: userSystemOptions, loggerOptions: userLoggerOption, cacheOptions: userCacheOptions, storageInterface: storageImplementation, networkInterface: networkImplementation, cryptoInterface: cryptoImplementation, clientCredentials, libraryInfo, telemetry, serverTelemetryManager, persistencePlugin, serializableCache }) { + const loggerOptions = { + ...DEFAULT_LOGGER_IMPLEMENTATION, + ...userLoggerOption + }; + return { + authOptions: buildAuthOptions(userAuthOptions), + systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions }, + loggerOptions, + cacheOptions: { ...DEFAULT_CACHE_OPTIONS, ...userCacheOptions }, + storageInterface: storageImplementation || new DefaultStorageClass(userAuthOptions.clientId, DEFAULT_CRYPTO_IMPLEMENTATION, new Logger(loggerOptions), new StubPerformanceClient()), + networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION, + cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION, + clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS, + libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo }, + telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry }, + serverTelemetryManager: serverTelemetryManager || null, + persistencePlugin: persistencePlugin || null, + serializableCache: serializableCache || null + }; +} +function buildAuthOptions(authOptions) { + return { + clientCapabilities: [], + azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS, + skipAuthorityMetadataCache: false, + instanceAware: false, + encodeExtraQueryParams: false, + ...authOptions + }; +} +function isOidcProtocolMode(config) { + return config.authOptions.authority.options.protocolMode === ProtocolMode.OIDC; +} + +// node_modules/@azure/msal-common/dist/account/CcsCredential.mjs +var CcsCredentialType = { + HOME_ACCOUNT_ID: "home_account_id", + UPN: "UPN" +}; + +// node_modules/@azure/msal-common/dist/account/ClientInfo.mjs +function buildClientInfo(rawClientInfo, base64Decode2) { + if (!rawClientInfo) { + throw createClientAuthError(clientInfoEmptyError); + } + try { + const decodedClientInfo = base64Decode2(rawClientInfo); + return JSON.parse(decodedClientInfo); + } catch (e) { + throw createClientAuthError(clientInfoDecodingError); + } +} +function buildClientInfoFromHomeAccountId(homeAccountId) { + if (!homeAccountId) { + throw createClientAuthError(clientInfoDecodingError); + } + const clientInfoParts = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2); + return { + uid: clientInfoParts[0], + utid: clientInfoParts.length < 2 ? Constants.EMPTY_STRING : clientInfoParts[1] + }; +} + +// node_modules/@azure/msal-common/dist/request/RequestParameterBuilder.mjs +var RequestParameterBuilder_exports = {}; +__export(RequestParameterBuilder_exports, { + addApplicationTelemetry: () => addApplicationTelemetry, + addAuthorizationCode: () => addAuthorizationCode, + addBrokerParameters: () => addBrokerParameters, + addCcsOid: () => addCcsOid, + addCcsUpn: () => addCcsUpn, + addClaims: () => addClaims, + addClientAssertion: () => addClientAssertion, + addClientAssertionType: () => addClientAssertionType, + addClientCapabilitiesToClaims: () => addClientCapabilitiesToClaims, + addClientId: () => addClientId, + addClientInfo: () => addClientInfo, + addClientSecret: () => addClientSecret, + addCodeChallengeParams: () => addCodeChallengeParams, + addCodeVerifier: () => addCodeVerifier, + addCorrelationId: () => addCorrelationId, + addDeviceCode: () => addDeviceCode, + addDomainHint: () => addDomainHint, + addEARParameters: () => addEARParameters, + addExtraQueryParameters: () => addExtraQueryParameters, + addGrantType: () => addGrantType, + addIdTokenHint: () => addIdTokenHint, + addInstanceAware: () => addInstanceAware, + addLibraryInfo: () => addLibraryInfo, + addLoginHint: () => addLoginHint, + addLogoutHint: () => addLogoutHint, + addNativeBroker: () => addNativeBroker, + addNonce: () => addNonce, + addOboAssertion: () => addOboAssertion, + addPassword: () => addPassword, + addPopToken: () => addPopToken, + addPostBodyParameters: () => addPostBodyParameters, + addPostLogoutRedirectUri: () => addPostLogoutRedirectUri, + addPrompt: () => addPrompt, + addRedirectUri: () => addRedirectUri, + addRefreshToken: () => addRefreshToken, + addRequestTokenUse: () => addRequestTokenUse, + addResponseMode: () => addResponseMode, + addResponseType: () => addResponseType, + addScopes: () => addScopes, + addServerTelemetry: () => addServerTelemetry, + addSid: () => addSid, + addSshJwk: () => addSshJwk, + addState: () => addState, + addThrottling: () => addThrottling, + addUsername: () => addUsername, + instrumentBrokerParams: () => instrumentBrokerParams +}); + +// node_modules/@azure/msal-common/dist/constants/AADServerParamKeys.mjs +var AADServerParamKeys_exports = {}; +__export(AADServerParamKeys_exports, { + ACCESS_TOKEN: () => ACCESS_TOKEN, + BROKER_CLIENT_ID: () => BROKER_CLIENT_ID, + BROKER_REDIRECT_URI: () => BROKER_REDIRECT_URI, + CCS_HEADER: () => CCS_HEADER, + CLAIMS: () => CLAIMS, + CLIENT_ASSERTION: () => CLIENT_ASSERTION, + CLIENT_ASSERTION_TYPE: () => CLIENT_ASSERTION_TYPE, + CLIENT_ID: () => CLIENT_ID, + CLIENT_INFO: () => CLIENT_INFO2, + CLIENT_REQUEST_ID: () => CLIENT_REQUEST_ID, + CLIENT_SECRET: () => CLIENT_SECRET, + CODE: () => CODE, + CODE_CHALLENGE: () => CODE_CHALLENGE, + CODE_CHALLENGE_METHOD: () => CODE_CHALLENGE_METHOD, + CODE_VERIFIER: () => CODE_VERIFIER, + DEVICE_CODE: () => DEVICE_CODE, + DOMAIN_HINT: () => DOMAIN_HINT, + EAR_JWE_CRYPTO: () => EAR_JWE_CRYPTO, + EAR_JWK: () => EAR_JWK, + ERROR: () => ERROR, + ERROR_DESCRIPTION: () => ERROR_DESCRIPTION, + EXPIRES_IN: () => EXPIRES_IN, + FOCI: () => FOCI, + GRANT_TYPE: () => GRANT_TYPE, + ID_TOKEN: () => ID_TOKEN, + ID_TOKEN_HINT: () => ID_TOKEN_HINT, + INSTANCE_AWARE: () => INSTANCE_AWARE, + LOGIN_HINT: () => LOGIN_HINT, + LOGOUT_HINT: () => LOGOUT_HINT, + NATIVE_BROKER: () => NATIVE_BROKER, + NONCE: () => NONCE, + OBO_ASSERTION: () => OBO_ASSERTION, + ON_BEHALF_OF: () => ON_BEHALF_OF, + POST_LOGOUT_URI: () => POST_LOGOUT_URI, + PROMPT: () => PROMPT, + REDIRECT_URI: () => REDIRECT_URI, + REFRESH_TOKEN: () => REFRESH_TOKEN, + REFRESH_TOKEN_EXPIRES_IN: () => REFRESH_TOKEN_EXPIRES_IN, + REQUESTED_TOKEN_USE: () => REQUESTED_TOKEN_USE, + REQ_CNF: () => REQ_CNF, + RESPONSE_MODE: () => RESPONSE_MODE, + RESPONSE_TYPE: () => RESPONSE_TYPE, + RETURN_SPA_CODE: () => RETURN_SPA_CODE, + SCOPE: () => SCOPE, + SESSION_STATE: () => SESSION_STATE, + SID: () => SID, + STATE: () => STATE, + TOKEN_TYPE: () => TOKEN_TYPE, + X_APP_NAME: () => X_APP_NAME, + X_APP_VER: () => X_APP_VER, + X_CLIENT_CPU: () => X_CLIENT_CPU, + X_CLIENT_CURR_TELEM: () => X_CLIENT_CURR_TELEM, + X_CLIENT_EXTRA_SKU: () => X_CLIENT_EXTRA_SKU, + X_CLIENT_LAST_TELEM: () => X_CLIENT_LAST_TELEM, + X_CLIENT_OS: () => X_CLIENT_OS, + X_CLIENT_SKU: () => X_CLIENT_SKU, + X_CLIENT_VER: () => X_CLIENT_VER, + X_MS_LIB_CAPABILITY: () => X_MS_LIB_CAPABILITY +}); +var CLIENT_ID = "client_id"; +var REDIRECT_URI = "redirect_uri"; +var RESPONSE_TYPE = "response_type"; +var RESPONSE_MODE = "response_mode"; +var GRANT_TYPE = "grant_type"; +var CLAIMS = "claims"; +var SCOPE = "scope"; +var ERROR = "error"; +var ERROR_DESCRIPTION = "error_description"; +var ACCESS_TOKEN = "access_token"; +var ID_TOKEN = "id_token"; +var REFRESH_TOKEN = "refresh_token"; +var EXPIRES_IN = "expires_in"; +var REFRESH_TOKEN_EXPIRES_IN = "refresh_token_expires_in"; +var STATE = "state"; +var NONCE = "nonce"; +var PROMPT = "prompt"; +var SESSION_STATE = "session_state"; +var CLIENT_INFO2 = "client_info"; +var CODE = "code"; +var CODE_CHALLENGE = "code_challenge"; +var CODE_CHALLENGE_METHOD = "code_challenge_method"; +var CODE_VERIFIER = "code_verifier"; +var CLIENT_REQUEST_ID = "client-request-id"; +var X_CLIENT_SKU = "x-client-SKU"; +var X_CLIENT_VER = "x-client-VER"; +var X_CLIENT_OS = "x-client-OS"; +var X_CLIENT_CPU = "x-client-CPU"; +var X_CLIENT_CURR_TELEM = "x-client-current-telemetry"; +var X_CLIENT_LAST_TELEM = "x-client-last-telemetry"; +var X_MS_LIB_CAPABILITY = "x-ms-lib-capability"; +var X_APP_NAME = "x-app-name"; +var X_APP_VER = "x-app-ver"; +var POST_LOGOUT_URI = "post_logout_redirect_uri"; +var ID_TOKEN_HINT = "id_token_hint"; +var DEVICE_CODE = "device_code"; +var CLIENT_SECRET = "client_secret"; +var CLIENT_ASSERTION = "client_assertion"; +var CLIENT_ASSERTION_TYPE = "client_assertion_type"; +var TOKEN_TYPE = "token_type"; +var REQ_CNF = "req_cnf"; +var OBO_ASSERTION = "assertion"; +var REQUESTED_TOKEN_USE = "requested_token_use"; +var ON_BEHALF_OF = "on_behalf_of"; +var FOCI = "foci"; +var CCS_HEADER = "X-AnchorMailbox"; +var RETURN_SPA_CODE = "return_spa_code"; +var NATIVE_BROKER = "nativebroker"; +var LOGOUT_HINT = "logout_hint"; +var SID = "sid"; +var LOGIN_HINT = "login_hint"; +var DOMAIN_HINT = "domain_hint"; +var X_CLIENT_EXTRA_SKU = "x-client-xtra-sku"; +var BROKER_CLIENT_ID = "brk_client_id"; +var BROKER_REDIRECT_URI = "brk_redirect_uri"; +var INSTANCE_AWARE = "instance_aware"; +var EAR_JWK = "ear_jwk"; +var EAR_JWE_CRYPTO = "ear_jwe_crypto"; + +// node_modules/@azure/msal-common/dist/request/RequestParameterBuilder.mjs +function instrumentBrokerParams(parameters, correlationId, performanceClient) { + if (!correlationId) { + return; + } + const clientId = parameters.get(CLIENT_ID); + if (clientId && parameters.has(BROKER_CLIENT_ID)) { + performanceClient == null ? void 0 : performanceClient.addFields({ + embeddedClientId: clientId, + embeddedRedirectUri: parameters.get(REDIRECT_URI) + }, correlationId); + } +} +function addResponseType(parameters, responseType) { + parameters.set(RESPONSE_TYPE, responseType); +} +function addResponseMode(parameters, responseMode) { + parameters.set(RESPONSE_MODE, responseMode ? responseMode : ResponseMode.QUERY); +} +function addNativeBroker(parameters) { + parameters.set(NATIVE_BROKER, "1"); +} +function addScopes(parameters, scopes, addOidcScopes = true, defaultScopes = OIDC_DEFAULT_SCOPES) { + if (addOidcScopes && !defaultScopes.includes("openid") && !scopes.includes("openid")) { + defaultScopes.push("openid"); + } + const requestScopes = addOidcScopes ? [...scopes || [], ...defaultScopes] : scopes || []; + const scopeSet = new ScopeSet(requestScopes); + parameters.set(SCOPE, scopeSet.printScopes()); +} +function addClientId(parameters, clientId) { + parameters.set(CLIENT_ID, clientId); +} +function addRedirectUri(parameters, redirectUri) { + parameters.set(REDIRECT_URI, redirectUri); +} +function addPostLogoutRedirectUri(parameters, redirectUri) { + parameters.set(POST_LOGOUT_URI, redirectUri); +} +function addIdTokenHint(parameters, idTokenHint) { + parameters.set(ID_TOKEN_HINT, idTokenHint); +} +function addDomainHint(parameters, domainHint) { + parameters.set(DOMAIN_HINT, domainHint); +} +function addLoginHint(parameters, loginHint) { + parameters.set(LOGIN_HINT, loginHint); +} +function addCcsUpn(parameters, loginHint) { + parameters.set(HeaderNames.CCS_HEADER, `UPN:${loginHint}`); +} +function addCcsOid(parameters, clientInfo) { + parameters.set(HeaderNames.CCS_HEADER, `Oid:${clientInfo.uid}@${clientInfo.utid}`); +} +function addSid(parameters, sid) { + parameters.set(SID, sid); +} +function addClaims(parameters, claims, clientCapabilities) { + const mergedClaims = addClientCapabilitiesToClaims(claims, clientCapabilities); + try { + JSON.parse(mergedClaims); + } catch (e) { + throw createClientConfigurationError(invalidClaims); + } + parameters.set(CLAIMS, mergedClaims); +} +function addCorrelationId(parameters, correlationId) { + parameters.set(CLIENT_REQUEST_ID, correlationId); +} +function addLibraryInfo(parameters, libraryInfo) { + parameters.set(X_CLIENT_SKU, libraryInfo.sku); + parameters.set(X_CLIENT_VER, libraryInfo.version); + if (libraryInfo.os) { + parameters.set(X_CLIENT_OS, libraryInfo.os); + } + if (libraryInfo.cpu) { + parameters.set(X_CLIENT_CPU, libraryInfo.cpu); + } +} +function addApplicationTelemetry(parameters, appTelemetry) { + if (appTelemetry == null ? void 0 : appTelemetry.appName) { + parameters.set(X_APP_NAME, appTelemetry.appName); + } + if (appTelemetry == null ? void 0 : appTelemetry.appVersion) { + parameters.set(X_APP_VER, appTelemetry.appVersion); + } +} +function addPrompt(parameters, prompt) { + parameters.set(PROMPT, prompt); +} +function addState(parameters, state) { + if (state) { + parameters.set(STATE, state); + } +} +function addNonce(parameters, nonce) { + parameters.set(NONCE, nonce); +} +function addCodeChallengeParams(parameters, codeChallenge, codeChallengeMethod) { + if (codeChallenge && codeChallengeMethod) { + parameters.set(CODE_CHALLENGE, codeChallenge); + parameters.set(CODE_CHALLENGE_METHOD, codeChallengeMethod); + } else { + throw createClientConfigurationError(pkceParamsMissing); + } +} +function addAuthorizationCode(parameters, code) { + parameters.set(CODE, code); +} +function addDeviceCode(parameters, code) { + parameters.set(DEVICE_CODE, code); +} +function addRefreshToken(parameters, refreshToken) { + parameters.set(REFRESH_TOKEN, refreshToken); +} +function addCodeVerifier(parameters, codeVerifier) { + parameters.set(CODE_VERIFIER, codeVerifier); +} +function addClientSecret(parameters, clientSecret) { + parameters.set(CLIENT_SECRET, clientSecret); +} +function addClientAssertion(parameters, clientAssertion) { + if (clientAssertion) { + parameters.set(CLIENT_ASSERTION, clientAssertion); + } +} +function addClientAssertionType(parameters, clientAssertionType) { + if (clientAssertionType) { + parameters.set(CLIENT_ASSERTION_TYPE, clientAssertionType); + } +} +function addOboAssertion(parameters, oboAssertion) { + parameters.set(OBO_ASSERTION, oboAssertion); +} +function addRequestTokenUse(parameters, tokenUse) { + parameters.set(REQUESTED_TOKEN_USE, tokenUse); +} +function addGrantType(parameters, grantType) { + parameters.set(GRANT_TYPE, grantType); +} +function addClientInfo(parameters) { + parameters.set(CLIENT_INFO, "1"); +} +function addInstanceAware(parameters) { + if (!parameters.has(INSTANCE_AWARE)) { + parameters.set(INSTANCE_AWARE, "true"); + } +} +function addExtraQueryParameters(parameters, eQParams) { + Object.entries(eQParams).forEach(([key, value]) => { + if (!parameters.has(key) && value) { + parameters.set(key, value); + } + }); +} +function addClientCapabilitiesToClaims(claims, clientCapabilities) { + let mergedClaims; + if (!claims) { + mergedClaims = {}; + } else { + try { + mergedClaims = JSON.parse(claims); + } catch (e) { + throw createClientConfigurationError(invalidClaims); + } + } + if (clientCapabilities && clientCapabilities.length > 0) { + if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) { + mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {}; + } + mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = { + values: clientCapabilities + }; + } + return JSON.stringify(mergedClaims); +} +function addUsername(parameters, username) { + parameters.set(PasswordGrantConstants.username, username); +} +function addPassword(parameters, password) { + parameters.set(PasswordGrantConstants.password, password); +} +function addPopToken(parameters, cnfString) { + if (cnfString) { + parameters.set(TOKEN_TYPE, AuthenticationScheme.POP); + parameters.set(REQ_CNF, cnfString); + } +} +function addSshJwk(parameters, sshJwkString) { + if (sshJwkString) { + parameters.set(TOKEN_TYPE, AuthenticationScheme.SSH); + parameters.set(REQ_CNF, sshJwkString); + } +} +function addServerTelemetry(parameters, serverTelemetryManager) { + parameters.set(X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue()); + parameters.set(X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue()); +} +function addThrottling(parameters) { + parameters.set(X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE); +} +function addLogoutHint(parameters, logoutHint) { + parameters.set(LOGOUT_HINT, logoutHint); +} +function addBrokerParameters(parameters, brokerClientId, brokerRedirectUri) { + if (!parameters.has(BROKER_CLIENT_ID)) { + parameters.set(BROKER_CLIENT_ID, brokerClientId); + } + if (!parameters.has(BROKER_REDIRECT_URI)) { + parameters.set(BROKER_REDIRECT_URI, brokerRedirectUri); + } +} +function addEARParameters(parameters, jwk) { + parameters.set(EAR_JWK, encodeURIComponent(jwk)); + const jweCryptoB64Encoded = "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0"; + parameters.set(EAR_JWE_CRYPTO, jweCryptoB64Encoded); +} +function addPostBodyParameters(parameters, bodyParameters) { + Object.entries(bodyParameters).forEach(([key, value]) => { + if (value) { + parameters.set(key, value); + } + }); +} + +// node_modules/@azure/msal-common/dist/authority/AuthorityFactory.mjs +var AuthorityFactory_exports = {}; +__export(AuthorityFactory_exports, { + createDiscoveredInstance: () => createDiscoveredInstance +}); + +// node_modules/@azure/msal-common/dist/authority/AuthorityType.mjs +var AuthorityType = { + Default: 0, + Adfs: 1, + Dsts: 2, + Ciam: 3 +}; + +// node_modules/@azure/msal-common/dist/authority/OpenIdConfigResponse.mjs +function isOpenIdConfigResponse(response) { + return response.hasOwnProperty("authorization_endpoint") && response.hasOwnProperty("token_endpoint") && response.hasOwnProperty("issuer") && response.hasOwnProperty("jwks_uri"); +} + +// node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryResponse.mjs +function isCloudInstanceDiscoveryResponse(response) { + return response.hasOwnProperty("tenant_discovery_endpoint") && response.hasOwnProperty("metadata"); +} + +// node_modules/@azure/msal-common/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +function isCloudInstanceDiscoveryErrorResponse(response) { + return response.hasOwnProperty("error") && response.hasOwnProperty("error_description"); +} + +// node_modules/@azure/msal-common/dist/utils/FunctionWrappers.mjs +var invoke = (callback, eventName, logger, telemetryClient, correlationId) => { + return (...args) => { + logger.trace(`Executing function ${eventName}`); + const inProgressEvent = telemetryClient == null ? void 0 : telemetryClient.startMeasurement(eventName, correlationId); + if (correlationId) { + const eventCount = eventName + "CallCount"; + telemetryClient == null ? void 0 : telemetryClient.incrementFields({ [eventCount]: 1 }, correlationId); + } + try { + const result = callback(...args); + inProgressEvent == null ? void 0 : inProgressEvent.end({ + success: true + }); + logger.trace(`Returning result from ${eventName}`); + return result; + } catch (e) { + logger.trace(`Error occurred in ${eventName}`); + try { + logger.trace(JSON.stringify(e)); + } catch (e2) { + logger.trace("Unable to print error message."); + } + inProgressEvent == null ? void 0 : inProgressEvent.end({ + success: false + }, e); + throw e; + } + }; +}; +var invokeAsync = (callback, eventName, logger, telemetryClient, correlationId) => { + return (...args) => { + logger.trace(`Executing function ${eventName}`); + const inProgressEvent = telemetryClient == null ? void 0 : telemetryClient.startMeasurement(eventName, correlationId); + if (correlationId) { + const eventCount = eventName + "CallCount"; + telemetryClient == null ? void 0 : telemetryClient.incrementFields({ [eventCount]: 1 }, correlationId); + } + telemetryClient == null ? void 0 : telemetryClient.setPreQueueTime(eventName, correlationId); + return callback(...args).then((response) => { + logger.trace(`Returning result from ${eventName}`); + inProgressEvent == null ? void 0 : inProgressEvent.end({ + success: true + }); + return response; + }).catch((e) => { + logger.trace(`Error occurred in ${eventName}`); + try { + logger.trace(JSON.stringify(e)); + } catch (e2) { + logger.trace("Unable to print error message."); + } + inProgressEvent == null ? void 0 : inProgressEvent.end({ + success: false + }, e); + throw e; + }); + }; +}; + +// node_modules/@azure/msal-common/dist/authority/RegionDiscovery.mjs +var RegionDiscovery = class _RegionDiscovery { + constructor(networkInterface, logger, performanceClient, correlationId) { + this.networkInterface = networkInterface; + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + } + /** + * Detect the region from the application's environment. + * + * @returns Promise + */ + async detectRegion(environmentRegion, regionDiscoveryMetadata) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RegionDiscoveryDetectRegion, this.correlationId); + let autodetectedRegionName = environmentRegion; + if (!autodetectedRegionName) { + const options = _RegionDiscovery.IMDS_OPTIONS; + try { + const localIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(Constants.IMDS_VERSION, options); + if (localIMDSVersionResponse.status === HttpStatus.SUCCESS) { + autodetectedRegionName = localIMDSVersionResponse.body; + regionDiscoveryMetadata.region_source = RegionDiscoverySources.IMDS; + } + if (localIMDSVersionResponse.status === HttpStatus.BAD_REQUEST) { + const currentIMDSVersion = await invokeAsync(this.getCurrentVersion.bind(this), PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.logger, this.performanceClient, this.correlationId)(options); + if (!currentIMDSVersion) { + regionDiscoveryMetadata.region_source = RegionDiscoverySources.FAILED_AUTO_DETECTION; + return null; + } + const currentIMDSVersionResponse = await invokeAsync(this.getRegionFromIMDS.bind(this), PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.logger, this.performanceClient, this.correlationId)(currentIMDSVersion, options); + if (currentIMDSVersionResponse.status === HttpStatus.SUCCESS) { + autodetectedRegionName = currentIMDSVersionResponse.body; + regionDiscoveryMetadata.region_source = RegionDiscoverySources.IMDS; + } + } + } catch (e) { + regionDiscoveryMetadata.region_source = RegionDiscoverySources.FAILED_AUTO_DETECTION; + return null; + } + } else { + regionDiscoveryMetadata.region_source = RegionDiscoverySources.ENVIRONMENT_VARIABLE; + } + if (!autodetectedRegionName) { + regionDiscoveryMetadata.region_source = RegionDiscoverySources.FAILED_AUTO_DETECTION; + } + return autodetectedRegionName || null; + } + /** + * Make the call to the IMDS endpoint + * + * @param imdsEndpointUrl + * @returns Promise> + */ + async getRegionFromIMDS(version3, options) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetRegionFromIMDS, this.correlationId); + return this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?api-version=${version3}&format=text`, options, Constants.IMDS_TIMEOUT); + } + /** + * Get the most recent version of the IMDS endpoint available + * + * @returns Promise + */ + async getCurrentVersion(options) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RegionDiscoveryGetCurrentVersion, this.correlationId); + try { + const response = await this.networkInterface.sendGetRequestAsync(`${Constants.IMDS_ENDPOINT}?format=json`, options); + if (response.status === HttpStatus.BAD_REQUEST && response.body && response.body["newest-versions"] && response.body["newest-versions"].length > 0) { + return response.body["newest-versions"][0]; + } + return null; + } catch (e) { + return null; + } + } +}; +RegionDiscovery.IMDS_OPTIONS = { + headers: { + Metadata: "true" + } +}; + +// node_modules/@azure/msal-common/dist/cache/utils/CacheHelpers.mjs +var CacheHelpers_exports = {}; +__export(CacheHelpers_exports, { + createAccessTokenEntity: () => createAccessTokenEntity, + createIdTokenEntity: () => createIdTokenEntity, + createRefreshTokenEntity: () => createRefreshTokenEntity, + generateAppMetadataKey: () => generateAppMetadataKey, + generateAuthorityMetadataExpiresAt: () => generateAuthorityMetadataExpiresAt, + isAccessTokenEntity: () => isAccessTokenEntity, + isAppMetadataEntity: () => isAppMetadataEntity, + isAuthorityMetadataEntity: () => isAuthorityMetadataEntity, + isAuthorityMetadataExpired: () => isAuthorityMetadataExpired, + isCredentialEntity: () => isCredentialEntity, + isIdTokenEntity: () => isIdTokenEntity, + isRefreshTokenEntity: () => isRefreshTokenEntity, + isServerTelemetryEntity: () => isServerTelemetryEntity, + isThrottlingEntity: () => isThrottlingEntity, + updateAuthorityEndpointMetadata: () => updateAuthorityEndpointMetadata, + updateCloudDiscoveryMetadata: () => updateCloudDiscoveryMetadata +}); + +// node_modules/@azure/msal-common/dist/utils/TimeUtils.mjs +var TimeUtils_exports = {}; +__export(TimeUtils_exports, { + delay: () => delay, + isCacheExpired: () => isCacheExpired, + isTokenExpired: () => isTokenExpired, + nowSeconds: () => nowSeconds, + toDateFromSeconds: () => toDateFromSeconds, + toSecondsFromDate: () => toSecondsFromDate, + wasClockTurnedBack: () => wasClockTurnedBack +}); +function nowSeconds() { + return Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3); +} +function toSecondsFromDate(date) { + return date.getTime() / 1e3; +} +function toDateFromSeconds(seconds) { + if (seconds) { + return new Date(Number(seconds) * 1e3); + } + return /* @__PURE__ */ new Date(); +} +function isTokenExpired(expiresOn, offset) { + const expirationSec = Number(expiresOn) || 0; + const offsetCurrentTimeSec = nowSeconds() + offset; + return offsetCurrentTimeSec > expirationSec; +} +function isCacheExpired(lastUpdatedAt, cacheRetentionDays) { + const cacheExpirationTimestamp = Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1e3; + return Date.now() > cacheExpirationTimestamp; +} +function wasClockTurnedBack(cachedAt) { + const cachedAtSec = Number(cachedAt); + return cachedAtSec > nowSeconds(); +} +function delay(t, value) { + return new Promise((resolve) => setTimeout(() => resolve(value), t)); +} + +// node_modules/@azure/msal-common/dist/cache/utils/CacheHelpers.mjs +function createIdTokenEntity(homeAccountId, environment, idToken, clientId, tenantId) { + const idTokenEntity = { + credentialType: CredentialType.ID_TOKEN, + homeAccountId, + environment, + clientId, + secret: idToken, + realm: tenantId, + lastUpdatedAt: Date.now().toString() + // Set the last updated time to now + }; + return idTokenEntity; +} +function createAccessTokenEntity(homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn, base64Decode2, refreshOn, tokenType, userAssertionHash, keyId, requestedClaims, requestedClaimsHash) { + var _a, _b; + const atEntity = { + homeAccountId, + credentialType: CredentialType.ACCESS_TOKEN, + secret: accessToken, + cachedAt: nowSeconds().toString(), + expiresOn: expiresOn.toString(), + extendedExpiresOn: extExpiresOn.toString(), + environment, + clientId, + realm: tenantId, + target: scopes, + tokenType: tokenType || AuthenticationScheme.BEARER, + lastUpdatedAt: Date.now().toString() + // Set the last updated time to now + }; + if (userAssertionHash) { + atEntity.userAssertionHash = userAssertionHash; + } + if (refreshOn) { + atEntity.refreshOn = refreshOn.toString(); + } + if (requestedClaims) { + atEntity.requestedClaims = requestedClaims; + atEntity.requestedClaimsHash = requestedClaimsHash; + } + if (((_a = atEntity.tokenType) == null ? void 0 : _a.toLowerCase()) !== AuthenticationScheme.BEARER.toLowerCase()) { + atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME; + switch (atEntity.tokenType) { + case AuthenticationScheme.POP: + const tokenClaims = extractTokenClaims(accessToken, base64Decode2); + if (!((_b = tokenClaims == null ? void 0 : tokenClaims.cnf) == null ? void 0 : _b.kid)) { + throw createClientAuthError(tokenClaimsCnfRequiredForSignedJwt); + } + atEntity.keyId = tokenClaims.cnf.kid; + break; + case AuthenticationScheme.SSH: + atEntity.keyId = keyId; + } + } + return atEntity; +} +function createRefreshTokenEntity(homeAccountId, environment, refreshToken, clientId, familyId, userAssertionHash, expiresOn) { + const rtEntity = { + credentialType: CredentialType.REFRESH_TOKEN, + homeAccountId, + environment, + clientId, + secret: refreshToken, + lastUpdatedAt: Date.now().toString() + }; + if (userAssertionHash) { + rtEntity.userAssertionHash = userAssertionHash; + } + if (familyId) { + rtEntity.familyId = familyId; + } + if (expiresOn) { + rtEntity.expiresOn = expiresOn.toString(); + } + return rtEntity; +} +function isCredentialEntity(entity) { + return entity.hasOwnProperty("homeAccountId") && entity.hasOwnProperty("environment") && entity.hasOwnProperty("credentialType") && entity.hasOwnProperty("clientId") && entity.hasOwnProperty("secret"); +} +function isAccessTokenEntity(entity) { + if (!entity) { + return false; + } + return isCredentialEntity(entity) && entity.hasOwnProperty("realm") && entity.hasOwnProperty("target") && (entity["credentialType"] === CredentialType.ACCESS_TOKEN || entity["credentialType"] === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME); +} +function isIdTokenEntity(entity) { + if (!entity) { + return false; + } + return isCredentialEntity(entity) && entity.hasOwnProperty("realm") && entity["credentialType"] === CredentialType.ID_TOKEN; +} +function isRefreshTokenEntity(entity) { + if (!entity) { + return false; + } + return isCredentialEntity(entity) && entity["credentialType"] === CredentialType.REFRESH_TOKEN; +} +function isServerTelemetryEntity(key, entity) { + const validateKey = key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0; + let validateEntity = true; + if (entity) { + validateEntity = entity.hasOwnProperty("failedRequests") && entity.hasOwnProperty("errors") && entity.hasOwnProperty("cacheHits"); + } + return validateKey && validateEntity; +} +function isThrottlingEntity(key, entity) { + let validateKey = false; + if (key) { + validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0; + } + let validateEntity = true; + if (entity) { + validateEntity = entity.hasOwnProperty("throttleTime"); + } + return validateKey && validateEntity; +} +function generateAppMetadataKey({ environment, clientId }) { + const appMetaDataKeyArray = [ + APP_METADATA, + environment, + clientId + ]; + return appMetaDataKeyArray.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase(); +} +function isAppMetadataEntity(key, entity) { + if (!entity) { + return false; + } + return key.indexOf(APP_METADATA) === 0 && entity.hasOwnProperty("clientId") && entity.hasOwnProperty("environment"); +} +function isAuthorityMetadataEntity(key, entity) { + if (!entity) { + return false; + } + return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 && entity.hasOwnProperty("aliases") && entity.hasOwnProperty("preferred_cache") && entity.hasOwnProperty("preferred_network") && entity.hasOwnProperty("canonical_authority") && entity.hasOwnProperty("authorization_endpoint") && entity.hasOwnProperty("token_endpoint") && entity.hasOwnProperty("issuer") && entity.hasOwnProperty("aliasesFromNetwork") && entity.hasOwnProperty("endpointsFromNetwork") && entity.hasOwnProperty("expiresAt") && entity.hasOwnProperty("jwks_uri"); +} +function generateAuthorityMetadataExpiresAt() { + return nowSeconds() + AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS; +} +function updateAuthorityEndpointMetadata(authorityMetadata, updatedValues, fromNetwork) { + authorityMetadata.authorization_endpoint = updatedValues.authorization_endpoint; + authorityMetadata.token_endpoint = updatedValues.token_endpoint; + authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint; + authorityMetadata.issuer = updatedValues.issuer; + authorityMetadata.endpointsFromNetwork = fromNetwork; + authorityMetadata.jwks_uri = updatedValues.jwks_uri; +} +function updateCloudDiscoveryMetadata(authorityMetadata, updatedValues, fromNetwork) { + authorityMetadata.aliases = updatedValues.aliases; + authorityMetadata.preferred_cache = updatedValues.preferred_cache; + authorityMetadata.preferred_network = updatedValues.preferred_network; + authorityMetadata.aliasesFromNetwork = fromNetwork; +} +function isAuthorityMetadataExpired(metadata) { + return metadata.expiresAt <= nowSeconds(); +} + +// node_modules/@azure/msal-common/dist/authority/Authority.mjs +var Authority = class _Authority { + constructor(authority, networkInterface, cacheManager, authorityOptions, logger, correlationId, performanceClient, managedIdentity) { + this.canonicalAuthority = authority; + this._canonicalAuthority.validateAsUri(); + this.networkInterface = networkInterface; + this.cacheManager = cacheManager; + this.authorityOptions = authorityOptions; + this.regionDiscoveryMetadata = { + region_used: void 0, + region_source: void 0, + region_outcome: void 0 + }; + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + this.managedIdentity = managedIdentity || false; + this.regionDiscovery = new RegionDiscovery(networkInterface, this.logger, this.performanceClient, this.correlationId); + } + /** + * Get {@link AuthorityType} + * @param authorityUri {@link IUri} + * @private + */ + getAuthorityType(authorityUri) { + if (authorityUri.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) { + return AuthorityType.Ciam; + } + const pathSegments = authorityUri.PathSegments; + if (pathSegments.length) { + switch (pathSegments[0].toLowerCase()) { + case Constants.ADFS: + return AuthorityType.Adfs; + case Constants.DSTS: + return AuthorityType.Dsts; + } + } + return AuthorityType.Default; + } + // See above for AuthorityType + get authorityType() { + return this.getAuthorityType(this.canonicalAuthorityUrlComponents); + } + /** + * ProtocolMode enum representing the way endpoints are constructed. + */ + get protocolMode() { + return this.authorityOptions.protocolMode; + } + /** + * Returns authorityOptions which can be used to reinstantiate a new authority instance + */ + get options() { + return this.authorityOptions; + } + /** + * A URL that is the authority set by the developer + */ + get canonicalAuthority() { + return this._canonicalAuthority.urlString; + } + /** + * Sets canonical authority. + */ + set canonicalAuthority(url) { + this._canonicalAuthority = new UrlString(url); + this._canonicalAuthority.validateAsUri(); + this._canonicalAuthorityUrlComponents = null; + } + /** + * Get authority components. + */ + get canonicalAuthorityUrlComponents() { + if (!this._canonicalAuthorityUrlComponents) { + this._canonicalAuthorityUrlComponents = this._canonicalAuthority.getUrlComponents(); + } + return this._canonicalAuthorityUrlComponents; + } + /** + * Get hostname and port i.e. login.microsoftonline.com + */ + get hostnameAndPort() { + return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase(); + } + /** + * Get tenant for authority. + */ + get tenant() { + return this.canonicalAuthorityUrlComponents.PathSegments[0]; + } + /** + * OAuth /authorize endpoint for requests + */ + get authorizationEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.authorization_endpoint); + } else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth /token endpoint for requests + */ + get tokenEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.token_endpoint); + } else { + throw createClientAuthError(endpointResolutionError); + } + } + get deviceCodeEndpoint() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.token_endpoint.replace("/token", "/devicecode")); + } else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth logout endpoint for requests + */ + get endSessionEndpoint() { + if (this.discoveryComplete()) { + if (!this.metadata.end_session_endpoint) { + throw createClientAuthError(endSessionEndpointNotSupported); + } + return this.replacePath(this.metadata.end_session_endpoint); + } else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * OAuth issuer for requests + */ + get selfSignedJwtAudience() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.issuer); + } else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * Jwks_uri for token signing keys + */ + get jwksUri() { + if (this.discoveryComplete()) { + return this.replacePath(this.metadata.jwks_uri); + } else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * Returns a flag indicating that tenant name can be replaced in authority {@link IUri} + * @param authorityUri {@link IUri} + * @private + */ + canReplaceTenant(authorityUri) { + return authorityUri.PathSegments.length === 1 && !_Authority.reservedTenantDomains.has(authorityUri.PathSegments[0]) && this.getAuthorityType(authorityUri) === AuthorityType.Default && this.protocolMode !== ProtocolMode.OIDC; + } + /** + * Replaces tenant in url path with current tenant. Defaults to common. + * @param urlString + */ + replaceTenant(urlString) { + return urlString.replace(/{tenant}|{tenantid}/g, this.tenant); + } + /** + * Replaces path such as tenant or policy with the current tenant or policy. + * @param urlString + */ + replacePath(urlString) { + let endpoint = urlString; + const cachedAuthorityUrl = new UrlString(this.metadata.canonical_authority); + const cachedAuthorityUrlComponents = cachedAuthorityUrl.getUrlComponents(); + const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments; + const currentAuthorityParts = this.canonicalAuthorityUrlComponents.PathSegments; + currentAuthorityParts.forEach((currentPart, index) => { + let cachedPart = cachedAuthorityParts[index]; + if (index === 0 && this.canReplaceTenant(cachedAuthorityUrlComponents)) { + const tenantId = new UrlString(this.metadata.authorization_endpoint).getUrlComponents().PathSegments[0]; + if (cachedPart !== tenantId) { + this.logger.verbose(`Replacing tenant domain name ${cachedPart} with id ${tenantId}`); + cachedPart = tenantId; + } + } + if (currentPart !== cachedPart) { + endpoint = endpoint.replace(`/${cachedPart}/`, `/${currentPart}/`); + } + }); + return this.replaceTenant(endpoint); + } + /** + * The default open id configuration endpoint for any canonical authority. + */ + get defaultOpenIdConfigurationEndpoint() { + const canonicalAuthorityHost = this.hostnameAndPort; + if (this.canonicalAuthority.endsWith("v2.0/") || this.authorityType === AuthorityType.Adfs || this.protocolMode === ProtocolMode.OIDC && !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost)) { + return `${this.canonicalAuthority}.well-known/openid-configuration`; + } + return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`; + } + /** + * Boolean that returns whether or not tenant discovery has been completed. + */ + discoveryComplete() { + return !!this.metadata; + } + /** + * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network + * and the /authorize, /token and logout endpoints. + */ + async resolveEndpointsAsync() { + var _a, _b; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthorityResolveEndpointsAsync, this.correlationId); + const metadataEntity = this.getCurrentMetadataEntity(); + const cloudDiscoverySource = await invokeAsync(this.updateCloudDiscoveryMetadata.bind(this), PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); + this.canonicalAuthority = this.canonicalAuthority.replace(this.hostnameAndPort, metadataEntity.preferred_network); + const endpointSource = await invokeAsync(this.updateEndpointMetadata.bind(this), PerformanceEvents.AuthorityUpdateEndpointMetadata, this.logger, this.performanceClient, this.correlationId)(metadataEntity); + this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, { + source: endpointSource + }); + (_b = this.performanceClient) == null ? void 0 : _b.addFields({ + cloudDiscoverySource, + authorityEndpointSource: endpointSource + }, this.correlationId); + } + /** + * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built + * from the configured canonical authority + * @returns + */ + getCurrentMetadataEntity() { + let metadataEntity = this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort); + if (!metadataEntity) { + metadataEntity = { + aliases: [], + preferred_cache: this.hostnameAndPort, + preferred_network: this.hostnameAndPort, + canonical_authority: this.canonicalAuthority, + authorization_endpoint: "", + token_endpoint: "", + end_session_endpoint: "", + issuer: "", + aliasesFromNetwork: false, + endpointsFromNetwork: false, + expiresAt: generateAuthorityMetadataExpiresAt(), + jwks_uri: "" + }; + } + return metadataEntity; + } + /** + * Updates cached metadata based on metadata source and sets the instance's metadata + * property to the same value + * @param metadataEntity + * @param cloudDiscoverySource + * @param endpointMetadataResult + */ + updateCachedMetadata(metadataEntity, cloudDiscoverySource, endpointMetadataResult) { + if (cloudDiscoverySource !== AuthorityMetadataSource.CACHE && (endpointMetadataResult == null ? void 0 : endpointMetadataResult.source) !== AuthorityMetadataSource.CACHE) { + metadataEntity.expiresAt = generateAuthorityMetadataExpiresAt(); + metadataEntity.canonical_authority = this.canonicalAuthority; + } + const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(metadataEntity.preferred_cache); + this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity); + this.metadata = metadataEntity; + } + /** + * Update AuthorityMetadataEntity with new endpoints and return where the information came from + * @param metadataEntity + */ + async updateEndpointMetadata(metadataEntity) { + var _a, _b, _c; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthorityUpdateEndpointMetadata, this.correlationId); + const localMetadata = this.updateEndpointMetadataFromLocalSources(metadataEntity); + if (localMetadata) { + if (localMetadata.source === AuthorityMetadataSource.HARDCODED_VALUES) { + if ((_b = this.authorityOptions.azureRegionConfiguration) == null ? void 0 : _b.azureRegion) { + if (localMetadata.metadata) { + const hardcodedMetadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(localMetadata.metadata); + updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); + metadataEntity.canonical_authority = this.canonicalAuthority; + } + } + } + return localMetadata.source; + } + let metadata = await invokeAsync(this.getEndpointMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); + if (metadata) { + if ((_c = this.authorityOptions.azureRegionConfiguration) == null ? void 0 : _c.azureRegion) { + metadata = await invokeAsync(this.updateMetadataWithRegionalInformation.bind(this), PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.logger, this.performanceClient, this.correlationId)(metadata); + } + updateAuthorityEndpointMetadata(metadataEntity, metadata, true); + return AuthorityMetadataSource.NETWORK; + } else { + throw createClientAuthError(openIdConfigError, this.defaultOpenIdConfigurationEndpoint); + } + } + /** + * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config + * response if the source is hardcoded metadata + * @param metadataEntity + * @returns + */ + updateEndpointMetadataFromLocalSources(metadataEntity) { + this.logger.verbose("Attempting to get endpoint metadata from authority configuration"); + const configMetadata = this.getEndpointMetadataFromConfig(); + if (configMetadata) { + this.logger.verbose("Found endpoint metadata in authority configuration"); + updateAuthorityEndpointMetadata(metadataEntity, configMetadata, false); + return { + source: AuthorityMetadataSource.CONFIG + }; + } + this.logger.verbose("Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values."); + if (this.authorityOptions.skipAuthorityMetadataCache) { + this.logger.verbose("Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache."); + } else { + const hardcodedMetadata = this.getEndpointMetadataFromHardcodedValues(); + if (hardcodedMetadata) { + updateAuthorityEndpointMetadata(metadataEntity, hardcodedMetadata, false); + return { + source: AuthorityMetadataSource.HARDCODED_VALUES, + metadata: hardcodedMetadata + }; + } else { + this.logger.verbose("Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache."); + } + } + const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); + if (this.isAuthoritySameType(metadataEntity) && metadataEntity.endpointsFromNetwork && !metadataEntityExpired) { + this.logger.verbose("Found endpoint metadata in the cache."); + return { source: AuthorityMetadataSource.CACHE }; + } else if (metadataEntityExpired) { + this.logger.verbose("The metadata entity is expired."); + } + return null; + } + /** + * Compares the number of url components after the domain to determine if the cached + * authority metadata can be used for the requested authority. Protects against same domain different + * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy + * @param metadataEntity + */ + isAuthoritySameType(metadataEntity) { + const cachedAuthorityUrl = new UrlString(metadataEntity.canonical_authority); + const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments; + return cachedParts.length === this.canonicalAuthorityUrlComponents.PathSegments.length; + } + /** + * Parse authorityMetadata config option + */ + getEndpointMetadataFromConfig() { + if (this.authorityOptions.authorityMetadata) { + try { + return JSON.parse(this.authorityOptions.authorityMetadata); + } catch (e) { + throw createClientConfigurationError(invalidAuthorityMetadata); + } + } + return null; + } + /** + * Gets OAuth endpoints from the given OpenID configuration endpoint. + * + * @param hasHardcodedMetadata boolean + */ + async getEndpointMetadataFromNetwork() { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork, this.correlationId); + const options = {}; + const openIdConfigurationEndpoint = this.defaultOpenIdConfigurationEndpoint; + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${openIdConfigurationEndpoint}`); + try { + const response = await this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint, options); + const isValidResponse = isOpenIdConfigResponse(response.body); + if (isValidResponse) { + return response.body; + } else { + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`); + return null; + } + } catch (e) { + this.logger.verbose(`Authority.getEndpointMetadataFromNetwork: ${e}`); + return null; + } + } + /** + * Get OAuth endpoints for common authorities. + */ + getEndpointMetadataFromHardcodedValues() { + if (this.hostnameAndPort in EndpointMetadata) { + return EndpointMetadata[this.hostnameAndPort]; + } + return null; + } + /** + * Update the retrieved metadata with regional information. + * User selected Azure region will be used if configured. + */ + async updateMetadataWithRegionalInformation(metadata) { + var _a, _b, _c; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation, this.correlationId); + const userConfiguredAzureRegion = (_b = this.authorityOptions.azureRegionConfiguration) == null ? void 0 : _b.azureRegion; + if (userConfiguredAzureRegion) { + if (userConfiguredAzureRegion !== Constants.AZURE_REGION_AUTO_DISCOVER_FLAG) { + this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION; + this.regionDiscoveryMetadata.region_used = userConfiguredAzureRegion; + return _Authority.replaceWithRegionalInformation(metadata, userConfiguredAzureRegion); + } + const autodetectedRegionName = await invokeAsync(this.regionDiscovery.detectRegion.bind(this.regionDiscovery), PerformanceEvents.RegionDiscoveryDetectRegion, this.logger, this.performanceClient, this.correlationId)((_c = this.authorityOptions.azureRegionConfiguration) == null ? void 0 : _c.environmentRegion, this.regionDiscoveryMetadata); + if (autodetectedRegionName) { + this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL; + this.regionDiscoveryMetadata.region_used = autodetectedRegionName; + return _Authority.replaceWithRegionalInformation(metadata, autodetectedRegionName); + } + this.regionDiscoveryMetadata.region_outcome = RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED; + } + return metadata; + } + /** + * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache + * and returns where the information was retrieved from + * @param metadataEntity + * @returns AuthorityMetadataSource + */ + async updateCloudDiscoveryMetadata(metadataEntity) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata, this.correlationId); + const localMetadataSource = this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity); + if (localMetadataSource) { + return localMetadataSource; + } + const metadata = await invokeAsync(this.getCloudDiscoveryMetadataFromNetwork.bind(this), PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.logger, this.performanceClient, this.correlationId)(); + if (metadata) { + updateCloudDiscoveryMetadata(metadataEntity, metadata, true); + return AuthorityMetadataSource.NETWORK; + } + throw createClientConfigurationError(untrustedAuthority); + } + updateCloudDiscoveryMetadataFromLocalSources(metadataEntity) { + this.logger.verbose("Attempting to get cloud discovery metadata from authority configuration"); + this.logger.verbosePii(`Known Authorities: ${this.authorityOptions.knownAuthorities || Constants.NOT_APPLICABLE}`); + this.logger.verbosePii(`Authority Metadata: ${this.authorityOptions.authorityMetadata || Constants.NOT_APPLICABLE}`); + this.logger.verbosePii(`Canonical Authority: ${metadataEntity.canonical_authority || Constants.NOT_APPLICABLE}`); + const metadata = this.getCloudDiscoveryMetadataFromConfig(); + if (metadata) { + this.logger.verbose("Found cloud discovery metadata in authority configuration"); + updateCloudDiscoveryMetadata(metadataEntity, metadata, false); + return AuthorityMetadataSource.CONFIG; + } + this.logger.verbose("Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values."); + if (this.options.skipAuthorityMetadataCache) { + this.logger.verbose("Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache."); + } else { + const hardcodedMetadata = getCloudDiscoveryMetadataFromHardcodedValues(this.hostnameAndPort); + if (hardcodedMetadata) { + this.logger.verbose("Found cloud discovery metadata from hardcoded values."); + updateCloudDiscoveryMetadata(metadataEntity, hardcodedMetadata, false); + return AuthorityMetadataSource.HARDCODED_VALUES; + } + this.logger.verbose("Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache."); + } + const metadataEntityExpired = isAuthorityMetadataExpired(metadataEntity); + if (this.isAuthoritySameType(metadataEntity) && metadataEntity.aliasesFromNetwork && !metadataEntityExpired) { + this.logger.verbose("Found cloud discovery metadata in the cache."); + return AuthorityMetadataSource.CACHE; + } else if (metadataEntityExpired) { + this.logger.verbose("The metadata entity is expired."); + } + return null; + } + /** + * Parse cloudDiscoveryMetadata config or check knownAuthorities + */ + getCloudDiscoveryMetadataFromConfig() { + if (this.authorityType === AuthorityType.Ciam) { + this.logger.verbose("CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host."); + return _Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + if (this.authorityOptions.cloudDiscoveryMetadata) { + this.logger.verbose("The cloud discovery metadata has been provided as a network response, in the config."); + try { + this.logger.verbose("Attempting to parse the cloud discovery metadata."); + const parsedResponse = JSON.parse(this.authorityOptions.cloudDiscoveryMetadata); + const metadata = getCloudDiscoveryMetadataFromNetworkResponse(parsedResponse.metadata, this.hostnameAndPort); + this.logger.verbose("Parsed the cloud discovery metadata."); + if (metadata) { + this.logger.verbose("There is returnable metadata attached to the parsed cloud discovery metadata."); + return metadata; + } else { + this.logger.verbose("There is no metadata attached to the parsed cloud discovery metadata."); + } + } catch (e) { + this.logger.verbose("Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error."); + throw createClientConfigurationError(invalidCloudDiscoveryMetadata); + } + } + if (this.isInKnownAuthorities()) { + this.logger.verbose("The host is included in knownAuthorities. Creating new cloud discovery metadata from the host."); + return _Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + return null; + } + /** + * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config + * + * @param hasHardcodedMetadata boolean + */ + async getCloudDiscoveryMetadataFromNetwork() { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork, this.correlationId); + const instanceDiscoveryEndpoint = `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`; + const options = {}; + let match = null; + try { + const response = await this.networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint, options); + let typedResponseBody; + let metadata; + if (isCloudInstanceDiscoveryResponse(response.body)) { + typedResponseBody = response.body; + metadata = typedResponseBody.metadata; + this.logger.verbosePii(`tenant_discovery_endpoint is: ${typedResponseBody.tenant_discovery_endpoint}`); + } else if (isCloudInstanceDiscoveryErrorResponse(response.body)) { + this.logger.warning(`A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${response.status}`); + typedResponseBody = response.body; + if (typedResponseBody.error === Constants.INVALID_INSTANCE) { + this.logger.error("The CloudInstanceDiscoveryErrorResponse error is invalid_instance."); + return null; + } + this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error is ${typedResponseBody.error}`); + this.logger.warning(`The CloudInstanceDiscoveryErrorResponse error description is ${typedResponseBody.error_description}`); + this.logger.warning("Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []"); + metadata = []; + } else { + this.logger.error("AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse"); + return null; + } + this.logger.verbose("Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request."); + match = getCloudDiscoveryMetadataFromNetworkResponse(metadata, this.hostnameAndPort); + } catch (error) { + if (error instanceof AuthError) { + this.logger.error(`There was a network error while attempting to get the cloud discovery instance metadata. +Error: ${error.errorCode} +Error Description: ${error.errorMessage}`); + } else { + const typedError = error; + this.logger.error(`A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata. +Error: ${typedError.name} +Error Description: ${typedError.message}`); + } + return null; + } + if (!match) { + this.logger.warning("The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request."); + this.logger.verbose("Creating custom Authority for custom domain scenario."); + match = _Authority.createCloudDiscoveryMetadataFromHost(this.hostnameAndPort); + } + return match; + } + /** + * Helper function to determine if this host is included in the knownAuthorities config option + */ + isInKnownAuthorities() { + const matches = this.authorityOptions.knownAuthorities.filter((authority) => { + return authority && UrlString.getDomainFromUrl(authority).toLowerCase() === this.hostnameAndPort; + }); + return matches.length > 0; + } + /** + * helper function to populate the authority based on azureCloudOptions + * @param authorityString + * @param azureCloudOptions + */ + static generateAuthority(authorityString, azureCloudOptions) { + let authorityAzureCloudInstance; + if (azureCloudOptions && azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None) { + const tenant = azureCloudOptions.tenant ? azureCloudOptions.tenant : Constants.DEFAULT_COMMON_TENANT; + authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`; + } + return authorityAzureCloudInstance ? authorityAzureCloudInstance : authorityString; + } + /** + * Creates cloud discovery metadata object from a given host + * @param host + */ + static createCloudDiscoveryMetadataFromHost(host) { + return { + preferred_network: host, + preferred_cache: host, + aliases: [host] + }; + } + /** + * helper function to generate environment from authority object + */ + getPreferredCache() { + if (this.managedIdentity) { + return Constants.DEFAULT_AUTHORITY_HOST; + } else if (this.discoveryComplete()) { + return this.metadata.preferred_cache; + } else { + throw createClientAuthError(endpointResolutionError); + } + } + /** + * Returns whether or not the provided host is an alias of this authority instance + * @param host + */ + isAlias(host) { + return this.metadata.aliases.indexOf(host) > -1; + } + /** + * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery + * @param host + */ + isAliasOfKnownMicrosoftAuthority(host) { + return InstanceDiscoveryMetadataAliases.has(host); + } + /** + * Checks whether the provided host is that of a public cloud authority + * + * @param authority string + * @returns bool + */ + static isPublicCloudAuthority(host) { + return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0; + } + /** + * Rebuild the authority string with the region + * + * @param host string + * @param region string + */ + static buildRegionalAuthorityString(host, region, queryString) { + const authorityUrlInstance = new UrlString(host); + authorityUrlInstance.validateAsUri(); + const authorityUrlParts = authorityUrlInstance.getUrlComponents(); + let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`; + if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) { + hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`; + } + const url = UrlString.constructAuthorityUriFromObject({ + ...authorityUrlInstance.getUrlComponents(), + HostNameAndPort: hostNameAndPort + }).urlString; + if (queryString) + return `${url}?${queryString}`; + return url; + } + /** + * Replace the endpoints in the metadata object with their regional equivalents. + * + * @param metadata OpenIdConfigResponse + * @param azureRegion string + */ + static replaceWithRegionalInformation(metadata, azureRegion) { + const regionalMetadata = { ...metadata }; + regionalMetadata.authorization_endpoint = _Authority.buildRegionalAuthorityString(regionalMetadata.authorization_endpoint, azureRegion); + regionalMetadata.token_endpoint = _Authority.buildRegionalAuthorityString(regionalMetadata.token_endpoint, azureRegion); + if (regionalMetadata.end_session_endpoint) { + regionalMetadata.end_session_endpoint = _Authority.buildRegionalAuthorityString(regionalMetadata.end_session_endpoint, azureRegion); + } + return regionalMetadata; + } + /** + * Transform CIAM_AUTHORIY as per the below rules: + * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it + * + * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com` + * `ciamlogin.com` can also change in the future and we should accommodate the same + * + * @param authority + */ + static transformCIAMAuthority(authority) { + let ciamAuthority = authority; + const authorityUrl = new UrlString(authority); + const authorityUrlComponents = authorityUrl.getUrlComponents(); + if (authorityUrlComponents.PathSegments.length === 0 && authorityUrlComponents.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) { + const tenantIdOrDomain = authorityUrlComponents.HostNameAndPort.split(".")[0]; + ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${Constants.AAD_TENANT_DOMAIN_SUFFIX}`; + } + return ciamAuthority; + } +}; +Authority.reservedTenantDomains = /* @__PURE__ */ new Set([ + "{tenant}", + "{tenantid}", + AADAuthorityConstants.COMMON, + AADAuthorityConstants.CONSUMERS, + AADAuthorityConstants.ORGANIZATIONS +]); +function getTenantFromAuthorityString(authority) { + var _a; + const authorityUrl = new UrlString(authority); + const authorityUrlComponents = authorityUrl.getUrlComponents(); + const tenantId = (_a = authorityUrlComponents.PathSegments.slice(-1)[0]) == null ? void 0 : _a.toLowerCase(); + switch (tenantId) { + case AADAuthorityConstants.COMMON: + case AADAuthorityConstants.ORGANIZATIONS: + case AADAuthorityConstants.CONSUMERS: + return void 0; + default: + return tenantId; + } +} +function formatAuthorityUri(authorityUri) { + return authorityUri.endsWith(Constants.FORWARD_SLASH) ? authorityUri : `${authorityUri}${Constants.FORWARD_SLASH}`; +} +function buildStaticAuthorityOptions(authOptions) { + const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata; + let cloudDiscoveryMetadata = void 0; + if (rawCloudDiscoveryMetadata) { + try { + cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata); + } catch (e) { + throw createClientConfigurationError(invalidCloudDiscoveryMetadata); + } + } + return { + canonicalAuthority: authOptions.authority ? formatAuthorityUri(authOptions.authority) : void 0, + knownAuthorities: authOptions.knownAuthorities, + cloudDiscoveryMetadata + }; +} + +// node_modules/@azure/msal-common/dist/authority/AuthorityFactory.mjs +async function createDiscoveredInstance(authorityUri, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient) { + performanceClient == null ? void 0 : performanceClient.addQueueMeasurement(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, correlationId); + const authorityUriFinal = Authority.transformCIAMAuthority(formatAuthorityUri(authorityUri)); + const acquireTokenAuthority = new Authority(authorityUriFinal, networkClient, cacheManager, authorityOptions, logger, correlationId, performanceClient); + try { + await invokeAsync(acquireTokenAuthority.resolveEndpointsAsync.bind(acquireTokenAuthority), PerformanceEvents.AuthorityResolveEndpointsAsync, logger, performanceClient, correlationId)(); + return acquireTokenAuthority; + } catch (e) { + throw createClientAuthError(endpointResolutionError); + } +} + +// node_modules/@azure/msal-common/dist/error/ServerError.mjs +var ServerError = class _ServerError extends AuthError { + constructor(errorCode, errorMessage, subError, errorNo, status) { + super(errorCode, errorMessage, subError); + this.name = "ServerError"; + this.errorNo = errorNo; + this.status = status; + Object.setPrototypeOf(this, _ServerError.prototype); + } +}; + +// node_modules/@azure/msal-common/dist/network/RequestThumbprint.mjs +function getRequestThumbprint(clientId, request, homeAccountId) { + var _a; + return { + clientId, + authority: request.authority, + scopes: request.scopes, + homeAccountIdentifier: homeAccountId, + claims: request.claims, + authenticationScheme: request.authenticationScheme, + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + sshKid: request.sshKid, + embeddedClientId: request.embeddedClientId || ((_a = request.tokenBodyParameters) == null ? void 0 : _a.clientId) + }; +} + +// node_modules/@azure/msal-common/dist/network/ThrottlingUtils.mjs +var ThrottlingUtils = class _ThrottlingUtils { + /** + * Prepares a RequestThumbprint to be stored as a key. + * @param thumbprint + */ + static generateThrottlingStorageKey(thumbprint) { + return `${ThrottlingConstants.THROTTLING_PREFIX}.${JSON.stringify(thumbprint)}`; + } + /** + * Performs necessary throttling checks before a network request. + * @param cacheManager + * @param thumbprint + */ + static preProcess(cacheManager, thumbprint, correlationId) { + var _a; + const key = _ThrottlingUtils.generateThrottlingStorageKey(thumbprint); + const value = cacheManager.getThrottlingCache(key); + if (value) { + if (value.throttleTime < Date.now()) { + cacheManager.removeItem(key, correlationId); + return; + } + throw new ServerError(((_a = value.errorCodes) == null ? void 0 : _a.join(" ")) || Constants.EMPTY_STRING, value.errorMessage, value.subError); + } + } + /** + * Performs necessary throttling checks after a network request. + * @param cacheManager + * @param thumbprint + * @param response + */ + static postProcess(cacheManager, thumbprint, response, correlationId) { + if (_ThrottlingUtils.checkResponseStatus(response) || _ThrottlingUtils.checkResponseForRetryAfter(response)) { + const thumbprintValue = { + throttleTime: _ThrottlingUtils.calculateThrottleTime(parseInt(response.headers[HeaderNames.RETRY_AFTER])), + error: response.body.error, + errorCodes: response.body.error_codes, + errorMessage: response.body.error_description, + subError: response.body.suberror + }; + cacheManager.setThrottlingCache(_ThrottlingUtils.generateThrottlingStorageKey(thumbprint), thumbprintValue, correlationId); + } + } + /** + * Checks a NetworkResponse object's status codes against 429 or 5xx + * @param response + */ + static checkResponseStatus(response) { + return response.status === 429 || response.status >= 500 && response.status < 600; + } + /** + * Checks a NetworkResponse object's RetryAfter header + * @param response + */ + static checkResponseForRetryAfter(response) { + if (response.headers) { + return response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) && (response.status < 200 || response.status >= 300); + } + return false; + } + /** + * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds. + * @param throttleTime + */ + static calculateThrottleTime(throttleTime) { + const time = throttleTime <= 0 ? 0 : throttleTime; + const currentSeconds = Date.now() / 1e3; + return Math.floor(Math.min(currentSeconds + (time || ThrottlingConstants.DEFAULT_THROTTLE_TIME_SECONDS), currentSeconds + ThrottlingConstants.DEFAULT_MAX_THROTTLE_TIME_SECONDS) * 1e3); + } + static removeThrottle(cacheManager, clientId, request, homeAccountIdentifier) { + const thumbprint = getRequestThumbprint(clientId, request, homeAccountIdentifier); + const key = this.generateThrottlingStorageKey(thumbprint); + cacheManager.removeItem(key, request.correlationId); + } +}; + +// node_modules/@azure/msal-common/dist/error/NetworkError.mjs +var NetworkError = class _NetworkError extends AuthError { + constructor(error, httpStatus, responseHeaders) { + super(error.errorCode, error.errorMessage, error.subError); + Object.setPrototypeOf(this, _NetworkError.prototype); + this.name = "NetworkError"; + this.error = error; + this.httpStatus = httpStatus; + this.responseHeaders = responseHeaders; + } +}; +function createNetworkError(error, httpStatus, responseHeaders, additionalError) { + error.errorMessage = `${error.errorMessage}, additionalErrorInfo: error.name:${additionalError == null ? void 0 : additionalError.name}, error.message:${additionalError == null ? void 0 : additionalError.message}`; + return new NetworkError(error, httpStatus, responseHeaders); +} + +// node_modules/@azure/msal-common/dist/client/BaseClient.mjs +var BaseClient = class { + constructor(configuration, performanceClient) { + this.config = buildClientConfiguration(configuration); + this.logger = new Logger(this.config.loggerOptions, name, version); + this.cryptoUtils = this.config.cryptoInterface; + this.cacheManager = this.config.storageInterface; + this.networkClient = this.config.networkInterface; + this.serverTelemetryManager = this.config.serverTelemetryManager; + this.authority = this.config.authOptions.authority; + this.performanceClient = performanceClient; + } + /** + * Creates default headers for requests to token endpoint + */ + createTokenRequestHeaders(ccsCred) { + const headers = {}; + headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE; + if (!this.config.systemOptions.preventCorsPreflight && ccsCred) { + switch (ccsCred.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); + headers[HeaderNames.CCS_HEADER] = `Oid:${clientInfo.uid}@${clientInfo.utid}`; + } catch (e) { + this.logger.verbose("Could not parse home account ID for CCS Header: " + e); + } + break; + case CcsCredentialType.UPN: + headers[HeaderNames.CCS_HEADER] = `UPN: ${ccsCred.credential}`; + break; + } + } + return headers; + } + /** + * Http post to token endpoint + * @param tokenEndpoint + * @param queryString + * @param headers + * @param thumbprint + */ + async executePostToTokenEndpoint(tokenEndpoint, queryString, headers, thumbprint, correlationId, queuedEvent) { + var _a; + if (queuedEvent) { + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(queuedEvent, correlationId); + } + const response = await this.sendPostRequest(thumbprint, tokenEndpoint, { body: queryString, headers }, correlationId); + if (this.config.serverTelemetryManager && response.status < 500 && response.status !== 429) { + this.config.serverTelemetryManager.clearTelemetryCache(); + } + return response; + } + /** + * Wraps sendPostRequestAsync with necessary preflight and postflight logic + * @param thumbprint - Request thumbprint for throttling + * @param tokenEndpoint - Endpoint to make the POST to + * @param options - Body and Headers to include on the POST request + * @param correlationId - CorrelationId for telemetry + */ + async sendPostRequest(thumbprint, tokenEndpoint, options, correlationId) { + var _a, _b, _c; + ThrottlingUtils.preProcess(this.cacheManager, thumbprint, correlationId); + let response; + try { + response = await invokeAsync(this.networkClient.sendPostRequestAsync.bind(this.networkClient), PerformanceEvents.NetworkClientSendPostRequestAsync, this.logger, this.performanceClient, correlationId)(tokenEndpoint, options); + const responseHeaders = response.headers || {}; + (_b = this.performanceClient) == null ? void 0 : _b.addFields({ + refreshTokenSize: ((_a = response.body.refresh_token) == null ? void 0 : _a.length) || 0, + httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || "", + requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "" + }, correlationId); + } catch (e) { + if (e instanceof NetworkError) { + const responseHeaders = e.responseHeaders; + if (responseHeaders) { + (_c = this.performanceClient) == null ? void 0 : _c.addFields({ + httpVerToken: responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || "", + requestId: responseHeaders[HeaderNames.X_MS_REQUEST_ID] || "", + contentTypeHeader: responseHeaders[HeaderNames.CONTENT_TYPE] || void 0, + contentLengthHeader: responseHeaders[HeaderNames.CONTENT_LENGTH] || void 0, + httpStatus: e.httpStatus + }, correlationId); + } + throw e.error; + } + if (e instanceof AuthError) { + throw e; + } else { + throw createClientAuthError(networkError); + } + } + ThrottlingUtils.postProcess(this.cacheManager, thumbprint, response, correlationId); + return response; + } + /** + * Updates the authority object of the client. Endpoint discovery must be completed. + * @param updatedAuthority + */ + async updateAuthority(cloudInstanceHostname, correlationId) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, correlationId); + const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${this.authority.tenant}/`; + const cloudInstanceAuthority = await createDiscoveredInstance(cloudInstanceAuthorityUri, this.networkClient, this.cacheManager, this.authority.options, this.logger, correlationId, this.performanceClient); + this.authority = cloudInstanceAuthority; + } + /** + * Creates query string for the /token request + * @param request + */ + createTokenQueryParameters(request) { + const parameters = /* @__PURE__ */ new Map(); + if (request.embeddedClientId) { + addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); + } + if (request.tokenQueryParameters) { + addExtraQueryParameters(parameters, request.tokenQueryParameters); + } + addCorrelationId(parameters, request.correlationId); + instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); + return mapToQueryString(parameters); + } +}; + +// node_modules/@azure/msal-common/dist/account/TokenClaims.mjs +function getTenantIdFromIdTokenClaims(idTokenClaims) { + if (idTokenClaims) { + const tenantId = idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr; + return tenantId || null; + } + return null; +} + +// node_modules/@azure/msal-common/dist/cache/entities/AccountEntity.mjs +var AccountEntity = class _AccountEntity { + /** + * Returns the AccountInfo interface for this account. + */ + getAccountInfo() { + return { + homeAccountId: this.homeAccountId, + environment: this.environment, + tenantId: this.realm, + username: this.username, + localAccountId: this.localAccountId, + loginHint: this.loginHint, + name: this.name, + nativeAccountId: this.nativeAccountId, + authorityType: this.authorityType, + // Deserialize tenant profiles array into a Map + tenantProfiles: new Map((this.tenantProfiles || []).map((tenantProfile) => { + return [tenantProfile.tenantId, tenantProfile]; + })) + }; + } + /** + * Returns true if the account entity is in single tenant format (outdated), false otherwise + */ + isSingleTenant() { + return !this.tenantProfiles; + } + /** + * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD. + * @param accountDetails + */ + static createAccount(accountDetails, authority, base64Decode2) { + var _a, _b, _c, _d, _e, _f, _g; + const account = new _AccountEntity(); + if (authority.authorityType === AuthorityType.Adfs) { + account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE; + } else if (authority.protocolMode === ProtocolMode.OIDC) { + account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE; + } else { + account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE; + } + let clientInfo; + if (accountDetails.clientInfo && base64Decode2) { + clientInfo = buildClientInfo(accountDetails.clientInfo, base64Decode2); + } + account.clientInfo = accountDetails.clientInfo; + account.homeAccountId = accountDetails.homeAccountId; + account.nativeAccountId = accountDetails.nativeAccountId; + const env = accountDetails.environment || authority && authority.getPreferredCache(); + if (!env) { + throw createClientAuthError(invalidCacheEnvironment); + } + account.environment = env; + account.realm = (clientInfo == null ? void 0 : clientInfo.utid) || getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) || ""; + account.localAccountId = (clientInfo == null ? void 0 : clientInfo.uid) || ((_a = accountDetails.idTokenClaims) == null ? void 0 : _a.oid) || ((_b = accountDetails.idTokenClaims) == null ? void 0 : _b.sub) || ""; + const preferredUsername = ((_c = accountDetails.idTokenClaims) == null ? void 0 : _c.preferred_username) || ((_d = accountDetails.idTokenClaims) == null ? void 0 : _d.upn); + const email = ((_e = accountDetails.idTokenClaims) == null ? void 0 : _e.emails) ? accountDetails.idTokenClaims.emails[0] : null; + account.username = preferredUsername || email || ""; + account.loginHint = (_f = accountDetails.idTokenClaims) == null ? void 0 : _f.login_hint; + account.name = ((_g = accountDetails.idTokenClaims) == null ? void 0 : _g.name) || ""; + account.cloudGraphHostName = accountDetails.cloudGraphHostName; + account.msGraphHost = accountDetails.msGraphHost; + if (accountDetails.tenantProfiles) { + account.tenantProfiles = accountDetails.tenantProfiles; + } else { + const tenantProfile = buildTenantProfile(accountDetails.homeAccountId, account.localAccountId, account.realm, accountDetails.idTokenClaims); + account.tenantProfiles = [tenantProfile]; + } + return account; + } + /** + * Creates an AccountEntity object from AccountInfo + * @param accountInfo + * @param cloudGraphHostName + * @param msGraphHost + * @returns + */ + static createFromAccountInfo(accountInfo, cloudGraphHostName, msGraphHost) { + var _a; + const account = new _AccountEntity(); + account.authorityType = accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE; + account.homeAccountId = accountInfo.homeAccountId; + account.localAccountId = accountInfo.localAccountId; + account.nativeAccountId = accountInfo.nativeAccountId; + account.realm = accountInfo.tenantId; + account.environment = accountInfo.environment; + account.username = accountInfo.username; + account.name = accountInfo.name; + account.loginHint = accountInfo.loginHint; + account.cloudGraphHostName = cloudGraphHostName; + account.msGraphHost = msGraphHost; + account.tenantProfiles = Array.from(((_a = accountInfo.tenantProfiles) == null ? void 0 : _a.values()) || []); + return account; + } + /** + * Generate HomeAccountId from server response + * @param serverClientInfo + * @param authType + */ + static generateHomeAccountId(serverClientInfo, authType, logger, cryptoObj, idTokenClaims) { + if (!(authType === AuthorityType.Adfs || authType === AuthorityType.Dsts)) { + if (serverClientInfo) { + try { + const clientInfo = buildClientInfo(serverClientInfo, cryptoObj.base64Decode); + if (clientInfo.uid && clientInfo.utid) { + return `${clientInfo.uid}.${clientInfo.utid}`; + } + } catch (e) { + } + } + logger.warning("No client info in response"); + } + return (idTokenClaims == null ? void 0 : idTokenClaims.sub) || ""; + } + /** + * Validates an entity: checks for all expected params + * @param entity + */ + static isAccountEntity(entity) { + if (!entity) { + return false; + } + return entity.hasOwnProperty("homeAccountId") && entity.hasOwnProperty("environment") && entity.hasOwnProperty("realm") && entity.hasOwnProperty("localAccountId") && entity.hasOwnProperty("username") && entity.hasOwnProperty("authorityType"); + } + /** + * Helper function to determine whether 2 accountInfo objects represent the same account + * @param accountA + * @param accountB + * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality + */ + static accountInfoIsEqual(accountA, accountB, compareClaims) { + if (!accountA || !accountB) { + return false; + } + let claimsMatch = true; + if (compareClaims) { + const accountAClaims = accountA.idTokenClaims || {}; + const accountBClaims = accountB.idTokenClaims || {}; + claimsMatch = accountAClaims.iat === accountBClaims.iat && accountAClaims.nonce === accountBClaims.nonce; + } + return accountA.homeAccountId === accountB.homeAccountId && accountA.localAccountId === accountB.localAccountId && accountA.username === accountB.username && accountA.tenantId === accountB.tenantId && accountA.loginHint === accountB.loginHint && accountA.environment === accountB.environment && accountA.nativeAccountId === accountB.nativeAccountId && claimsMatch; + } +}; + +// node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs +var InteractionRequiredAuthErrorCodes_exports = {}; +__export(InteractionRequiredAuthErrorCodes_exports, { + badToken: () => badToken, + consentRequired: () => consentRequired, + interactionRequired: () => interactionRequired, + loginRequired: () => loginRequired, + nativeAccountUnavailable: () => nativeAccountUnavailable, + noTokensFound: () => noTokensFound, + refreshTokenExpired: () => refreshTokenExpired, + uxNotAllowed: () => uxNotAllowed +}); +var noTokensFound = "no_tokens_found"; +var nativeAccountUnavailable = "native_account_unavailable"; +var refreshTokenExpired = "refresh_token_expired"; +var uxNotAllowed = "ux_not_allowed"; +var interactionRequired = "interaction_required"; +var consentRequired = "consent_required"; +var loginRequired = "login_required"; +var badToken = "bad_token"; + +// node_modules/@azure/msal-common/dist/error/InteractionRequiredAuthError.mjs +var InteractionRequiredServerErrorMessage = [ + interactionRequired, + consentRequired, + loginRequired, + badToken, + uxNotAllowed +]; +var InteractionRequiredAuthSubErrorMessage = [ + "message_only", + "additional_action", + "basic_action", + "user_password_expired", + "consent_required", + "bad_token" +]; +var InteractionRequiredAuthErrorMessages = { + [noTokensFound]: "No refresh token found in the cache. Please sign-in.", + [nativeAccountUnavailable]: "The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.", + [refreshTokenExpired]: "Refresh token has expired.", + [badToken]: "Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.", + [uxNotAllowed]: "`canShowUI` flag in Edge was set to false. User interaction required on web page. Please invoke an interactive API to resolve." +}; +var InteractionRequiredAuthErrorMessage = { + noTokensFoundError: { + code: noTokensFound, + desc: InteractionRequiredAuthErrorMessages[noTokensFound] + }, + native_account_unavailable: { + code: nativeAccountUnavailable, + desc: InteractionRequiredAuthErrorMessages[nativeAccountUnavailable] + }, + bad_token: { + code: badToken, + desc: InteractionRequiredAuthErrorMessages[badToken] + } +}; +var InteractionRequiredAuthError = class _InteractionRequiredAuthError extends AuthError { + constructor(errorCode, errorMessage, subError, timestamp, traceId, correlationId, claims, errorNo) { + super(errorCode, errorMessage, subError); + Object.setPrototypeOf(this, _InteractionRequiredAuthError.prototype); + this.timestamp = timestamp || Constants.EMPTY_STRING; + this.traceId = traceId || Constants.EMPTY_STRING; + this.correlationId = correlationId || Constants.EMPTY_STRING; + this.claims = claims || Constants.EMPTY_STRING; + this.name = "InteractionRequiredAuthError"; + this.errorNo = errorNo; + } +}; +function isInteractionRequiredError(errorCode, errorString, subError) { + const isInteractionRequiredErrorCode = !!errorCode && InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1; + const isInteractionRequiredSubError = !!subError && InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1; + const isInteractionRequiredErrorDesc = !!errorString && InteractionRequiredServerErrorMessage.some((irErrorCode) => { + return errorString.indexOf(irErrorCode) > -1; + }); + return isInteractionRequiredErrorCode || isInteractionRequiredErrorDesc || isInteractionRequiredSubError; +} +function createInteractionRequiredAuthError(errorCode) { + return new InteractionRequiredAuthError(errorCode, InteractionRequiredAuthErrorMessages[errorCode]); +} + +// node_modules/@azure/msal-common/dist/utils/ProtocolUtils.mjs +var ProtocolUtils = class _ProtocolUtils { + /** + * Appends user state with random guid, or returns random guid. + * @param userState + * @param randomGuid + */ + static setRequestState(cryptoObj, userState, meta) { + const libraryState = _ProtocolUtils.generateLibraryState(cryptoObj, meta); + return userState ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}` : libraryState; + } + /** + * Generates the state value used by the common library. + * @param randomGuid + * @param cryptoObj + */ + static generateLibraryState(cryptoObj, meta) { + if (!cryptoObj) { + throw createClientAuthError(noCryptoObject); + } + const stateObj = { + id: cryptoObj.createNewGuid() + }; + if (meta) { + stateObj.meta = meta; + } + const stateString = JSON.stringify(stateObj); + return cryptoObj.base64Encode(stateString); + } + /** + * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user. + * @param state + * @param cryptoObj + */ + static parseRequestState(cryptoObj, state) { + if (!cryptoObj) { + throw createClientAuthError(noCryptoObject); + } + if (!state) { + throw createClientAuthError(invalidState); + } + try { + const splitState = state.split(Constants.RESOURCE_DELIM); + const libraryState = splitState[0]; + const userState = splitState.length > 1 ? splitState.slice(1).join(Constants.RESOURCE_DELIM) : Constants.EMPTY_STRING; + const libraryStateString = cryptoObj.base64Decode(libraryState); + const libraryStateObj = JSON.parse(libraryStateString); + return { + userRequestState: userState || Constants.EMPTY_STRING, + libraryState: libraryStateObj + }; + } catch (e) { + throw createClientAuthError(invalidState); + } + } +}; + +// node_modules/@azure/msal-common/dist/crypto/PopTokenGenerator.mjs +var KeyLocation = { + SW: "sw" +}; +var PopTokenGenerator = class { + constructor(cryptoUtils, performanceClient) { + this.cryptoUtils = cryptoUtils; + this.performanceClient = performanceClient; + } + /** + * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters + * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash + * @param request + * @returns + */ + async generateCnf(request, logger) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.PopTokenGenerateCnf, request.correlationId); + const reqCnf = await invokeAsync(this.generateKid.bind(this), PerformanceEvents.PopTokenGenerateCnf, logger, this.performanceClient, request.correlationId)(request); + const reqCnfString = this.cryptoUtils.base64UrlEncode(JSON.stringify(reqCnf)); + return { + kid: reqCnf.kid, + reqCnfString + }; + } + /** + * Generates key_id for a SHR token request + * @param request + * @returns + */ + async generateKid(request) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.PopTokenGenerateKid, request.correlationId); + const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(request); + return { + kid: kidThumbprint, + xms_ksl: KeyLocation.SW + }; + } + /** + * Signs the POP access_token with the local generated key-pair + * @param accessToken + * @param request + * @returns + */ + async signPopToken(accessToken, keyId, request) { + return this.signPayload(accessToken, keyId, request); + } + /** + * Utility function to generate the signed JWT for an access_token + * @param payload + * @param kid + * @param request + * @param claims + * @returns + */ + async signPayload(payload, keyId, request, claims) { + const { resourceRequestMethod, resourceRequestUri, shrClaims, shrNonce, shrOptions } = request; + const resourceUrlString = resourceRequestUri ? new UrlString(resourceRequestUri) : void 0; + const resourceUrlComponents = resourceUrlString == null ? void 0 : resourceUrlString.getUrlComponents(); + return this.cryptoUtils.signJwt({ + at: payload, + ts: nowSeconds(), + m: resourceRequestMethod == null ? void 0 : resourceRequestMethod.toUpperCase(), + u: resourceUrlComponents == null ? void 0 : resourceUrlComponents.HostNameAndPort, + nonce: shrNonce || this.cryptoUtils.createNewGuid(), + p: resourceUrlComponents == null ? void 0 : resourceUrlComponents.AbsolutePath, + q: (resourceUrlComponents == null ? void 0 : resourceUrlComponents.QueryString) ? [[], resourceUrlComponents.QueryString] : void 0, + client_claims: shrClaims || void 0, + ...claims + }, keyId, shrOptions, request.correlationId); + } +}; + +// node_modules/@azure/msal-common/dist/cache/persistence/TokenCacheContext.mjs +var TokenCacheContext = class { + constructor(tokenCache, hasChanged) { + this.cache = tokenCache; + this.hasChanged = hasChanged; + } + /** + * boolean which indicates the changes in cache + */ + get cacheHasChanged() { + return this.hasChanged; + } + /** + * function to retrieve the token cache + */ + get tokenCache() { + return this.cache; + } +}; + +// node_modules/@azure/msal-common/dist/response/ResponseHandler.mjs +var ResponseHandler = class _ResponseHandler { + constructor(clientId, cacheStorage, cryptoObj, logger, serializableCache, persistencePlugin, performanceClient) { + this.clientId = clientId; + this.cacheStorage = cacheStorage; + this.cryptoObj = cryptoObj; + this.logger = logger; + this.serializableCache = serializableCache; + this.persistencePlugin = persistencePlugin; + this.performanceClient = performanceClient; + } + /** + * Function which validates server authorization token response. + * @param serverResponse + * @param refreshAccessToken + */ + validateTokenResponse(serverResponse, refreshAccessToken) { + var _a; + if (serverResponse.error || serverResponse.error_description || serverResponse.suberror) { + const errString = `Error(s): ${serverResponse.error_codes || Constants.NOT_AVAILABLE} - Timestamp: ${serverResponse.timestamp || Constants.NOT_AVAILABLE} - Description: ${serverResponse.error_description || Constants.NOT_AVAILABLE} - Correlation ID: ${serverResponse.correlation_id || Constants.NOT_AVAILABLE} - Trace ID: ${serverResponse.trace_id || Constants.NOT_AVAILABLE}`; + const serverErrorNo = ((_a = serverResponse.error_codes) == null ? void 0 : _a.length) ? serverResponse.error_codes[0] : void 0; + const serverError = new ServerError(serverResponse.error, errString, serverResponse.suberror, serverErrorNo, serverResponse.status); + if (refreshAccessToken && serverResponse.status && serverResponse.status >= HttpStatus.SERVER_ERROR_RANGE_START && serverResponse.status <= HttpStatus.SERVER_ERROR_RANGE_END) { + this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed. +${serverError}`); + return; + } else if (refreshAccessToken && serverResponse.status && serverResponse.status >= HttpStatus.CLIENT_ERROR_RANGE_START && serverResponse.status <= HttpStatus.CLIENT_ERROR_RANGE_END) { + this.logger.warning(`executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token. +${serverError}`); + return; + } + if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { + throw new InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || Constants.EMPTY_STRING, serverResponse.trace_id || Constants.EMPTY_STRING, serverResponse.correlation_id || Constants.EMPTY_STRING, serverResponse.claims || Constants.EMPTY_STRING, serverErrorNo); + } + throw serverError; + } + } + /** + * Returns a constructed token response based on given string. Also manages the cache updates and cleanups. + * @param serverTokenResponse + * @param authority + */ + async handleServerTokenResponse(serverTokenResponse, authority, reqTimestamp, request, authCodePayload, userAssertionHash, handlingRefreshTokenResponse, forceCacheRefreshTokenResponse, serverRequestId) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.HandleServerTokenResponse, serverTokenResponse.correlation_id); + let idTokenClaims; + if (serverTokenResponse.id_token) { + idTokenClaims = extractTokenClaims(serverTokenResponse.id_token || Constants.EMPTY_STRING, this.cryptoObj.base64Decode); + if (authCodePayload && authCodePayload.nonce) { + if (idTokenClaims.nonce !== authCodePayload.nonce) { + throw createClientAuthError(nonceMismatch); + } + } + if (request.maxAge || request.maxAge === 0) { + const authTime = idTokenClaims.auth_time; + if (!authTime) { + throw createClientAuthError(authTimeNotFound); + } + checkMaxAge(authTime, request.maxAge); + } + } + this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(serverTokenResponse.client_info || Constants.EMPTY_STRING, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims); + let requestStateObj; + if (!!authCodePayload && !!authCodePayload.state) { + requestStateObj = ProtocolUtils.parseRequestState(this.cryptoObj, authCodePayload.state); + } + serverTokenResponse.key_id = serverTokenResponse.key_id || request.sshKid || void 0; + const cacheRecord = this.generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload); + let cacheContext; + try { + if (this.persistencePlugin && this.serializableCache) { + this.logger.verbose("Persistence enabled, calling beforeCacheAccess"); + cacheContext = new TokenCacheContext(this.serializableCache, true); + await this.persistencePlugin.beforeCacheAccess(cacheContext); + } + if (handlingRefreshTokenResponse && !forceCacheRefreshTokenResponse && cacheRecord.account) { + const key = this.cacheStorage.generateAccountKey(cacheRecord.account.getAccountInfo()); + const account = this.cacheStorage.getAccount(key, request.correlationId); + if (!account) { + this.logger.warning("Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache"); + return await _ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, void 0, serverRequestId); + } + } + await this.cacheStorage.saveCacheRecord(cacheRecord, request.correlationId, request.storeInCache); + } finally { + if (this.persistencePlugin && this.serializableCache && cacheContext) { + this.logger.verbose("Persistence enabled, calling afterCacheAccess"); + await this.persistencePlugin.afterCacheAccess(cacheContext); + } + } + return _ResponseHandler.generateAuthenticationResult(this.cryptoObj, authority, cacheRecord, false, request, idTokenClaims, requestStateObj, serverTokenResponse, serverRequestId); + } + /** + * Generates CacheRecord + * @param serverTokenResponse + * @param idTokenObj + * @param authority + */ + generateCacheRecord(serverTokenResponse, authority, reqTimestamp, request, idTokenClaims, userAssertionHash, authCodePayload) { + const env = authority.getPreferredCache(); + if (!env) { + throw createClientAuthError(invalidCacheEnvironment); + } + const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims); + let cachedIdToken; + let cachedAccount; + if (serverTokenResponse.id_token && !!idTokenClaims) { + cachedIdToken = createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, claimsTenantId || ""); + cachedAccount = buildAccountToCache( + this.cacheStorage, + authority, + this.homeAccountIdentifier, + this.cryptoObj.base64Decode, + request.correlationId, + idTokenClaims, + serverTokenResponse.client_info, + env, + claimsTenantId, + authCodePayload, + void 0, + // nativeAccountId + this.logger + ); + } + let cachedAccessToken = null; + if (serverTokenResponse.access_token) { + const responseScopes = serverTokenResponse.scope ? ScopeSet.fromString(serverTokenResponse.scope) : new ScopeSet(request.scopes || []); + const expiresIn = (typeof serverTokenResponse.expires_in === "string" ? parseInt(serverTokenResponse.expires_in, 10) : serverTokenResponse.expires_in) || 0; + const extExpiresIn = (typeof serverTokenResponse.ext_expires_in === "string" ? parseInt(serverTokenResponse.ext_expires_in, 10) : serverTokenResponse.ext_expires_in) || 0; + const refreshIn = (typeof serverTokenResponse.refresh_in === "string" ? parseInt(serverTokenResponse.refresh_in, 10) : serverTokenResponse.refresh_in) || void 0; + const tokenExpirationSeconds = reqTimestamp + expiresIn; + const extendedTokenExpirationSeconds = tokenExpirationSeconds + extExpiresIn; + const refreshOnSeconds = refreshIn && refreshIn > 0 ? reqTimestamp + refreshIn : void 0; + cachedAccessToken = createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, claimsTenantId || authority.tenant || "", responseScopes.printScopes(), tokenExpirationSeconds, extendedTokenExpirationSeconds, this.cryptoObj.base64Decode, refreshOnSeconds, serverTokenResponse.token_type, userAssertionHash, serverTokenResponse.key_id, request.claims, request.requestedClaimsHash); + } + let cachedRefreshToken = null; + if (serverTokenResponse.refresh_token) { + let rtExpiresOn; + if (serverTokenResponse.refresh_token_expires_in) { + const rtExpiresIn = typeof serverTokenResponse.refresh_token_expires_in === "string" ? parseInt(serverTokenResponse.refresh_token_expires_in, 10) : serverTokenResponse.refresh_token_expires_in; + rtExpiresOn = reqTimestamp + rtExpiresIn; + } + cachedRefreshToken = createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci, userAssertionHash, rtExpiresOn); + } + let cachedAppMetadata = null; + if (serverTokenResponse.foci) { + cachedAppMetadata = { + clientId: this.clientId, + environment: env, + familyId: serverTokenResponse.foci + }; + } + return { + account: cachedAccount, + idToken: cachedIdToken, + accessToken: cachedAccessToken, + refreshToken: cachedRefreshToken, + appMetadata: cachedAppMetadata + }; + } + /** + * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache. + * + * Optionally takes a state string that is set as-is in the response. + * + * @param cacheRecord + * @param idTokenObj + * @param fromTokenCache + * @param stateString + */ + static async generateAuthenticationResult(cryptoObj, authority, cacheRecord, fromTokenCache, request, idTokenClaims, requestState, serverTokenResponse, requestId) { + var _a, _b, _c, _d, _e; + let accessToken = Constants.EMPTY_STRING; + let responseScopes = []; + let expiresOn = null; + let extExpiresOn; + let refreshOn; + let familyId = Constants.EMPTY_STRING; + if (cacheRecord.accessToken) { + if (cacheRecord.accessToken.tokenType === AuthenticationScheme.POP && !request.popKid) { + const popTokenGenerator = new PopTokenGenerator(cryptoObj); + const { secret, keyId } = cacheRecord.accessToken; + if (!keyId) { + throw createClientAuthError(keyIdMissing); + } + accessToken = await popTokenGenerator.signPopToken(secret, keyId, request); + } else { + accessToken = cacheRecord.accessToken.secret; + } + responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray(); + expiresOn = toDateFromSeconds(cacheRecord.accessToken.expiresOn); + extExpiresOn = toDateFromSeconds(cacheRecord.accessToken.extendedExpiresOn); + if (cacheRecord.accessToken.refreshOn) { + refreshOn = toDateFromSeconds(cacheRecord.accessToken.refreshOn); + } + } + if (cacheRecord.appMetadata) { + familyId = cacheRecord.appMetadata.familyId === THE_FAMILY_ID ? THE_FAMILY_ID : ""; + } + const uid = (idTokenClaims == null ? void 0 : idTokenClaims.oid) || (idTokenClaims == null ? void 0 : idTokenClaims.sub) || ""; + const tid = (idTokenClaims == null ? void 0 : idTokenClaims.tid) || ""; + if ((serverTokenResponse == null ? void 0 : serverTokenResponse.spa_accountid) && !!cacheRecord.account) { + cacheRecord.account.nativeAccountId = serverTokenResponse == null ? void 0 : serverTokenResponse.spa_accountid; + } + const accountInfo = cacheRecord.account ? updateAccountTenantProfileData( + cacheRecord.account.getAccountInfo(), + void 0, + // tenantProfile optional + idTokenClaims, + (_a = cacheRecord.idToken) == null ? void 0 : _a.secret + ) : null; + return { + authority: authority.canonicalAuthority, + uniqueId: uid, + tenantId: tid, + scopes: responseScopes, + account: accountInfo, + idToken: ((_b = cacheRecord == null ? void 0 : cacheRecord.idToken) == null ? void 0 : _b.secret) || "", + idTokenClaims: idTokenClaims || {}, + accessToken, + fromCache: fromTokenCache, + expiresOn, + extExpiresOn, + refreshOn, + correlationId: request.correlationId, + requestId: requestId || Constants.EMPTY_STRING, + familyId, + tokenType: ((_c = cacheRecord.accessToken) == null ? void 0 : _c.tokenType) || Constants.EMPTY_STRING, + state: requestState ? requestState.userRequestState : Constants.EMPTY_STRING, + cloudGraphHostName: ((_d = cacheRecord.account) == null ? void 0 : _d.cloudGraphHostName) || Constants.EMPTY_STRING, + msGraphHost: ((_e = cacheRecord.account) == null ? void 0 : _e.msGraphHost) || Constants.EMPTY_STRING, + code: serverTokenResponse == null ? void 0 : serverTokenResponse.spa_code, + fromNativeBroker: false + }; + } +}; +function buildAccountToCache(cacheStorage, authority, homeAccountId, base64Decode2, correlationId, idTokenClaims, clientInfo, environment, claimsTenantId, authCodePayload, nativeAccountId, logger) { + logger == null ? void 0 : logger.verbose("setCachedAccount called"); + const accountKeys = cacheStorage.getAccountKeys(); + const baseAccountKey = accountKeys.find((accountKey) => { + return accountKey.startsWith(homeAccountId); + }); + let cachedAccount = null; + if (baseAccountKey) { + cachedAccount = cacheStorage.getAccount(baseAccountKey, correlationId); + } + const baseAccount = cachedAccount || AccountEntity.createAccount({ + homeAccountId, + idTokenClaims, + clientInfo, + environment, + cloudGraphHostName: authCodePayload == null ? void 0 : authCodePayload.cloud_graph_host_name, + msGraphHost: authCodePayload == null ? void 0 : authCodePayload.msgraph_host, + nativeAccountId + }, authority, base64Decode2); + const tenantProfiles = baseAccount.tenantProfiles || []; + const tenantId = claimsTenantId || baseAccount.realm; + if (tenantId && !tenantProfiles.find((tenantProfile) => { + return tenantProfile.tenantId === tenantId; + })) { + const newTenantProfile = buildTenantProfile(homeAccountId, baseAccount.localAccountId, tenantId, idTokenClaims); + tenantProfiles.push(newTenantProfile); + } + baseAccount.tenantProfiles = tenantProfiles; + return baseAccount; +} + +// node_modules/@azure/msal-common/dist/utils/ClientAssertionUtils.mjs +async function getClientAssertion(clientAssertion, clientId, tokenEndpoint) { + if (typeof clientAssertion === "string") { + return clientAssertion; + } else { + const config = { + clientId, + tokenEndpoint + }; + return clientAssertion(config); + } +} + +// node_modules/@azure/msal-common/dist/client/AuthorizationCodeClient.mjs +var AuthorizationCodeClient = class extends BaseClient { + constructor(configuration, performanceClient) { + var _a; + super(configuration, performanceClient); + this.includeRedirectUri = true; + this.oidcDefaultScopes = (_a = this.config.authOptions.authority.options.OIDCOptions) == null ? void 0 : _a.defaultScopes; + } + /** + * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the + * authorization_code_grant + * @param request + */ + async acquireToken(request, authCodePayload) { + var _a, _b; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthClientAcquireToken, request.correlationId); + if (!request.code) { + throw createClientAuthError(requestCannotBeMade); + } + const reqTimestamp = nowSeconds(); + const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.AuthClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(this.authority, request); + const requestId = (_b = response.headers) == null ? void 0 : _b[HeaderNames.X_MS_REQUEST_ID]; + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin, this.performanceClient); + responseHandler.validateTokenResponse(response.body); + return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, authCodePayload, void 0, void 0, void 0, requestId); + } + /** + * Used to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param authorityUri + */ + getLogoutUri(logoutRequest) { + if (!logoutRequest) { + throw createClientConfigurationError(logoutRequestEmpty); + } + const queryString = this.createLogoutUrlQueryString(logoutRequest); + return UrlString.appendQueryString(this.authority.endSessionEndpoint, queryString); + } + /** + * Executes POST request to token endpoint + * @param authority + * @param request + */ + async executeTokenRequest(authority, request) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthClientExecuteTokenRequest, request.correlationId); + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.AuthClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); + let ccsCredential = void 0; + if (request.clientInfo) { + try { + const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); + ccsCredential = { + credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, + type: CcsCredentialType.HOME_ACCOUNT_ID + }; + } catch (e) { + this.logger.verbose("Could not parse client info for CCS Header: " + e); + } + } + const headers = this.createTokenRequestHeaders(ccsCredential || request.ccsCredential); + const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request); + return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint); + } + /** + * Generates a map for all the params to be sent to the service + * @param request + */ + async createTokenRequestBody(request) { + var _a, _b; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.AuthClientCreateTokenRequestBody, request.correlationId); + const parameters = /* @__PURE__ */ new Map(); + addClientId(parameters, request.embeddedClientId || ((_b = request.tokenBodyParameters) == null ? void 0 : _b[CLIENT_ID]) || this.config.authOptions.clientId); + if (!this.includeRedirectUri) { + if (!request.redirectUri) { + throw createClientConfigurationError(redirectUriEmpty); + } + } else { + addRedirectUri(parameters, request.redirectUri); + } + addScopes(parameters, request.scopes, true, this.oidcDefaultScopes); + addAuthorizationCode(parameters, request.code); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + if (request.codeVerifier) { + addCodeVerifier(parameters, request.codeVerifier); + } + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + if (this.config.clientCredentials.clientAssertion) { + const clientAssertion = this.config.clientCredentials.clientAssertion; + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + addGrantType(parameters, GrantType.AUTHORIZATION_CODE_GRANT); + addClientInfo(parameters); + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + addPopToken(parameters, reqCnfData); + } else if (request.authenticationScheme === AuthenticationScheme.SSH) { + if (request.sshJwk) { + addSshJwk(parameters, request.sshJwk); + } else { + throw createClientConfigurationError(missingSshJwk); + } + } + if (!StringUtils.isEmptyObj(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + let ccsCred = void 0; + if (request.clientInfo) { + try { + const clientInfo = buildClientInfo(request.clientInfo, this.cryptoUtils.base64Decode); + ccsCred = { + credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`, + type: CcsCredentialType.HOME_ACCOUNT_ID + }; + } catch (e) { + this.logger.verbose("Could not parse client info for CCS Header: " + e); + } + } else { + ccsCred = request.ccsCredential; + } + if (this.config.systemOptions.preventCorsPreflight && ccsCred) { + switch (ccsCred.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(ccsCred.credential); + addCcsOid(parameters, clientInfo); + } catch (e) { + this.logger.verbose("Could not parse home account ID for CCS Header: " + e); + } + break; + case CcsCredentialType.UPN: + addCcsUpn(parameters, ccsCred.credential); + break; + } + } + if (request.embeddedClientId) { + addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); + } + if (request.tokenBodyParameters) { + addExtraQueryParameters(parameters, request.tokenBodyParameters); + } + if (request.enableSpaAuthorizationCode && (!request.tokenBodyParameters || !request.tokenBodyParameters[RETURN_SPA_CODE])) { + addExtraQueryParameters(parameters, { + [RETURN_SPA_CODE]: "1" + }); + } + instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); + return mapToQueryString(parameters); + } + /** + * This API validates the `EndSessionRequest` and creates a URL + * @param request + */ + createLogoutUrlQueryString(request) { + const parameters = /* @__PURE__ */ new Map(); + if (request.postLogoutRedirectUri) { + addPostLogoutRedirectUri(parameters, request.postLogoutRedirectUri); + } + if (request.correlationId) { + addCorrelationId(parameters, request.correlationId); + } + if (request.idTokenHint) { + addIdTokenHint(parameters, request.idTokenHint); + } + if (request.state) { + addState(parameters, request.state); + } + if (request.logoutHint) { + addLogoutHint(parameters, request.logoutHint); + } + if (request.extraQueryParameters) { + addExtraQueryParameters(parameters, request.extraQueryParameters); + } + if (this.config.authOptions.instanceAware) { + addInstanceAware(parameters); + } + return mapToQueryString(parameters, this.config.authOptions.encodeExtraQueryParams, request.extraQueryParameters); + } +}; + +// node_modules/@azure/msal-common/dist/client/RefreshTokenClient.mjs +var DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; +var RefreshTokenClient = class extends BaseClient { + constructor(configuration, performanceClient) { + super(configuration, performanceClient); + } + async acquireToken(request) { + var _a, _b; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireToken, request.correlationId); + const reqTimestamp = nowSeconds(); + const response = await invokeAsync(this.executeTokenRequest.bind(this), PerformanceEvents.RefreshTokenClientExecuteTokenRequest, this.logger, this.performanceClient, request.correlationId)(request, this.authority); + const requestId = (_b = response.headers) == null ? void 0 : _b[HeaderNames.X_MS_REQUEST_ID]; + const responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger, this.config.serializableCache, this.config.persistencePlugin); + responseHandler.validateTokenResponse(response.body); + return invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, this.logger, this.performanceClient, request.correlationId)(response.body, this.authority, reqTimestamp, request, void 0, void 0, true, request.forceCache, requestId); + } + /** + * Gets cached refresh token and attaches to request, then calls acquireToken API + * @param request + */ + async acquireTokenByRefreshToken(request) { + var _a; + if (!request) { + throw createClientConfigurationError(tokenRequestEmpty); + } + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, request.correlationId); + if (!request.account) { + throw createClientAuthError(noAccountInSilentRequest); + } + const isFOCI = this.cacheManager.isAppMetadataFOCI(request.account.environment); + if (isFOCI) { + try { + return await invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, true); + } catch (e) { + const noFamilyRTInCache = e instanceof InteractionRequiredAuthError && e.errorCode === noTokensFound; + const clientMismatchErrorWithFamilyRT = e instanceof ServerError && e.errorCode === Errors.INVALID_GRANT_ERROR && e.subError === Errors.CLIENT_MISMATCH_ERROR; + if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) { + return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false); + } else { + throw e; + } + } + } + return invokeAsync(this.acquireTokenWithCachedRefreshToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, this.logger, this.performanceClient, request.correlationId)(request, false); + } + /** + * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached + * @param request + */ + async acquireTokenWithCachedRefreshToken(request, foci) { + var _a, _b, _c; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken, request.correlationId); + const refreshToken = invoke(this.cacheManager.getRefreshToken.bind(this.cacheManager), PerformanceEvents.CacheManagerGetRefreshToken, this.logger, this.performanceClient, request.correlationId)(request.account, foci, request.correlationId, void 0, this.performanceClient); + if (!refreshToken) { + throw createInteractionRequiredAuthError(noTokensFound); + } + if (refreshToken.expiresOn && isTokenExpired(refreshToken.expiresOn, request.refreshTokenExpirationOffsetSeconds || DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS)) { + (_b = this.performanceClient) == null ? void 0 : _b.addFields({ rtExpiresOnMs: Number(refreshToken.expiresOn) }, request.correlationId); + throw createInteractionRequiredAuthError(refreshTokenExpired); + } + const refreshTokenRequest = { + ...request, + refreshToken: refreshToken.secret, + authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER, + ccsCredential: { + credential: request.account.homeAccountId, + type: CcsCredentialType.HOME_ACCOUNT_ID + } + }; + try { + return await invokeAsync(this.acquireToken.bind(this), PerformanceEvents.RefreshTokenClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(refreshTokenRequest); + } catch (e) { + if (e instanceof InteractionRequiredAuthError) { + (_c = this.performanceClient) == null ? void 0 : _c.addFields({ rtExpiresOnMs: Number(refreshToken.expiresOn) }, request.correlationId); + if (e.subError === badToken) { + this.logger.verbose("acquireTokenWithRefreshToken: bad refresh token, removing from cache"); + const badRefreshTokenKey = this.cacheManager.generateCredentialKey(refreshToken); + this.cacheManager.removeRefreshToken(badRefreshTokenKey, request.correlationId); + } + } + throw e; + } + } + /** + * Constructs the network message and makes a NW call to the underlying secure token service + * @param request + * @param authority + */ + async executeTokenRequest(request, authority) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RefreshTokenClientExecuteTokenRequest, request.correlationId); + const queryParametersString = this.createTokenQueryParameters(request); + const endpoint = UrlString.appendQueryString(authority.tokenEndpoint, queryParametersString); + const requestBody = await invokeAsync(this.createTokenRequestBody.bind(this), PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, this.logger, this.performanceClient, request.correlationId)(request); + const headers = this.createTokenRequestHeaders(request.ccsCredential); + const thumbprint = getRequestThumbprint(this.config.authOptions.clientId, request); + return invokeAsync(this.executePostToTokenEndpoint.bind(this), PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint, this.logger, this.performanceClient, request.correlationId)(endpoint, requestBody, headers, thumbprint, request.correlationId, PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint); + } + /** + * Helper function to create the token request body + * @param request + */ + async createTokenRequestBody(request) { + var _a, _b, _c; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.RefreshTokenClientCreateTokenRequestBody, request.correlationId); + const parameters = /* @__PURE__ */ new Map(); + addClientId(parameters, request.embeddedClientId || ((_b = request.tokenBodyParameters) == null ? void 0 : _b[CLIENT_ID]) || this.config.authOptions.clientId); + if (request.redirectUri) { + addRedirectUri(parameters, request.redirectUri); + } + addScopes(parameters, request.scopes, true, (_c = this.config.authOptions.authority.options.OIDCOptions) == null ? void 0 : _c.defaultScopes); + addGrantType(parameters, GrantType.REFRESH_TOKEN_GRANT); + addClientInfo(parameters); + addLibraryInfo(parameters, this.config.libraryInfo); + addApplicationTelemetry(parameters, this.config.telemetry.application); + addThrottling(parameters); + if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) { + addServerTelemetry(parameters, this.serverTelemetryManager); + } + addRefreshToken(parameters, request.refreshToken); + if (this.config.clientCredentials.clientSecret) { + addClientSecret(parameters, this.config.clientCredentials.clientSecret); + } + if (this.config.clientCredentials.clientAssertion) { + const clientAssertion = this.config.clientCredentials.clientAssertion; + addClientAssertion(parameters, await getClientAssertion(clientAssertion.assertion, this.config.authOptions.clientId, request.resourceRequestUri)); + addClientAssertionType(parameters, clientAssertion.assertionType); + } + if (request.authenticationScheme === AuthenticationScheme.POP) { + const popTokenGenerator = new PopTokenGenerator(this.cryptoUtils, this.performanceClient); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(request, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } else { + reqCnfData = this.cryptoUtils.encodeKid(request.popKid); + } + addPopToken(parameters, reqCnfData); + } else if (request.authenticationScheme === AuthenticationScheme.SSH) { + if (request.sshJwk) { + addSshJwk(parameters, request.sshJwk); + } else { + throw createClientConfigurationError(missingSshJwk); + } + } + if (!StringUtils.isEmptyObj(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) { + addClaims(parameters, request.claims, this.config.authOptions.clientCapabilities); + } + if (this.config.systemOptions.preventCorsPreflight && request.ccsCredential) { + switch (request.ccsCredential.type) { + case CcsCredentialType.HOME_ACCOUNT_ID: + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.ccsCredential.credential); + addCcsOid(parameters, clientInfo); + } catch (e) { + this.logger.verbose("Could not parse home account ID for CCS Header: " + e); + } + break; + case CcsCredentialType.UPN: + addCcsUpn(parameters, request.ccsCredential.credential); + break; + } + } + if (request.embeddedClientId) { + addBrokerParameters(parameters, this.config.authOptions.clientId, this.config.authOptions.redirectUri); + } + if (request.tokenBodyParameters) { + addExtraQueryParameters(parameters, request.tokenBodyParameters); + } + instrumentBrokerParams(parameters, request.correlationId, this.performanceClient); + return mapToQueryString(parameters); + } +}; + +// node_modules/@azure/msal-common/dist/client/SilentFlowClient.mjs +var SilentFlowClient = class extends BaseClient { + constructor(configuration, performanceClient) { + super(configuration, performanceClient); + } + /** + * Retrieves token from cache or throws an error if it must be refreshed. + * @param request + */ + async acquireCachedToken(request) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.SilentFlowClientAcquireCachedToken, request.correlationId); + let lastCacheOutcome = CacheOutcome.NOT_APPLICABLE; + if (request.forceRefresh || !this.config.cacheOptions.claimsBasedCachingEnabled && !StringUtils.isEmptyObj(request.claims)) { + this.setCacheOutcome(CacheOutcome.FORCE_REFRESH_OR_CLAIMS, request.correlationId); + throw createClientAuthError(tokenRefreshRequired); + } + if (!request.account) { + throw createClientAuthError(noAccountInSilentRequest); + } + const requestTenantId = request.account.tenantId || getTenantFromAuthorityString(request.authority); + const tokenKeys = this.cacheManager.getTokenKeys(); + const cachedAccessToken = this.cacheManager.getAccessToken(request.account, request, tokenKeys, requestTenantId); + if (!cachedAccessToken) { + this.setCacheOutcome(CacheOutcome.NO_CACHED_ACCESS_TOKEN, request.correlationId); + throw createClientAuthError(tokenRefreshRequired); + } else if (wasClockTurnedBack(cachedAccessToken.cachedAt) || isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) { + this.setCacheOutcome(CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED, request.correlationId); + throw createClientAuthError(tokenRefreshRequired); + } else if (cachedAccessToken.refreshOn && isTokenExpired(cachedAccessToken.refreshOn, 0)) { + lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED; + } + const environment = request.authority || this.authority.getPreferredCache(); + const cacheRecord = { + account: this.cacheManager.getAccount(this.cacheManager.generateAccountKey(request.account), request.correlationId), + accessToken: cachedAccessToken, + idToken: this.cacheManager.getIdToken(request.account, request.correlationId, tokenKeys, requestTenantId, this.performanceClient), + refreshToken: null, + appMetadata: this.cacheManager.readAppMetadataFromCache(environment) + }; + this.setCacheOutcome(lastCacheOutcome, request.correlationId); + if (this.config.serverTelemetryManager) { + this.config.serverTelemetryManager.incrementCacheHits(); + } + return [ + await invokeAsync(this.generateResultFromCacheRecord.bind(this), PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, this.logger, this.performanceClient, request.correlationId)(cacheRecord, request), + lastCacheOutcome + ]; + } + setCacheOutcome(cacheOutcome, correlationId) { + var _a, _b; + (_a = this.serverTelemetryManager) == null ? void 0 : _a.setCacheOutcome(cacheOutcome); + (_b = this.performanceClient) == null ? void 0 : _b.addFields({ + cacheOutcome + }, correlationId); + if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) { + this.logger.info(`Token refresh is required due to cache outcome: ${cacheOutcome}`); + } + } + /** + * Helper function to build response object from the CacheRecord + * @param cacheRecord + */ + async generateResultFromCacheRecord(cacheRecord, request) { + var _a; + (_a = this.performanceClient) == null ? void 0 : _a.addQueueMeasurement(PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord, request.correlationId); + let idTokenClaims; + if (cacheRecord.idToken) { + idTokenClaims = extractTokenClaims(cacheRecord.idToken.secret, this.config.cryptoInterface.base64Decode); + } + if (request.maxAge || request.maxAge === 0) { + const authTime = idTokenClaims == null ? void 0 : idTokenClaims.auth_time; + if (!authTime) { + throw createClientAuthError(authTimeNotFound); + } + checkMaxAge(authTime, request.maxAge); + } + return ResponseHandler.generateAuthenticationResult(this.cryptoUtils, this.authority, cacheRecord, true, request, idTokenClaims); + } +}; + +// node_modules/@azure/msal-common/dist/network/INetworkModule.mjs +var StubbedNetworkModule = { + sendGetRequestAsync: () => { + return Promise.reject(createClientAuthError(methodNotImplemented)); + }, + sendPostRequestAsync: () => { + return Promise.reject(createClientAuthError(methodNotImplemented)); + } +}; + +// node_modules/@azure/msal-common/dist/protocol/Authorize.mjs +var Authorize_exports = {}; +__export(Authorize_exports, { + getAuthorizationCodePayload: () => getAuthorizationCodePayload, + getAuthorizeUrl: () => getAuthorizeUrl, + getStandardAuthorizeRequestParameters: () => getStandardAuthorizeRequestParameters, + validateAuthorizationResponse: () => validateAuthorizationResponse +}); +function getStandardAuthorizeRequestParameters(authOptions, request, logger, performanceClient) { + var _a, _b; + const correlationId = request.correlationId; + const parameters = /* @__PURE__ */ new Map(); + addClientId(parameters, request.embeddedClientId || ((_a = request.extraQueryParameters) == null ? void 0 : _a[CLIENT_ID]) || authOptions.clientId); + const requestScopes = [ + ...request.scopes || [], + ...request.extraScopesToConsent || [] + ]; + addScopes(parameters, requestScopes, true, (_b = authOptions.authority.options.OIDCOptions) == null ? void 0 : _b.defaultScopes); + addRedirectUri(parameters, request.redirectUri); + addCorrelationId(parameters, correlationId); + addResponseMode(parameters, request.responseMode); + addClientInfo(parameters); + if (request.prompt) { + addPrompt(parameters, request.prompt); + performanceClient == null ? void 0 : performanceClient.addFields({ prompt: request.prompt }, correlationId); + } + if (request.domainHint) { + addDomainHint(parameters, request.domainHint); + performanceClient == null ? void 0 : performanceClient.addFields({ domainHintFromRequest: true }, correlationId); + } + if (request.prompt !== PromptValue.SELECT_ACCOUNT) { + if (request.sid && request.prompt === PromptValue.NONE) { + logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from request"); + addSid(parameters, request.sid); + performanceClient == null ? void 0 : performanceClient.addFields({ sidFromRequest: true }, correlationId); + } else if (request.account) { + const accountSid = extractAccountSid(request.account); + let accountLoginHintClaim = extractLoginHint(request.account); + if (accountLoginHintClaim && request.domainHint) { + logger.warning(`AuthorizationCodeClient.createAuthCodeUrlQueryString: "domainHint" param is set, skipping opaque "login_hint" claim. Please consider not passing domainHint`); + accountLoginHintClaim = null; + } + if (accountLoginHintClaim) { + logger.verbose("createAuthCodeUrlQueryString: login_hint claim present on account"); + addLoginHint(parameters, accountLoginHintClaim); + performanceClient == null ? void 0 : performanceClient.addFields({ loginHintFromClaim: true }, correlationId); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + addCcsOid(parameters, clientInfo); + } catch (e) { + logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"); + } + } else if (accountSid && request.prompt === PromptValue.NONE) { + logger.verbose("createAuthCodeUrlQueryString: Prompt is none, adding sid from account"); + addSid(parameters, accountSid); + performanceClient == null ? void 0 : performanceClient.addFields({ sidFromClaim: true }, correlationId); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + addCcsOid(parameters, clientInfo); + } catch (e) { + logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"); + } + } else if (request.loginHint) { + logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from request"); + addLoginHint(parameters, request.loginHint); + addCcsUpn(parameters, request.loginHint); + performanceClient == null ? void 0 : performanceClient.addFields({ loginHintFromRequest: true }, correlationId); + } else if (request.account.username) { + logger.verbose("createAuthCodeUrlQueryString: Adding login_hint from account"); + addLoginHint(parameters, request.account.username); + performanceClient == null ? void 0 : performanceClient.addFields({ loginHintFromUpn: true }, correlationId); + try { + const clientInfo = buildClientInfoFromHomeAccountId(request.account.homeAccountId); + addCcsOid(parameters, clientInfo); + } catch (e) { + logger.verbose("createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"); + } + } + } else if (request.loginHint) { + logger.verbose("createAuthCodeUrlQueryString: No account, adding login_hint from request"); + addLoginHint(parameters, request.loginHint); + addCcsUpn(parameters, request.loginHint); + performanceClient == null ? void 0 : performanceClient.addFields({ loginHintFromRequest: true }, correlationId); + } + } else { + logger.verbose("createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints"); + } + if (request.nonce) { + addNonce(parameters, request.nonce); + } + if (request.state) { + addState(parameters, request.state); + } + if (request.claims || authOptions.clientCapabilities && authOptions.clientCapabilities.length > 0) { + addClaims(parameters, request.claims, authOptions.clientCapabilities); + } + if (request.embeddedClientId) { + addBrokerParameters(parameters, authOptions.clientId, authOptions.redirectUri); + } + if (authOptions.instanceAware && (!request.extraQueryParameters || !Object.keys(request.extraQueryParameters).includes(INSTANCE_AWARE))) { + addInstanceAware(parameters); + } + return parameters; +} +function getAuthorizeUrl(authority, requestParameters, encodeParams, extraQueryParameters) { + const queryString = mapToQueryString(requestParameters, encodeParams, extraQueryParameters); + return UrlString.appendQueryString(authority.authorizationEndpoint, queryString); +} +function getAuthorizationCodePayload(serverParams, cachedState) { + validateAuthorizationResponse(serverParams, cachedState); + if (!serverParams.code) { + throw createClientAuthError(authorizationCodeMissingFromServerResponse); + } + return serverParams; +} +function validateAuthorizationResponse(serverResponse, requestState) { + if (!serverResponse.state || !requestState) { + throw serverResponse.state ? createClientAuthError(stateNotFound, "Cached State") : createClientAuthError(stateNotFound, "Server State"); + } + let decodedServerResponseState; + let decodedRequestState; + try { + decodedServerResponseState = decodeURIComponent(serverResponse.state); + } catch (e) { + throw createClientAuthError(invalidState, serverResponse.state); + } + try { + decodedRequestState = decodeURIComponent(requestState); + } catch (e) { + throw createClientAuthError(invalidState, serverResponse.state); + } + if (decodedServerResponseState !== decodedRequestState) { + throw createClientAuthError(stateMismatch); + } + if (serverResponse.error || serverResponse.error_description || serverResponse.suberror) { + const serverErrorNo = parseServerErrorNo(serverResponse); + if (isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) { + throw new InteractionRequiredAuthError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverResponse.timestamp || "", serverResponse.trace_id || "", serverResponse.correlation_id || "", serverResponse.claims || "", serverErrorNo); + } + throw new ServerError(serverResponse.error || "", serverResponse.error_description, serverResponse.suberror, serverErrorNo); + } +} +function parseServerErrorNo(serverResponse) { + var _a, _b; + const errorCodePrefix = "code="; + const errorCodePrefixIndex = (_a = serverResponse.error_uri) == null ? void 0 : _a.lastIndexOf(errorCodePrefix); + return errorCodePrefixIndex && errorCodePrefixIndex >= 0 ? (_b = serverResponse.error_uri) == null ? void 0 : _b.substring(errorCodePrefixIndex + errorCodePrefix.length) : void 0; +} +function extractAccountSid(account) { + var _a; + return ((_a = account.idTokenClaims) == null ? void 0 : _a.sid) || null; +} +function extractLoginHint(account) { + var _a; + return account.loginHint || ((_a = account.idTokenClaims) == null ? void 0 : _a.login_hint) || null; +} + +// node_modules/@azure/msal-common/dist/request/AuthenticationHeaderParser.mjs +var AuthenticationHeaderParser = class { + constructor(headers) { + this.headers = headers; + } + /** + * This method parses the SHR nonce value out of either the Authentication-Info or WWW-Authenticate authentication headers. + * @returns + */ + getShrNonce() { + const authenticationInfo = this.headers[HeaderNames.AuthenticationInfo]; + if (authenticationInfo) { + const authenticationInfoChallenges = this.parseChallenges(authenticationInfo); + if (authenticationInfoChallenges.nextnonce) { + return authenticationInfoChallenges.nextnonce; + } + throw createClientConfigurationError(invalidAuthenticationHeader); + } + const wwwAuthenticate = this.headers[HeaderNames.WWWAuthenticate]; + if (wwwAuthenticate) { + const wwwAuthenticateChallenges = this.parseChallenges(wwwAuthenticate); + if (wwwAuthenticateChallenges.nonce) { + return wwwAuthenticateChallenges.nonce; + } + throw createClientConfigurationError(invalidAuthenticationHeader); + } + throw createClientConfigurationError(missingNonceAuthenticationHeader); + } + /** + * Parses an HTTP header's challenge set into a key/value map. + * @param header + * @returns + */ + parseChallenges(header) { + const schemeSeparator = header.indexOf(" "); + const challenges = header.substr(schemeSeparator + 1).split(","); + const challengeMap = {}; + challenges.forEach((challenge) => { + const [key, value] = challenge.split("="); + challengeMap[key] = unescape(value.replace(/['"]+/g, Constants.EMPTY_STRING)); + }); + return challengeMap; + } +}; + +// node_modules/@azure/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs +var skuGroupSeparator = ","; +var skuValueSeparator = "|"; +function makeExtraSkuString(params) { + const { skus, libraryName, libraryVersion, extensionName, extensionVersion } = params; + const skuMap = /* @__PURE__ */ new Map([ + [0, [libraryName, libraryVersion]], + [2, [extensionName, extensionVersion]] + ]); + let skuArr = []; + if (skus == null ? void 0 : skus.length) { + skuArr = skus.split(skuGroupSeparator); + if (skuArr.length < 4) { + return skus; + } + } else { + skuArr = Array.from({ length: 4 }, () => skuValueSeparator); + } + skuMap.forEach((value, key) => { + var _a, _b; + if (value.length === 2 && ((_a = value[0]) == null ? void 0 : _a.length) && ((_b = value[1]) == null ? void 0 : _b.length)) { + setSku({ + skuArr, + index: key, + skuName: value[0], + skuVersion: value[1] + }); + } + }); + return skuArr.join(skuGroupSeparator); +} +function setSku(params) { + const { skuArr, index, skuName, skuVersion } = params; + if (index >= skuArr.length) { + return; + } + skuArr[index] = [skuName, skuVersion].join(skuValueSeparator); +} +var ServerTelemetryManager = class _ServerTelemetryManager { + constructor(telemetryRequest, cacheManager) { + this.cacheOutcome = CacheOutcome.NOT_APPLICABLE; + this.cacheManager = cacheManager; + this.apiId = telemetryRequest.apiId; + this.correlationId = telemetryRequest.correlationId; + this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING; + this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING; + this.telemetryCacheKey = SERVER_TELEM_CONSTANTS.CACHE_KEY + Separators.CACHE_KEY_SEPARATOR + telemetryRequest.clientId; + } + /** + * API to add MSER Telemetry to request + */ + generateCurrentRequestHeaderValue() { + const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`; + const platformFieldsArr = [this.wrapperSKU, this.wrapperVer]; + const nativeBrokerErrorCode = this.getNativeBrokerErrorCode(); + if (nativeBrokerErrorCode == null ? void 0 : nativeBrokerErrorCode.length) { + platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`); + } + const platformFields = platformFieldsArr.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + const regionDiscoveryFields = this.getRegionDiscoveryFields(); + const requestWithRegionDiscoveryFields = [ + request, + regionDiscoveryFields + ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + return [ + SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, + requestWithRegionDiscoveryFields, + platformFields + ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR); + } + /** + * API to add MSER Telemetry for the last failed request + */ + generateLastRequestHeaderValue() { + const lastRequests = this.getLastRequests(); + const maxErrors = _ServerTelemetryManager.maxErrorsToSend(lastRequests); + const failedRequests = lastRequests.failedRequests.slice(0, 2 * maxErrors).join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + const errors = lastRequests.errors.slice(0, maxErrors).join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + const errorCount = lastRequests.errors.length; + const overflow = maxErrors < errorCount ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE; + const platformFields = [errorCount, overflow].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR); + return [ + SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, + lastRequests.cacheHits, + failedRequests, + errors, + platformFields + ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR); + } + /** + * API to cache token failures for MSER data capture + * @param error + */ + cacheFailedRequest(error) { + const lastRequests = this.getLastRequests(); + if (lastRequests.errors.length >= SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS) { + lastRequests.failedRequests.shift(); + lastRequests.failedRequests.shift(); + lastRequests.errors.shift(); + } + lastRequests.failedRequests.push(this.apiId, this.correlationId); + if (error instanceof Error && !!error && error.toString()) { + if (error instanceof AuthError) { + if (error.subError) { + lastRequests.errors.push(error.subError); + } else if (error.errorCode) { + lastRequests.errors.push(error.errorCode); + } else { + lastRequests.errors.push(error.toString()); + } + } else { + lastRequests.errors.push(error.toString()); + } + } else { + lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR); + } + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + return; + } + /** + * Update server telemetry cache entry by incrementing cache hit counter + */ + incrementCacheHits() { + const lastRequests = this.getLastRequests(); + lastRequests.cacheHits += 1; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + return lastRequests.cacheHits; + } + /** + * Get the server telemetry entity from cache or initialize a new one + */ + getLastRequests() { + const initialValue = { + failedRequests: [], + errors: [], + cacheHits: 0 + }; + const lastRequests = this.cacheManager.getServerTelemetry(this.telemetryCacheKey); + return lastRequests || initialValue; + } + /** + * Remove server telemetry cache entry + */ + clearTelemetryCache() { + const lastRequests = this.getLastRequests(); + const numErrorsFlushed = _ServerTelemetryManager.maxErrorsToSend(lastRequests); + const errorCount = lastRequests.errors.length; + if (numErrorsFlushed === errorCount) { + this.cacheManager.removeItem(this.telemetryCacheKey, this.correlationId); + } else { + const serverTelemEntity = { + failedRequests: lastRequests.failedRequests.slice(numErrorsFlushed * 2), + errors: lastRequests.errors.slice(numErrorsFlushed), + cacheHits: 0 + }; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, serverTelemEntity, this.correlationId); + } + } + /** + * Returns the maximum number of errors that can be flushed to the server in the next network request + * @param serverTelemetryEntity + */ + static maxErrorsToSend(serverTelemetryEntity) { + let i; + let maxErrors = 0; + let dataSize = 0; + const errorCount = serverTelemetryEntity.errors.length; + for (i = 0; i < errorCount; i++) { + const apiId = serverTelemetryEntity.failedRequests[2 * i] || Constants.EMPTY_STRING; + const correlationId = serverTelemetryEntity.failedRequests[2 * i + 1] || Constants.EMPTY_STRING; + const errorCode = serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING; + dataSize += apiId.toString().length + correlationId.toString().length + errorCode.length + 3; + if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) { + maxErrors += 1; + } else { + break; + } + } + return maxErrors; + } + /** + * Get the region discovery fields + * + * @returns string + */ + getRegionDiscoveryFields() { + const regionDiscoveryFields = []; + regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING); + regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING); + regionDiscoveryFields.push(this.regionOutcome || Constants.EMPTY_STRING); + return regionDiscoveryFields.join(","); + } + /** + * Update the region discovery metadata + * + * @param regionDiscoveryMetadata + * @returns void + */ + updateRegionDiscoveryMetadata(regionDiscoveryMetadata) { + this.regionUsed = regionDiscoveryMetadata.region_used; + this.regionSource = regionDiscoveryMetadata.region_source; + this.regionOutcome = regionDiscoveryMetadata.region_outcome; + } + /** + * Set cache outcome + */ + setCacheOutcome(cacheOutcome) { + this.cacheOutcome = cacheOutcome; + } + setNativeBrokerErrorCode(errorCode) { + const lastRequests = this.getLastRequests(); + lastRequests.nativeBrokerErrorCode = errorCode; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + } + getNativeBrokerErrorCode() { + return this.getLastRequests().nativeBrokerErrorCode; + } + clearNativeBrokerErrorCode() { + const lastRequests = this.getLastRequests(); + delete lastRequests.nativeBrokerErrorCode; + this.cacheManager.setServerTelemetry(this.telemetryCacheKey, lastRequests, this.correlationId); + } + static makeExtraSkuString(params) { + return makeExtraSkuString(params); + } +}; + +// node_modules/@azure/msal-common/dist/error/JoseHeaderErrorCodes.mjs +var missingKidError = "missing_kid_error"; +var missingAlgError = "missing_alg_error"; + +// node_modules/@azure/msal-common/dist/error/JoseHeaderError.mjs +var JoseHeaderErrorMessages = { + [missingKidError]: "The JOSE Header for the requested JWT, JWS or JWK object requires a keyId to be configured as the 'kid' header claim. No 'kid' value was provided.", + [missingAlgError]: "The JOSE Header for the requested JWT, JWS or JWK object requires an algorithm to be specified as the 'alg' header claim. No 'alg' value was provided." +}; +var JoseHeaderError = class _JoseHeaderError extends AuthError { + constructor(errorCode, errorMessage) { + super(errorCode, errorMessage); + this.name = "JoseHeaderError"; + Object.setPrototypeOf(this, _JoseHeaderError.prototype); + } +}; +function createJoseHeaderError(code) { + return new JoseHeaderError(code, JoseHeaderErrorMessages[code]); +} + +// node_modules/@azure/msal-common/dist/crypto/JoseHeader.mjs +var JoseHeader = class _JoseHeader { + constructor(options) { + this.typ = options.typ; + this.alg = options.alg; + this.kid = options.kid; + } + /** + * Builds SignedHttpRequest formatted JOSE Header from the + * JOSE Header options provided or previously set on the object and returns + * the stringified header object. + * Throws if keyId or algorithm aren't provided since they are required for Access Token Binding. + * @param shrHeaderOptions + * @returns + */ + static getShrHeaderString(shrHeaderOptions) { + if (!shrHeaderOptions.kid) { + throw createJoseHeaderError(missingKidError); + } + if (!shrHeaderOptions.alg) { + throw createJoseHeaderError(missingAlgError); + } + const shrHeader = new _JoseHeader({ + // Access Token PoP headers must have type pop, but the type header can be overriden for special cases + typ: shrHeaderOptions.typ || JsonWebTokenTypes.Pop, + kid: shrHeaderOptions.kid, + alg: shrHeaderOptions.alg + }); + return JSON.stringify(shrHeader); + } +}; + +// node_modules/@azure/msal-common/dist/telemetry/performance/PerformanceClient.mjs +function startContext(event, abbreviations, stack) { + if (!stack) { + return; + } + stack.push({ + name: abbreviations.get(event.name) || event.name + }); +} +function endContext(event, abbreviations, stack, error) { + if (!(stack == null ? void 0 : stack.length)) { + return; + } + const peek = (stack2) => { + return stack2.length ? stack2[stack2.length - 1] : void 0; + }; + const abbrEventName = abbreviations.get(event.name) || event.name; + const top = peek(stack); + if ((top == null ? void 0 : top.name) !== abbrEventName) { + return; + } + const current = stack == null ? void 0 : stack.pop(); + if (!current) { + return; + } + const errorCode = error instanceof AuthError ? error.errorCode : error instanceof Error ? error.name : void 0; + const subErr = error instanceof AuthError ? error.subError : void 0; + if (errorCode && current.childErr !== errorCode) { + current.err = errorCode; + if (subErr) { + current.subErr = subErr; + } + } + delete current.name; + delete current.childErr; + const context = { + ...current, + dur: event.durationMs + }; + if (!event.success) { + context.fail = 1; + } + const parent = peek(stack); + if (!parent) { + return { [abbrEventName]: context }; + } + if (errorCode) { + parent.childErr = errorCode; + } + let childName; + if (!parent[abbrEventName]) { + childName = abbrEventName; + } else { + const siblings = Object.keys(parent).filter((key) => key.startsWith(abbrEventName)).length; + childName = `${abbrEventName}_${siblings + 1}`; + } + parent[childName] = context; + return parent; +} +function addError(error, logger, event, stackMaxSize = 5) { + var _a, _b; + if (!(error instanceof Error)) { + logger.trace("PerformanceClient.addErrorStack: Input error is not instance of Error", event.correlationId); + return; + } else if (error instanceof AuthError) { + event.errorCode = error.errorCode; + event.subErrorCode = error.subError; + if (error instanceof ServerError || error instanceof InteractionRequiredAuthError) { + event.serverErrorNo = error.errorNo; + } + return; + } else if (error instanceof CacheError) { + event.errorCode = error.errorCode; + return; + } else if ((_a = event.errorStack) == null ? void 0 : _a.length) { + logger.trace("PerformanceClient.addErrorStack: Stack already exist", event.correlationId); + return; + } else if (!((_b = error.stack) == null ? void 0 : _b.length)) { + logger.trace("PerformanceClient.addErrorStack: Input stack is empty", event.correlationId); + return; + } + if (error.stack) { + event.errorStack = compactStack(error.stack, stackMaxSize); + } + event.errorName = error.name; +} +function compactStack(stack, stackMaxSize) { + if (stackMaxSize < 0) { + return []; + } + const stackArr = stack.split("\n") || []; + const res = []; + const firstLine = stackArr[0]; + if (firstLine.startsWith("TypeError: Cannot read property") || firstLine.startsWith("TypeError: Cannot read properties of") || firstLine.startsWith("TypeError: Cannot set property") || firstLine.startsWith("TypeError: Cannot set properties of") || firstLine.endsWith("is not a function")) { + res.push(compactStackLine(firstLine)); + } else if (firstLine.startsWith("SyntaxError") || firstLine.startsWith("TypeError")) { + res.push(compactStackLine( + // Example: SyntaxError: Unexpected token 'e', "test" is not valid JSON -> SyntaxError: Unexpected token , is not valid JSON + firstLine.replace(/['].*[']|["].*["]/g, "") + )); + } + for (let ix = 1; ix < stackArr.length; ix++) { + if (res.length >= stackMaxSize) { + break; + } + const line = stackArr[ix]; + res.push(compactStackLine(line)); + } + return res; +} +function compactStackLine(line) { + const filePathIx = line.lastIndexOf(" ") + 1; + if (filePathIx < 1) { + return line; + } + const filePath = line.substring(filePathIx); + let fileNameIx = filePath.lastIndexOf("/"); + fileNameIx = fileNameIx < 0 ? filePath.lastIndexOf("\\") : fileNameIx; + if (fileNameIx >= 0) { + return (line.substring(0, filePathIx) + "(" + filePath.substring(fileNameIx + 1) + (filePath.charAt(filePath.length - 1) === ")" ? "" : ")")).trimStart(); + } + return line.trimStart(); +} +var PerformanceClient = class { + /** + * Creates an instance of PerformanceClient, + * an abstract class containing core performance telemetry logic. + * + * @constructor + * @param {string} clientId Client ID of the application + * @param {string} authority Authority used by the application + * @param {Logger} logger Logger used by the application + * @param {string} libraryName Name of the library + * @param {string} libraryVersion Version of the library + * @param {ApplicationTelemetry} applicationTelemetry application name and version + * @param {Set} intFields integer fields to be truncated + * @param {Map} abbreviations event name abbreviations + */ + constructor(clientId, authority, logger, libraryName, libraryVersion, applicationTelemetry, intFields, abbreviations) { + this.authority = authority; + this.libraryName = libraryName; + this.libraryVersion = libraryVersion; + this.applicationTelemetry = applicationTelemetry; + this.clientId = clientId; + this.logger = logger; + this.callbacks = /* @__PURE__ */ new Map(); + this.eventsByCorrelationId = /* @__PURE__ */ new Map(); + this.eventStack = /* @__PURE__ */ new Map(); + this.queueMeasurements = /* @__PURE__ */ new Map(); + this.preQueueTimeByCorrelationId = /* @__PURE__ */ new Map(); + this.intFields = intFields || /* @__PURE__ */ new Set(); + for (const item of IntFields) { + this.intFields.add(item); + } + this.abbreviations = abbreviations || /* @__PURE__ */ new Map(); + for (const [key, value] of PerformanceEventAbbreviations) { + this.abbreviations.set(key, value); + } + } + /** + * Starts and returns an platform-specific implementation of IPerformanceMeasurement. + * Note: this function can be changed to abstract at the next major version bump. + * + * @param {string} measureName + * @param {string} correlationId + * @returns {IPerformanceMeasurement} + * @deprecated This method will be removed in the next major version + */ + startPerformanceMeasurement(measureName, correlationId) { + return {}; + } + /** + * Gets map of pre-queue times by correlation Id + * + * @param {PerformanceEvents} eventName + * @param {string} correlationId + * @returns {number} + */ + getPreQueueTime(eventName, correlationId) { + const preQueueEvent = this.preQueueTimeByCorrelationId.get(correlationId); + if (!preQueueEvent) { + this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue times found for correlationId: ${correlationId}, unable to add queue measurement`); + return; + } else if (preQueueEvent.name !== eventName) { + this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue time found for ${eventName}, unable to add queue measurement`); + return; + } + return preQueueEvent.time; + } + /** + * Calculates the difference between current time and time when function was queued. + * Note: It is possible to have 0 as the queue time if the current time and the queued time was the same. + * + * @param {number} preQueueTime + * @param {number} currentTime + * @returns {number} + */ + calculateQueuedTime(preQueueTime, currentTime) { + if (preQueueTime < 1) { + this.logger.trace(`PerformanceClient: preQueueTime should be a positive integer and not ${preQueueTime}`); + return 0; + } + if (currentTime < 1) { + this.logger.trace(`PerformanceClient: currentTime should be a positive integer and not ${currentTime}`); + return 0; + } + if (currentTime < preQueueTime) { + this.logger.trace("PerformanceClient: currentTime is less than preQueueTime, check how time is being retrieved"); + return 0; + } + return currentTime - preQueueTime; + } + /** + * Adds queue measurement time to QueueMeasurements array for given correlation ID. + * + * @param {PerformanceEvents} eventName + * @param {?string} correlationId + * @param {?number} queueTime + * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements + * @returns + */ + addQueueMeasurement(eventName, correlationId, queueTime, manuallyCompleted) { + if (!correlationId) { + this.logger.trace(`PerformanceClient.addQueueMeasurement: correlationId not provided for ${eventName}, cannot add queue measurement`); + return; + } + if (queueTime === 0) { + this.logger.trace(`PerformanceClient.addQueueMeasurement: queue time provided for ${eventName} is ${queueTime}`); + } else if (!queueTime) { + this.logger.trace(`PerformanceClient.addQueueMeasurement: no queue time provided for ${eventName}`); + return; + } + const queueMeasurement = { + eventName, + // Always default queue time to 0 for manually completed (improperly instrumented) + queueTime: manuallyCompleted ? 0 : queueTime, + manuallyCompleted + }; + const existingMeasurements = this.queueMeasurements.get(correlationId); + if (existingMeasurements) { + existingMeasurements.push(queueMeasurement); + this.queueMeasurements.set(correlationId, existingMeasurements); + } else { + this.logger.trace(`PerformanceClient.addQueueMeasurement: adding correlationId ${correlationId} to queue measurements`); + const measurementArray = [queueMeasurement]; + this.queueMeasurements.set(correlationId, measurementArray); + } + this.preQueueTimeByCorrelationId.delete(correlationId); + } + /** + * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement. + * + * @param {PerformanceEvents} measureName + * @param {?string} [correlationId] + * @returns {InProgressPerformanceEvent} + */ + startMeasurement(measureName, correlationId) { + var _a, _b; + const eventCorrelationId = correlationId || this.generateId(); + if (!correlationId) { + this.logger.info(`PerformanceClient: No correlation id provided for ${measureName}, generating`, eventCorrelationId); + } + this.logger.trace(`PerformanceClient: Performance measurement started for ${measureName}`, eventCorrelationId); + const inProgressEvent = { + eventId: this.generateId(), + status: PerformanceEventStatus.InProgress, + authority: this.authority, + libraryName: this.libraryName, + libraryVersion: this.libraryVersion, + clientId: this.clientId, + name: measureName, + startTimeMs: Date.now(), + correlationId: eventCorrelationId, + appName: (_a = this.applicationTelemetry) == null ? void 0 : _a.appName, + appVersion: (_b = this.applicationTelemetry) == null ? void 0 : _b.appVersion + }; + this.cacheEventByCorrelationId(inProgressEvent); + startContext(inProgressEvent, this.abbreviations, this.eventStack.get(eventCorrelationId)); + return { + end: (event, error) => { + return this.endMeasurement({ + // Initial set of event properties + ...inProgressEvent, + // Properties set when event ends + ...event + }, error); + }, + discard: () => { + return this.discardMeasurements(inProgressEvent.correlationId); + }, + add: (fields) => { + return this.addFields(fields, inProgressEvent.correlationId); + }, + increment: (fields) => { + return this.incrementFields(fields, inProgressEvent.correlationId); + }, + event: inProgressEvent, + measurement: new StubPerformanceMeasurement() + }; + } + /** + * Stops measuring the performance for an operation. Should only be called directly by PerformanceClient classes, + * as consumers should instead use the function returned by startMeasurement. + * Adds a new field named as "[event name]DurationMs" for sub-measurements, completes and emits an event + * otherwise. + * + * @param {PerformanceEvent} event + * @param {unknown} error + * @returns {(PerformanceEvent | null)} + */ + endMeasurement(event, error) { + var _a, _b; + const rootEvent = this.eventsByCorrelationId.get(event.correlationId); + if (!rootEvent) { + this.logger.trace(`PerformanceClient: Measurement not found for ${event.eventId}`, event.correlationId); + return null; + } + const isRoot = event.eventId === rootEvent.eventId; + let queueInfo = { + totalQueueTime: 0, + totalQueueCount: 0, + manuallyCompletedCount: 0 + }; + event.durationMs = Math.round(event.durationMs || this.getDurationMs(event.startTimeMs)); + const context = JSON.stringify(endContext(event, this.abbreviations, this.eventStack.get(rootEvent.correlationId), error)); + if (isRoot) { + queueInfo = this.getQueueInfo(event.correlationId); + this.discardMeasurements(rootEvent.correlationId); + } else { + (_a = rootEvent.incompleteSubMeasurements) == null ? void 0 : _a.delete(event.eventId); + } + this.logger.trace(`PerformanceClient: Performance measurement ended for ${event.name}: ${event.durationMs} ms`, event.correlationId); + if (error) { + addError(error, this.logger, rootEvent); + } + if (!isRoot) { + rootEvent[event.name + "DurationMs"] = Math.floor(event.durationMs); + return { ...rootEvent }; + } + if (isRoot && !error && (rootEvent.errorCode || rootEvent.subErrorCode)) { + this.logger.trace(`PerformanceClient: Remove error and sub-error codes for root event ${event.name} as intermediate error was successfully handled`, event.correlationId); + rootEvent.errorCode = void 0; + rootEvent.subErrorCode = void 0; + } + let finalEvent = { ...rootEvent, ...event }; + let incompleteSubsCount = 0; + (_b = finalEvent.incompleteSubMeasurements) == null ? void 0 : _b.forEach((subMeasurement) => { + this.logger.trace(`PerformanceClient: Incomplete submeasurement ${subMeasurement.name} found for ${event.name}`, finalEvent.correlationId); + incompleteSubsCount++; + }); + finalEvent.incompleteSubMeasurements = void 0; + finalEvent = { + ...finalEvent, + queuedTimeMs: queueInfo.totalQueueTime, + queuedCount: queueInfo.totalQueueCount, + queuedManuallyCompletedCount: queueInfo.manuallyCompletedCount, + status: PerformanceEventStatus.Completed, + incompleteSubsCount, + context + }; + this.truncateIntegralFields(finalEvent); + this.emitEvents([finalEvent], event.correlationId); + return finalEvent; + } + /** + * Saves extra information to be emitted when the measurements are flushed + * @param fields + * @param correlationId + */ + addFields(fields, correlationId) { + this.logger.trace("PerformanceClient: Updating static fields"); + const event = this.eventsByCorrelationId.get(correlationId); + if (event) { + this.eventsByCorrelationId.set(correlationId, { + ...event, + ...fields + }); + } else { + this.logger.trace("PerformanceClient: Event not found for", correlationId); + } + } + /** + * Increment counters to be emitted when the measurements are flushed + * @param fields {string[]} + * @param correlationId {string} correlation identifier + */ + incrementFields(fields, correlationId) { + this.logger.trace("PerformanceClient: Updating counters"); + const event = this.eventsByCorrelationId.get(correlationId); + if (event) { + for (const counter in fields) { + if (!event.hasOwnProperty(counter)) { + event[counter] = 0; + } else if (isNaN(Number(event[counter]))) { + return; + } + event[counter] += fields[counter]; + } + } else { + this.logger.trace("PerformanceClient: Event not found for", correlationId); + } + } + /** + * Upserts event into event cache. + * First key is the correlation id, second key is the event id. + * Allows for events to be grouped by correlation id, + * and to easily allow for properties on them to be updated. + * + * @private + * @param {PerformanceEvent} event + */ + cacheEventByCorrelationId(event) { + const rootEvent = this.eventsByCorrelationId.get(event.correlationId); + if (rootEvent) { + this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} added/updated`, event.correlationId); + rootEvent.incompleteSubMeasurements = rootEvent.incompleteSubMeasurements || /* @__PURE__ */ new Map(); + rootEvent.incompleteSubMeasurements.set(event.eventId, { + name: event.name, + startTimeMs: event.startTimeMs + }); + } else { + this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} started`, event.correlationId); + this.eventsByCorrelationId.set(event.correlationId, { ...event }); + this.eventStack.set(event.correlationId, []); + } + } + getQueueInfo(correlationId) { + const queueMeasurementForCorrelationId = this.queueMeasurements.get(correlationId); + if (!queueMeasurementForCorrelationId) { + this.logger.trace(`PerformanceClient: no queue measurements found for for correlationId: ${correlationId}`); + } + let totalQueueTime = 0; + let totalQueueCount = 0; + let manuallyCompletedCount = 0; + queueMeasurementForCorrelationId == null ? void 0 : queueMeasurementForCorrelationId.forEach((measurement) => { + totalQueueTime += measurement.queueTime; + totalQueueCount++; + manuallyCompletedCount += measurement.manuallyCompleted ? 1 : 0; + }); + return { + totalQueueTime, + totalQueueCount, + manuallyCompletedCount + }; + } + /** + * Removes measurements and aux data for a given correlation id. + * + * @param {string} correlationId + */ + discardMeasurements(correlationId) { + this.logger.trace("PerformanceClient: Performance measurements discarded", correlationId); + this.eventsByCorrelationId.delete(correlationId); + this.logger.trace("PerformanceClient: QueueMeasurements discarded", correlationId); + this.queueMeasurements.delete(correlationId); + this.logger.trace("PerformanceClient: Pre-queue times discarded", correlationId); + this.preQueueTimeByCorrelationId.delete(correlationId); + this.logger.trace("PerformanceClient: Event stack discarded", correlationId); + this.eventStack.delete(correlationId); + } + /** + * Registers a callback function to receive performance events. + * + * @param {PerformanceCallbackFunction} callback + * @returns {string} + */ + addPerformanceCallback(callback) { + for (const [id, cb] of this.callbacks) { + if (cb.toString() === callback.toString()) { + this.logger.warning(`PerformanceClient: Performance callback is already registered with id: ${id}`); + return id; + } + } + const callbackId = this.generateId(); + this.callbacks.set(callbackId, callback); + this.logger.verbose(`PerformanceClient: Performance callback registered with id: ${callbackId}`); + return callbackId; + } + /** + * Removes a callback registered with addPerformanceCallback. + * + * @param {string} callbackId + * @returns {boolean} + */ + removePerformanceCallback(callbackId) { + const result = this.callbacks.delete(callbackId); + if (result) { + this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} removed.`); + } else { + this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} not removed.`); + } + return result; + } + /** + * Emits events to all registered callbacks. + * + * @param {PerformanceEvent[]} events + * @param {?string} [correlationId] + */ + emitEvents(events, correlationId) { + this.logger.verbose("PerformanceClient: Emitting performance events", correlationId); + this.callbacks.forEach((callback, callbackId) => { + this.logger.trace(`PerformanceClient: Emitting event to callback ${callbackId}`, correlationId); + callback.apply(null, [events]); + }); + } + /** + * Enforce truncation of integral fields in performance event. + * @param {PerformanceEvent} event performance event to update. + */ + truncateIntegralFields(event) { + this.intFields.forEach((key) => { + if (key in event && typeof event[key] === "number") { + event[key] = Math.floor(event[key]); + } + }); + } + /** + * Returns event duration in milliseconds + * @param startTimeMs {number} + * @returns {number} + */ + getDurationMs(startTimeMs) { + const durationMs = Date.now() - startTimeMs; + return durationMs < 0 ? durationMs : 0; + } +}; + +// node_modules/@azure/msal-browser/dist/error/BrowserAuthErrorCodes.mjs +var BrowserAuthErrorCodes_exports = {}; +__export(BrowserAuthErrorCodes_exports, { + authCodeOrNativeAccountIdRequired: () => authCodeOrNativeAccountIdRequired, + authCodeRequired: () => authCodeRequired, + authRequestNotSetError: () => authRequestNotSetError, + blockIframeReload: () => blockIframeReload, + blockNestedPopups: () => blockNestedPopups, + cryptoKeyNotFound: () => cryptoKeyNotFound, + cryptoNonExistent: () => cryptoNonExistent, + databaseNotOpen: () => databaseNotOpen, + databaseUnavailable: () => databaseUnavailable, + earJweEmpty: () => earJweEmpty, + earJwkEmpty: () => earJwkEmpty, + emptyNavigateUri: () => emptyNavigateUri, + emptyWindowError: () => emptyWindowError, + failedToBuildHeaders: () => failedToBuildHeaders, + failedToDecryptEarResponse: () => failedToDecryptEarResponse, + failedToParseHeaders: () => failedToParseHeaders, + failedToParseResponse: () => failedToParseResponse, + getRequestFailed: () => getRequestFailed, + hashDoesNotContainKnownProperties: () => hashDoesNotContainKnownProperties, + hashEmptyError: () => hashEmptyError, + iframeClosedPrematurely: () => iframeClosedPrematurely, + interactionInProgress: () => interactionInProgress, + invalidBase64String: () => invalidBase64String, + invalidCacheType: () => invalidCacheType, + invalidPopTokenRequest: () => invalidPopTokenRequest, + monitorPopupTimeout: () => monitorPopupTimeout, + monitorWindowTimeout: () => monitorWindowTimeout, + nativeConnectionNotEstablished: () => nativeConnectionNotEstablished, + nativeExtensionNotInstalled: () => nativeExtensionNotInstalled, + nativeHandshakeTimeout: () => nativeHandshakeTimeout, + nativePromptNotSupported: () => nativePromptNotSupported, + noAccountError: () => noAccountError, + noNetworkConnectivity: () => noNetworkConnectivity2, + noStateInHash: () => noStateInHash, + noTokenRequestCacheError: () => noTokenRequestCacheError, + nonBrowserEnvironment: () => nonBrowserEnvironment, + pkceNotCreated: () => pkceNotCreated, + popupWindowError: () => popupWindowError, + postRequestFailed: () => postRequestFailed2, + redirectInIframe: () => redirectInIframe, + silentLogoutUnsupported: () => silentLogoutUnsupported, + silentPromptValueError: () => silentPromptValueError, + spaCodeAndNativeAccountIdPresent: () => spaCodeAndNativeAccountIdPresent, + stateInteractionTypeMismatch: () => stateInteractionTypeMismatch, + timedOut: () => timedOut, + unableToAcquireTokenFromNativePlatform: () => unableToAcquireTokenFromNativePlatform, + unableToLoadToken: () => unableToLoadToken, + unableToParseState: () => unableToParseState, + unableToParseTokenRequestCacheError: () => unableToParseTokenRequestCacheError, + uninitializedPublicClientApplication: () => uninitializedPublicClientApplication, + userCancelled: () => userCancelled +}); +var pkceNotCreated = "pkce_not_created"; +var earJwkEmpty = "ear_jwk_empty"; +var earJweEmpty = "ear_jwe_empty"; +var cryptoNonExistent = "crypto_nonexistent"; +var emptyNavigateUri = "empty_navigate_uri"; +var hashEmptyError = "hash_empty_error"; +var noStateInHash = "no_state_in_hash"; +var hashDoesNotContainKnownProperties = "hash_does_not_contain_known_properties"; +var unableToParseState = "unable_to_parse_state"; +var stateInteractionTypeMismatch = "state_interaction_type_mismatch"; +var interactionInProgress = "interaction_in_progress"; +var popupWindowError = "popup_window_error"; +var emptyWindowError = "empty_window_error"; +var userCancelled = "user_cancelled"; +var monitorPopupTimeout = "monitor_popup_timeout"; +var monitorWindowTimeout = "monitor_window_timeout"; +var redirectInIframe = "redirect_in_iframe"; +var blockIframeReload = "block_iframe_reload"; +var blockNestedPopups = "block_nested_popups"; +var iframeClosedPrematurely = "iframe_closed_prematurely"; +var silentLogoutUnsupported = "silent_logout_unsupported"; +var noAccountError = "no_account_error"; +var silentPromptValueError = "silent_prompt_value_error"; +var noTokenRequestCacheError = "no_token_request_cache_error"; +var unableToParseTokenRequestCacheError = "unable_to_parse_token_request_cache_error"; +var authRequestNotSetError = "auth_request_not_set_error"; +var invalidCacheType = "invalid_cache_type"; +var nonBrowserEnvironment = "non_browser_environment"; +var databaseNotOpen = "database_not_open"; +var noNetworkConnectivity2 = "no_network_connectivity"; +var postRequestFailed2 = "post_request_failed"; +var getRequestFailed = "get_request_failed"; +var failedToParseResponse = "failed_to_parse_response"; +var unableToLoadToken = "unable_to_load_token"; +var cryptoKeyNotFound = "crypto_key_not_found"; +var authCodeRequired = "auth_code_required"; +var authCodeOrNativeAccountIdRequired = "auth_code_or_nativeAccountId_required"; +var spaCodeAndNativeAccountIdPresent = "spa_code_and_nativeAccountId_present"; +var databaseUnavailable = "database_unavailable"; +var unableToAcquireTokenFromNativePlatform = "unable_to_acquire_token_from_native_platform"; +var nativeHandshakeTimeout = "native_handshake_timeout"; +var nativeExtensionNotInstalled = "native_extension_not_installed"; +var nativeConnectionNotEstablished = "native_connection_not_established"; +var uninitializedPublicClientApplication = "uninitialized_public_client_application"; +var nativePromptNotSupported = "native_prompt_not_supported"; +var invalidBase64String = "invalid_base64_string"; +var invalidPopTokenRequest = "invalid_pop_token_request"; +var failedToBuildHeaders = "failed_to_build_headers"; +var failedToParseHeaders = "failed_to_parse_headers"; +var failedToDecryptEarResponse = "failed_to_decrypt_ear_response"; +var timedOut = "timed_out"; + +// node_modules/@azure/msal-browser/dist/error/BrowserAuthError.mjs +var ErrorLink = "For more visit: aka.ms/msaljs/browser-errors"; +var BrowserAuthErrorMessages = { + [pkceNotCreated]: "The PKCE code challenge and verifier could not be generated.", + [earJwkEmpty]: "No EAR encryption key provided. This is unexpected.", + [earJweEmpty]: "Server response does not contain ear_jwe property. This is unexpected.", + [cryptoNonExistent]: "The crypto object or function is not available.", + [emptyNavigateUri]: "Navigation URI is empty. Please check stack trace for more info.", + [hashEmptyError]: `Hash value cannot be processed because it is empty. Please verify that your redirectUri is not clearing the hash. ${ErrorLink}`, + [noStateInHash]: "Hash does not contain state. Please verify that the request originated from msal.", + [hashDoesNotContainKnownProperties]: `Hash does not contain known properites. Please verify that your redirectUri is not changing the hash. ${ErrorLink}`, + [unableToParseState]: "Unable to parse state. Please verify that the request originated from msal.", + [stateInteractionTypeMismatch]: "Hash contains state but the interaction type does not match the caller.", + [interactionInProgress]: `Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API. ${ErrorLink}`, + [popupWindowError]: "Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.", + [emptyWindowError]: "window.open returned null or undefined window object.", + [userCancelled]: "User cancelled the flow.", + [monitorPopupTimeout]: `Token acquisition in popup failed due to timeout. ${ErrorLink}`, + [monitorWindowTimeout]: `Token acquisition in iframe failed due to timeout. ${ErrorLink}`, + [redirectInIframe]: "Redirects are not supported for iframed or brokered applications. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.", + [blockIframeReload]: `Request was blocked inside an iframe because MSAL detected an authentication response. ${ErrorLink}`, + [blockNestedPopups]: "Request was blocked inside a popup because MSAL detected it was running in a popup.", + [iframeClosedPrematurely]: "The iframe being monitored was closed prematurely.", + [silentLogoutUnsupported]: "Silent logout not supported. Please call logoutRedirect or logoutPopup instead.", + [noAccountError]: "No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.", + [silentPromptValueError]: "The value given for the prompt value is not valid for silent requests - must be set to 'none' or 'no_session'.", + [noTokenRequestCacheError]: "No token request found in cache.", + [unableToParseTokenRequestCacheError]: "The cached token request could not be parsed.", + [authRequestNotSetError]: "Auth Request not set. Please ensure initiateAuthRequest was called from the InteractionHandler", + [invalidCacheType]: "Invalid cache type", + [nonBrowserEnvironment]: "Login and token requests are not supported in non-browser environments.", + [databaseNotOpen]: "Database is not open!", + [noNetworkConnectivity2]: "No network connectivity. Check your internet connection.", + [postRequestFailed2]: "Network request failed: If the browser threw a CORS error, check that the redirectUri is registered in the Azure App Portal as type 'SPA'", + [getRequestFailed]: "Network request failed. Please check the network trace to determine root cause.", + [failedToParseResponse]: "Failed to parse network response. Check network trace.", + [unableToLoadToken]: "Error loading token to cache.", + [cryptoKeyNotFound]: "Cryptographic Key or Keypair not found in browser storage.", + [authCodeRequired]: "An authorization code must be provided (as the `code` property on the request) to this flow.", + [authCodeOrNativeAccountIdRequired]: "An authorization code or nativeAccountId must be provided to this flow.", + [spaCodeAndNativeAccountIdPresent]: "Request cannot contain both spa code and native account id.", + [databaseUnavailable]: "IndexedDB, which is required for persistent cryptographic key storage, is unavailable. This may be caused by browser privacy features which block persistent storage in third-party contexts.", + [unableToAcquireTokenFromNativePlatform]: `Unable to acquire token from native platform. ${ErrorLink}`, + [nativeHandshakeTimeout]: "Timed out while attempting to establish connection to browser extension", + [nativeExtensionNotInstalled]: "Native extension is not installed. If you think this is a mistake call the initialize function.", + [nativeConnectionNotEstablished]: `Connection to native platform has not been established. Please install a compatible browser extension and run initialize(). ${ErrorLink}`, + [uninitializedPublicClientApplication]: `You must call and await the initialize function before attempting to call any other MSAL API. ${ErrorLink}`, + [nativePromptNotSupported]: "The provided prompt is not supported by the native platform. This request should be routed to the web based flow.", + [invalidBase64String]: "Invalid base64 encoded string.", + [invalidPopTokenRequest]: "Invalid PoP token request. The request should not have both a popKid value and signPopToken set to true.", + [failedToBuildHeaders]: "Failed to build request headers object.", + [failedToParseHeaders]: "Failed to parse response headers", + [failedToDecryptEarResponse]: "Failed to decrypt ear response", + [timedOut]: "The request timed out." +}; +var BrowserAuthErrorMessage = { + pkceNotGenerated: { + code: pkceNotCreated, + desc: BrowserAuthErrorMessages[pkceNotCreated] + }, + cryptoDoesNotExist: { + code: cryptoNonExistent, + desc: BrowserAuthErrorMessages[cryptoNonExistent] + }, + emptyNavigateUriError: { + code: emptyNavigateUri, + desc: BrowserAuthErrorMessages[emptyNavigateUri] + }, + hashEmptyError: { + code: hashEmptyError, + desc: BrowserAuthErrorMessages[hashEmptyError] + }, + hashDoesNotContainStateError: { + code: noStateInHash, + desc: BrowserAuthErrorMessages[noStateInHash] + }, + hashDoesNotContainKnownPropertiesError: { + code: hashDoesNotContainKnownProperties, + desc: BrowserAuthErrorMessages[hashDoesNotContainKnownProperties] + }, + unableToParseStateError: { + code: unableToParseState, + desc: BrowserAuthErrorMessages[unableToParseState] + }, + stateInteractionTypeMismatchError: { + code: stateInteractionTypeMismatch, + desc: BrowserAuthErrorMessages[stateInteractionTypeMismatch] + }, + interactionInProgress: { + code: interactionInProgress, + desc: BrowserAuthErrorMessages[interactionInProgress] + }, + popupWindowError: { + code: popupWindowError, + desc: BrowserAuthErrorMessages[popupWindowError] + }, + emptyWindowError: { + code: emptyWindowError, + desc: BrowserAuthErrorMessages[emptyWindowError] + }, + userCancelledError: { + code: userCancelled, + desc: BrowserAuthErrorMessages[userCancelled] + }, + monitorPopupTimeoutError: { + code: monitorPopupTimeout, + desc: BrowserAuthErrorMessages[monitorPopupTimeout] + }, + monitorIframeTimeoutError: { + code: monitorWindowTimeout, + desc: BrowserAuthErrorMessages[monitorWindowTimeout] + }, + redirectInIframeError: { + code: redirectInIframe, + desc: BrowserAuthErrorMessages[redirectInIframe] + }, + blockTokenRequestsInHiddenIframeError: { + code: blockIframeReload, + desc: BrowserAuthErrorMessages[blockIframeReload] + }, + blockAcquireTokenInPopupsError: { + code: blockNestedPopups, + desc: BrowserAuthErrorMessages[blockNestedPopups] + }, + iframeClosedPrematurelyError: { + code: iframeClosedPrematurely, + desc: BrowserAuthErrorMessages[iframeClosedPrematurely] + }, + silentLogoutUnsupportedError: { + code: silentLogoutUnsupported, + desc: BrowserAuthErrorMessages[silentLogoutUnsupported] + }, + noAccountError: { + code: noAccountError, + desc: BrowserAuthErrorMessages[noAccountError] + }, + silentPromptValueError: { + code: silentPromptValueError, + desc: BrowserAuthErrorMessages[silentPromptValueError] + }, + noTokenRequestCacheError: { + code: noTokenRequestCacheError, + desc: BrowserAuthErrorMessages[noTokenRequestCacheError] + }, + unableToParseTokenRequestCacheError: { + code: unableToParseTokenRequestCacheError, + desc: BrowserAuthErrorMessages[unableToParseTokenRequestCacheError] + }, + authRequestNotSet: { + code: authRequestNotSetError, + desc: BrowserAuthErrorMessages[authRequestNotSetError] + }, + invalidCacheType: { + code: invalidCacheType, + desc: BrowserAuthErrorMessages[invalidCacheType] + }, + notInBrowserEnvironment: { + code: nonBrowserEnvironment, + desc: BrowserAuthErrorMessages[nonBrowserEnvironment] + }, + databaseNotOpen: { + code: databaseNotOpen, + desc: BrowserAuthErrorMessages[databaseNotOpen] + }, + noNetworkConnectivity: { + code: noNetworkConnectivity2, + desc: BrowserAuthErrorMessages[noNetworkConnectivity2] + }, + postRequestFailed: { + code: postRequestFailed2, + desc: BrowserAuthErrorMessages[postRequestFailed2] + }, + getRequestFailed: { + code: getRequestFailed, + desc: BrowserAuthErrorMessages[getRequestFailed] + }, + failedToParseNetworkResponse: { + code: failedToParseResponse, + desc: BrowserAuthErrorMessages[failedToParseResponse] + }, + unableToLoadTokenError: { + code: unableToLoadToken, + desc: BrowserAuthErrorMessages[unableToLoadToken] + }, + signingKeyNotFoundInStorage: { + code: cryptoKeyNotFound, + desc: BrowserAuthErrorMessages[cryptoKeyNotFound] + }, + authCodeRequired: { + code: authCodeRequired, + desc: BrowserAuthErrorMessages[authCodeRequired] + }, + authCodeOrNativeAccountRequired: { + code: authCodeOrNativeAccountIdRequired, + desc: BrowserAuthErrorMessages[authCodeOrNativeAccountIdRequired] + }, + spaCodeAndNativeAccountPresent: { + code: spaCodeAndNativeAccountIdPresent, + desc: BrowserAuthErrorMessages[spaCodeAndNativeAccountIdPresent] + }, + databaseUnavailable: { + code: databaseUnavailable, + desc: BrowserAuthErrorMessages[databaseUnavailable] + }, + unableToAcquireTokenFromNativePlatform: { + code: unableToAcquireTokenFromNativePlatform, + desc: BrowserAuthErrorMessages[unableToAcquireTokenFromNativePlatform] + }, + nativeHandshakeTimeout: { + code: nativeHandshakeTimeout, + desc: BrowserAuthErrorMessages[nativeHandshakeTimeout] + }, + nativeExtensionNotInstalled: { + code: nativeExtensionNotInstalled, + desc: BrowserAuthErrorMessages[nativeExtensionNotInstalled] + }, + nativeConnectionNotEstablished: { + code: nativeConnectionNotEstablished, + desc: BrowserAuthErrorMessages[nativeConnectionNotEstablished] + }, + uninitializedPublicClientApplication: { + code: uninitializedPublicClientApplication, + desc: BrowserAuthErrorMessages[uninitializedPublicClientApplication] + }, + nativePromptNotSupported: { + code: nativePromptNotSupported, + desc: BrowserAuthErrorMessages[nativePromptNotSupported] + }, + invalidBase64StringError: { + code: invalidBase64String, + desc: BrowserAuthErrorMessages[invalidBase64String] + }, + invalidPopTokenRequest: { + code: invalidPopTokenRequest, + desc: BrowserAuthErrorMessages[invalidPopTokenRequest] + } +}; +var BrowserAuthError = class _BrowserAuthError extends AuthError { + constructor(errorCode, subError) { + super(errorCode, BrowserAuthErrorMessages[errorCode], subError); + Object.setPrototypeOf(this, _BrowserAuthError.prototype); + this.name = "BrowserAuthError"; + } +}; +function createBrowserAuthError(errorCode, subError) { + return new BrowserAuthError(errorCode, subError); +} + +// node_modules/@azure/msal-browser/dist/utils/BrowserConstants.mjs +var BrowserConstants = { + /** + * Invalid grant error code + */ + INVALID_GRANT_ERROR: "invalid_grant", + /** + * Default popup window width + */ + POPUP_WIDTH: 483, + /** + * Default popup window height + */ + POPUP_HEIGHT: 600, + /** + * Name of the popup window starts with + */ + POPUP_NAME_PREFIX: "msal", + /** + * Default popup monitor poll interval in milliseconds + */ + DEFAULT_POLL_INTERVAL_MS: 30, + /** + * Msal-browser SKU + */ + MSAL_SKU: "msal.js.browser" +}; +var PlatformAuthConstants = { + CHANNEL_ID: "53ee284d-920a-4b59-9d30-a60315b26836", + PREFERRED_EXTENSION_ID: "ppnbnpeolgkicgegkbkbjmhlideopiji", + MATS_TELEMETRY: "MATS", + MICROSOFT_ENTRA_BROKERID: "MicrosoftEntra", + DOM_API_NAME: "DOM API", + PLATFORM_DOM_APIS: "get-token-and-sign-out", + PLATFORM_DOM_PROVIDER: "PlatformAuthDOMHandler", + PLATFORM_EXTENSION_PROVIDER: "PlatformAuthExtensionHandler" +}; +var NativeExtensionMethod = { + HandshakeRequest: "Handshake", + HandshakeResponse: "HandshakeResponse", + GetToken: "GetToken", + Response: "Response" +}; +var BrowserCacheLocation = { + LocalStorage: "localStorage", + SessionStorage: "sessionStorage", + MemoryStorage: "memoryStorage" +}; +var HTTP_REQUEST_TYPE = { + GET: "GET", + POST: "POST" +}; +var INTERACTION_TYPE = { + SIGNIN: "signin", + SIGNOUT: "signout" +}; +var TemporaryCacheKeys = { + ORIGIN_URI: "request.origin", + URL_HASH: "urlHash", + REQUEST_PARAMS: "request.params", + VERIFIER: "code.verifier", + INTERACTION_STATUS_KEY: "interaction.status", + NATIVE_REQUEST: "request.native" +}; +var InMemoryCacheKeys = { + WRAPPER_SKU: "wrapper.sku", + WRAPPER_VER: "wrapper.version" +}; +var ApiId = { + acquireTokenRedirect: 861, + acquireTokenPopup: 862, + ssoSilent: 863, + acquireTokenSilent_authCode: 864, + handleRedirectPromise: 865, + acquireTokenByCode: 866, + acquireTokenSilent_silentFlow: 61, + logout: 961, + logoutPopup: 962 +}; +var InteractionType; +(function(InteractionType2) { + InteractionType2["Redirect"] = "redirect"; + InteractionType2["Popup"] = "popup"; + InteractionType2["Silent"] = "silent"; + InteractionType2["None"] = "none"; +})(InteractionType || (InteractionType = {})); +var InteractionStatus = { + /** + * Initial status before interaction occurs + */ + Startup: "startup", + /** + * Status set when all login calls occuring + */ + Login: "login", + /** + * Status set when logout call occuring + */ + Logout: "logout", + /** + * Status set for acquireToken calls + */ + AcquireToken: "acquireToken", + /** + * Status set for ssoSilent calls + */ + SsoSilent: "ssoSilent", + /** + * Status set when handleRedirect in progress + */ + HandleRedirect: "handleRedirect", + /** + * Status set when interaction is complete + */ + None: "none" +}; +var DEFAULT_REQUEST = { + scopes: OIDC_DEFAULT_SCOPES +}; +var KEY_FORMAT_JWK = "jwk"; +var WrapperSKU = { + React: "@azure/msal-react", + Angular: "@azure/msal-angular" +}; +var DB_NAME = "msal.db"; +var DB_VERSION = 1; +var DB_TABLE_NAME = `${DB_NAME}.keys`; +var CacheLookupPolicy = { + /* + * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired + * or cannot be found the refresh token will be used to acquire a new one. Finally, if the refresh token + * is expired acquireTokenSilent will attempt to acquire new access and refresh tokens. + */ + Default: 0, + /* + * acquireTokenSilent will only look for access tokens in the cache. It will not attempt to renew access or + * refresh tokens. + */ + AccessToken: 1, + /* + * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired or + * cannot be found, the refresh token will be used to acquire a new one. If the refresh token is expired, it + * will not be renewed and acquireTokenSilent will fail. + */ + AccessTokenAndRefreshToken: 2, + /* + * acquireTokenSilent will not attempt to retrieve access tokens from the cache and will instead attempt to + * exchange the cached refresh token for a new access token. If the refresh token is expired, it will not be + * renewed and acquireTokenSilent will fail. + */ + RefreshToken: 3, + /* + * acquireTokenSilent will not look in the cache for the access token. It will go directly to network with the + * cached refresh token. If the refresh token is expired an attempt will be made to renew it. This is equivalent to + * setting "forceRefresh: true". + */ + RefreshTokenAndNetwork: 4, + /* + * acquireTokenSilent will attempt to renew both access and refresh tokens. It will not look in the cache. This will + * always fail if 3rd party cookies are blocked by the browser. + */ + Skip: 5 +}; +var iFrameRenewalPolicies = [ + CacheLookupPolicy.Default, + CacheLookupPolicy.Skip, + CacheLookupPolicy.RefreshTokenAndNetwork +]; + +// node_modules/@azure/msal-browser/dist/encode/Base64Encode.mjs +function urlEncode(input) { + return encodeURIComponent(base64Encode(input).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_")); +} +function urlEncodeArr(inputArr) { + return base64EncArr(inputArr).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); +} +function base64Encode(input) { + return base64EncArr(new TextEncoder().encode(input)); +} +function base64EncArr(aBytes) { + const binString = Array.from(aBytes, (x) => String.fromCodePoint(x)).join(""); + return btoa(binString); +} + +// node_modules/@azure/msal-browser/dist/encode/Base64Decode.mjs +function base64Decode(input) { + return new TextDecoder().decode(base64DecToArr(input)); +} +function base64DecToArr(base64String) { + let encodedString = base64String.replace(/-/g, "+").replace(/_/g, "/"); + switch (encodedString.length % 4) { + case 0: + break; + case 2: + encodedString += "=="; + break; + case 3: + encodedString += "="; + break; + default: + throw createBrowserAuthError(invalidBase64String); + } + const binString = atob(encodedString); + return Uint8Array.from(binString, (m) => m.codePointAt(0) || 0); +} + +// node_modules/@azure/msal-browser/dist/crypto/BrowserCrypto.mjs +var PKCS1_V15_KEYGEN_ALG = "RSASSA-PKCS1-v1_5"; +var AES_GCM = "AES-GCM"; +var HKDF = "HKDF"; +var S256_HASH_ALG = "SHA-256"; +var MODULUS_LENGTH = 2048; +var PUBLIC_EXPONENT = new Uint8Array([1, 0, 1]); +var UUID_CHARS = "0123456789abcdef"; +var UINT32_ARR = new Uint32Array(1); +var RAW = "raw"; +var ENCRYPT = "encrypt"; +var DECRYPT = "decrypt"; +var DERIVE_KEY = "deriveKey"; +var SUBTLE_SUBERROR = "crypto_subtle_undefined"; +var keygenAlgorithmOptions = { + name: PKCS1_V15_KEYGEN_ALG, + hash: S256_HASH_ALG, + modulusLength: MODULUS_LENGTH, + publicExponent: PUBLIC_EXPONENT +}; +function validateCryptoAvailable(skipValidateSubtleCrypto) { + if (!window) { + throw createBrowserAuthError(nonBrowserEnvironment); + } + if (!window.crypto) { + throw createBrowserAuthError(cryptoNonExistent); + } + if (!skipValidateSubtleCrypto && !window.crypto.subtle) { + throw createBrowserAuthError(cryptoNonExistent, SUBTLE_SUBERROR); + } +} +async function sha256Digest(dataString, performanceClient, correlationId) { + performanceClient == null ? void 0 : performanceClient.addQueueMeasurement(PerformanceEvents.Sha256Digest, correlationId); + const encoder = new TextEncoder(); + const data = encoder.encode(dataString); + return window.crypto.subtle.digest(S256_HASH_ALG, data); +} +function getRandomValues(dataBuffer) { + return window.crypto.getRandomValues(dataBuffer); +} +function getRandomUint32() { + window.crypto.getRandomValues(UINT32_ARR); + return UINT32_ARR[0]; +} +function createNewGuid() { + const currentTimestamp = Date.now(); + const baseRand = getRandomUint32() * 1024 + (getRandomUint32() & 1023); + const bytes = new Uint8Array(16); + const randA = Math.trunc(baseRand / 2 ** 30); + const randBHi = baseRand & 2 ** 30 - 1; + const randBLo = getRandomUint32(); + bytes[0] = currentTimestamp / 2 ** 40; + bytes[1] = currentTimestamp / 2 ** 32; + bytes[2] = currentTimestamp / 2 ** 24; + bytes[3] = currentTimestamp / 2 ** 16; + bytes[4] = currentTimestamp / 2 ** 8; + bytes[5] = currentTimestamp; + bytes[6] = 112 | randA >>> 8; + bytes[7] = randA; + bytes[8] = 128 | randBHi >>> 24; + bytes[9] = randBHi >>> 16; + bytes[10] = randBHi >>> 8; + bytes[11] = randBHi; + bytes[12] = randBLo >>> 24; + bytes[13] = randBLo >>> 16; + bytes[14] = randBLo >>> 8; + bytes[15] = randBLo; + let text = ""; + for (let i = 0; i < bytes.length; i++) { + text += UUID_CHARS.charAt(bytes[i] >>> 4); + text += UUID_CHARS.charAt(bytes[i] & 15); + if (i === 3 || i === 5 || i === 7 || i === 9) { + text += "-"; + } + } + return text; +} +async function generateKeyPair(extractable, usages) { + return window.crypto.subtle.generateKey(keygenAlgorithmOptions, extractable, usages); +} +async function exportJwk(key) { + return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key); +} +async function importJwk(key, extractable, usages) { + return window.crypto.subtle.importKey(KEY_FORMAT_JWK, key, keygenAlgorithmOptions, extractable, usages); +} +async function sign(key, data) { + return window.crypto.subtle.sign(keygenAlgorithmOptions, key, data); +} +async function generateEarKey() { + const key = await generateBaseKey(); + const keyStr = urlEncodeArr(new Uint8Array(key)); + const jwk = { + alg: "dir", + kty: "oct", + k: keyStr + }; + return base64Encode(JSON.stringify(jwk)); +} +async function importEarKey(earJwk) { + const b64DecodedJwk = base64Decode(earJwk); + const jwkJson = JSON.parse(b64DecodedJwk); + const rawKey = jwkJson.k; + const keyBuffer = base64DecToArr(rawKey); + return window.crypto.subtle.importKey(RAW, keyBuffer, AES_GCM, false, [ + DECRYPT + ]); +} +async function decryptEarResponse(earJwk, earJwe) { + const earJweParts = earJwe.split("."); + if (earJweParts.length !== 5) { + throw createBrowserAuthError(failedToDecryptEarResponse, "jwe_length"); + } + const key = await importEarKey(earJwk).catch(() => { + throw createBrowserAuthError(failedToDecryptEarResponse, "import_key"); + }); + try { + const header = new TextEncoder().encode(earJweParts[0]); + const iv = base64DecToArr(earJweParts[2]); + const ciphertext = base64DecToArr(earJweParts[3]); + const tag = base64DecToArr(earJweParts[4]); + const tagLengthBits = tag.byteLength * 8; + const encryptedData = new Uint8Array(ciphertext.length + tag.length); + encryptedData.set(ciphertext); + encryptedData.set(tag, ciphertext.length); + const decryptedData = await window.crypto.subtle.decrypt({ + name: AES_GCM, + iv, + tagLength: tagLengthBits, + additionalData: header + }, key, encryptedData); + return new TextDecoder().decode(decryptedData); + } catch (e) { + throw createBrowserAuthError(failedToDecryptEarResponse, "decrypt"); + } +} +async function generateBaseKey() { + const key = await window.crypto.subtle.generateKey({ + name: AES_GCM, + length: 256 + }, true, [ENCRYPT, DECRYPT]); + return window.crypto.subtle.exportKey(RAW, key); +} +async function generateHKDF(baseKey) { + return window.crypto.subtle.importKey(RAW, baseKey, HKDF, false, [ + DERIVE_KEY + ]); +} +async function deriveKey(baseKey, nonce, context) { + return window.crypto.subtle.deriveKey({ + name: HKDF, + salt: nonce, + hash: S256_HASH_ALG, + info: new TextEncoder().encode(context) + }, baseKey, { name: AES_GCM, length: 256 }, false, [ENCRYPT, DECRYPT]); +} +async function encrypt(baseKey, rawData, context) { + const encodedData = new TextEncoder().encode(rawData); + const nonce = window.crypto.getRandomValues(new Uint8Array(16)); + const derivedKey = await deriveKey(baseKey, nonce, context); + const encryptedData = await window.crypto.subtle.encrypt({ + name: AES_GCM, + iv: new Uint8Array(12) + // New key is derived for every encrypt so we don't need a new nonce + }, derivedKey, encodedData); + return { + data: urlEncodeArr(new Uint8Array(encryptedData)), + nonce: urlEncodeArr(nonce) + }; +} +async function decrypt(baseKey, nonce, context, encryptedData) { + const encodedData = base64DecToArr(encryptedData); + const derivedKey = await deriveKey(baseKey, base64DecToArr(nonce), context); + const decryptedData = await window.crypto.subtle.decrypt({ + name: AES_GCM, + iv: new Uint8Array(12) + // New key is derived for every encrypt so we don't need a new nonce + }, derivedKey, encodedData); + return new TextDecoder().decode(decryptedData); +} +async function hashString(plainText) { + const hashBuffer = await sha256Digest(plainText); + const hashBytes = new Uint8Array(hashBuffer); + return urlEncodeArr(hashBytes); +} + +// node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthErrorCodes.mjs +var BrowserConfigurationAuthErrorCodes_exports = {}; +__export(BrowserConfigurationAuthErrorCodes_exports, { + inMemRedirectUnavailable: () => inMemRedirectUnavailable, + storageNotSupported: () => storageNotSupported, + stubbedPublicClientApplicationCalled: () => stubbedPublicClientApplicationCalled +}); +var storageNotSupported = "storage_not_supported"; +var stubbedPublicClientApplicationCalled = "stubbed_public_client_application_called"; +var inMemRedirectUnavailable = "in_mem_redirect_unavailable"; + +// node_modules/@azure/msal-browser/dist/error/BrowserConfigurationAuthError.mjs +var BrowserConfigurationAuthErrorMessages = { + [storageNotSupported]: "Given storage configuration option was not supported.", + [stubbedPublicClientApplicationCalled]: "Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors", + [inMemRedirectUnavailable]: "Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true." +}; +var BrowserConfigurationAuthErrorMessage = { + storageNotSupportedError: { + code: storageNotSupported, + desc: BrowserConfigurationAuthErrorMessages[storageNotSupported] + }, + stubPcaInstanceCalled: { + code: stubbedPublicClientApplicationCalled, + desc: BrowserConfigurationAuthErrorMessages[stubbedPublicClientApplicationCalled] + }, + inMemRedirectUnavailable: { + code: inMemRedirectUnavailable, + desc: BrowserConfigurationAuthErrorMessages[inMemRedirectUnavailable] + } +}; +var BrowserConfigurationAuthError = class _BrowserConfigurationAuthError extends AuthError { + constructor(errorCode, errorMessage) { + super(errorCode, errorMessage); + this.name = "BrowserConfigurationAuthError"; + Object.setPrototypeOf(this, _BrowserConfigurationAuthError.prototype); + } +}; +function createBrowserConfigurationAuthError(errorCode) { + return new BrowserConfigurationAuthError(errorCode, BrowserConfigurationAuthErrorMessages[errorCode]); +} + +// node_modules/@azure/msal-browser/dist/utils/BrowserUtils.mjs +function clearHash(contentWindow) { + contentWindow.location.hash = ""; + if (typeof contentWindow.history.replaceState === "function") { + contentWindow.history.replaceState(null, "", `${contentWindow.location.origin}${contentWindow.location.pathname}${contentWindow.location.search}`); + } +} +function replaceHash(url) { + const urlParts = url.split("#"); + urlParts.shift(); + window.location.hash = urlParts.length > 0 ? urlParts.join("#") : ""; +} +function isInIframe() { + return window.parent !== window; +} +function isInPopup() { + return typeof window !== "undefined" && !!window.opener && window.opener !== window && typeof window.name === "string" && window.name.indexOf(`${BrowserConstants.POPUP_NAME_PREFIX}.`) === 0; +} +function getCurrentUri() { + return typeof window !== "undefined" && window.location ? window.location.href.split("?")[0].split("#")[0] : ""; +} +function getHomepage() { + const currentUrl = new UrlString(window.location.href); + const urlComponents = currentUrl.getUrlComponents(); + return `${urlComponents.Protocol}//${urlComponents.HostNameAndPort}/`; +} +function blockReloadInHiddenIframes() { + const isResponseHash = UrlString.hashContainsKnownProperties(window.location.hash); + if (isResponseHash && isInIframe()) { + throw createBrowserAuthError(blockIframeReload); + } +} +function blockRedirectInIframe(allowRedirectInIframe) { + if (isInIframe() && !allowRedirectInIframe) { + throw createBrowserAuthError(redirectInIframe); + } +} +function blockAcquireTokenInPopups() { + if (isInPopup()) { + throw createBrowserAuthError(blockNestedPopups); + } +} +function blockNonBrowserEnvironment() { + if (typeof window === "undefined") { + throw createBrowserAuthError(nonBrowserEnvironment); + } +} +function blockAPICallsBeforeInitialize(initialized) { + if (!initialized) { + throw createBrowserAuthError(uninitializedPublicClientApplication); + } +} +function preflightCheck(initialized) { + blockNonBrowserEnvironment(); + blockReloadInHiddenIframes(); + blockAcquireTokenInPopups(); + blockAPICallsBeforeInitialize(initialized); +} +function redirectPreflightCheck(initialized, config) { + preflightCheck(initialized); + blockRedirectInIframe(config.system.allowRedirectInIframe); + if (config.cache.cacheLocation === BrowserCacheLocation.MemoryStorage && !config.cache.storeAuthStateInCookie) { + throw createBrowserConfigurationAuthError(inMemRedirectUnavailable); + } +} +function preconnect(authority) { + const link = document.createElement("link"); + link.rel = "preconnect"; + link.href = new URL(authority).origin; + link.crossOrigin = "anonymous"; + document.head.appendChild(link); + window.setTimeout(() => { + try { + document.head.removeChild(link); + } catch { + } + }, 1e4); +} +function createGuid() { + return createNewGuid(); +} + +// node_modules/@azure/msal-browser/dist/navigation/NavigationClient.mjs +var NavigationClient = class _NavigationClient { + /** + * Navigates to other pages within the same web application + * @param url + * @param options + */ + navigateInternal(url, options) { + return _NavigationClient.defaultNavigateWindow(url, options); + } + /** + * Navigates to other pages outside the web application i.e. the Identity Provider + * @param url + * @param options + */ + navigateExternal(url, options) { + return _NavigationClient.defaultNavigateWindow(url, options); + } + /** + * Default navigation implementation invoked by the internal and external functions + * @param url + * @param options + */ + static defaultNavigateWindow(url, options) { + if (options.noHistory) { + window.location.replace(url); + } else { + window.location.assign(url); + } + return new Promise((resolve, reject) => { + setTimeout(() => { + reject(createBrowserAuthError(timedOut, "failed_to_redirect")); + }, options.timeout); + }); + } +}; + +// node_modules/@azure/msal-browser/dist/network/FetchClient.mjs +var FetchClient = class { + /** + * Fetch Client for REST endpoints - Get request + * @param url + * @param headers + * @param body + */ + async sendGetRequestAsync(url, options) { + let response; + let responseHeaders = {}; + let responseStatus = 0; + const reqHeaders = getFetchHeaders(options); + try { + response = await fetch(url, { + method: HTTP_REQUEST_TYPE.GET, + headers: reqHeaders + }); + } catch (e) { + throw createNetworkError(createBrowserAuthError(window.navigator.onLine ? getRequestFailed : noNetworkConnectivity2), void 0, void 0, e); + } + responseHeaders = getHeaderDict(response.headers); + try { + responseStatus = response.status; + return { + headers: responseHeaders, + body: await response.json(), + status: responseStatus + }; + } catch (e) { + throw createNetworkError(createBrowserAuthError(failedToParseResponse), responseStatus, responseHeaders, e); + } + } + /** + * Fetch Client for REST endpoints - Post request + * @param url + * @param headers + * @param body + */ + async sendPostRequestAsync(url, options) { + const reqBody = options && options.body || ""; + const reqHeaders = getFetchHeaders(options); + let response; + let responseStatus = 0; + let responseHeaders = {}; + try { + response = await fetch(url, { + method: HTTP_REQUEST_TYPE.POST, + headers: reqHeaders, + body: reqBody + }); + } catch (e) { + throw createNetworkError(createBrowserAuthError(window.navigator.onLine ? postRequestFailed2 : noNetworkConnectivity2), void 0, void 0, e); + } + responseHeaders = getHeaderDict(response.headers); + try { + responseStatus = response.status; + return { + headers: responseHeaders, + body: await response.json(), + status: responseStatus + }; + } catch (e) { + throw createNetworkError(createBrowserAuthError(failedToParseResponse), responseStatus, responseHeaders, e); + } + } +}; +function getFetchHeaders(options) { + try { + const headers = new Headers(); + if (!(options && options.headers)) { + return headers; + } + const optionsHeaders = options.headers; + Object.entries(optionsHeaders).forEach(([key, value]) => { + headers.append(key, value); + }); + return headers; + } catch (e) { + throw createNetworkError(createBrowserAuthError(failedToBuildHeaders), void 0, void 0, e); + } +} +function getHeaderDict(headers) { + try { + const headerDict = {}; + headers.forEach((value, key) => { + headerDict[key] = value; + }); + return headerDict; + } catch (e) { + throw createBrowserAuthError(failedToParseHeaders); + } +} + +// node_modules/@azure/msal-browser/dist/config/Configuration.mjs +var DEFAULT_POPUP_TIMEOUT_MS = 6e4; +var DEFAULT_IFRAME_TIMEOUT_MS = 1e4; +var DEFAULT_REDIRECT_TIMEOUT_MS = 3e4; +var DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS = 2e3; +function buildConfiguration({ auth: userInputAuth, cache: userInputCache, system: userInputSystem, telemetry: userInputTelemetry }, isBrowserEnvironment) { + const DEFAULT_AUTH_OPTIONS = { + clientId: Constants.EMPTY_STRING, + authority: `${Constants.DEFAULT_AUTHORITY}`, + knownAuthorities: [], + cloudDiscoveryMetadata: Constants.EMPTY_STRING, + authorityMetadata: Constants.EMPTY_STRING, + redirectUri: typeof window !== "undefined" ? getCurrentUri() : "", + postLogoutRedirectUri: Constants.EMPTY_STRING, + navigateToLoginRequestUrl: true, + clientCapabilities: [], + protocolMode: ProtocolMode.AAD, + OIDCOptions: { + serverResponseType: ServerResponseType.FRAGMENT, + defaultScopes: [ + Constants.OPENID_SCOPE, + Constants.PROFILE_SCOPE, + Constants.OFFLINE_ACCESS_SCOPE + ] + }, + azureCloudOptions: { + azureCloudInstance: AzureCloudInstance.None, + tenant: Constants.EMPTY_STRING + }, + skipAuthorityMetadataCache: false, + supportsNestedAppAuth: false, + instanceAware: false, + encodeExtraQueryParams: false + }; + const DEFAULT_CACHE_OPTIONS2 = { + cacheLocation: BrowserCacheLocation.SessionStorage, + cacheRetentionDays: 5, + temporaryCacheLocation: BrowserCacheLocation.SessionStorage, + storeAuthStateInCookie: false, + secureCookies: false, + // Default cache migration to true if cache location is localStorage since entries are preserved across tabs/windows. Migration has little to no benefit in sessionStorage and memoryStorage + cacheMigrationEnabled: userInputCache && userInputCache.cacheLocation === BrowserCacheLocation.LocalStorage ? true : false, + claimsBasedCachingEnabled: false + }; + const DEFAULT_LOGGER_OPTIONS = { + // eslint-disable-next-line @typescript-eslint/no-empty-function + loggerCallback: () => { + }, + logLevel: LogLevel.Info, + piiLoggingEnabled: false + }; + const DEFAULT_BROWSER_SYSTEM_OPTIONS = { + ...DEFAULT_SYSTEM_OPTIONS, + loggerOptions: DEFAULT_LOGGER_OPTIONS, + networkClient: isBrowserEnvironment ? new FetchClient() : StubbedNetworkModule, + navigationClient: new NavigationClient(), + loadFrameTimeout: 0, + // If loadFrameTimeout is provided, use that as default. + windowHashTimeout: (userInputSystem == null ? void 0 : userInputSystem.loadFrameTimeout) || DEFAULT_POPUP_TIMEOUT_MS, + iframeHashTimeout: (userInputSystem == null ? void 0 : userInputSystem.loadFrameTimeout) || DEFAULT_IFRAME_TIMEOUT_MS, + navigateFrameWait: 0, + redirectNavigationTimeout: DEFAULT_REDIRECT_TIMEOUT_MS, + asyncPopups: false, + allowRedirectInIframe: false, + allowPlatformBroker: false, + nativeBrokerHandshakeTimeout: (userInputSystem == null ? void 0 : userInputSystem.nativeBrokerHandshakeTimeout) || DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS, + pollIntervalMilliseconds: BrowserConstants.DEFAULT_POLL_INTERVAL_MS + }; + const providedSystemOptions = { + ...DEFAULT_BROWSER_SYSTEM_OPTIONS, + ...userInputSystem, + loggerOptions: (userInputSystem == null ? void 0 : userInputSystem.loggerOptions) || DEFAULT_LOGGER_OPTIONS + }; + const DEFAULT_TELEMETRY_OPTIONS2 = { + application: { + appName: Constants.EMPTY_STRING, + appVersion: Constants.EMPTY_STRING + }, + client: new StubPerformanceClient() + }; + if ((userInputAuth == null ? void 0 : userInputAuth.protocolMode) !== ProtocolMode.OIDC && (userInputAuth == null ? void 0 : userInputAuth.OIDCOptions)) { + const logger = new Logger(providedSystemOptions.loggerOptions); + logger.warning(JSON.stringify(createClientConfigurationError(ClientConfigurationErrorCodes_exports.cannotSetOIDCOptions))); + } + if ((userInputAuth == null ? void 0 : userInputAuth.protocolMode) && userInputAuth.protocolMode === ProtocolMode.OIDC && (providedSystemOptions == null ? void 0 : providedSystemOptions.allowPlatformBroker)) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.cannotAllowPlatformBroker); + } + const overlayedConfig = { + auth: { + ...DEFAULT_AUTH_OPTIONS, + ...userInputAuth, + OIDCOptions: { + ...DEFAULT_AUTH_OPTIONS.OIDCOptions, + ...userInputAuth == null ? void 0 : userInputAuth.OIDCOptions + } + }, + cache: { ...DEFAULT_CACHE_OPTIONS2, ...userInputCache }, + system: providedSystemOptions, + telemetry: { ...DEFAULT_TELEMETRY_OPTIONS2, ...userInputTelemetry } + }; + return overlayedConfig; +} + +// node_modules/@azure/msal-browser/dist/packageMetadata.mjs +var name2 = "@azure/msal-browser"; +var version2 = "4.19.0"; + +// node_modules/@azure/msal-browser/dist/cache/CacheKeys.mjs +var PREFIX = "msal"; +var BROWSER_PREFIX = "browser"; +var CACHE_KEY_SEPARATOR = "-"; +var CREDENTIAL_SCHEMA_VERSION = 1; +var ACCOUNT_SCHEMA_VERSION = 1; +var LOG_LEVEL_CACHE_KEY = `${PREFIX}.${BROWSER_PREFIX}.log.level`; +var LOG_PII_CACHE_KEY = `${PREFIX}.${BROWSER_PREFIX}.log.pii`; +var BROWSER_PERF_ENABLED_KEY = `${PREFIX}.${BROWSER_PREFIX}.performance.enabled`; +var PLATFORM_AUTH_DOM_SUPPORT = `${PREFIX}.${BROWSER_PREFIX}.platform.auth.dom`; +var VERSION_CACHE_KEY = `${PREFIX}.version`; +var ACCOUNT_KEYS = "account.keys"; +var TOKEN_KEYS = "token.keys"; +function getAccountKeysCacheKey(schema = ACCOUNT_SCHEMA_VERSION) { + if (schema < 1) { + return `${PREFIX}.${ACCOUNT_KEYS}`; + } + return `${PREFIX}.${schema}.${ACCOUNT_KEYS}`; +} +function getTokenKeysCacheKey(clientId, schema = CREDENTIAL_SCHEMA_VERSION) { + if (schema < 1) { + return `${PREFIX}.${TOKEN_KEYS}.${clientId}`; + } + return `${PREFIX}.${schema}.${TOKEN_KEYS}.${clientId}`; +} + +// node_modules/@azure/msal-browser/dist/operatingcontext/BaseOperatingContext.mjs +var BaseOperatingContext = class _BaseOperatingContext { + static loggerCallback(level, message) { + switch (level) { + case LogLevel.Error: + console.error(message); + return; + case LogLevel.Info: + console.info(message); + return; + case LogLevel.Verbose: + console.debug(message); + return; + case LogLevel.Warning: + console.warn(message); + return; + default: + console.log(message); + return; + } + } + constructor(config) { + var _a; + this.browserEnvironment = typeof window !== "undefined"; + this.config = buildConfiguration(config, this.browserEnvironment); + let sessionStorage; + try { + sessionStorage = window[BrowserCacheLocation.SessionStorage]; + } catch (e) { + } + const logLevelKey = sessionStorage == null ? void 0 : sessionStorage.getItem(LOG_LEVEL_CACHE_KEY); + const piiLoggingKey = (_a = sessionStorage == null ? void 0 : sessionStorage.getItem(LOG_PII_CACHE_KEY)) == null ? void 0 : _a.toLowerCase(); + const piiLoggingEnabled = piiLoggingKey === "true" ? true : piiLoggingKey === "false" ? false : void 0; + const loggerOptions = { ...this.config.system.loggerOptions }; + const logLevel = logLevelKey && Object.keys(LogLevel).includes(logLevelKey) ? LogLevel[logLevelKey] : void 0; + if (logLevel) { + loggerOptions.loggerCallback = _BaseOperatingContext.loggerCallback; + loggerOptions.logLevel = logLevel; + } + if (piiLoggingEnabled !== void 0) { + loggerOptions.piiLoggingEnabled = piiLoggingEnabled; + } + this.logger = new Logger(loggerOptions, name2, version2); + this.available = false; + } + /** + * Return the MSAL config + * @returns BrowserConfiguration + */ + getConfig() { + return this.config; + } + /** + * Returns the MSAL Logger + * @returns Logger + */ + getLogger() { + return this.logger; + } + isAvailable() { + return this.available; + } + isBrowserEnvironment() { + return this.browserEnvironment; + } +}; + +// node_modules/@azure/msal-browser/dist/naa/BridgeStatusCode.mjs +var BridgeStatusCode = { + UserInteractionRequired: "USER_INTERACTION_REQUIRED", + UserCancel: "USER_CANCEL", + NoNetwork: "NO_NETWORK", + TransientError: "TRANSIENT_ERROR", + PersistentError: "PERSISTENT_ERROR", + Disabled: "DISABLED", + AccountUnavailable: "ACCOUNT_UNAVAILABLE", + NestedAppAuthUnavailable: "NESTED_APP_AUTH_UNAVAILABLE" + // NAA is unavailable in the current context, can retry with standard browser based auth +}; + +// node_modules/@azure/msal-browser/dist/naa/BridgeProxy.mjs +var BridgeProxy = class _BridgeProxy { + /** + * initializeNestedAppAuthBridge - Initializes the bridge to the host app + * @returns a promise that resolves to an InitializeBridgeResponse or rejects with an Error + * @remarks This method will be called by the create factory method + * @remarks If the bridge is not available, this method will throw an error + */ + static async initializeNestedAppAuthBridge() { + if (window === void 0) { + throw new Error("window is undefined"); + } + if (window.nestedAppAuthBridge === void 0) { + throw new Error("window.nestedAppAuthBridge is undefined"); + } + try { + window.nestedAppAuthBridge.addEventListener("message", (response) => { + const responsePayload = typeof response === "string" ? response : response.data; + const responseEnvelope = JSON.parse(responsePayload); + const request = _BridgeProxy.bridgeRequests.find((element) => element.requestId === responseEnvelope.requestId); + if (request !== void 0) { + _BridgeProxy.bridgeRequests.splice(_BridgeProxy.bridgeRequests.indexOf(request), 1); + if (responseEnvelope.success) { + request.resolve(responseEnvelope); + } else { + request.reject(responseEnvelope.error); + } + } + }); + const bridgeResponse = await new Promise((resolve, reject) => { + const message = _BridgeProxy.buildRequest("GetInitContext"); + const request = { + requestId: message.requestId, + method: message.method, + resolve, + reject + }; + _BridgeProxy.bridgeRequests.push(request); + window.nestedAppAuthBridge.postMessage(JSON.stringify(message)); + }); + return _BridgeProxy.validateBridgeResultOrThrow(bridgeResponse.initContext); + } catch (error) { + window.console.log(error); + throw error; + } + } + /** + * getTokenInteractive - Attempts to get a token interactively from the bridge + * @param request A token request + * @returns a promise that resolves to an auth result or rejects with a BridgeError + */ + getTokenInteractive(request) { + return this.getToken("GetTokenPopup", request); + } + /** + * getTokenSilent Attempts to get a token silently from the bridge + * @param request A token request + * @returns a promise that resolves to an auth result or rejects with a BridgeError + */ + getTokenSilent(request) { + return this.getToken("GetToken", request); + } + async getToken(requestType, request) { + const result = await this.sendRequest(requestType, { + tokenParams: request + }); + return { + token: _BridgeProxy.validateBridgeResultOrThrow(result.token), + account: _BridgeProxy.validateBridgeResultOrThrow(result.account) + }; + } + getHostCapabilities() { + return this.capabilities ?? null; + } + getAccountContext() { + return this.accountContext ? this.accountContext : null; + } + static buildRequest(method, requestParams) { + return { + messageType: "NestedAppAuthRequest", + method, + requestId: createNewGuid(), + sendTime: Date.now(), + clientLibrary: BrowserConstants.MSAL_SKU, + clientLibraryVersion: version2, + ...requestParams + }; + } + /** + * A method used to send a request to the bridge + * @param request A token request + * @returns a promise that resolves to a response of provided type or rejects with a BridgeError + */ + sendRequest(method, requestParams) { + const message = _BridgeProxy.buildRequest(method, requestParams); + const promise = new Promise((resolve, reject) => { + const request = { + requestId: message.requestId, + method: message.method, + resolve, + reject + }; + _BridgeProxy.bridgeRequests.push(request); + window.nestedAppAuthBridge.postMessage(JSON.stringify(message)); + }); + return promise; + } + static validateBridgeResultOrThrow(input) { + if (input === void 0) { + const bridgeError = { + status: BridgeStatusCode.NestedAppAuthUnavailable + }; + throw bridgeError; + } + return input; + } + /** + * Private constructor for BridgeProxy + * @param sdkName The name of the SDK being used to make requests on behalf of the app + * @param sdkVersion The version of the SDK being used to make requests on behalf of the app + * @param capabilities The capabilities of the bridge / SDK / platform broker + */ + constructor(sdkName, sdkVersion, accountContext, capabilities) { + this.sdkName = sdkName; + this.sdkVersion = sdkVersion; + this.accountContext = accountContext; + this.capabilities = capabilities; + } + /** + * Factory method for creating an implementation of IBridgeProxy + * @returns A promise that resolves to a BridgeProxy implementation + */ + static async create() { + const response = await _BridgeProxy.initializeNestedAppAuthBridge(); + return new _BridgeProxy(response.sdkName, response.sdkVersion, response.accountContext, response.capabilities); + } +}; +BridgeProxy.bridgeRequests = []; + +// node_modules/@azure/msal-browser/dist/operatingcontext/NestedAppOperatingContext.mjs +var NestedAppOperatingContext = class _NestedAppOperatingContext extends BaseOperatingContext { + constructor() { + super(...arguments); + this.bridgeProxy = void 0; + this.accountContext = null; + } + /** + * Return the module name. Intended for use with import() to enable dynamic import + * of the implementation associated with this operating context + * @returns + */ + getModuleName() { + return _NestedAppOperatingContext.MODULE_NAME; + } + /** + * Returns the unique identifier for this operating context + * @returns string + */ + getId() { + return _NestedAppOperatingContext.ID; + } + /** + * Returns the current BridgeProxy + * @returns IBridgeProxy | undefined + */ + getBridgeProxy() { + return this.bridgeProxy; + } + /** + * Checks whether the operating context is available. + * Confirms that the code is running a browser rather. This is required. + * @returns Promise indicating whether this operating context is currently available. + */ + async initialize() { + try { + if (typeof window !== "undefined") { + if (typeof window.__initializeNestedAppAuth === "function") { + await window.__initializeNestedAppAuth(); + } + const bridgeProxy = await BridgeProxy.create(); + this.accountContext = bridgeProxy.getAccountContext(); + this.bridgeProxy = bridgeProxy; + this.available = bridgeProxy !== void 0; + } + } catch (ex) { + this.logger.infoPii(`Could not initialize Nested App Auth bridge (${ex})`); + } + this.logger.info(`Nested App Auth Bridge available: ${this.available}`); + return this.available; + } +}; +NestedAppOperatingContext.MODULE_NAME = ""; +NestedAppOperatingContext.ID = "NestedAppOperatingContext"; + +// node_modules/@azure/msal-browser/dist/operatingcontext/StandardOperatingContext.mjs +var StandardOperatingContext = class _StandardOperatingContext extends BaseOperatingContext { + /** + * Return the module name. Intended for use with import() to enable dynamic import + * of the implementation associated with this operating context + * @returns + */ + getModuleName() { + return _StandardOperatingContext.MODULE_NAME; + } + /** + * Returns the unique identifier for this operating context + * @returns string + */ + getId() { + return _StandardOperatingContext.ID; + } + /** + * Checks whether the operating context is available. + * Confirms that the code is running a browser rather. This is required. + * @returns Promise indicating whether this operating context is currently available. + */ + async initialize() { + this.available = typeof window !== "undefined"; + return this.available; + } +}; +StandardOperatingContext.MODULE_NAME = ""; +StandardOperatingContext.ID = "StandardOperatingContext"; + +// node_modules/@azure/msal-browser/dist/cache/DatabaseStorage.mjs +var DatabaseStorage = class { + constructor() { + this.dbName = DB_NAME; + this.version = DB_VERSION; + this.tableName = DB_TABLE_NAME; + this.dbOpen = false; + } + /** + * Opens IndexedDB instance. + */ + async open() { + return new Promise((resolve, reject) => { + const openDB = window.indexedDB.open(this.dbName, this.version); + openDB.addEventListener("upgradeneeded", (e) => { + const event = e; + event.target.result.createObjectStore(this.tableName); + }); + openDB.addEventListener("success", (e) => { + const event = e; + this.db = event.target.result; + this.dbOpen = true; + resolve(); + }); + openDB.addEventListener("error", () => reject(createBrowserAuthError(databaseUnavailable))); + }); + } + /** + * Closes the connection to IndexedDB database when all pending transactions + * complete. + */ + closeConnection() { + const db = this.db; + if (db && this.dbOpen) { + db.close(); + this.dbOpen = false; + } + } + /** + * Opens database if it's not already open + */ + async validateDbIsOpen() { + if (!this.dbOpen) { + return this.open(); + } + } + /** + * Retrieves item from IndexedDB instance. + * @param key + */ + async getItem(key) { + await this.validateDbIsOpen(); + return new Promise((resolve, reject) => { + if (!this.db) { + return reject(createBrowserAuthError(databaseNotOpen)); + } + const transaction = this.db.transaction([this.tableName], "readonly"); + const objectStore = transaction.objectStore(this.tableName); + const dbGet = objectStore.get(key); + dbGet.addEventListener("success", (e) => { + const event = e; + this.closeConnection(); + resolve(event.target.result); + }); + dbGet.addEventListener("error", (e) => { + this.closeConnection(); + reject(e); + }); + }); + } + /** + * Adds item to IndexedDB under given key + * @param key + * @param payload + */ + async setItem(key, payload) { + await this.validateDbIsOpen(); + return new Promise((resolve, reject) => { + if (!this.db) { + return reject(createBrowserAuthError(databaseNotOpen)); + } + const transaction = this.db.transaction([this.tableName], "readwrite"); + const objectStore = transaction.objectStore(this.tableName); + const dbPut = objectStore.put(payload, key); + dbPut.addEventListener("success", () => { + this.closeConnection(); + resolve(); + }); + dbPut.addEventListener("error", (e) => { + this.closeConnection(); + reject(e); + }); + }); + } + /** + * Removes item from IndexedDB under given key + * @param key + */ + async removeItem(key) { + await this.validateDbIsOpen(); + return new Promise((resolve, reject) => { + if (!this.db) { + return reject(createBrowserAuthError(databaseNotOpen)); + } + const transaction = this.db.transaction([this.tableName], "readwrite"); + const objectStore = transaction.objectStore(this.tableName); + const dbDelete = objectStore.delete(key); + dbDelete.addEventListener("success", () => { + this.closeConnection(); + resolve(); + }); + dbDelete.addEventListener("error", (e) => { + this.closeConnection(); + reject(e); + }); + }); + } + /** + * Get all the keys from the storage object as an iterable array of strings. + */ + async getKeys() { + await this.validateDbIsOpen(); + return new Promise((resolve, reject) => { + if (!this.db) { + return reject(createBrowserAuthError(databaseNotOpen)); + } + const transaction = this.db.transaction([this.tableName], "readonly"); + const objectStore = transaction.objectStore(this.tableName); + const dbGetKeys = objectStore.getAllKeys(); + dbGetKeys.addEventListener("success", (e) => { + const event = e; + this.closeConnection(); + resolve(event.target.result); + }); + dbGetKeys.addEventListener("error", (e) => { + this.closeConnection(); + reject(e); + }); + }); + } + /** + * + * Checks whether there is an object under the search key in the object store + */ + async containsKey(key) { + await this.validateDbIsOpen(); + return new Promise((resolve, reject) => { + if (!this.db) { + return reject(createBrowserAuthError(databaseNotOpen)); + } + const transaction = this.db.transaction([this.tableName], "readonly"); + const objectStore = transaction.objectStore(this.tableName); + const dbContainsKey = objectStore.count(key); + dbContainsKey.addEventListener("success", (e) => { + const event = e; + this.closeConnection(); + resolve(event.target.result === 1); + }); + dbContainsKey.addEventListener("error", (e) => { + this.closeConnection(); + reject(e); + }); + }); + } + /** + * Deletes the MSAL database. The database is deleted rather than cleared to make it possible + * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues + * with IndexedDB database versions. + */ + async deleteDatabase() { + if (this.db && this.dbOpen) { + this.closeConnection(); + } + return new Promise((resolve, reject) => { + const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME); + const id = setTimeout(() => reject(false), 200); + deleteDbRequest.addEventListener("success", () => { + clearTimeout(id); + return resolve(true); + }); + deleteDbRequest.addEventListener("blocked", () => { + clearTimeout(id); + return resolve(true); + }); + deleteDbRequest.addEventListener("error", () => { + clearTimeout(id); + return reject(false); + }); + }); + } +}; + +// node_modules/@azure/msal-browser/dist/cache/MemoryStorage.mjs +var MemoryStorage = class { + constructor() { + this.cache = /* @__PURE__ */ new Map(); + } + async initialize() { + } + getItem(key) { + return this.cache.get(key) || null; + } + getUserData(key) { + return this.getItem(key); + } + setItem(key, value) { + this.cache.set(key, value); + } + async setUserData(key, value) { + this.setItem(key, value); + } + removeItem(key) { + this.cache.delete(key); + } + getKeys() { + const cacheKeys = []; + this.cache.forEach((value, key) => { + cacheKeys.push(key); + }); + return cacheKeys; + } + containsKey(key) { + return this.cache.has(key); + } + clear() { + this.cache.clear(); + } + decryptData() { + return Promise.resolve(null); + } +}; + +// node_modules/@azure/msal-browser/dist/cache/AsyncMemoryStorage.mjs +var AsyncMemoryStorage = class { + constructor(logger) { + this.inMemoryCache = new MemoryStorage(); + this.indexedDBCache = new DatabaseStorage(); + this.logger = logger; + } + handleDatabaseAccessError(error) { + if (error instanceof BrowserAuthError && error.errorCode === databaseUnavailable) { + this.logger.error("Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts."); + } else { + throw error; + } + } + /** + * Get the item matching the given key. Tries in-memory cache first, then in the asynchronous + * storage object if item isn't found in-memory. + * @param key + */ + async getItem(key) { + const item = this.inMemoryCache.getItem(key); + if (!item) { + try { + this.logger.verbose("Queried item not found in in-memory cache, now querying persistent storage."); + return await this.indexedDBCache.getItem(key); + } catch (e) { + this.handleDatabaseAccessError(e); + } + } + return item; + } + /** + * Sets the item in the in-memory cache and then tries to set it in the asynchronous + * storage object with the given key. + * @param key + * @param value + */ + async setItem(key, value) { + this.inMemoryCache.setItem(key, value); + try { + await this.indexedDBCache.setItem(key, value); + } catch (e) { + this.handleDatabaseAccessError(e); + } + } + /** + * Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object. + * @param key + */ + async removeItem(key) { + this.inMemoryCache.removeItem(key); + try { + await this.indexedDBCache.removeItem(key); + } catch (e) { + this.handleDatabaseAccessError(e); + } + } + /** + * Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the + * asynchronous storage object. + */ + async getKeys() { + const cacheKeys = this.inMemoryCache.getKeys(); + if (cacheKeys.length === 0) { + try { + this.logger.verbose("In-memory cache is empty, now querying persistent storage."); + return await this.indexedDBCache.getKeys(); + } catch (e) { + this.handleDatabaseAccessError(e); + } + } + return cacheKeys; + } + /** + * Returns true or false if the given key is present in the cache. + * @param key + */ + async containsKey(key) { + const containsKey = this.inMemoryCache.containsKey(key); + if (!containsKey) { + try { + this.logger.verbose("Key not found in in-memory cache, now querying persistent storage."); + return await this.indexedDBCache.containsKey(key); + } catch (e) { + this.handleDatabaseAccessError(e); + } + } + return containsKey; + } + /** + * Clears in-memory Map + */ + clearInMemory() { + this.logger.verbose(`Deleting in-memory keystore`); + this.inMemoryCache.clear(); + this.logger.verbose(`In-memory keystore deleted`); + } + /** + * Tries to delete the IndexedDB database + * @returns + */ + async clearPersistent() { + try { + this.logger.verbose("Deleting persistent keystore"); + const dbDeleted = await this.indexedDBCache.deleteDatabase(); + if (dbDeleted) { + this.logger.verbose("Persistent keystore deleted"); + } + return dbDeleted; + } catch (e) { + this.handleDatabaseAccessError(e); + return false; + } + } +}; + +// node_modules/@azure/msal-browser/dist/crypto/CryptoOps.mjs +var CryptoOps = class _CryptoOps { + constructor(logger, performanceClient, skipValidateSubtleCrypto) { + this.logger = logger; + validateCryptoAvailable(skipValidateSubtleCrypto ?? false); + this.cache = new AsyncMemoryStorage(this.logger); + this.performanceClient = performanceClient; + } + /** + * Creates a new random GUID - used to populate state and nonce. + * @returns string (GUID) + */ + createNewGuid() { + return createNewGuid(); + } + /** + * Encodes input string to base64. + * @param input + */ + base64Encode(input) { + return base64Encode(input); + } + /** + * Decodes input string from base64. + * @param input + */ + base64Decode(input) { + return base64Decode(input); + } + /** + * Encodes input string to base64 URL safe string. + * @param input + */ + base64UrlEncode(input) { + return urlEncode(input); + } + /** + * Stringifies and base64Url encodes input public key + * @param inputKid + * @returns Base64Url encoded public key + */ + encodeKid(inputKid) { + return this.base64UrlEncode(JSON.stringify({ kid: inputKid })); + } + /** + * Generates a keypair, stores it and returns a thumbprint + * @param request + */ + async getPublicKeyThumbprint(request) { + var _a; + const publicKeyThumbMeasurement = (_a = this.performanceClient) == null ? void 0 : _a.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId); + const keyPair = await generateKeyPair(_CryptoOps.EXTRACTABLE, _CryptoOps.POP_KEY_USAGES); + const publicKeyJwk = await exportJwk(keyPair.publicKey); + const pubKeyThumprintObj = { + e: publicKeyJwk.e, + kty: publicKeyJwk.kty, + n: publicKeyJwk.n + }; + const publicJwkString = getSortedObjectString(pubKeyThumprintObj); + const publicJwkHash = await this.hashString(publicJwkString); + const privateKeyJwk = await exportJwk(keyPair.privateKey); + const unextractablePrivateKey = await importJwk(privateKeyJwk, false, ["sign"]); + await this.cache.setItem(publicJwkHash, { + privateKey: unextractablePrivateKey, + publicKey: keyPair.publicKey, + requestMethod: request.resourceRequestMethod, + requestUri: request.resourceRequestUri + }); + if (publicKeyThumbMeasurement) { + publicKeyThumbMeasurement.end({ + success: true + }); + } + return publicJwkHash; + } + /** + * Removes cryptographic keypair from key store matching the keyId passed in + * @param kid + */ + async removeTokenBindingKey(kid) { + await this.cache.removeItem(kid); + const keyFound = await this.cache.containsKey(kid); + if (keyFound) { + throw createClientAuthError(ClientAuthErrorCodes_exports.bindingKeyNotRemoved); + } + } + /** + * Removes all cryptographic keys from IndexedDB storage + */ + async clearKeystore() { + this.cache.clearInMemory(); + try { + await this.cache.clearPersistent(); + return true; + } catch (e) { + if (e instanceof Error) { + this.logger.error(`Clearing keystore failed with error: ${e.message}`); + } else { + this.logger.error("Clearing keystore failed with unknown error"); + } + return false; + } + } + /** + * Signs the given object as a jwt payload with private key retrieved by given kid. + * @param payload + * @param kid + */ + async signJwt(payload, kid, shrOptions, correlationId) { + var _a; + const signJwtMeasurement = (_a = this.performanceClient) == null ? void 0 : _a.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId); + const cachedKeyPair = await this.cache.getItem(kid); + if (!cachedKeyPair) { + throw createBrowserAuthError(cryptoKeyNotFound); + } + const publicKeyJwk = await exportJwk(cachedKeyPair.publicKey); + const publicKeyJwkString = getSortedObjectString(publicKeyJwk); + const encodedKeyIdThumbprint = urlEncode(JSON.stringify({ kid })); + const shrHeader = JoseHeader.getShrHeaderString({ + ...shrOptions == null ? void 0 : shrOptions.header, + alg: publicKeyJwk.alg, + kid: encodedKeyIdThumbprint + }); + const encodedShrHeader = urlEncode(shrHeader); + payload.cnf = { + jwk: JSON.parse(publicKeyJwkString) + }; + const encodedPayload = urlEncode(JSON.stringify(payload)); + const tokenString = `${encodedShrHeader}.${encodedPayload}`; + const encoder = new TextEncoder(); + const tokenBuffer = encoder.encode(tokenString); + const signatureBuffer = await sign(cachedKeyPair.privateKey, tokenBuffer); + const encodedSignature = urlEncodeArr(new Uint8Array(signatureBuffer)); + const signedJwt = `${tokenString}.${encodedSignature}`; + if (signJwtMeasurement) { + signJwtMeasurement.end({ + success: true + }); + } + return signedJwt; + } + /** + * Returns the SHA-256 hash of an input string + * @param plainText + */ + async hashString(plainText) { + return hashString(plainText); + } +}; +CryptoOps.POP_KEY_USAGES = ["sign", "verify"]; +CryptoOps.EXTRACTABLE = true; +function getSortedObjectString(obj) { + return JSON.stringify(obj, Object.keys(obj).sort()); +} + +// node_modules/@azure/msal-browser/dist/cache/CookieStorage.mjs +var COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1e3; +var SameSiteOptions = { + Lax: "Lax", + None: "None" +}; +var CookieStorage = class { + initialize() { + return Promise.resolve(); + } + getItem(key) { + const name3 = `${encodeURIComponent(key)}`; + const cookieList = document.cookie.split(";"); + for (let i = 0; i < cookieList.length; i++) { + const cookie = cookieList[i]; + const [key2, ...rest] = decodeURIComponent(cookie).trim().split("="); + const value = rest.join("="); + if (key2 === name3) { + return value; + } + } + return ""; + } + getUserData() { + throw createClientAuthError(ClientAuthErrorCodes_exports.methodNotImplemented); + } + setItem(key, value, cookieLifeDays, secure = true, sameSite = SameSiteOptions.Lax) { + let cookieStr = `${encodeURIComponent(key)}=${encodeURIComponent(value)};path=/;SameSite=${sameSite};`; + if (cookieLifeDays) { + const expireTime = getCookieExpirationTime(cookieLifeDays); + cookieStr += `expires=${expireTime};`; + } + if (secure || sameSite === SameSiteOptions.None) { + cookieStr += "Secure;"; + } + document.cookie = cookieStr; + } + async setUserData() { + return Promise.reject(createClientAuthError(ClientAuthErrorCodes_exports.methodNotImplemented)); + } + removeItem(key) { + this.setItem(key, "", -1); + } + getKeys() { + const cookieList = document.cookie.split(";"); + const keys = []; + cookieList.forEach((cookie) => { + const cookieParts = decodeURIComponent(cookie).trim().split("="); + keys.push(cookieParts[0]); + }); + return keys; + } + containsKey(key) { + return this.getKeys().includes(key); + } + decryptData() { + return Promise.resolve(null); + } +}; +function getCookieExpirationTime(cookieLifeDays) { + const today = /* @__PURE__ */ new Date(); + const expr = new Date(today.getTime() + cookieLifeDays * COOKIE_LIFE_MULTIPLIER); + return expr.toUTCString(); +} + +// node_modules/@azure/msal-browser/dist/cache/CacheHelpers.mjs +function getAccountKeys(storage, schemaVersion) { + const accountKeys = storage.getItem(getAccountKeysCacheKey(schemaVersion)); + if (accountKeys) { + return JSON.parse(accountKeys); + } + return []; +} +function getTokenKeys(clientId, storage, schemaVersion) { + const item = storage.getItem(getTokenKeysCacheKey(clientId, schemaVersion)); + if (item) { + const tokenKeys = JSON.parse(item); + if (tokenKeys && tokenKeys.hasOwnProperty("idToken") && tokenKeys.hasOwnProperty("accessToken") && tokenKeys.hasOwnProperty("refreshToken")) { + return tokenKeys; + } + } + return { + idToken: [], + accessToken: [], + refreshToken: [] + }; +} + +// node_modules/@azure/msal-browser/dist/cache/EncryptedData.mjs +function isEncrypted(data) { + return data.hasOwnProperty("id") && data.hasOwnProperty("nonce") && data.hasOwnProperty("data"); +} + +// node_modules/@azure/msal-browser/dist/cache/LocalStorage.mjs +var ENCRYPTION_KEY = "msal.cache.encryption"; +var BROADCAST_CHANNEL_NAME = "msal.broadcast.cache"; +var LocalStorage = class { + constructor(clientId, logger, performanceClient) { + if (!window.localStorage) { + throw createBrowserConfigurationAuthError(storageNotSupported); + } + this.memoryStorage = new MemoryStorage(); + this.initialized = false; + this.clientId = clientId; + this.logger = logger; + this.performanceClient = performanceClient; + this.broadcast = new BroadcastChannel(BROADCAST_CHANNEL_NAME); + } + async initialize(correlationId) { + const cookies = new CookieStorage(); + const cookieString = cookies.getItem(ENCRYPTION_KEY); + let parsedCookie = { key: "", id: "" }; + if (cookieString) { + try { + parsedCookie = JSON.parse(cookieString); + } catch (e) { + } + } + if (parsedCookie.key && parsedCookie.id) { + const baseKey = invoke(base64DecToArr, PerformanceEvents.Base64Decode, this.logger, this.performanceClient, correlationId)(parsedCookie.key); + this.encryptionCookie = { + id: parsedCookie.id, + key: await invokeAsync(generateHKDF, PerformanceEvents.GenerateHKDF, this.logger, this.performanceClient, correlationId)(baseKey) + }; + } else { + const id = createNewGuid(); + const baseKey = await invokeAsync(generateBaseKey, PerformanceEvents.GenerateBaseKey, this.logger, this.performanceClient, correlationId)(); + const keyStr = invoke(urlEncodeArr, PerformanceEvents.UrlEncodeArr, this.logger, this.performanceClient, correlationId)(new Uint8Array(baseKey)); + this.encryptionCookie = { + id, + key: await invokeAsync(generateHKDF, PerformanceEvents.GenerateHKDF, this.logger, this.performanceClient, correlationId)(baseKey) + }; + const cookieData = { + id, + key: keyStr + }; + cookies.setItem( + ENCRYPTION_KEY, + JSON.stringify(cookieData), + 0, + // Expiration - 0 means cookie will be cleared at the end of the browser session + true, + // Secure flag + SameSiteOptions.None + // SameSite must be None to support iframed apps + ); + } + await invokeAsync(this.importExistingCache.bind(this), PerformanceEvents.ImportExistingCache, this.logger, this.performanceClient, correlationId)(correlationId); + this.broadcast.addEventListener("message", this.updateCache.bind(this)); + this.initialized = true; + } + getItem(key) { + return window.localStorage.getItem(key); + } + getUserData(key) { + if (!this.initialized) { + throw createBrowserAuthError(uninitializedPublicClientApplication); + } + return this.memoryStorage.getItem(key); + } + async decryptData(key, data, correlationId) { + if (!this.initialized || !this.encryptionCookie) { + throw createBrowserAuthError(uninitializedPublicClientApplication); + } + if (data.id !== this.encryptionCookie.id) { + this.performanceClient.incrementFields({ encryptedCacheExpiredCount: 1 }, correlationId); + return null; + } + const decryptedData = await invokeAsync(decrypt, PerformanceEvents.Decrypt, this.logger, this.performanceClient, correlationId)(this.encryptionCookie.key, data.nonce, this.getContext(key), data.data); + if (!decryptedData) { + return null; + } + try { + return JSON.parse(decryptedData); + } catch (e) { + this.performanceClient.incrementFields({ encryptedCacheCorruptionCount: 1 }, correlationId); + return null; + } + } + setItem(key, value) { + window.localStorage.setItem(key, value); + } + async setUserData(key, value, correlationId, timestamp) { + if (!this.initialized || !this.encryptionCookie) { + throw createBrowserAuthError(uninitializedPublicClientApplication); + } + const { data, nonce } = await invokeAsync(encrypt, PerformanceEvents.Encrypt, this.logger, this.performanceClient, correlationId)(this.encryptionCookie.key, value, this.getContext(key)); + const encryptedData = { + id: this.encryptionCookie.id, + nonce, + data, + lastUpdatedAt: timestamp + }; + this.memoryStorage.setItem(key, value); + this.setItem(key, JSON.stringify(encryptedData)); + this.broadcast.postMessage({ + key, + value, + context: this.getContext(key) + }); + } + removeItem(key) { + if (this.memoryStorage.containsKey(key)) { + this.memoryStorage.removeItem(key); + this.broadcast.postMessage({ + key, + value: null, + context: this.getContext(key) + }); + } + window.localStorage.removeItem(key); + } + getKeys() { + return Object.keys(window.localStorage); + } + containsKey(key) { + return window.localStorage.hasOwnProperty(key); + } + /** + * Removes all known MSAL keys from the cache + */ + clear() { + this.memoryStorage.clear(); + const accountKeys = getAccountKeys(this); + accountKeys.forEach((key) => this.removeItem(key)); + const tokenKeys = getTokenKeys(this.clientId, this); + tokenKeys.idToken.forEach((key) => this.removeItem(key)); + tokenKeys.accessToken.forEach((key) => this.removeItem(key)); + tokenKeys.refreshToken.forEach((key) => this.removeItem(key)); + this.getKeys().forEach((cacheKey) => { + if (cacheKey.startsWith(PREFIX) || cacheKey.indexOf(this.clientId) !== -1) { + this.removeItem(cacheKey); + } + }); + } + /** + * Helper to decrypt all known MSAL keys in localStorage and save them to inMemory storage + * @returns + */ + async importExistingCache(correlationId) { + if (!this.encryptionCookie) { + return; + } + let accountKeys = getAccountKeys(this); + accountKeys = await this.importArray(accountKeys, correlationId); + if (accountKeys.length) { + this.setItem(getAccountKeysCacheKey(), JSON.stringify(accountKeys)); + } else { + this.removeItem(getAccountKeysCacheKey()); + } + const tokenKeys = getTokenKeys(this.clientId, this); + tokenKeys.idToken = await this.importArray(tokenKeys.idToken, correlationId); + tokenKeys.accessToken = await this.importArray(tokenKeys.accessToken, correlationId); + tokenKeys.refreshToken = await this.importArray(tokenKeys.refreshToken, correlationId); + if (tokenKeys.idToken.length || tokenKeys.accessToken.length || tokenKeys.refreshToken.length) { + this.setItem(getTokenKeysCacheKey(this.clientId), JSON.stringify(tokenKeys)); + } else { + this.removeItem(getTokenKeysCacheKey(this.clientId)); + } + } + /** + * Helper to decrypt and save cache entries + * @param key + * @returns + */ + async getItemFromEncryptedCache(key, correlationId) { + if (!this.encryptionCookie) { + return null; + } + const rawCache = this.getItem(key); + if (!rawCache) { + return null; + } + let encObj; + try { + encObj = JSON.parse(rawCache); + } catch (e) { + return null; + } + if (!isEncrypted(encObj)) { + this.performanceClient.incrementFields({ unencryptedCacheCount: 1 }, correlationId); + return encObj; + } + if (encObj.id !== this.encryptionCookie.id) { + this.performanceClient.incrementFields({ encryptedCacheExpiredCount: 1 }, correlationId); + return null; + } + return invokeAsync(decrypt, PerformanceEvents.Decrypt, this.logger, this.performanceClient, correlationId)(this.encryptionCookie.key, encObj.nonce, this.getContext(key), encObj.data); + } + /** + * Helper to decrypt and save an array of cache keys + * @param arr + * @returns Array of keys successfully imported + */ + async importArray(arr, correlationId) { + const importedArr = []; + const promiseArr = []; + arr.forEach((key) => { + const promise = this.getItemFromEncryptedCache(key, correlationId).then((value) => { + if (value) { + this.memoryStorage.setItem(key, value); + importedArr.push(key); + } else { + this.removeItem(key); + } + }); + promiseArr.push(promise); + }); + await Promise.all(promiseArr); + return importedArr; + } + /** + * Gets encryption context for a given cache entry. This is clientId for app specific entries, empty string for shared entries + * @param key + * @returns + */ + getContext(key) { + let context = ""; + if (key.includes(this.clientId)) { + context = this.clientId; + } + return context; + } + updateCache(event) { + this.logger.trace("Updating internal cache from broadcast event"); + const perfMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.LocalStorageUpdated); + perfMeasurement.add({ isBackground: true }); + const { key, value, context } = event.data; + if (!key) { + this.logger.error("Broadcast event missing key"); + perfMeasurement.end({ success: false, errorCode: "noKey" }); + return; + } + if (context && context !== this.clientId) { + this.logger.trace(`Ignoring broadcast event from clientId: ${context}`); + perfMeasurement.end({ + success: false, + errorCode: "contextMismatch" + }); + return; + } + if (!value) { + this.memoryStorage.removeItem(key); + this.logger.verbose("Removed item from internal cache"); + } else { + this.memoryStorage.setItem(key, value); + this.logger.verbose("Updated item in internal cache"); + } + perfMeasurement.end({ success: true }); + } +}; + +// node_modules/@azure/msal-browser/dist/cache/SessionStorage.mjs +var SessionStorage = class { + constructor() { + if (!window.sessionStorage) { + throw createBrowserConfigurationAuthError(storageNotSupported); + } + } + async initialize() { + } + getItem(key) { + return window.sessionStorage.getItem(key); + } + getUserData(key) { + return this.getItem(key); + } + setItem(key, value) { + window.sessionStorage.setItem(key, value); + } + async setUserData(key, value) { + this.setItem(key, value); + } + removeItem(key) { + window.sessionStorage.removeItem(key); + } + getKeys() { + return Object.keys(window.sessionStorage); + } + containsKey(key) { + return window.sessionStorage.hasOwnProperty(key); + } + decryptData() { + return Promise.resolve(null); + } +}; + +// node_modules/@azure/msal-browser/dist/event/EventType.mjs +var EventType = { + INITIALIZE_START: "msal:initializeStart", + INITIALIZE_END: "msal:initializeEnd", + ACCOUNT_ADDED: "msal:accountAdded", + ACCOUNT_REMOVED: "msal:accountRemoved", + ACTIVE_ACCOUNT_CHANGED: "msal:activeAccountChanged", + LOGIN_START: "msal:loginStart", + LOGIN_SUCCESS: "msal:loginSuccess", + LOGIN_FAILURE: "msal:loginFailure", + ACQUIRE_TOKEN_START: "msal:acquireTokenStart", + ACQUIRE_TOKEN_SUCCESS: "msal:acquireTokenSuccess", + ACQUIRE_TOKEN_FAILURE: "msal:acquireTokenFailure", + ACQUIRE_TOKEN_NETWORK_START: "msal:acquireTokenFromNetworkStart", + SSO_SILENT_START: "msal:ssoSilentStart", + SSO_SILENT_SUCCESS: "msal:ssoSilentSuccess", + SSO_SILENT_FAILURE: "msal:ssoSilentFailure", + ACQUIRE_TOKEN_BY_CODE_START: "msal:acquireTokenByCodeStart", + ACQUIRE_TOKEN_BY_CODE_SUCCESS: "msal:acquireTokenByCodeSuccess", + ACQUIRE_TOKEN_BY_CODE_FAILURE: "msal:acquireTokenByCodeFailure", + HANDLE_REDIRECT_START: "msal:handleRedirectStart", + HANDLE_REDIRECT_END: "msal:handleRedirectEnd", + POPUP_OPENED: "msal:popupOpened", + LOGOUT_START: "msal:logoutStart", + LOGOUT_SUCCESS: "msal:logoutSuccess", + LOGOUT_FAILURE: "msal:logoutFailure", + LOGOUT_END: "msal:logoutEnd", + RESTORE_FROM_BFCACHE: "msal:restoreFromBFCache", + BROKER_CONNECTION_ESTABLISHED: "msal:brokerConnectionEstablished" +}; + +// node_modules/@azure/msal-browser/dist/utils/Helpers.mjs +function removeElementFromArray(array, element) { + const index = array.indexOf(element); + if (index > -1) { + array.splice(index, 1); + } +} + +// node_modules/@azure/msal-browser/dist/cache/BrowserCacheManager.mjs +var BrowserCacheManager = class extends CacheManager { + constructor(clientId, cacheConfig, cryptoImpl, logger, performanceClient, eventHandler, staticAuthorityOptions) { + super(clientId, cryptoImpl, logger, performanceClient, staticAuthorityOptions); + this.cacheConfig = cacheConfig; + this.logger = logger; + this.internalStorage = new MemoryStorage(); + this.browserStorage = getStorageImplementation(clientId, cacheConfig.cacheLocation, logger, performanceClient); + this.temporaryCacheStorage = getStorageImplementation(clientId, cacheConfig.temporaryCacheLocation, logger, performanceClient); + this.cookieStorage = new CookieStorage(); + this.eventHandler = eventHandler; + } + async initialize(correlationId) { + this.performanceClient.addFields({ + cacheLocation: this.cacheConfig.cacheLocation, + cacheRetentionDays: this.cacheConfig.cacheRetentionDays + }, correlationId); + await this.browserStorage.initialize(correlationId); + await this.migrateExistingCache(correlationId); + this.trackVersionChanges(correlationId); + } + /** + * Migrates any existing cache data from previous versions of MSAL.js into the current cache structure. + */ + async migrateExistingCache(correlationId) { + const accountKeys0 = getAccountKeys(this.browserStorage, 0); + const tokenKeys0 = getTokenKeys(this.clientId, this.browserStorage, 0); + this.performanceClient.addFields({ + oldAccountCount: accountKeys0.length, + oldAccessCount: tokenKeys0.accessToken.length, + oldIdCount: tokenKeys0.idToken.length, + oldRefreshCount: tokenKeys0.refreshToken.length + }, correlationId); + const accountKeys1 = getAccountKeys(this.browserStorage, 1); + const tokenKeys1 = getTokenKeys(this.clientId, this.browserStorage, 1); + this.performanceClient.addFields({ + currAccountCount: accountKeys1.length, + currAccessCount: tokenKeys1.accessToken.length, + currIdCount: tokenKeys1.idToken.length, + currRefreshCount: tokenKeys1.refreshToken.length + }, correlationId); + await Promise.all([ + this.updateV0ToCurrent(ACCOUNT_SCHEMA_VERSION, accountKeys0, accountKeys1, correlationId), + this.updateV0ToCurrent(CREDENTIAL_SCHEMA_VERSION, tokenKeys0.idToken, tokenKeys1.idToken, correlationId), + this.updateV0ToCurrent(CREDENTIAL_SCHEMA_VERSION, tokenKeys0.accessToken, tokenKeys1.accessToken, correlationId), + this.updateV0ToCurrent(CREDENTIAL_SCHEMA_VERSION, tokenKeys0.refreshToken, tokenKeys1.refreshToken, correlationId) + ]); + if (accountKeys0.length > 0) { + this.browserStorage.setItem(getAccountKeysCacheKey(0), JSON.stringify(accountKeys0)); + } else { + this.browserStorage.removeItem(getAccountKeysCacheKey(0)); + } + if (accountKeys1.length > 0) { + this.browserStorage.setItem(getAccountKeysCacheKey(1), JSON.stringify(accountKeys1)); + } else { + this.browserStorage.removeItem(getAccountKeysCacheKey(1)); + } + this.setTokenKeys(tokenKeys0, correlationId, 0); + this.setTokenKeys(tokenKeys1, correlationId, 1); + } + async updateV0ToCurrent(currentSchema, v0Keys, v1Keys, correlationId) { + const upgradePromises = []; + for (const v0Key of [...v0Keys]) { + const rawV0Value = this.browserStorage.getItem(v0Key); + const parsedV0Value = this.validateAndParseJson(rawV0Value || ""); + if (!parsedV0Value) { + removeElementFromArray(v0Keys, v0Key); + continue; + } + if (!parsedV0Value.lastUpdatedAt) { + parsedV0Value.lastUpdatedAt = Date.now().toString(); + this.setItem(v0Key, JSON.stringify(parsedV0Value), correlationId); + } + const decryptedData = isEncrypted(parsedV0Value) ? await this.browserStorage.decryptData(v0Key, parsedV0Value, correlationId) : parsedV0Value; + let expirationTime; + if (decryptedData) { + if (CacheHelpers_exports.isAccessTokenEntity(decryptedData)) { + expirationTime = decryptedData.expiresOn; + } else if (CacheHelpers_exports.isRefreshTokenEntity(decryptedData)) { + expirationTime = decryptedData.expiresOn; + } + } + if (!decryptedData || TimeUtils_exports.isCacheExpired(parsedV0Value.lastUpdatedAt, this.cacheConfig.cacheRetentionDays) || expirationTime && TimeUtils_exports.isTokenExpired(expirationTime, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC)) { + this.browserStorage.removeItem(v0Key); + removeElementFromArray(v0Keys, v0Key); + this.performanceClient.incrementFields({ expiredCacheRemovedCount: 1 }, correlationId); + continue; + } + if (this.cacheConfig.cacheLocation !== BrowserCacheLocation.LocalStorage || isEncrypted(parsedV0Value)) { + const v1Key = `${PREFIX}.${currentSchema}${CACHE_KEY_SEPARATOR}${v0Key}`; + const rawV1Entry = this.browserStorage.getItem(v1Key); + if (!rawV1Entry) { + upgradePromises.push(this.setUserData(v1Key, JSON.stringify(decryptedData), correlationId, parsedV0Value.lastUpdatedAt).then(() => { + v1Keys.push(v1Key); + this.performanceClient.incrementFields({ upgradedCacheCount: 1 }, correlationId); + })); + continue; + } else { + const parsedV1Entry = this.validateAndParseJson(rawV1Entry); + if (Number(parsedV0Value.lastUpdatedAt) > Number(parsedV1Entry.lastUpdatedAt)) { + upgradePromises.push(this.setUserData(v1Key, JSON.stringify(decryptedData), correlationId, parsedV0Value.lastUpdatedAt).then(() => { + this.performanceClient.incrementFields({ updatedCacheFromV0Count: 1 }, correlationId); + })); + continue; + } + } + } + } + return Promise.all(upgradePromises); + } + /** + * Tracks upgrades and downgrades for telemetry and debugging purposes + */ + trackVersionChanges(correlationId) { + const previousVersion = this.browserStorage.getItem(VERSION_CACHE_KEY); + if (previousVersion) { + this.logger.info(`MSAL.js was last initialized by version: ${previousVersion}`); + this.performanceClient.addFields({ previousLibraryVersion: previousVersion }, correlationId); + } + if (previousVersion !== version2) { + this.setItem(VERSION_CACHE_KEY, version2, correlationId); + } + } + /** + * Parses passed value as JSON object, JSON.parse() will throw an error. + * @param input + */ + validateAndParseJson(jsonValue) { + if (!jsonValue) { + return null; + } + try { + const parsedJson = JSON.parse(jsonValue); + return parsedJson && typeof parsedJson === "object" ? parsedJson : null; + } catch (error) { + return null; + } + } + /** + * Helper to setItem in browser storage, with cleanup in case of quota errors + * @param key + * @param value + */ + setItem(key, value, correlationId) { + let tokenKeysV0Count = 0; + let accessTokenKeys = []; + const maxRetries = 20; + for (let i = 0; i <= maxRetries; i++) { + try { + this.browserStorage.setItem(key, value); + if (i > 0) { + if (i <= tokenKeysV0Count) { + this.removeAccessTokenKeys(accessTokenKeys.slice(0, i), correlationId, 0); + } else { + this.removeAccessTokenKeys(accessTokenKeys.slice(0, tokenKeysV0Count), correlationId, 0); + this.removeAccessTokenKeys(accessTokenKeys.slice(tokenKeysV0Count, i), correlationId); + } + } + break; + } catch (e) { + const cacheError = createCacheError(e); + if (cacheError.errorCode === CacheErrorCodes_exports.cacheQuotaExceeded && i < maxRetries) { + if (!accessTokenKeys.length) { + const tokenKeys0 = key === getTokenKeysCacheKey(this.clientId, 0) ? JSON.parse(value).accessToken : this.getTokenKeys(0).accessToken; + const tokenKeys1 = key === getTokenKeysCacheKey(this.clientId) ? JSON.parse(value).accessToken : this.getTokenKeys().accessToken; + accessTokenKeys = [...tokenKeys0, ...tokenKeys1]; + tokenKeysV0Count = tokenKeys0.length; + } + if (accessTokenKeys.length <= i) { + throw cacheError; + } + this.removeAccessToken( + accessTokenKeys[i], + correlationId, + false + // Don't save token keys yet, do it at the end + ); + } else { + throw cacheError; + } + } + } + } + /** + * Helper to setUserData in browser storage, with cleanup in case of quota errors + * @param key + * @param value + * @param correlationId + */ + async setUserData(key, value, correlationId, timestamp) { + let tokenKeysV0Count = 0; + let accessTokenKeys = []; + const maxRetries = 20; + for (let i = 0; i <= maxRetries; i++) { + try { + await invokeAsync(this.browserStorage.setUserData.bind(this.browserStorage), PerformanceEvents.SetUserData, this.logger, this.performanceClient)(key, value, correlationId, timestamp); + if (i > 0) { + if (i <= tokenKeysV0Count) { + this.removeAccessTokenKeys(accessTokenKeys.slice(0, i), correlationId, 0); + } else { + this.removeAccessTokenKeys(accessTokenKeys.slice(0, tokenKeysV0Count), correlationId, 0); + this.removeAccessTokenKeys(accessTokenKeys.slice(tokenKeysV0Count, i), correlationId); + } + } + break; + } catch (e) { + const cacheError = createCacheError(e); + if (cacheError.errorCode === CacheErrorCodes_exports.cacheQuotaExceeded && i < maxRetries) { + if (!accessTokenKeys.length) { + const tokenKeys0 = this.getTokenKeys(0).accessToken; + const tokenKeys1 = this.getTokenKeys().accessToken; + accessTokenKeys = [...tokenKeys0, ...tokenKeys1]; + tokenKeysV0Count = tokenKeys0.length; + } + if (accessTokenKeys.length <= i) { + throw cacheError; + } + this.removeAccessToken( + accessTokenKeys[i], + correlationId, + false + // Don't save token keys yet, do it at the end + ); + } else { + throw cacheError; + } + } + } + } + /** + * Reads account from cache, deserializes it into an account entity and returns it. + * If account is not found from the key, returns null and removes key from map. + * @param accountKey + * @returns + */ + getAccount(accountKey, correlationId) { + this.logger.trace("BrowserCacheManager.getAccount called"); + const serializedAccount = this.browserStorage.getUserData(accountKey); + if (!serializedAccount) { + this.removeAccountKeyFromMap(accountKey, correlationId); + return null; + } + const parsedAccount = this.validateAndParseJson(serializedAccount); + if (!parsedAccount || !AccountEntity.isAccountEntity(parsedAccount)) { + return null; + } + return CacheManager.toObject(new AccountEntity(), parsedAccount); + } + /** + * set account entity in the platform cache + * @param account + */ + async setAccount(account, correlationId) { + this.logger.trace("BrowserCacheManager.setAccount called"); + const key = this.generateAccountKey(account.getAccountInfo()); + const timestamp = Date.now().toString(); + account.lastUpdatedAt = timestamp; + await this.setUserData(key, JSON.stringify(account), correlationId, timestamp); + const wasAdded = this.addAccountKeyToMap(key, correlationId); + if (this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage && wasAdded) { + this.eventHandler.emitEvent(EventType.ACCOUNT_ADDED, void 0, account.getAccountInfo()); + } + } + /** + * Returns the array of account keys currently cached + * @returns + */ + getAccountKeys() { + return getAccountKeys(this.browserStorage); + } + /** + * Add a new account to the key map + * @param key + */ + addAccountKeyToMap(key, correlationId) { + this.logger.trace("BrowserCacheManager.addAccountKeyToMap called"); + this.logger.tracePii(`BrowserCacheManager.addAccountKeyToMap called with key: ${key}`); + const accountKeys = this.getAccountKeys(); + if (accountKeys.indexOf(key) === -1) { + accountKeys.push(key); + this.setItem(getAccountKeysCacheKey(), JSON.stringify(accountKeys), correlationId); + this.logger.verbose("BrowserCacheManager.addAccountKeyToMap account key added"); + return true; + } else { + this.logger.verbose("BrowserCacheManager.addAccountKeyToMap account key already exists in map"); + return false; + } + } + /** + * Remove an account from the key map + * @param key + */ + removeAccountKeyFromMap(key, correlationId) { + this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap called"); + this.logger.tracePii(`BrowserCacheManager.removeAccountKeyFromMap called with key: ${key}`); + const accountKeys = this.getAccountKeys(); + const removalIndex = accountKeys.indexOf(key); + if (removalIndex > -1) { + accountKeys.splice(removalIndex, 1); + if (accountKeys.length === 0) { + this.removeItem(getAccountKeysCacheKey()); + return; + } else { + this.setItem(getAccountKeysCacheKey(), JSON.stringify(accountKeys), correlationId); + } + this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap account key removed"); + } else { + this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap key not found in existing map"); + } + } + /** + * Extends inherited removeAccount function to include removal of the account key from the map + * @param key + */ + removeAccount(account, correlationId) { + const activeAccount = this.getActiveAccount(correlationId); + if ((activeAccount == null ? void 0 : activeAccount.homeAccountId) === account.homeAccountId && (activeAccount == null ? void 0 : activeAccount.environment) === account.environment) { + this.setActiveAccount(null, correlationId); + } + super.removeAccount(account, correlationId); + this.removeAccountKeyFromMap(this.generateAccountKey(account), correlationId); + this.browserStorage.getKeys().forEach((key) => { + if (key.includes(account.homeAccountId) && key.includes(account.environment)) { + this.browserStorage.removeItem(key); + } + }); + if (this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage) { + this.eventHandler.emitEvent(EventType.ACCOUNT_REMOVED, void 0, account); + } + } + /** + * Removes given idToken from the cache and from the key map + * @param key + */ + removeIdToken(key, correlationId) { + super.removeIdToken(key, correlationId); + const tokenKeys = this.getTokenKeys(); + const idRemoval = tokenKeys.idToken.indexOf(key); + if (idRemoval > -1) { + this.logger.info("idToken removed from tokenKeys map"); + tokenKeys.idToken.splice(idRemoval, 1); + this.setTokenKeys(tokenKeys, correlationId); + } + } + /** + * Removes given accessToken from the cache and from the key map + * @param key + */ + removeAccessToken(key, correlationId, updateTokenKeys = true) { + super.removeAccessToken(key, correlationId); + updateTokenKeys && this.removeAccessTokenKeys([key], correlationId); + } + /** + * Remove access token key from the key map + * @param key + * @param correlationId + * @param tokenKeys + */ + removeAccessTokenKeys(keys, correlationId, schemaVersion = CREDENTIAL_SCHEMA_VERSION) { + this.logger.trace("removeAccessTokenKey called"); + const tokenKeys = this.getTokenKeys(schemaVersion); + let keysRemoved = 0; + keys.forEach((key) => { + const accessRemoval = tokenKeys.accessToken.indexOf(key); + if (accessRemoval > -1) { + tokenKeys.accessToken.splice(accessRemoval, 1); + keysRemoved++; + } + }); + if (keysRemoved > 0) { + this.logger.info(`removed ${keysRemoved} accessToken keys from tokenKeys map`); + this.setTokenKeys(tokenKeys, correlationId, schemaVersion); + return; + } + } + /** + * Removes given refreshToken from the cache and from the key map + * @param key + */ + removeRefreshToken(key, correlationId) { + super.removeRefreshToken(key, correlationId); + const tokenKeys = this.getTokenKeys(); + const refreshRemoval = tokenKeys.refreshToken.indexOf(key); + if (refreshRemoval > -1) { + this.logger.info("refreshToken removed from tokenKeys map"); + tokenKeys.refreshToken.splice(refreshRemoval, 1); + this.setTokenKeys(tokenKeys, correlationId); + } + } + /** + * Gets the keys for the cached tokens associated with this clientId + * @returns + */ + getTokenKeys(schemaVersion = CREDENTIAL_SCHEMA_VERSION) { + return getTokenKeys(this.clientId, this.browserStorage, schemaVersion); + } + /** + * Stores the token keys in the cache + * @param tokenKeys + * @param correlationId + * @returns + */ + setTokenKeys(tokenKeys, correlationId, schemaVersion = CREDENTIAL_SCHEMA_VERSION) { + if (tokenKeys.idToken.length === 0 && tokenKeys.accessToken.length === 0 && tokenKeys.refreshToken.length === 0) { + this.removeItem(getTokenKeysCacheKey(this.clientId, schemaVersion)); + return; + } else { + this.setItem(getTokenKeysCacheKey(this.clientId, schemaVersion), JSON.stringify(tokenKeys), correlationId); + } + } + /** + * generates idToken entity from a string + * @param idTokenKey + */ + getIdTokenCredential(idTokenKey, correlationId) { + const value = this.browserStorage.getUserData(idTokenKey); + if (!value) { + this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit"); + this.removeIdToken(idTokenKey, correlationId); + return null; + } + const parsedIdToken = this.validateAndParseJson(value); + if (!parsedIdToken || !CacheHelpers_exports.isIdTokenEntity(parsedIdToken)) { + this.logger.trace("BrowserCacheManager.getIdTokenCredential: called, no cache hit"); + return null; + } + this.logger.trace("BrowserCacheManager.getIdTokenCredential: cache hit"); + return parsedIdToken; + } + /** + * set IdToken credential to the platform cache + * @param idToken + */ + async setIdTokenCredential(idToken, correlationId) { + this.logger.trace("BrowserCacheManager.setIdTokenCredential called"); + const idTokenKey = this.generateCredentialKey(idToken); + const timestamp = Date.now().toString(); + idToken.lastUpdatedAt = timestamp; + await this.setUserData(idTokenKey, JSON.stringify(idToken), correlationId, timestamp); + const tokenKeys = this.getTokenKeys(); + if (tokenKeys.idToken.indexOf(idTokenKey) === -1) { + this.logger.info("BrowserCacheManager: addTokenKey - idToken added to map"); + tokenKeys.idToken.push(idTokenKey); + this.setTokenKeys(tokenKeys, correlationId); + } + } + /** + * generates accessToken entity from a string + * @param key + */ + getAccessTokenCredential(accessTokenKey, correlationId) { + const value = this.browserStorage.getUserData(accessTokenKey); + if (!value) { + this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit"); + this.removeAccessTokenKeys([accessTokenKey], correlationId); + return null; + } + const parsedAccessToken = this.validateAndParseJson(value); + if (!parsedAccessToken || !CacheHelpers_exports.isAccessTokenEntity(parsedAccessToken)) { + this.logger.trace("BrowserCacheManager.getAccessTokenCredential: called, no cache hit"); + return null; + } + this.logger.trace("BrowserCacheManager.getAccessTokenCredential: cache hit"); + return parsedAccessToken; + } + /** + * set accessToken credential to the platform cache + * @param accessToken + */ + async setAccessTokenCredential(accessToken, correlationId) { + this.logger.trace("BrowserCacheManager.setAccessTokenCredential called"); + const accessTokenKey = this.generateCredentialKey(accessToken); + const timestamp = Date.now().toString(); + accessToken.lastUpdatedAt = timestamp; + await this.setUserData(accessTokenKey, JSON.stringify(accessToken), correlationId, timestamp); + const tokenKeys = this.getTokenKeys(); + const index = tokenKeys.accessToken.indexOf(accessTokenKey); + if (index !== -1) { + tokenKeys.accessToken.splice(index, 1); + } + this.logger.trace(`access token ${index === -1 ? "added to" : "updated in"} map`); + tokenKeys.accessToken.push(accessTokenKey); + this.setTokenKeys(tokenKeys, correlationId); + } + /** + * generates refreshToken entity from a string + * @param refreshTokenKey + */ + getRefreshTokenCredential(refreshTokenKey, correlationId) { + const value = this.browserStorage.getUserData(refreshTokenKey); + if (!value) { + this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit"); + this.removeRefreshToken(refreshTokenKey, correlationId); + return null; + } + const parsedRefreshToken = this.validateAndParseJson(value); + if (!parsedRefreshToken || !CacheHelpers_exports.isRefreshTokenEntity(parsedRefreshToken)) { + this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: called, no cache hit"); + return null; + } + this.logger.trace("BrowserCacheManager.getRefreshTokenCredential: cache hit"); + return parsedRefreshToken; + } + /** + * set refreshToken credential to the platform cache + * @param refreshToken + */ + async setRefreshTokenCredential(refreshToken, correlationId) { + this.logger.trace("BrowserCacheManager.setRefreshTokenCredential called"); + const refreshTokenKey = this.generateCredentialKey(refreshToken); + const timestamp = Date.now().toString(); + refreshToken.lastUpdatedAt = timestamp; + await this.setUserData(refreshTokenKey, JSON.stringify(refreshToken), correlationId, timestamp); + const tokenKeys = this.getTokenKeys(); + if (tokenKeys.refreshToken.indexOf(refreshTokenKey) === -1) { + this.logger.info("BrowserCacheManager: addTokenKey - refreshToken added to map"); + tokenKeys.refreshToken.push(refreshTokenKey); + this.setTokenKeys(tokenKeys, correlationId); + } + } + /** + * fetch appMetadata entity from the platform cache + * @param appMetadataKey + */ + getAppMetadata(appMetadataKey) { + const value = this.browserStorage.getItem(appMetadataKey); + if (!value) { + this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit"); + return null; + } + const parsedMetadata = this.validateAndParseJson(value); + if (!parsedMetadata || !CacheHelpers_exports.isAppMetadataEntity(appMetadataKey, parsedMetadata)) { + this.logger.trace("BrowserCacheManager.getAppMetadata: called, no cache hit"); + return null; + } + this.logger.trace("BrowserCacheManager.getAppMetadata: cache hit"); + return parsedMetadata; + } + /** + * set appMetadata entity to the platform cache + * @param appMetadata + */ + setAppMetadata(appMetadata, correlationId) { + this.logger.trace("BrowserCacheManager.setAppMetadata called"); + const appMetadataKey = CacheHelpers_exports.generateAppMetadataKey(appMetadata); + this.setItem(appMetadataKey, JSON.stringify(appMetadata), correlationId); + } + /** + * fetch server telemetry entity from the platform cache + * @param serverTelemetryKey + */ + getServerTelemetry(serverTelemetryKey) { + const value = this.browserStorage.getItem(serverTelemetryKey); + if (!value) { + this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit"); + return null; + } + const parsedEntity = this.validateAndParseJson(value); + if (!parsedEntity || !CacheHelpers_exports.isServerTelemetryEntity(serverTelemetryKey, parsedEntity)) { + this.logger.trace("BrowserCacheManager.getServerTelemetry: called, no cache hit"); + return null; + } + this.logger.trace("BrowserCacheManager.getServerTelemetry: cache hit"); + return parsedEntity; + } + /** + * set server telemetry entity to the platform cache + * @param serverTelemetryKey + * @param serverTelemetry + */ + setServerTelemetry(serverTelemetryKey, serverTelemetry, correlationId) { + this.logger.trace("BrowserCacheManager.setServerTelemetry called"); + this.setItem(serverTelemetryKey, JSON.stringify(serverTelemetry), correlationId); + } + /** + * + */ + getAuthorityMetadata(key) { + const value = this.internalStorage.getItem(key); + if (!value) { + this.logger.trace("BrowserCacheManager.getAuthorityMetadata: called, no cache hit"); + return null; + } + const parsedMetadata = this.validateAndParseJson(value); + if (parsedMetadata && CacheHelpers_exports.isAuthorityMetadataEntity(key, parsedMetadata)) { + this.logger.trace("BrowserCacheManager.getAuthorityMetadata: cache hit"); + return parsedMetadata; + } + return null; + } + /** + * + */ + getAuthorityMetadataKeys() { + const allKeys = this.internalStorage.getKeys(); + return allKeys.filter((key) => { + return this.isAuthorityMetadata(key); + }); + } + /** + * Sets wrapper metadata in memory + * @param wrapperSKU + * @param wrapperVersion + */ + setWrapperMetadata(wrapperSKU, wrapperVersion) { + this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_SKU, wrapperSKU); + this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_VER, wrapperVersion); + } + /** + * Returns wrapper metadata from in-memory storage + */ + getWrapperMetadata() { + const sku = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_SKU) || Constants.EMPTY_STRING; + const version3 = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_VER) || Constants.EMPTY_STRING; + return [sku, version3]; + } + /** + * + * @param entity + */ + setAuthorityMetadata(key, entity) { + this.logger.trace("BrowserCacheManager.setAuthorityMetadata called"); + this.internalStorage.setItem(key, JSON.stringify(entity)); + } + /** + * Gets the active account + */ + getActiveAccount(correlationId) { + const activeAccountKeyFilters = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS); + const activeAccountValueFilters = this.browserStorage.getItem(activeAccountKeyFilters); + if (!activeAccountValueFilters) { + this.logger.trace("BrowserCacheManager.getActiveAccount: No active account filters found"); + return null; + } + const activeAccountValueObj = this.validateAndParseJson(activeAccountValueFilters); + if (activeAccountValueObj) { + this.logger.trace("BrowserCacheManager.getActiveAccount: Active account filters schema found"); + return this.getAccountInfoFilteredBy({ + homeAccountId: activeAccountValueObj.homeAccountId, + localAccountId: activeAccountValueObj.localAccountId, + tenantId: activeAccountValueObj.tenantId + }, correlationId); + } + this.logger.trace("BrowserCacheManager.getActiveAccount: No active account found"); + return null; + } + /** + * Sets the active account's localAccountId in cache + * @param account + */ + setActiveAccount(account, correlationId) { + const activeAccountKey = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS); + if (account) { + this.logger.verbose("setActiveAccount: Active account set"); + const activeAccountValue = { + homeAccountId: account.homeAccountId, + localAccountId: account.localAccountId, + tenantId: account.tenantId, + lastUpdatedAt: TimeUtils_exports.nowSeconds().toString() + }; + this.setItem(activeAccountKey, JSON.stringify(activeAccountValue), correlationId); + } else { + this.logger.verbose("setActiveAccount: No account passed, active account not set"); + this.browserStorage.removeItem(activeAccountKey); + } + this.eventHandler.emitEvent(EventType.ACTIVE_ACCOUNT_CHANGED); + } + /** + * fetch throttling entity from the platform cache + * @param throttlingCacheKey + */ + getThrottlingCache(throttlingCacheKey) { + const value = this.browserStorage.getItem(throttlingCacheKey); + if (!value) { + this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit"); + return null; + } + const parsedThrottlingCache = this.validateAndParseJson(value); + if (!parsedThrottlingCache || !CacheHelpers_exports.isThrottlingEntity(throttlingCacheKey, parsedThrottlingCache)) { + this.logger.trace("BrowserCacheManager.getThrottlingCache: called, no cache hit"); + return null; + } + this.logger.trace("BrowserCacheManager.getThrottlingCache: cache hit"); + return parsedThrottlingCache; + } + /** + * set throttling entity to the platform cache + * @param throttlingCacheKey + * @param throttlingCache + */ + setThrottlingCache(throttlingCacheKey, throttlingCache, correlationId) { + this.logger.trace("BrowserCacheManager.setThrottlingCache called"); + this.setItem(throttlingCacheKey, JSON.stringify(throttlingCache), correlationId); + } + /** + * Gets cache item with given key. + * Will retrieve from cookies if storeAuthStateInCookie is set to true. + * @param key + */ + getTemporaryCache(cacheKey, generateKey) { + const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey; + if (this.cacheConfig.storeAuthStateInCookie) { + const itemCookie = this.cookieStorage.getItem(key); + if (itemCookie) { + this.logger.trace("BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies"); + return itemCookie; + } + } + const value = this.temporaryCacheStorage.getItem(key); + if (!value) { + if (this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage) { + const item = this.browserStorage.getItem(key); + if (item) { + this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage"); + return item; + } + } + this.logger.trace("BrowserCacheManager.getTemporaryCache: No cache item found in local storage"); + return null; + } + this.logger.trace("BrowserCacheManager.getTemporaryCache: Temporary cache item returned"); + return value; + } + /** + * Sets the cache item with the key and value given. + * Stores in cookie if storeAuthStateInCookie is set to true. + * This can cause cookie overflow if used incorrectly. + * @param key + * @param value + */ + setTemporaryCache(cacheKey, value, generateKey) { + const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey; + this.temporaryCacheStorage.setItem(key, value); + if (this.cacheConfig.storeAuthStateInCookie) { + this.logger.trace("BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie"); + this.cookieStorage.setItem(key, value, void 0, this.cacheConfig.secureCookies); + } + } + /** + * Removes the cache item with the given key. + * @param key + */ + removeItem(key) { + this.browserStorage.removeItem(key); + } + /** + * Removes the temporary cache item with the given key. + * Will also clear the cookie item if storeAuthStateInCookie is set to true. + * @param key + */ + removeTemporaryItem(key) { + this.temporaryCacheStorage.removeItem(key); + if (this.cacheConfig.storeAuthStateInCookie) { + this.logger.trace("BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie"); + this.cookieStorage.removeItem(key); + } + } + /** + * Gets all keys in window. + */ + getKeys() { + return this.browserStorage.getKeys(); + } + /** + * Clears all cache entries created by MSAL. + */ + clear(correlationId) { + this.removeAllAccounts(correlationId); + this.removeAppMetadata(correlationId); + this.temporaryCacheStorage.getKeys().forEach((cacheKey) => { + if (cacheKey.indexOf(PREFIX) !== -1 || cacheKey.indexOf(this.clientId) !== -1) { + this.removeTemporaryItem(cacheKey); + } + }); + this.browserStorage.getKeys().forEach((cacheKey) => { + if (cacheKey.indexOf(PREFIX) !== -1 || cacheKey.indexOf(this.clientId) !== -1) { + this.browserStorage.removeItem(cacheKey); + } + }); + this.internalStorage.clear(); + } + /** + * Clears all access tokes that have claims prior to saving the current one + * @param performanceClient {IPerformanceClient} + * @param correlationId {string} correlation id + * @returns + */ + clearTokensAndKeysWithClaims(correlationId) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.ClearTokensAndKeysWithClaims, correlationId); + const tokenKeys = this.getTokenKeys(); + let removedAccessTokens = 0; + tokenKeys.accessToken.forEach((key) => { + const credential = this.getAccessTokenCredential(key, correlationId); + if ((credential == null ? void 0 : credential.requestedClaimsHash) && key.includes(credential.requestedClaimsHash.toLowerCase())) { + this.removeAccessToken(key, correlationId); + removedAccessTokens++; + } + }); + if (removedAccessTokens > 0) { + this.logger.warning(`${removedAccessTokens} access tokens with claims in the cache keys have been removed from the cache.`); + } + } + /** + * Prepend msal. to each key + * @param key + * @param addInstanceId + */ + generateCacheKey(key) { + if (StringUtils.startsWith(key, PREFIX)) { + return key; + } + return `${PREFIX}.${this.clientId}.${key}`; + } + /** + * Cache Key: msal.-------- + * IdToken Example: uid.utid-login.microsoftonline.com-idtoken-app_client_id-contoso.com + * AccessToken Example: uid.utid-login.microsoftonline.com-accesstoken-app_client_id-contoso.com-scope1 scope2--pop + * RefreshToken Example: uid.utid-login.microsoftonline.com-refreshtoken-1-contoso.com + * @param credentialEntity + * @returns + */ + generateCredentialKey(credential) { + const familyId = credential.credentialType === CredentialType.REFRESH_TOKEN && credential.familyId || credential.clientId; + const scheme = credential.tokenType && credential.tokenType.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase() ? credential.tokenType.toLowerCase() : ""; + const credentialKey = [ + `${PREFIX}.${CREDENTIAL_SCHEMA_VERSION}`, + credential.homeAccountId, + credential.environment, + credential.credentialType, + familyId, + credential.realm || "", + credential.target || "", + credential.requestedClaimsHash || "", + scheme + ]; + return credentialKey.join(CACHE_KEY_SEPARATOR).toLowerCase(); + } + /** + * Cache Key: msal.... + * @param account + * @returns + */ + generateAccountKey(account) { + const homeTenantId = account.homeAccountId.split(".")[1]; + const accountKey = [ + `${PREFIX}.${ACCOUNT_SCHEMA_VERSION}`, + account.homeAccountId, + account.environment, + homeTenantId || account.tenantId || "" + ]; + return accountKey.join(CACHE_KEY_SEPARATOR).toLowerCase(); + } + /** + * Reset all temporary cache items + * @param state + */ + resetRequestCache() { + this.logger.trace("BrowserCacheManager.resetRequestCache called"); + this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS)); + this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.VERIFIER)); + this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI)); + this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.URL_HASH)); + this.removeTemporaryItem(this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST)); + this.setInteractionInProgress(false); + } + cacheAuthorizeRequest(authCodeRequest, codeVerifier) { + this.logger.trace("BrowserCacheManager.cacheAuthorizeRequest called"); + const encodedValue = base64Encode(JSON.stringify(authCodeRequest)); + this.setTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, encodedValue, true); + if (codeVerifier) { + const encodedVerifier = base64Encode(codeVerifier); + this.setTemporaryCache(TemporaryCacheKeys.VERIFIER, encodedVerifier, true); + } + } + /** + * Gets the token exchange parameters from the cache. Throws an error if nothing is found. + */ + getCachedRequest() { + this.logger.trace("BrowserCacheManager.getCachedRequest called"); + const encodedTokenRequest = this.getTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, true); + if (!encodedTokenRequest) { + throw createBrowserAuthError(noTokenRequestCacheError); + } + const encodedVerifier = this.getTemporaryCache(TemporaryCacheKeys.VERIFIER, true); + let parsedRequest; + let verifier = ""; + try { + parsedRequest = JSON.parse(base64Decode(encodedTokenRequest)); + if (encodedVerifier) { + verifier = base64Decode(encodedVerifier); + } + } catch (e) { + this.logger.errorPii(`Attempted to parse: ${encodedTokenRequest}`); + this.logger.error(`Parsing cached token request threw with error: ${e}`); + throw createBrowserAuthError(unableToParseTokenRequestCacheError); + } + return [parsedRequest, verifier]; + } + /** + * Gets cached native request for redirect flows + */ + getCachedNativeRequest() { + this.logger.trace("BrowserCacheManager.getCachedNativeRequest called"); + const cachedRequest = this.getTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, true); + if (!cachedRequest) { + this.logger.trace("BrowserCacheManager.getCachedNativeRequest: No cached native request found"); + return null; + } + const parsedRequest = this.validateAndParseJson(cachedRequest); + if (!parsedRequest) { + this.logger.error("BrowserCacheManager.getCachedNativeRequest: Unable to parse native request"); + return null; + } + return parsedRequest; + } + isInteractionInProgress(matchClientId) { + var _a; + const clientId = (_a = this.getInteractionInProgress()) == null ? void 0 : _a.clientId; + if (matchClientId) { + return clientId === this.clientId; + } else { + return !!clientId; + } + } + getInteractionInProgress() { + const key = `${PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`; + const value = this.getTemporaryCache(key, false); + try { + return value ? JSON.parse(value) : null; + } catch (e) { + this.logger.error(`Cannot parse interaction status. Removing temporary cache items and clearing url hash. Retrying interaction should fix the error`); + this.removeTemporaryItem(key); + this.resetRequestCache(); + clearHash(window); + return null; + } + } + setInteractionInProgress(inProgress, type = INTERACTION_TYPE.SIGNIN) { + var _a; + const key = `${PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`; + if (inProgress) { + if (this.getInteractionInProgress()) { + throw createBrowserAuthError(interactionInProgress); + } else { + this.setTemporaryCache(key, JSON.stringify({ clientId: this.clientId, type }), false); + } + } else if (!inProgress && ((_a = this.getInteractionInProgress()) == null ? void 0 : _a.clientId) === this.clientId) { + this.removeTemporaryItem(key); + } + } + /** + * Builds credential entities from AuthenticationResult object and saves the resulting credentials to the cache + * @param result + * @param request + */ + async hydrateCache(result, request) { + var _a, _b, _c; + const idTokenEntity = CacheHelpers_exports.createIdTokenEntity((_a = result.account) == null ? void 0 : _a.homeAccountId, (_b = result.account) == null ? void 0 : _b.environment, result.idToken, this.clientId, result.tenantId); + let claimsHash; + if (request.claims) { + claimsHash = await this.cryptoImpl.hashString(request.claims); + } + const accessTokenEntity = CacheHelpers_exports.createAccessTokenEntity( + (_c = result.account) == null ? void 0 : _c.homeAccountId, + result.account.environment, + result.accessToken, + this.clientId, + result.tenantId, + result.scopes.join(" "), + // Access token expiresOn stored in seconds, converting from AuthenticationResult expiresOn stored as Date + result.expiresOn ? TimeUtils_exports.toSecondsFromDate(result.expiresOn) : 0, + result.extExpiresOn ? TimeUtils_exports.toSecondsFromDate(result.extExpiresOn) : 0, + base64Decode, + void 0, + // refreshOn + result.tokenType, + void 0, + // userAssertionHash + request.sshKid, + request.claims, + claimsHash + ); + const cacheRecord = { + idToken: idTokenEntity, + accessToken: accessTokenEntity + }; + return this.saveCacheRecord(cacheRecord, result.correlationId); + } + /** + * saves a cache record + * @param cacheRecord {CacheRecord} + * @param storeInCache {?StoreInCache} + * @param correlationId {?string} correlation id + */ + async saveCacheRecord(cacheRecord, correlationId, storeInCache) { + try { + await super.saveCacheRecord(cacheRecord, correlationId, storeInCache); + } catch (e) { + if (e instanceof CacheError && this.performanceClient && correlationId) { + try { + const tokenKeys = this.getTokenKeys(); + this.performanceClient.addFields({ + cacheRtCount: tokenKeys.refreshToken.length, + cacheIdCount: tokenKeys.idToken.length, + cacheAtCount: tokenKeys.accessToken.length + }, correlationId); + } catch (e2) { + } + } + throw e; + } + } +}; +function getStorageImplementation(clientId, cacheLocation, logger, performanceClient) { + try { + switch (cacheLocation) { + case BrowserCacheLocation.LocalStorage: + return new LocalStorage(clientId, logger, performanceClient); + case BrowserCacheLocation.SessionStorage: + return new SessionStorage(); + case BrowserCacheLocation.MemoryStorage: + default: + break; + } + } catch (e) { + logger.error(e); + } + return new MemoryStorage(); +} +var DEFAULT_BROWSER_CACHE_MANAGER = (clientId, logger, performanceClient, eventHandler) => { + const cacheOptions = { + cacheLocation: BrowserCacheLocation.MemoryStorage, + cacheRetentionDays: 5, + temporaryCacheLocation: BrowserCacheLocation.MemoryStorage, + storeAuthStateInCookie: false, + secureCookies: false, + cacheMigrationEnabled: false, + claimsBasedCachingEnabled: false + }; + return new BrowserCacheManager(clientId, cacheOptions, DEFAULT_CRYPTO_IMPLEMENTATION, logger, performanceClient, eventHandler); +}; + +// node_modules/@azure/msal-browser/dist/cache/AccountManager.mjs +function getAllAccounts(logger, browserStorage, isInBrowser, correlationId, accountFilter) { + logger.verbose("getAllAccounts called"); + return isInBrowser ? browserStorage.getAllAccounts(accountFilter || {}, correlationId) : []; +} +function getAccount(accountFilter, logger, browserStorage, correlationId) { + logger.trace("getAccount called"); + if (Object.keys(accountFilter).length === 0) { + logger.warning("getAccount: No accountFilter provided"); + return null; + } + const account = browserStorage.getAccountInfoFilteredBy(accountFilter, correlationId); + if (account) { + logger.verbose("getAccount: Account matching provided filter found, returning"); + return account; + } else { + logger.verbose("getAccount: No matching account found, returning null"); + return null; + } +} +function getAccountByUsername(username, logger, browserStorage, correlationId) { + logger.trace("getAccountByUsername called"); + if (!username) { + logger.warning("getAccountByUsername: No username provided"); + return null; + } + const account = browserStorage.getAccountInfoFilteredBy({ + username + }, correlationId); + if (account) { + logger.verbose("getAccountByUsername: Account matching username found, returning"); + logger.verbosePii(`getAccountByUsername: Returning signed-in accounts matching username: ${username}`); + return account; + } else { + logger.verbose("getAccountByUsername: No matching account found, returning null"); + return null; + } +} +function getAccountByHomeId(homeAccountId, logger, browserStorage, correlationId) { + logger.trace("getAccountByHomeId called"); + if (!homeAccountId) { + logger.warning("getAccountByHomeId: No homeAccountId provided"); + return null; + } + const account = browserStorage.getAccountInfoFilteredBy({ + homeAccountId + }, correlationId); + if (account) { + logger.verbose("getAccountByHomeId: Account matching homeAccountId found, returning"); + logger.verbosePii(`getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${homeAccountId}`); + return account; + } else { + logger.verbose("getAccountByHomeId: No matching account found, returning null"); + return null; + } +} +function getAccountByLocalId(localAccountId, logger, browserStorage, correlationId) { + logger.trace("getAccountByLocalId called"); + if (!localAccountId) { + logger.warning("getAccountByLocalId: No localAccountId provided"); + return null; + } + const account = browserStorage.getAccountInfoFilteredBy({ + localAccountId + }, correlationId); + if (account) { + logger.verbose("getAccountByLocalId: Account matching localAccountId found, returning"); + logger.verbosePii(`getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${localAccountId}`); + return account; + } else { + logger.verbose("getAccountByLocalId: No matching account found, returning null"); + return null; + } +} +function setActiveAccount(account, browserStorage, correlationId) { + browserStorage.setActiveAccount(account, correlationId); +} +function getActiveAccount(browserStorage, correlationId) { + return browserStorage.getActiveAccount(correlationId); +} + +// node_modules/@azure/msal-browser/dist/event/EventHandler.mjs +var BROADCAST_CHANNEL_NAME2 = "msal.broadcast.event"; +var EventHandler = class { + constructor(logger) { + this.eventCallbacks = /* @__PURE__ */ new Map(); + this.logger = logger || new Logger({}); + if (typeof BroadcastChannel !== "undefined") { + this.broadcastChannel = new BroadcastChannel(BROADCAST_CHANNEL_NAME2); + } + this.invokeCrossTabCallbacks = this.invokeCrossTabCallbacks.bind(this); + } + /** + * Adds event callbacks to array + * @param callback - callback to be invoked when an event is raised + * @param eventTypes - list of events that this callback will be invoked for, if not provided callback will be invoked for all events + * @param callbackId - Identifier for the callback, used to locate and remove the callback when no longer required + */ + addEventCallback(callback, eventTypes, callbackId) { + if (typeof window !== "undefined") { + const id = callbackId || createGuid(); + if (this.eventCallbacks.has(id)) { + this.logger.error(`Event callback with id: ${id} is already registered. Please provide a unique id or remove the existing callback and try again.`); + return null; + } + this.eventCallbacks.set(id, [callback, eventTypes || []]); + this.logger.verbose(`Event callback registered with id: ${id}`); + return id; + } + return null; + } + /** + * Removes callback with provided id from callback array + * @param callbackId + */ + removeEventCallback(callbackId) { + this.eventCallbacks.delete(callbackId); + this.logger.verbose(`Event callback ${callbackId} removed.`); + } + /** + * Emits events by calling callback with event message + * @param eventType + * @param interactionType + * @param payload + * @param error + */ + emitEvent(eventType, interactionType, payload, error) { + var _a; + const message = { + eventType, + interactionType: interactionType || null, + payload: payload || null, + error: error || null, + timestamp: Date.now() + }; + switch (eventType) { + case EventType.ACCOUNT_ADDED: + case EventType.ACCOUNT_REMOVED: + case EventType.ACTIVE_ACCOUNT_CHANGED: + (_a = this.broadcastChannel) == null ? void 0 : _a.postMessage(message); + break; + default: + this.invokeCallbacks(message); + break; + } + } + /** + * Invoke registered callbacks + * @param message + */ + invokeCallbacks(message) { + this.eventCallbacks.forEach(([callback, eventTypes], callbackId) => { + if (eventTypes.length === 0 || eventTypes.includes(message.eventType)) { + this.logger.verbose(`Emitting event to callback ${callbackId}: ${message.eventType}`); + callback.apply(null, [message]); + } + }); + } + /** + * Wrapper around invokeCallbacks to handle broadcast events received from other tabs/instances + * @param event + */ + invokeCrossTabCallbacks(event) { + const message = event.data; + this.invokeCallbacks(message); + } + /** + * Listen for events broadcasted from other tabs/instances + */ + subscribeCrossTab() { + var _a; + (_a = this.broadcastChannel) == null ? void 0 : _a.addEventListener("message", this.invokeCrossTabCallbacks); + } + /** + * Unsubscribe from broadcast events + */ + unsubscribeCrossTab() { + var _a; + (_a = this.broadcastChannel) == null ? void 0 : _a.removeEventListener("message", this.invokeCrossTabCallbacks); + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_client/BaseInteractionClient.mjs +var BaseInteractionClient = class { + constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthProvider, correlationId) { + this.config = config; + this.browserStorage = storageImpl; + this.browserCrypto = browserCrypto; + this.networkClient = this.config.system.networkClient; + this.eventHandler = eventHandler; + this.navigationClient = navigationClient; + this.platformAuthProvider = platformAuthProvider; + this.correlationId = correlationId || createNewGuid(); + this.logger = logger.clone(BrowserConstants.MSAL_SKU, version2, this.correlationId); + this.performanceClient = performanceClient; + } + async clearCacheOnLogout(correlationId, account) { + if (account) { + try { + this.browserStorage.removeAccount(account, correlationId); + this.logger.verbose("Cleared cache items belonging to the account provided in the logout request."); + } catch (error) { + this.logger.error("Account provided in logout request was not found. Local cache unchanged."); + } + } else { + try { + this.logger.verbose("No account provided in logout request, clearing all cache items.", this.correlationId); + this.browserStorage.clear(correlationId); + await this.browserCrypto.clearKeystore(); + } catch (e) { + this.logger.error("Attempted to clear all MSAL cache items and failed. Local cache unchanged."); + } + } + } + /** + * + * Use to get the redirect uri configured in MSAL or null. + * @param requestRedirectUri + * @returns Redirect URL + * + */ + getRedirectUri(requestRedirectUri) { + this.logger.verbose("getRedirectUri called"); + const redirectUri = requestRedirectUri || this.config.auth.redirectUri; + return UrlString.getAbsoluteUrl(redirectUri, getCurrentUri()); + } + /** + * + * @param apiId + * @param correlationId + * @param forceRefresh + */ + initializeServerTelemetryManager(apiId, forceRefresh) { + this.logger.verbose("initializeServerTelemetryManager called"); + const telemetryPayload = { + clientId: this.config.auth.clientId, + correlationId: this.correlationId, + apiId, + forceRefresh: forceRefresh || false, + wrapperSKU: this.browserStorage.getWrapperMetadata()[0], + wrapperVer: this.browserStorage.getWrapperMetadata()[1] + }; + return new ServerTelemetryManager(telemetryPayload, this.browserStorage); + } + /** + * Used to get a discovered version of the default authority. + * @param params { + * requestAuthority?: string; + * requestAzureCloudOptions?: AzureCloudOptions; + * requestExtraQueryParameters?: StringDict; + * account?: AccountInfo; + * } + */ + async getDiscoveredAuthority(params) { + const { account } = params; + const instanceAwareEQ = params.requestExtraQueryParameters && params.requestExtraQueryParameters.hasOwnProperty("instance_aware") ? params.requestExtraQueryParameters["instance_aware"] : void 0; + this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId); + const authorityOptions = { + protocolMode: this.config.auth.protocolMode, + OIDCOptions: this.config.auth.OIDCOptions, + knownAuthorities: this.config.auth.knownAuthorities, + cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata, + authorityMetadata: this.config.auth.authorityMetadata, + skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache + }; + const resolvedAuthority = params.requestAuthority || this.config.auth.authority; + const resolvedInstanceAware = (instanceAwareEQ == null ? void 0 : instanceAwareEQ.length) ? instanceAwareEQ === "true" : this.config.auth.instanceAware; + const userAuthority = account && resolvedInstanceAware ? this.config.auth.authority.replace(UrlString.getDomainFromUrl(resolvedAuthority), account.environment) : resolvedAuthority; + const builtAuthority = Authority.generateAuthority(userAuthority, params.requestAzureCloudOptions || this.config.auth.azureCloudOptions); + const discoveredAuthority = await invokeAsync(AuthorityFactory_exports.createDiscoveredInstance, PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, this.logger, this.performanceClient, this.correlationId)(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger, this.correlationId, this.performanceClient); + if (account && !discoveredAuthority.isAlias(account.environment)) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.authorityMismatch); + } + return discoveredAuthority; + } +}; + +// node_modules/@azure/msal-browser/dist/request/RequestHelpers.mjs +async function initializeBaseRequest(request, config, performanceClient, logger) { + performanceClient.addQueueMeasurement(PerformanceEvents.InitializeBaseRequest, request.correlationId); + const authority = request.authority || config.auth.authority; + const scopes = [...request && request.scopes || []]; + const validatedRequest = { + ...request, + correlationId: request.correlationId, + authority, + scopes + }; + if (!validatedRequest.authenticationScheme) { + validatedRequest.authenticationScheme = AuthenticationScheme.BEARER; + logger.verbose(`Authentication Scheme wasn't explicitly set in request, defaulting to "Bearer" request`); + } else { + if (validatedRequest.authenticationScheme === AuthenticationScheme.SSH) { + if (!request.sshJwk) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.missingSshJwk); + } + if (!request.sshKid) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.missingSshKid); + } + } + logger.verbose(`Authentication Scheme set to "${validatedRequest.authenticationScheme}" as configured in Auth request`); + } + if (config.cache.claimsBasedCachingEnabled && request.claims && // Checks for empty stringified object "{}" which doesn't qualify as requested claims + !StringUtils.isEmptyObj(request.claims)) { + validatedRequest.requestedClaimsHash = await hashString(request.claims); + } + return validatedRequest; +} +async function initializeSilentRequest(request, account, config, performanceClient, logger) { + performanceClient.addQueueMeasurement(PerformanceEvents.InitializeSilentRequest, request.correlationId); + const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, logger, performanceClient, request.correlationId)(request, config, performanceClient, logger); + return { + ...request, + ...baseRequest, + account, + forceRefresh: request.forceRefresh || false + }; +} +function validateRequestMethod(interactionRequest, protocolMode) { + let httpMethod; + const requestMethod = interactionRequest.httpMethod; + if (protocolMode === ProtocolMode.EAR) { + httpMethod = requestMethod || HttpMethod.POST; + if (httpMethod !== HttpMethod.POST) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.invalidRequestMethodForEAR); + } + } else { + httpMethod = requestMethod || HttpMethod.GET; + } + if (interactionRequest.authorizePostBodyParameters && httpMethod !== HttpMethod.POST) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.invalidAuthorizePostBodyParameters); + } + return httpMethod; +} + +// node_modules/@azure/msal-browser/dist/interaction_client/StandardInteractionClient.mjs +var StandardInteractionClient = class extends BaseInteractionClient { + /** + * Initializer for the logout request. + * @param logoutRequest + */ + initializeLogoutRequest(logoutRequest) { + this.logger.verbose("initializeLogoutRequest called", logoutRequest == null ? void 0 : logoutRequest.correlationId); + const validLogoutRequest = { + correlationId: this.correlationId || createNewGuid(), + ...logoutRequest + }; + if (logoutRequest) { + if (!logoutRequest.logoutHint) { + if (logoutRequest.account) { + const logoutHint = this.getLogoutHintFromIdTokenClaims(logoutRequest.account); + if (logoutHint) { + this.logger.verbose("Setting logoutHint to login_hint ID Token Claim value for the account provided"); + validLogoutRequest.logoutHint = logoutHint; + } + } else { + this.logger.verbose("logoutHint was not set and account was not passed into logout request, logoutHint will not be set"); + } + } else { + this.logger.verbose("logoutHint has already been set in logoutRequest"); + } + } else { + this.logger.verbose("logoutHint will not be set since no logout request was configured"); + } + if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) { + if (logoutRequest && logoutRequest.postLogoutRedirectUri) { + this.logger.verbose("Setting postLogoutRedirectUri to uri set on logout request", validLogoutRequest.correlationId); + validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(logoutRequest.postLogoutRedirectUri, getCurrentUri()); + } else if (this.config.auth.postLogoutRedirectUri === null) { + this.logger.verbose("postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect", validLogoutRequest.correlationId); + } else if (this.config.auth.postLogoutRedirectUri) { + this.logger.verbose("Setting postLogoutRedirectUri to configured uri", validLogoutRequest.correlationId); + validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri, getCurrentUri()); + } else { + this.logger.verbose("Setting postLogoutRedirectUri to current page", validLogoutRequest.correlationId); + validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(getCurrentUri(), getCurrentUri()); + } + } else { + this.logger.verbose("postLogoutRedirectUri passed as null, not setting post logout redirect uri", validLogoutRequest.correlationId); + } + return validLogoutRequest; + } + /** + * Parses login_hint ID Token Claim out of AccountInfo object to be used as + * logout_hint in end session request. + * @param account + */ + getLogoutHintFromIdTokenClaims(account) { + const idTokenClaims = account.idTokenClaims; + if (idTokenClaims) { + if (idTokenClaims.login_hint) { + return idTokenClaims.login_hint; + } else { + this.logger.verbose("The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request"); + } + } else { + this.logger.verbose("The provided account does not contain ID Token Claims, logoutHint will not be added to logout request"); + } + return null; + } + /** + * Creates an Authorization Code Client with the given authority, or the default authority. + * @param params { + * serverTelemetryManager: ServerTelemetryManager; + * authorityUrl?: string; + * requestAzureCloudOptions?: AzureCloudOptions; + * requestExtraQueryParameters?: StringDict; + * account?: AccountInfo; + * } + */ + async createAuthCodeClient(params) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.correlationId); + const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)(params); + return new AuthorizationCodeClient(clientConfig, this.performanceClient); + } + /** + * Creates a Client Configuration object with the given request authority, or the default authority. + * @param params { + * serverTelemetryManager: ServerTelemetryManager; + * requestAuthority?: string; + * requestAzureCloudOptions?: AzureCloudOptions; + * requestExtraQueryParameters?: boolean; + * account?: AccountInfo; + * } + */ + async getClientConfiguration(params) { + const { serverTelemetryManager, requestAuthority, requestAzureCloudOptions, requestExtraQueryParameters, account } = params; + this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId); + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, this.correlationId)({ + requestAuthority, + requestAzureCloudOptions, + requestExtraQueryParameters, + account + }); + const logger = this.config.system.loggerOptions; + return { + authOptions: { + clientId: this.config.auth.clientId, + authority: discoveredAuthority, + clientCapabilities: this.config.auth.clientCapabilities, + redirectUri: this.config.auth.redirectUri + }, + systemOptions: { + tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds, + preventCorsPreflight: true + }, + loggerOptions: { + loggerCallback: logger.loggerCallback, + piiLoggingEnabled: logger.piiLoggingEnabled, + logLevel: logger.logLevel, + correlationId: this.correlationId + }, + cacheOptions: { + claimsBasedCachingEnabled: this.config.cache.claimsBasedCachingEnabled + }, + cryptoInterface: this.browserCrypto, + networkInterface: this.networkClient, + storageInterface: this.browserStorage, + serverTelemetryManager, + libraryInfo: { + sku: BrowserConstants.MSAL_SKU, + version: version2, + cpu: Constants.EMPTY_STRING, + os: Constants.EMPTY_STRING + }, + telemetry: this.config.telemetry + }; + } + /** + * Helper to initialize required request parameters for interactive APIs and ssoSilent() + * @param request + * @param interactionType + */ + async initializeAuthorizationRequest(request, interactionType) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.correlationId); + const redirectUri = this.getRedirectUri(request.redirectUri); + const browserState = { + interactionType + }; + const state = ProtocolUtils.setRequestState(this.browserCrypto, request && request.state || Constants.EMPTY_STRING, browserState); + const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, this.logger, this.performanceClient, this.correlationId)({ ...request, correlationId: this.correlationId }, this.config, this.performanceClient, this.logger); + const interactionRequest = { + ...baseRequest, + redirectUri, + state, + nonce: request.nonce || createNewGuid(), + responseMode: this.config.auth.OIDCOptions.serverResponseType + }; + const validatedRequest = { + ...interactionRequest, + httpMethod: validateRequestMethod(interactionRequest, this.config.auth.protocolMode) + }; + if (request.loginHint || request.sid) { + return validatedRequest; + } + const account = request.account || this.browserStorage.getActiveAccount(this.correlationId); + if (account) { + this.logger.verbose("Setting validated request account", this.correlationId); + this.logger.verbosePii(`Setting validated request account: ${account.homeAccountId}`, this.correlationId); + validatedRequest.account = account; + } + return validatedRequest; + } +}; + +// node_modules/@azure/msal-browser/dist/utils/BrowserProtocolUtils.mjs +function extractBrowserRequestState(browserCrypto, state) { + if (!state) { + return null; + } + try { + const requestStateObj = ProtocolUtils.parseRequestState(browserCrypto, state); + return requestStateObj.libraryState.meta; + } catch (e) { + throw createClientAuthError(ClientAuthErrorCodes_exports.invalidState); + } +} + +// node_modules/@azure/msal-browser/dist/response/ResponseHandler.mjs +function deserializeResponse(responseString, responseLocation, logger) { + const serverParams = UrlUtils_exports.getDeserializedResponse(responseString); + if (!serverParams) { + if (!UrlUtils_exports.stripLeadingHashOrQuery(responseString)) { + logger.error(`The request has returned to the redirectUri but a ${responseLocation} is not present. It's likely that the ${responseLocation} has been removed or the page has been redirected by code running on the redirectUri page.`); + throw createBrowserAuthError(hashEmptyError); + } else { + logger.error(`A ${responseLocation} is present in the iframe but it does not contain known properties. It's likely that the ${responseLocation} has been replaced by code running on the redirectUri page.`); + logger.errorPii(`The ${responseLocation} detected is: ${responseString}`); + throw createBrowserAuthError(hashDoesNotContainKnownProperties); + } + } + return serverParams; +} +function validateInteractionType(response, browserCrypto, interactionType) { + if (!response.state) { + throw createBrowserAuthError(noStateInHash); + } + const platformStateObj = extractBrowserRequestState(browserCrypto, response.state); + if (!platformStateObj) { + throw createBrowserAuthError(unableToParseState); + } + if (platformStateObj.interactionType !== interactionType) { + throw createBrowserAuthError(stateInteractionTypeMismatch); + } +} + +// node_modules/@azure/msal-browser/dist/interaction_handler/InteractionHandler.mjs +var InteractionHandler = class { + constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) { + this.authModule = authCodeModule; + this.browserStorage = storageImpl; + this.authCodeRequest = authCodeRequest; + this.logger = logger; + this.performanceClient = performanceClient; + } + /** + * Function to handle response parameters from hash. + * @param locationHash + */ + async handleCodeResponse(response, request) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponse, request.correlationId); + let authCodeResponse; + try { + authCodeResponse = Authorize_exports.getAuthorizationCodePayload(response, request.state); + } catch (e) { + if (e instanceof ServerError && e.subError === userCancelled) { + throw createBrowserAuthError(userCancelled); + } else { + throw e; + } + } + return invokeAsync(this.handleCodeResponseFromServer.bind(this), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)(authCodeResponse, request); + } + /** + * Process auth code response from AAD + * @param authCodeResponse + * @param state + * @param authority + * @param networkModule + * @returns + */ + async handleCodeResponseFromServer(authCodeResponse, request, validateNonce = true) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, request.correlationId); + this.logger.trace("InteractionHandler.handleCodeResponseFromServer called"); + this.authCodeRequest.code = authCodeResponse.code; + if (authCodeResponse.cloud_instance_host_name) { + await invokeAsync(this.authModule.updateAuthority.bind(this.authModule), PerformanceEvents.UpdateTokenEndpointAuthority, this.logger, this.performanceClient, request.correlationId)(authCodeResponse.cloud_instance_host_name, request.correlationId); + } + if (validateNonce) { + authCodeResponse.nonce = request.nonce || void 0; + } + authCodeResponse.state = request.state; + if (authCodeResponse.client_info) { + this.authCodeRequest.clientInfo = authCodeResponse.client_info; + } else { + const ccsCred = this.createCcsCredentials(request); + if (ccsCred) { + this.authCodeRequest.ccsCredential = ccsCred; + } + } + const tokenResponse = await invokeAsync(this.authModule.acquireToken.bind(this.authModule), PerformanceEvents.AuthClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(this.authCodeRequest, authCodeResponse); + return tokenResponse; + } + /** + * Build ccs creds if available + */ + createCcsCredentials(request) { + if (request.account) { + return { + credential: request.account.homeAccountId, + type: CcsCredentialType.HOME_ACCOUNT_ID + }; + } else if (request.loginHint) { + return { + credential: request.loginHint, + type: CcsCredentialType.UPN + }; + } + return null; + } +}; + +// node_modules/@azure/msal-browser/dist/error/NativeAuthErrorCodes.mjs +var contentError = "ContentError"; +var userSwitch = "user_switch"; + +// node_modules/@azure/msal-browser/dist/broker/nativeBroker/NativeStatusCodes.mjs +var USER_INTERACTION_REQUIRED = "USER_INTERACTION_REQUIRED"; +var USER_CANCEL = "USER_CANCEL"; +var NO_NETWORK = "NO_NETWORK"; +var PERSISTENT_ERROR = "PERSISTENT_ERROR"; +var DISABLED = "DISABLED"; +var ACCOUNT_UNAVAILABLE = "ACCOUNT_UNAVAILABLE"; +var UX_NOT_ALLOWED = "UX_NOT_ALLOWED"; + +// node_modules/@azure/msal-browser/dist/error/NativeAuthError.mjs +var INVALID_METHOD_ERROR = -2147186943; +var NativeAuthErrorMessages = { + [userSwitch]: "User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again." +}; +var NativeAuthError = class _NativeAuthError extends AuthError { + constructor(errorCode, description, ext) { + super(errorCode, description); + Object.setPrototypeOf(this, _NativeAuthError.prototype); + this.name = "NativeAuthError"; + this.ext = ext; + } +}; +function isFatalNativeAuthError(error) { + if (error.ext && error.ext.status && (error.ext.status === PERSISTENT_ERROR || error.ext.status === DISABLED)) { + return true; + } + if (error.ext && error.ext.error && error.ext.error === INVALID_METHOD_ERROR) { + return true; + } + switch (error.errorCode) { + case contentError: + return true; + default: + return false; + } +} +function createNativeAuthError(code, description, ext) { + if (ext && ext.status) { + switch (ext.status) { + case ACCOUNT_UNAVAILABLE: + return createInteractionRequiredAuthError(InteractionRequiredAuthErrorCodes_exports.nativeAccountUnavailable); + case USER_INTERACTION_REQUIRED: + return new InteractionRequiredAuthError(code, description); + case USER_CANCEL: + return createBrowserAuthError(userCancelled); + case NO_NETWORK: + return createBrowserAuthError(noNetworkConnectivity2); + case UX_NOT_ALLOWED: + return createInteractionRequiredAuthError(InteractionRequiredAuthErrorCodes_exports.uxNotAllowed); + } + } + return new NativeAuthError(code, NativeAuthErrorMessages[code] || description, ext); +} + +// node_modules/@azure/msal-browser/dist/interaction_client/SilentCacheClient.mjs +var SilentCacheClient = class extends StandardInteractionClient { + /** + * Returns unexpired tokens from the cache, if available + * @param silentRequest + */ + async acquireToken(silentRequest) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentCacheClientAcquireToken, silentRequest.correlationId); + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow); + const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)({ + serverTelemetryManager, + requestAuthority: silentRequest.authority, + requestAzureCloudOptions: silentRequest.azureCloudOptions, + account: silentRequest.account + }); + const silentAuthClient = new SilentFlowClient(clientConfig, this.performanceClient); + this.logger.verbose("Silent auth client created"); + try { + const response = await invokeAsync(silentAuthClient.acquireCachedToken.bind(silentAuthClient), PerformanceEvents.SilentFlowClientAcquireCachedToken, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest); + const authResponse = response[0]; + this.performanceClient.addFields({ + fromCache: true + }, silentRequest.correlationId); + return authResponse; + } catch (error) { + if (error instanceof BrowserAuthError && error.errorCode === cryptoKeyNotFound) { + this.logger.verbose("Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair."); + } + throw error; + } + } + /** + * API to silenty clear the browser cache. + * @param logoutRequest + */ + logout(logoutRequest) { + this.logger.verbose("logoutRedirect called"); + const validLogoutRequest = this.initializeLogoutRequest(logoutRequest); + return this.clearCacheOnLogout(validLogoutRequest.correlationId, validLogoutRequest == null ? void 0 : validLogoutRequest.account); + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_client/PlatformAuthInteractionClient.mjs +var PlatformAuthInteractionClient = class extends BaseInteractionClient { + constructor(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, provider, accountId, nativeStorageImpl, correlationId) { + super(config, browserStorage, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId); + this.apiId = apiId; + this.accountId = accountId; + this.platformAuthProvider = provider; + this.nativeStorageManager = nativeStorageImpl; + this.silentCacheClient = new SilentCacheClient(config, this.nativeStorageManager, browserCrypto, logger, eventHandler, navigationClient, performanceClient, provider, correlationId); + const extensionName = this.platformAuthProvider.getExtensionName(); + this.skus = ServerTelemetryManager.makeExtraSkuString({ + libraryName: BrowserConstants.MSAL_SKU, + libraryVersion: version2, + extensionName, + extensionVersion: this.platformAuthProvider.getExtensionVersion() + }); + } + /** + * Adds SKUs to request extra query parameters + * @param request {PlatformAuthRequest} + * @private + */ + addRequestSKUs(request) { + request.extraParameters = { + ...request.extraParameters, + [AADServerParamKeys_exports.X_CLIENT_EXTRA_SKU]: this.skus + }; + } + /** + * Acquire token from native platform via browser extension + * @param request + */ + async acquireToken(request, cacheLookupPolicy) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, request.correlationId); + this.logger.trace("NativeInteractionClient - acquireToken called."); + const nativeATMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.NativeInteractionClientAcquireToken, request.correlationId); + const reqTimestamp = TimeUtils_exports.nowSeconds(); + const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId); + try { + const nativeRequest = await this.initializeNativeRequest(request); + try { + const result = await this.acquireTokensFromCache(this.accountId, nativeRequest); + nativeATMeasurement.end({ + success: true, + isNativeBroker: false, + fromCache: true + }); + return result; + } catch (e) { + if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) { + this.logger.info("MSAL internal Cache does not contain tokens, return error as per cache policy"); + throw e; + } + this.logger.info("MSAL internal Cache does not contain tokens, proceed to make a native call"); + } + const validatedResponse = await this.platformAuthProvider.sendMessage(nativeRequest); + return await this.handleNativeResponse(validatedResponse, nativeRequest, reqTimestamp).then((result) => { + nativeATMeasurement.end({ + success: true, + isNativeBroker: true, + requestId: result.requestId + }); + serverTelemetryManager.clearNativeBrokerErrorCode(); + return result; + }).catch((error) => { + nativeATMeasurement.end({ + success: false, + errorCode: error.errorCode, + subErrorCode: error.subError, + isNativeBroker: true + }); + throw error; + }); + } catch (e) { + if (e instanceof NativeAuthError) { + serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode); + } + throw e; + } + } + /** + * Creates silent flow request + * @param request + * @param cachedAccount + * @returns CommonSilentFlowRequest + */ + createSilentCacheRequest(request, cachedAccount) { + return { + authority: request.authority, + correlationId: this.correlationId, + scopes: ScopeSet.fromString(request.scope).asArray(), + account: cachedAccount, + forceRefresh: false + }; + } + /** + * Fetches the tokens from the cache if un-expired + * @param nativeAccountId + * @param request + * @returns authenticationResult + */ + async acquireTokensFromCache(nativeAccountId, request) { + if (!nativeAccountId) { + this.logger.warning("NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided"); + throw createClientAuthError(ClientAuthErrorCodes_exports.noAccountFound); + } + const account = this.browserStorage.getBaseAccountInfo({ + nativeAccountId + }, this.correlationId); + if (!account) { + throw createClientAuthError(ClientAuthErrorCodes_exports.noAccountFound); + } + try { + const silentRequest = this.createSilentCacheRequest(request, account); + const result = await this.silentCacheClient.acquireToken(silentRequest); + const fullAccount = { + ...account, + idTokenClaims: result == null ? void 0 : result.idTokenClaims, + idToken: result == null ? void 0 : result.idToken + }; + return { + ...result, + account: fullAccount + }; + } catch (e) { + throw e; + } + } + /** + * Acquires a token from native platform then redirects to the redirectUri instead of returning the response + * @param {RedirectRequest} request + * @param {InProgressPerformanceEvent} rootMeasurement + */ + async acquireTokenRedirect(request, rootMeasurement) { + this.logger.trace("NativeInteractionClient - acquireTokenRedirect called."); + const { ...remainingParameters } = request; + delete remainingParameters.onRedirectNavigate; + const nativeRequest = await this.initializeNativeRequest(remainingParameters); + try { + await this.platformAuthProvider.sendMessage(nativeRequest); + } catch (e) { + if (e instanceof NativeAuthError) { + const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId); + serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode); + if (isFatalNativeAuthError(e)) { + throw e; + } + } + } + this.browserStorage.setTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, JSON.stringify(nativeRequest), true); + const navigationOptions = { + apiId: ApiId.acquireTokenRedirect, + timeout: this.config.system.redirectNavigationTimeout, + noHistory: false + }; + const redirectUri = this.config.auth.navigateToLoginRequestUrl ? window.location.href : this.getRedirectUri(request.redirectUri); + rootMeasurement.end({ success: true }); + await this.navigationClient.navigateExternal(redirectUri, navigationOptions); + } + /** + * If the previous page called native platform for a token using redirect APIs, send the same request again and return the response + * @param performanceClient {IPerformanceClient?} + * @param correlationId {string?} correlation identifier + */ + async handleRedirectPromise(performanceClient, correlationId) { + this.logger.trace("NativeInteractionClient - handleRedirectPromise called."); + if (!this.browserStorage.isInteractionInProgress(true)) { + this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null."); + return null; + } + const cachedRequest = this.browserStorage.getCachedNativeRequest(); + if (!cachedRequest) { + this.logger.verbose("NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null."); + if (performanceClient && correlationId) { + performanceClient == null ? void 0 : performanceClient.addFields({ errorCode: "no_cached_request" }, correlationId); + } + return null; + } + const { prompt, ...request } = cachedRequest; + if (prompt) { + this.logger.verbose("NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window."); + } + this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST)); + const reqTimestamp = TimeUtils_exports.nowSeconds(); + try { + this.logger.verbose("NativeInteractionClient - handleRedirectPromise sending message to native broker."); + const response = await this.platformAuthProvider.sendMessage(request); + const authResult = await this.handleNativeResponse(response, request, reqTimestamp); + const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId); + serverTelemetryManager.clearNativeBrokerErrorCode(); + return authResult; + } catch (e) { + throw e; + } + } + /** + * Logout from native platform via browser extension + * @param request + */ + logout() { + this.logger.trace("NativeInteractionClient - logout called."); + return Promise.reject("Logout not implemented yet"); + } + /** + * Transform response from native platform into AuthenticationResult object which will be returned to the end user + * @param response + * @param request + * @param reqTimestamp + */ + async handleNativeResponse(response, request, reqTimestamp) { + var _a, _b; + this.logger.trace("NativeInteractionClient - handleNativeResponse called."); + const idTokenClaims = AuthToken_exports.extractTokenClaims(response.id_token, base64Decode); + const homeAccountIdentifier = this.createHomeAccountIdentifier(response, idTokenClaims); + const cachedhomeAccountId = (_a = this.browserStorage.getAccountInfoFilteredBy({ + nativeAccountId: request.accountId + }, this.correlationId)) == null ? void 0 : _a.homeAccountId; + if (((_b = request.extraParameters) == null ? void 0 : _b.child_client_id) && response.account.id !== request.accountId) { + this.logger.info("handleNativeServerResponse: Double broker flow detected, ignoring accountId mismatch"); + } else if (homeAccountIdentifier !== cachedhomeAccountId && response.account.id !== request.accountId) { + throw createNativeAuthError(userSwitch); + } + const authority = await this.getDiscoveredAuthority({ + requestAuthority: request.authority + }); + const baseAccount = buildAccountToCache( + this.browserStorage, + authority, + homeAccountIdentifier, + base64Decode, + this.correlationId, + idTokenClaims, + response.client_info, + void 0, + // environment + idTokenClaims.tid, + void 0, + // auth code payload + response.account.id, + this.logger + ); + response.expires_in = Number(response.expires_in); + const result = await this.generateAuthenticationResult(response, request, idTokenClaims, baseAccount, authority.canonicalAuthority, reqTimestamp); + await this.cacheAccount(baseAccount, this.correlationId); + await this.cacheNativeTokens(response, request, homeAccountIdentifier, idTokenClaims, response.access_token, result.tenantId, reqTimestamp); + return result; + } + /** + * creates an homeAccountIdentifier for the account + * @param response + * @param idTokenObj + * @returns + */ + createHomeAccountIdentifier(response, idTokenClaims) { + const homeAccountIdentifier = AccountEntity.generateHomeAccountId(response.client_info || Constants.EMPTY_STRING, AuthorityType.Default, this.logger, this.browserCrypto, idTokenClaims); + return homeAccountIdentifier; + } + /** + * Helper to generate scopes + * @param response + * @param request + * @returns + */ + generateScopes(requestScopes, responseScopes) { + return responseScopes ? ScopeSet.fromString(responseScopes) : ScopeSet.fromString(requestScopes); + } + /** + * If PoP token is requesred, records the PoP token if returned from the WAM, else generates one in the browser + * @param request + * @param response + */ + async generatePopAccessToken(response, request) { + if (request.tokenType === AuthenticationScheme.POP && request.signPopToken) { + if (response.shr) { + this.logger.trace("handleNativeServerResponse: SHR is enabled in native layer"); + return response.shr; + } + const popTokenGenerator = new PopTokenGenerator(this.browserCrypto); + const shrParameters = { + resourceRequestMethod: request.resourceRequestMethod, + resourceRequestUri: request.resourceRequestUri, + shrClaims: request.shrClaims, + shrNonce: request.shrNonce + }; + if (!request.keyId) { + throw createClientAuthError(ClientAuthErrorCodes_exports.keyIdMissing); + } + return popTokenGenerator.signPopToken(response.access_token, request.keyId, shrParameters); + } else { + return response.access_token; + } + } + /** + * Generates authentication result + * @param response + * @param request + * @param idTokenObj + * @param accountEntity + * @param authority + * @param reqTimestamp + * @returns + */ + async generateAuthenticationResult(response, request, idTokenClaims, accountEntity, authority, reqTimestamp) { + const mats = this.addTelemetryFromNativeResponse(response.properties.MATS); + const responseScopes = this.generateScopes(request.scope, response.scope); + const accountProperties = response.account.properties || {}; + const uid = accountProperties["UID"] || idTokenClaims.oid || idTokenClaims.sub || Constants.EMPTY_STRING; + const tid = accountProperties["TenantId"] || idTokenClaims.tid || Constants.EMPTY_STRING; + const accountInfo = updateAccountTenantProfileData( + accountEntity.getAccountInfo(), + void 0, + // tenantProfile optional + idTokenClaims, + response.id_token + ); + if (accountInfo.nativeAccountId !== response.account.id) { + accountInfo.nativeAccountId = response.account.id; + } + const responseAccessToken = await this.generatePopAccessToken(response, request); + const tokenType = request.tokenType === AuthenticationScheme.POP ? AuthenticationScheme.POP : AuthenticationScheme.BEARER; + const result = { + authority, + uniqueId: uid, + tenantId: tid, + scopes: responseScopes.asArray(), + account: accountInfo, + idToken: response.id_token, + idTokenClaims, + accessToken: responseAccessToken, + fromCache: mats ? this.isResponseFromCache(mats) : false, + // Request timestamp and NativeResponse expires_in are in seconds, converting to Date for AuthenticationResult + expiresOn: TimeUtils_exports.toDateFromSeconds(reqTimestamp + response.expires_in), + tokenType, + correlationId: this.correlationId, + state: response.state, + fromNativeBroker: true + }; + return result; + } + /** + * cache the account entity in browser storage + * @param accountEntity + */ + async cacheAccount(accountEntity, correlationId) { + await this.browserStorage.setAccount(accountEntity, this.correlationId); + this.browserStorage.removeAccountContext(accountEntity.getAccountInfo(), correlationId); + } + /** + * Stores the access_token and id_token in inmemory storage + * @param response + * @param request + * @param homeAccountIdentifier + * @param idTokenObj + * @param responseAccessToken + * @param tenantId + * @param reqTimestamp + */ + cacheNativeTokens(response, request, homeAccountIdentifier, idTokenClaims, responseAccessToken, tenantId, reqTimestamp) { + const cachedIdToken = CacheHelpers_exports.createIdTokenEntity(homeAccountIdentifier, request.authority, response.id_token || "", request.clientId, idTokenClaims.tid || ""); + const expiresIn = request.tokenType === AuthenticationScheme.POP ? Constants.SHR_NONCE_VALIDITY : (typeof response.expires_in === "string" ? parseInt(response.expires_in, 10) : response.expires_in) || 0; + const tokenExpirationSeconds = reqTimestamp + expiresIn; + const responseScopes = this.generateScopes(response.scope, request.scope); + const cachedAccessToken = CacheHelpers_exports.createAccessTokenEntity(homeAccountIdentifier, request.authority, responseAccessToken, request.clientId, idTokenClaims.tid || tenantId, responseScopes.printScopes(), tokenExpirationSeconds, 0, base64Decode, void 0, request.tokenType, void 0, request.keyId); + const nativeCacheRecord = { + idToken: cachedIdToken, + accessToken: cachedAccessToken + }; + return this.nativeStorageManager.saveCacheRecord(nativeCacheRecord, this.correlationId, request.storeInCache); + } + getExpiresInValue(tokenType, expiresIn) { + return tokenType === AuthenticationScheme.POP ? Constants.SHR_NONCE_VALIDITY : (typeof expiresIn === "string" ? parseInt(expiresIn, 10) : expiresIn) || 0; + } + addTelemetryFromNativeResponse(matsResponse) { + const mats = this.getMATSFromResponse(matsResponse); + if (!mats) { + return null; + } + this.performanceClient.addFields({ + extensionId: this.platformAuthProvider.getExtensionId(), + extensionVersion: this.platformAuthProvider.getExtensionVersion(), + matsBrokerVersion: mats.broker_version, + matsAccountJoinOnStart: mats.account_join_on_start, + matsAccountJoinOnEnd: mats.account_join_on_end, + matsDeviceJoin: mats.device_join, + matsPromptBehavior: mats.prompt_behavior, + matsApiErrorCode: mats.api_error_code, + matsUiVisible: mats.ui_visible, + matsSilentCode: mats.silent_code, + matsSilentBiSubCode: mats.silent_bi_sub_code, + matsSilentMessage: mats.silent_message, + matsSilentStatus: mats.silent_status, + matsHttpStatus: mats.http_status, + matsHttpEventCount: mats.http_event_count + }, this.correlationId); + return mats; + } + /** + * Gets MATS telemetry from native response + * @param response + * @returns + */ + getMATSFromResponse(matsResponse) { + if (matsResponse) { + try { + return JSON.parse(matsResponse); + } catch (e) { + this.logger.error("NativeInteractionClient - Error parsing MATS telemetry, returning null instead"); + } + } + return null; + } + /** + * Returns whether or not response came from native cache + * @param response + * @returns + */ + isResponseFromCache(mats) { + if (typeof mats.is_cached === "undefined") { + this.logger.verbose("NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false."); + return false; + } + return !!mats.is_cached; + } + /** + * Translates developer provided request object into NativeRequest object + * @param request + */ + async initializeNativeRequest(request) { + this.logger.trace("NativeInteractionClient - initializeNativeRequest called"); + const canonicalAuthority = await this.getCanonicalAuthority(request); + const { scopes, ...remainingProperties } = request; + const scopeSet = new ScopeSet(scopes || []); + scopeSet.appendScopes(OIDC_DEFAULT_SCOPES); + const validatedRequest = { + ...remainingProperties, + accountId: this.accountId, + clientId: this.config.auth.clientId, + authority: canonicalAuthority.urlString, + scope: scopeSet.printScopes(), + redirectUri: this.getRedirectUri(request.redirectUri), + prompt: this.getPrompt(request.prompt), + correlationId: this.correlationId, + tokenType: request.authenticationScheme, + windowTitleSubstring: document.title, + extraParameters: { + ...request.extraQueryParameters, + ...request.tokenQueryParameters + }, + extendedExpiryToken: false, + keyId: request.popKid + }; + if (validatedRequest.signPopToken && !!request.popKid) { + throw createBrowserAuthError(invalidPopTokenRequest); + } + this.handleExtraBrokerParams(validatedRequest); + validatedRequest.extraParameters = validatedRequest.extraParameters || {}; + validatedRequest.extraParameters.telemetry = PlatformAuthConstants.MATS_TELEMETRY; + if (request.authenticationScheme === AuthenticationScheme.POP) { + const shrParameters = { + resourceRequestUri: request.resourceRequestUri, + resourceRequestMethod: request.resourceRequestMethod, + shrClaims: request.shrClaims, + shrNonce: request.shrNonce + }; + const popTokenGenerator = new PopTokenGenerator(this.browserCrypto); + let reqCnfData; + if (!validatedRequest.keyId) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, this.logger, this.performanceClient, request.correlationId)(shrParameters, this.logger); + reqCnfData = generatedReqCnfData.reqCnfString; + validatedRequest.keyId = generatedReqCnfData.kid; + validatedRequest.signPopToken = true; + } else { + reqCnfData = this.browserCrypto.base64UrlEncode(JSON.stringify({ kid: validatedRequest.keyId })); + validatedRequest.signPopToken = false; + } + validatedRequest.reqCnf = reqCnfData; + } + this.addRequestSKUs(validatedRequest); + return validatedRequest; + } + async getCanonicalAuthority(request) { + const requestAuthority = request.authority || this.config.auth.authority; + if (request.account) { + await this.getDiscoveredAuthority({ + requestAuthority, + requestAzureCloudOptions: request.azureCloudOptions, + account: request.account + }); + } + const canonicalAuthority = new UrlString(requestAuthority); + canonicalAuthority.validateAsUri(); + return canonicalAuthority; + } + getPrompt(prompt) { + switch (this.apiId) { + case ApiId.ssoSilent: + case ApiId.acquireTokenSilent_silentFlow: + this.logger.trace("initializeNativeRequest: silent request sets prompt to none"); + return PromptValue.NONE; + } + if (!prompt) { + this.logger.trace("initializeNativeRequest: prompt was not provided"); + return void 0; + } + switch (prompt) { + case PromptValue.NONE: + case PromptValue.CONSENT: + case PromptValue.LOGIN: + this.logger.trace("initializeNativeRequest: prompt is compatible with native flow"); + return prompt; + default: + this.logger.trace(`initializeNativeRequest: prompt = ${prompt} is not compatible with native flow`); + throw createBrowserAuthError(nativePromptNotSupported); + } + } + /** + * Handles extra broker request parameters + * @param request {PlatformAuthRequest} + * @private + */ + handleExtraBrokerParams(request) { + var _a; + const hasExtraBrokerParams = request.extraParameters && request.extraParameters.hasOwnProperty(AADServerParamKeys_exports.BROKER_CLIENT_ID) && request.extraParameters.hasOwnProperty(AADServerParamKeys_exports.BROKER_REDIRECT_URI) && request.extraParameters.hasOwnProperty(AADServerParamKeys_exports.CLIENT_ID); + if (!request.embeddedClientId && !hasExtraBrokerParams) { + return; + } + let child_client_id = ""; + const child_redirect_uri = request.redirectUri; + if (request.embeddedClientId) { + request.redirectUri = this.config.auth.redirectUri; + child_client_id = request.embeddedClientId; + } else if (request.extraParameters) { + request.redirectUri = request.extraParameters[AADServerParamKeys_exports.BROKER_REDIRECT_URI]; + child_client_id = request.extraParameters[AADServerParamKeys_exports.CLIENT_ID]; + } + request.extraParameters = { + child_client_id, + child_redirect_uri + }; + (_a = this.performanceClient) == null ? void 0 : _a.addFields({ + embeddedClientId: child_client_id, + embeddedRedirectUri: child_redirect_uri + }, request.correlationId); + } +}; + +// node_modules/@azure/msal-browser/dist/protocol/Authorize.mjs +async function getStandardParameters(config, authority, request, logger, performanceClient) { + const parameters = Authorize_exports.getStandardAuthorizeRequestParameters({ ...config.auth, authority }, request, logger, performanceClient); + RequestParameterBuilder_exports.addLibraryInfo(parameters, { + sku: BrowserConstants.MSAL_SKU, + version: version2, + os: "", + cpu: "" + }); + if (config.auth.protocolMode !== ProtocolMode.OIDC) { + RequestParameterBuilder_exports.addApplicationTelemetry(parameters, config.telemetry.application); + } + if (request.platformBroker) { + RequestParameterBuilder_exports.addNativeBroker(parameters); + if (request.authenticationScheme === AuthenticationScheme.POP) { + const cryptoOps = new CryptoOps(logger, performanceClient); + const popTokenGenerator = new PopTokenGenerator(cryptoOps); + let reqCnfData; + if (!request.popKid) { + const generatedReqCnfData = await invokeAsync(popTokenGenerator.generateCnf.bind(popTokenGenerator), PerformanceEvents.PopTokenGenerateCnf, logger, performanceClient, request.correlationId)(request, logger); + reqCnfData = generatedReqCnfData.reqCnfString; + } else { + reqCnfData = cryptoOps.encodeKid(request.popKid); + } + RequestParameterBuilder_exports.addPopToken(parameters, reqCnfData); + } + } + RequestParameterBuilder_exports.instrumentBrokerParams(parameters, request.correlationId, performanceClient); + return parameters; +} +async function getAuthCodeRequestUrl(config, authority, request, logger, performanceClient) { + if (!request.codeChallenge) { + throw createClientConfigurationError(ClientConfigurationErrorCodes_exports.pkceParamsMissing); + } + const parameters = await invokeAsync(getStandardParameters, PerformanceEvents.GetStandardParams, logger, performanceClient, request.correlationId)(config, authority, request, logger, performanceClient); + RequestParameterBuilder_exports.addResponseType(parameters, OAuthResponseType.CODE); + RequestParameterBuilder_exports.addCodeChallengeParams(parameters, request.codeChallenge, Constants.S256_CODE_CHALLENGE_METHOD); + RequestParameterBuilder_exports.addExtraQueryParameters(parameters, request.extraQueryParameters || {}); + return Authorize_exports.getAuthorizeUrl(authority, parameters, config.auth.encodeExtraQueryParams, request.extraQueryParameters); +} +async function getEARForm(frame, config, authority, request, logger, performanceClient) { + if (!request.earJwk) { + throw createBrowserAuthError(earJwkEmpty); + } + const parameters = await getStandardParameters(config, authority, request, logger, performanceClient); + RequestParameterBuilder_exports.addResponseType(parameters, OAuthResponseType.IDTOKEN_TOKEN_REFRESHTOKEN); + RequestParameterBuilder_exports.addEARParameters(parameters, request.earJwk); + const queryParams = /* @__PURE__ */ new Map(); + RequestParameterBuilder_exports.addExtraQueryParameters(queryParams, request.extraQueryParameters || {}); + const url = Authorize_exports.getAuthorizeUrl(authority, queryParams, config.auth.encodeExtraQueryParams, request.extraQueryParameters); + return createForm(frame, url, parameters); +} +async function getCodeForm(frame, config, authority, request, logger, performanceClient) { + const parameters = await getStandardParameters(config, authority, request, logger, performanceClient); + RequestParameterBuilder_exports.addResponseType(parameters, OAuthResponseType.CODE); + RequestParameterBuilder_exports.addCodeChallengeParams(parameters, request.codeChallenge, request.codeChallengeMethod || Constants.S256_CODE_CHALLENGE_METHOD); + RequestParameterBuilder_exports.addPostBodyParameters(parameters, request.authorizePostBodyParameters || {}); + const queryParams = /* @__PURE__ */ new Map(); + RequestParameterBuilder_exports.addExtraQueryParameters(queryParams, request.extraQueryParameters || {}); + const url = Authorize_exports.getAuthorizeUrl(authority, queryParams, config.auth.encodeExtraQueryParams, request.extraQueryParameters); + return createForm(frame, url, parameters); +} +function createForm(frame, authorizeUrl, parameters) { + const form = frame.createElement("form"); + form.method = "post"; + form.action = authorizeUrl; + parameters.forEach((value, key) => { + const param = frame.createElement("input"); + param.hidden = true; + param.name = key; + param.value = value; + form.appendChild(param); + }); + frame.body.appendChild(form); + return form; +} +async function handleResponsePlatformBroker(request, accountId, apiId, config, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider) { + logger.verbose("Account id found, calling WAM for token"); + if (!platformAuthProvider) { + throw createBrowserAuthError(nativeConnectionNotEstablished); + } + const browserCrypto = new CryptoOps(logger, performanceClient); + const nativeInteractionClient = new PlatformAuthInteractionClient(config, browserStorage, browserCrypto, logger, eventHandler, config.system.navigationClient, apiId, performanceClient, platformAuthProvider, accountId, nativeStorage, request.correlationId); + const { userRequestState } = ProtocolUtils.parseRequestState(browserCrypto, request.state); + return invokeAsync(nativeInteractionClient.acquireToken.bind(nativeInteractionClient), PerformanceEvents.NativeInteractionClientAcquireToken, logger, performanceClient, request.correlationId)({ + ...request, + state: userRequestState, + prompt: void 0 + // Server should handle the prompt, ideally native broker can do this part silently + }); +} +async function handleResponseCode(request, response, codeVerifier, apiId, config, authClient, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider) { + ThrottlingUtils.removeThrottle(browserStorage, config.auth.clientId, request); + if (response.accountId) { + return invokeAsync(handleResponsePlatformBroker, PerformanceEvents.HandleResponsePlatformBroker, logger, performanceClient, request.correlationId)(request, response.accountId, apiId, config, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider); + } + const authCodeRequest = { + ...request, + code: response.code || "", + codeVerifier + }; + const interactionHandler = new InteractionHandler(authClient, browserStorage, authCodeRequest, logger, performanceClient); + const result = await invokeAsync(interactionHandler.handleCodeResponse.bind(interactionHandler), PerformanceEvents.HandleCodeResponse, logger, performanceClient, request.correlationId)(response, request); + return result; +} +async function handleResponseEAR(request, response, apiId, config, authority, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider) { + ThrottlingUtils.removeThrottle(browserStorage, config.auth.clientId, request); + Authorize_exports.validateAuthorizationResponse(response, request.state); + if (!response.ear_jwe) { + throw createBrowserAuthError(earJweEmpty); + } + if (!request.earJwk) { + throw createBrowserAuthError(earJwkEmpty); + } + const decryptedData = JSON.parse(await invokeAsync(decryptEarResponse, PerformanceEvents.DecryptEarResponse, logger, performanceClient, request.correlationId)(request.earJwk, response.ear_jwe)); + if (decryptedData.accountId) { + return invokeAsync(handleResponsePlatformBroker, PerformanceEvents.HandleResponsePlatformBroker, logger, performanceClient, request.correlationId)(request, decryptedData.accountId, apiId, config, browserStorage, nativeStorage, eventHandler, logger, performanceClient, platformAuthProvider); + } + const responseHandler = new ResponseHandler(config.auth.clientId, browserStorage, new CryptoOps(logger, performanceClient), logger, null, null, performanceClient); + responseHandler.validateTokenResponse(decryptedData); + const additionalData = { + code: "", + state: request.state, + nonce: request.nonce, + client_info: decryptedData.client_info, + cloud_graph_host_name: decryptedData.cloud_graph_host_name, + cloud_instance_host_name: decryptedData.cloud_instance_host_name, + cloud_instance_name: decryptedData.cloud_instance_name, + msgraph_host: decryptedData.msgraph_host + }; + return await invokeAsync(responseHandler.handleServerTokenResponse.bind(responseHandler), PerformanceEvents.HandleServerTokenResponse, logger, performanceClient, request.correlationId)(decryptedData, authority, TimeUtils_exports.nowSeconds(), request, additionalData, void 0, void 0, void 0, void 0); +} + +// node_modules/@azure/msal-browser/dist/crypto/PkceGenerator.mjs +var RANDOM_BYTE_ARR_LENGTH = 32; +async function generatePkceCodes(performanceClient, logger, correlationId) { + performanceClient.addQueueMeasurement(PerformanceEvents.GeneratePkceCodes, correlationId); + const codeVerifier = invoke(generateCodeVerifier, PerformanceEvents.GenerateCodeVerifier, logger, performanceClient, correlationId)(performanceClient, logger, correlationId); + const codeChallenge = await invokeAsync(generateCodeChallengeFromVerifier, PerformanceEvents.GenerateCodeChallengeFromVerifier, logger, performanceClient, correlationId)(codeVerifier, performanceClient, logger, correlationId); + return { + verifier: codeVerifier, + challenge: codeChallenge + }; +} +function generateCodeVerifier(performanceClient, logger, correlationId) { + try { + const buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH); + invoke(getRandomValues, PerformanceEvents.GetRandomValues, logger, performanceClient, correlationId)(buffer); + const pkceCodeVerifierB64 = urlEncodeArr(buffer); + return pkceCodeVerifierB64; + } catch (e) { + throw createBrowserAuthError(pkceNotCreated); + } +} +async function generateCodeChallengeFromVerifier(pkceCodeVerifier, performanceClient, logger, correlationId) { + performanceClient.addQueueMeasurement(PerformanceEvents.GenerateCodeChallengeFromVerifier, correlationId); + try { + const pkceHashedCodeVerifier = await invokeAsync(sha256Digest, PerformanceEvents.Sha256Digest, logger, performanceClient, correlationId)(pkceCodeVerifier, performanceClient, correlationId); + return urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier)); + } catch (e) { + throw createBrowserAuthError(pkceNotCreated); + } +} + +// node_modules/@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthExtensionHandler.mjs +var PlatformAuthExtensionHandler = class _PlatformAuthExtensionHandler { + constructor(logger, handshakeTimeoutMs, performanceClient, extensionId) { + this.logger = logger; + this.handshakeTimeoutMs = handshakeTimeoutMs; + this.extensionId = extensionId; + this.resolvers = /* @__PURE__ */ new Map(); + this.handshakeResolvers = /* @__PURE__ */ new Map(); + this.messageChannel = new MessageChannel(); + this.windowListener = this.onWindowMessage.bind(this); + this.performanceClient = performanceClient; + this.handshakeEvent = performanceClient.startMeasurement(PerformanceEvents.NativeMessageHandlerHandshake); + this.platformAuthType = PlatformAuthConstants.PLATFORM_EXTENSION_PROVIDER; + } + /** + * Sends a given message to the extension and resolves with the extension response + * @param request + */ + async sendMessage(request) { + this.logger.trace(this.platformAuthType + " - sendMessage called."); + const messageBody = { + method: NativeExtensionMethod.GetToken, + request + }; + const req = { + channel: PlatformAuthConstants.CHANNEL_ID, + extensionId: this.extensionId, + responseId: createNewGuid(), + body: messageBody + }; + this.logger.trace(this.platformAuthType + " - Sending request to browser extension"); + this.logger.tracePii(this.platformAuthType + ` - Sending request to browser extension: ${JSON.stringify(req)}`); + this.messageChannel.port1.postMessage(req); + const response = await new Promise((resolve, reject) => { + this.resolvers.set(req.responseId, { resolve, reject }); + }); + const validatedResponse = this.validatePlatformBrokerResponse(response); + return validatedResponse; + } + /** + * Returns an instance of the MessageHandler that has successfully established a connection with an extension + * @param {Logger} logger + * @param {number} handshakeTimeoutMs + * @param {IPerformanceClient} performanceClient + * @param {ICrypto} crypto + */ + static async createProvider(logger, handshakeTimeoutMs, performanceClient) { + logger.trace("PlatformAuthExtensionHandler - createProvider called."); + try { + const preferredProvider = new _PlatformAuthExtensionHandler(logger, handshakeTimeoutMs, performanceClient, PlatformAuthConstants.PREFERRED_EXTENSION_ID); + await preferredProvider.sendHandshakeRequest(); + return preferredProvider; + } catch (e) { + const backupProvider = new _PlatformAuthExtensionHandler(logger, handshakeTimeoutMs, performanceClient); + await backupProvider.sendHandshakeRequest(); + return backupProvider; + } + } + /** + * Send handshake request helper. + */ + async sendHandshakeRequest() { + this.logger.trace(this.platformAuthType + " - sendHandshakeRequest called."); + window.addEventListener("message", this.windowListener, false); + const req = { + channel: PlatformAuthConstants.CHANNEL_ID, + extensionId: this.extensionId, + responseId: createNewGuid(), + body: { + method: NativeExtensionMethod.HandshakeRequest + } + }; + this.handshakeEvent.add({ + extensionId: this.extensionId, + extensionHandshakeTimeoutMs: this.handshakeTimeoutMs + }); + this.messageChannel.port1.onmessage = (event) => { + this.onChannelMessage(event); + }; + window.postMessage(req, window.origin, [this.messageChannel.port2]); + return new Promise((resolve, reject) => { + this.handshakeResolvers.set(req.responseId, { resolve, reject }); + this.timeoutId = window.setTimeout(() => { + window.removeEventListener("message", this.windowListener, false); + this.messageChannel.port1.close(); + this.messageChannel.port2.close(); + this.handshakeEvent.end({ + extensionHandshakeTimedOut: true, + success: false + }); + reject(createBrowserAuthError(nativeHandshakeTimeout)); + this.handshakeResolvers.delete(req.responseId); + }, this.handshakeTimeoutMs); + }); + } + /** + * Invoked when a message is posted to the window. If a handshake request is received it means the extension is not installed. + * @param event + */ + onWindowMessage(event) { + this.logger.trace(this.platformAuthType + " - onWindowMessage called"); + if (event.source !== window) { + return; + } + const request = event.data; + if (!request.channel || request.channel !== PlatformAuthConstants.CHANNEL_ID) { + return; + } + if (request.extensionId && request.extensionId !== this.extensionId) { + return; + } + if (request.body.method === NativeExtensionMethod.HandshakeRequest) { + const handshakeResolver = this.handshakeResolvers.get(request.responseId); + if (!handshakeResolver) { + this.logger.trace(this.platformAuthType + `.onWindowMessage - resolver can't be found for request ${request.responseId}`); + return; + } + this.logger.verbose(request.extensionId ? `Extension with id: ${request.extensionId} not installed` : "No extension installed"); + clearTimeout(this.timeoutId); + this.messageChannel.port1.close(); + this.messageChannel.port2.close(); + window.removeEventListener("message", this.windowListener, false); + this.handshakeEvent.end({ + success: false, + extensionInstalled: false + }); + handshakeResolver.reject(createBrowserAuthError(nativeExtensionNotInstalled)); + } + } + /** + * Invoked when a message is received from the extension on the MessageChannel port + * @param event + */ + onChannelMessage(event) { + this.logger.trace(this.platformAuthType + " - onChannelMessage called."); + const request = event.data; + const resolver = this.resolvers.get(request.responseId); + const handshakeResolver = this.handshakeResolvers.get(request.responseId); + try { + const method = request.body.method; + if (method === NativeExtensionMethod.Response) { + if (!resolver) { + return; + } + const response = request.body.response; + this.logger.trace(this.platformAuthType + " - Received response from browser extension"); + this.logger.tracePii(this.platformAuthType + ` - Received response from browser extension: ${JSON.stringify(response)}`); + if (response.status !== "Success") { + resolver.reject(createNativeAuthError(response.code, response.description, response.ext)); + } else if (response.result) { + if (response.result["code"] && response.result["description"]) { + resolver.reject(createNativeAuthError(response.result["code"], response.result["description"], response.result["ext"])); + } else { + resolver.resolve(response.result); + } + } else { + throw createAuthError(AuthErrorCodes_exports.unexpectedError, "Event does not contain result."); + } + this.resolvers.delete(request.responseId); + } else if (method === NativeExtensionMethod.HandshakeResponse) { + if (!handshakeResolver) { + this.logger.trace(this.platformAuthType + `.onChannelMessage - resolver can't be found for request ${request.responseId}`); + return; + } + clearTimeout(this.timeoutId); + window.removeEventListener("message", this.windowListener, false); + this.extensionId = request.extensionId; + this.extensionVersion = request.body.version; + this.logger.verbose(this.platformAuthType + ` - Received HandshakeResponse from extension: ${this.extensionId}`); + this.handshakeEvent.end({ + extensionInstalled: true, + success: true + }); + handshakeResolver.resolve(); + this.handshakeResolvers.delete(request.responseId); + } + } catch (err) { + this.logger.error("Error parsing response from WAM Extension"); + this.logger.errorPii(`Error parsing response from WAM Extension: ${err}`); + this.logger.errorPii(`Unable to parse ${event}`); + if (resolver) { + resolver.reject(err); + } else if (handshakeResolver) { + handshakeResolver.reject(err); + } + } + } + /** + * Validates native platform response before processing + * @param response + */ + validatePlatformBrokerResponse(response) { + if (response.hasOwnProperty("access_token") && response.hasOwnProperty("id_token") && response.hasOwnProperty("client_info") && response.hasOwnProperty("account") && response.hasOwnProperty("scope") && response.hasOwnProperty("expires_in")) { + return response; + } else { + throw createAuthError(AuthErrorCodes_exports.unexpectedError, "Response missing expected properties."); + } + } + /** + * Returns the Id for the browser extension this handler is communicating with + * @returns + */ + getExtensionId() { + return this.extensionId; + } + /** + * Returns the version for the browser extension this handler is communicating with + * @returns + */ + getExtensionVersion() { + return this.extensionVersion; + } + getExtensionName() { + var _a; + return this.getExtensionId() === PlatformAuthConstants.PREFERRED_EXTENSION_ID ? "chrome" : ((_a = this.getExtensionId()) == null ? void 0 : _a.length) ? "unknown" : void 0; + } +}; + +// node_modules/@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthDOMHandler.mjs +var PlatformAuthDOMHandler = class _PlatformAuthDOMHandler { + constructor(logger, performanceClient, correlationId) { + this.logger = logger; + this.performanceClient = performanceClient; + this.correlationId = correlationId; + this.platformAuthType = PlatformAuthConstants.PLATFORM_DOM_PROVIDER; + } + static async createProvider(logger, performanceClient, correlationId) { + var _a; + logger.trace("PlatformAuthDOMHandler: createProvider called"); + if ((_a = window.navigator) == null ? void 0 : _a.platformAuthentication) { + const supportedContracts = ( + // @ts-ignore + await window.navigator.platformAuthentication.getSupportedContracts(PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID) + ); + if (supportedContracts == null ? void 0 : supportedContracts.includes(PlatformAuthConstants.PLATFORM_DOM_APIS)) { + logger.trace("Platform auth api available in DOM"); + return new _PlatformAuthDOMHandler(logger, performanceClient, correlationId); + } + } + return void 0; + } + /** + * Returns the Id for the broker extension this handler is communicating with + * @returns + */ + getExtensionId() { + return PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID; + } + getExtensionVersion() { + return ""; + } + getExtensionName() { + return PlatformAuthConstants.DOM_API_NAME; + } + /** + * Send token request to platform broker via browser DOM API + * @param request + * @returns + */ + async sendMessage(request) { + this.logger.trace(this.platformAuthType + " - Sending request to browser DOM API"); + try { + const platformDOMRequest = this.initializePlatformDOMRequest(request); + const response = ( + // @ts-ignore + await window.navigator.platformAuthentication.executeGetToken(platformDOMRequest) + ); + return this.validatePlatformBrokerResponse(response); + } catch (e) { + this.logger.error(this.platformAuthType + " - executeGetToken DOM API error"); + throw e; + } + } + initializePlatformDOMRequest(request) { + this.logger.trace(this.platformAuthType + " - initializeNativeDOMRequest called"); + const { accountId, clientId, authority, scope, redirectUri, correlationId, state, storeInCache, embeddedClientId, extraParameters, ...remainingProperties } = request; + const validExtraParameters = this.getDOMExtraParams(remainingProperties); + const platformDOMRequest = { + accountId, + brokerId: this.getExtensionId(), + authority, + clientId, + correlationId: correlationId || this.correlationId, + extraParameters: { ...extraParameters, ...validExtraParameters }, + isSecurityTokenService: false, + redirectUri, + scope, + state, + storeInCache, + embeddedClientId + }; + return platformDOMRequest; + } + validatePlatformBrokerResponse(response) { + if (response.hasOwnProperty("isSuccess")) { + if (response.hasOwnProperty("accessToken") && response.hasOwnProperty("idToken") && response.hasOwnProperty("clientInfo") && response.hasOwnProperty("account") && response.hasOwnProperty("scopes") && response.hasOwnProperty("expiresIn")) { + this.logger.trace(this.platformAuthType + " - platform broker returned successful and valid response"); + return this.convertToPlatformBrokerResponse(response); + } else if (response.hasOwnProperty("error")) { + const errorResponse = response; + if (errorResponse.isSuccess === false && errorResponse.error && errorResponse.error.code) { + this.logger.trace(this.platformAuthType + " - platform broker returned error response"); + throw createNativeAuthError(errorResponse.error.code, errorResponse.error.description, { + error: parseInt(errorResponse.error.errorCode), + protocol_error: errorResponse.error.protocolError, + status: errorResponse.error.status, + properties: errorResponse.error.properties + }); + } + } + } + throw createAuthError(AuthErrorCodes_exports.unexpectedError, "Response missing expected properties."); + } + convertToPlatformBrokerResponse(response) { + this.logger.trace(this.platformAuthType + " - convertToNativeResponse called"); + const nativeResponse = { + access_token: response.accessToken, + id_token: response.idToken, + client_info: response.clientInfo, + account: response.account, + expires_in: response.expiresIn, + scope: response.scopes, + state: response.state || "", + properties: response.properties || {}, + extendedLifetimeToken: response.extendedLifetimeToken ?? false, + shr: response.proofOfPossessionPayload + }; + return nativeResponse; + } + getDOMExtraParams(extraParameters) { + const stringifiedParams = Object.entries(extraParameters).reduce((record, [key, value]) => { + record[key] = String(value); + return record; + }, {}); + const validExtraParams = { + ...stringifiedParams + }; + return validExtraParams; + } +}; + +// node_modules/@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthProvider.mjs +async function isPlatformBrokerAvailable(loggerOptions, perfClient, correlationId) { + const logger = new Logger(loggerOptions || {}, name2, version2); + logger.trace("isPlatformBrokerAvailable called"); + const performanceClient = perfClient || new StubPerformanceClient(); + if (typeof window === "undefined") { + logger.trace("Non-browser environment detected, returning false"); + return false; + } + return !!await getPlatformAuthProvider(logger, performanceClient, correlationId || createNewGuid()); +} +async function getPlatformAuthProvider(logger, performanceClient, correlationId, nativeBrokerHandshakeTimeout) { + logger.trace("getPlatformAuthProvider called", correlationId); + const enablePlatformBrokerDOMSupport = isDomEnabledForPlatformAuth(); + logger.trace("Has client allowed platform auth via DOM API: " + enablePlatformBrokerDOMSupport); + let platformAuthProvider; + try { + if (enablePlatformBrokerDOMSupport) { + platformAuthProvider = await PlatformAuthDOMHandler.createProvider(logger, performanceClient, correlationId); + } + if (!platformAuthProvider) { + logger.trace("Platform auth via DOM API not available, checking for extension"); + platformAuthProvider = await PlatformAuthExtensionHandler.createProvider(logger, nativeBrokerHandshakeTimeout || DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS, performanceClient); + } + } catch (e) { + logger.trace("Platform auth not available", e); + } + return platformAuthProvider; +} +function isDomEnabledForPlatformAuth() { + let sessionStorage; + try { + sessionStorage = window[BrowserCacheLocation.SessionStorage]; + return (sessionStorage == null ? void 0 : sessionStorage.getItem(PLATFORM_AUTH_DOM_SUPPORT)) === "true"; + } catch (e) { + return false; + } +} +function isPlatformAuthAllowed(config, logger, platformAuthProvider, authenticationScheme) { + logger.trace("isPlatformAuthAllowed called"); + if (!config.system.allowPlatformBroker) { + logger.trace("isPlatformAuthAllowed: allowPlatformBroker is not enabled, returning false"); + return false; + } + if (!platformAuthProvider) { + logger.trace("isPlatformAuthAllowed: Platform auth provider is not initialized, returning false"); + return false; + } + if (authenticationScheme) { + switch (authenticationScheme) { + case AuthenticationScheme.BEARER: + case AuthenticationScheme.POP: + logger.trace("isPlatformAuthAllowed: authenticationScheme is supported, returning true"); + return true; + default: + logger.trace("isPlatformAuthAllowed: authenticationScheme is not supported, returning false"); + return false; + } + } + return true; +} + +// node_modules/@azure/msal-browser/dist/interaction_client/PopupClient.mjs +var PopupClient = class extends StandardInteractionClient { + constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeStorageImpl, platformAuthHandler, correlationId) { + super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthHandler, correlationId); + this.unloadWindow = this.unloadWindow.bind(this); + this.nativeStorage = nativeStorageImpl; + this.eventHandler = eventHandler; + } + /** + * Acquires tokens by opening a popup window to the /authorize endpoint of the authority + * @param request + * @param pkceCodes + */ + acquireToken(request, pkceCodes) { + let popupParams = void 0; + try { + const popupName = this.generatePopupName(request.scopes || OIDC_DEFAULT_SCOPES, request.authority || this.config.auth.authority); + popupParams = { + popupName, + popupWindowAttributes: request.popupWindowAttributes || {}, + popupWindowParent: request.popupWindowParent ?? window + }; + this.performanceClient.addFields({ isAsyncPopup: this.config.system.asyncPopups }, this.correlationId); + if (this.config.system.asyncPopups) { + this.logger.verbose("asyncPopups set to true, acquiring token"); + return this.acquireTokenPopupAsync(request, popupParams, pkceCodes); + } else { + const validatedRequest = { + ...request, + httpMethod: validateRequestMethod(request, this.config.auth.protocolMode) + }; + this.logger.verbose("asyncPopup set to false, opening popup before acquiring token"); + popupParams.popup = this.openSizedPopup("about:blank", popupParams); + return this.acquireTokenPopupAsync(validatedRequest, popupParams, pkceCodes); + } + } catch (e) { + return Promise.reject(e); + } + } + /** + * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server + * @param logoutRequest + */ + logout(logoutRequest) { + try { + this.logger.verbose("logoutPopup called"); + const validLogoutRequest = this.initializeLogoutRequest(logoutRequest); + const popupParams = { + popupName: this.generateLogoutPopupName(validLogoutRequest), + popupWindowAttributes: (logoutRequest == null ? void 0 : logoutRequest.popupWindowAttributes) || {}, + popupWindowParent: (logoutRequest == null ? void 0 : logoutRequest.popupWindowParent) ?? window + }; + const authority = logoutRequest && logoutRequest.authority; + const mainWindowRedirectUri = logoutRequest && logoutRequest.mainWindowRedirectUri; + if (this.config.system.asyncPopups) { + this.logger.verbose("asyncPopups set to true"); + return this.logoutPopupAsync(validLogoutRequest, popupParams, authority, mainWindowRedirectUri); + } else { + this.logger.verbose("asyncPopup set to false, opening popup"); + popupParams.popup = this.openSizedPopup("about:blank", popupParams); + return this.logoutPopupAsync(validLogoutRequest, popupParams, authority, mainWindowRedirectUri); + } + } catch (e) { + return Promise.reject(e); + } + } + /** + * Helper which obtains an access_token for your API via opening a popup window in the user's browser + * @param request + * @param popupParams + * @param pkceCodes + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + async acquireTokenPopupAsync(request, popupParams, pkceCodes) { + this.logger.verbose("acquireTokenPopupAsync called"); + const validRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(request, InteractionType.Popup); + if (popupParams.popup) { + preconnect(validRequest.authority); + } + const isPlatformBroker = isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, request.authenticationScheme); + validRequest.platformBroker = isPlatformBroker; + if (this.config.auth.protocolMode === ProtocolMode.EAR) { + return this.executeEarFlow(validRequest, popupParams); + } else { + return this.executeCodeFlow(validRequest, popupParams, pkceCodes); + } + } + /** + * Executes auth code + PKCE flow + * @param request + * @param popupParams + * @param pkceCodes + * @returns + */ + async executeCodeFlow(request, popupParams, pkceCodes) { + var _a; + const correlationId = request.correlationId; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenPopup); + const pkce = pkceCodes || await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId); + const popupRequest = { + ...request, + codeChallenge: pkce.challenge + }; + try { + const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, correlationId)({ + serverTelemetryManager, + requestAuthority: popupRequest.authority, + requestAzureCloudOptions: popupRequest.azureCloudOptions, + requestExtraQueryParameters: popupRequest.extraQueryParameters, + account: popupRequest.account + }); + if (popupRequest.httpMethod === HttpMethod.POST) { + return await this.executeCodeFlowWithPost(popupRequest, popupParams, authClient, pkce.verifier); + } else { + const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, popupRequest, this.logger, this.performanceClient); + const popupWindow = this.initiateAuthRequest(navigateUrl, popupParams); + this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, { popupWindow }, null); + const responseString = await this.monitorPopupForHash(popupWindow, popupParams.popupWindowParent); + const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger); + return await invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(request, serverParams, pkce.verifier, ApiId.acquireTokenPopup, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } + } catch (e) { + (_a = popupParams.popup) == null ? void 0 : _a.close(); + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + throw e; + } + } + /** + * Executes EAR flow + * @param request + */ + async executeEarFlow(request, popupParams) { + const correlationId = request.correlationId; + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({ + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + const earJwk = await invokeAsync(generateEarKey, PerformanceEvents.GenerateEarKey, this.logger, this.performanceClient, correlationId)(); + const popupRequest = { + ...request, + earJwk + }; + const popupWindow = popupParams.popup || this.openPopup("about:blank", popupParams); + const form = await getEARForm(popupWindow.document, this.config, discoveredAuthority, popupRequest, this.logger, this.performanceClient); + form.submit(); + const responseString = await invokeAsync(this.monitorPopupForHash.bind(this), PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(popupWindow, popupParams.popupWindowParent); + const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger); + return invokeAsync(handleResponseEAR, PerformanceEvents.HandleResponseEar, this.logger, this.performanceClient, correlationId)(popupRequest, serverParams, ApiId.acquireTokenPopup, this.config, discoveredAuthority, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } + async executeCodeFlowWithPost(request, popupParams, authClient, pkceVerifier) { + const correlationId = request.correlationId; + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({ + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + const popupWindow = popupParams.popup || this.openPopup("about:blank", popupParams); + const form = await getCodeForm(popupWindow.document, this.config, discoveredAuthority, request, this.logger, this.performanceClient); + form.submit(); + const responseString = await invokeAsync(this.monitorPopupForHash.bind(this), PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(popupWindow, popupParams.popupWindowParent); + const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, this.correlationId)(responseString, this.config.auth.OIDCOptions.serverResponseType, this.logger); + return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(request, serverParams, pkceVerifier, ApiId.acquireTokenPopup, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } + /** + * + * @param validRequest + * @param popupName + * @param requestAuthority + * @param popup + * @param mainWindowRedirectUri + * @param popupWindowAttributes + */ + async logoutPopupAsync(validRequest, popupParams, requestAuthority, mainWindowRedirectUri) { + var _a, _b, _c; + this.logger.verbose("logoutPopupAsync called"); + this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Popup, validRequest); + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logoutPopup); + try { + await this.clearCacheOnLogout(this.correlationId, validRequest.account); + const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({ + serverTelemetryManager, + requestAuthority, + account: validRequest.account || void 0 + }); + try { + authClient.authority.endSessionEndpoint; + } catch { + if (((_a = validRequest.account) == null ? void 0 : _a.homeAccountId) && validRequest.postLogoutRedirectUri && authClient.authority.protocolMode === ProtocolMode.OIDC) { + this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest); + if (mainWindowRedirectUri) { + const navigationOptions = { + apiId: ApiId.logoutPopup, + timeout: this.config.system.redirectNavigationTimeout, + noHistory: false + }; + const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, getCurrentUri()); + await this.navigationClient.navigateInternal(absoluteUrl, navigationOptions); + } + (_b = popupParams.popup) == null ? void 0 : _b.close(); + return; + } + } + const logoutUri = authClient.getLogoutUri(validRequest); + this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Popup, validRequest); + const popupWindow = this.openPopup(logoutUri, popupParams); + this.eventHandler.emitEvent(EventType.POPUP_OPENED, InteractionType.Popup, { popupWindow }, null); + await this.monitorPopupForHash(popupWindow, popupParams.popupWindowParent).catch(() => { + }); + if (mainWindowRedirectUri) { + const navigationOptions = { + apiId: ApiId.logoutPopup, + timeout: this.config.system.redirectNavigationTimeout, + noHistory: false + }; + const absoluteUrl = UrlString.getAbsoluteUrl(mainWindowRedirectUri, getCurrentUri()); + this.logger.verbose("Redirecting main window to url specified in the request"); + this.logger.verbosePii(`Redirecting main window to: ${absoluteUrl}`); + await this.navigationClient.navigateInternal(absoluteUrl, navigationOptions); + } else { + this.logger.verbose("No main window navigation requested"); + } + } catch (e) { + (_c = popupParams.popup) == null ? void 0 : _c.close(); + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Popup, null, e); + this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup); + throw e; + } + this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Popup); + } + /** + * Opens a popup window with given request Url. + * @param requestUrl + */ + initiateAuthRequest(requestUrl, params) { + if (requestUrl) { + this.logger.infoPii(`Navigate to: ${requestUrl}`); + return this.openPopup(requestUrl, params); + } else { + this.logger.error("Navigate url is empty"); + throw createBrowserAuthError(emptyNavigateUri); + } + } + /** + * Monitors a window until it loads a url with the same origin. + * @param popupWindow - window that is being monitored + * @param timeout - timeout for processing hash once popup is redirected back to application + */ + monitorPopupForHash(popupWindow, popupWindowParent) { + return new Promise((resolve, reject) => { + this.logger.verbose("PopupHandler.monitorPopupForHash - polling started"); + const intervalId = setInterval(() => { + if (popupWindow.closed) { + this.logger.error("PopupHandler.monitorPopupForHash - window closed"); + clearInterval(intervalId); + reject(createBrowserAuthError(userCancelled)); + return; + } + let href = ""; + try { + href = popupWindow.location.href; + } catch (e) { + } + if (!href || href === "about:blank") { + return; + } + clearInterval(intervalId); + let responseString = ""; + const responseType = this.config.auth.OIDCOptions.serverResponseType; + if (popupWindow) { + if (responseType === ServerResponseType.QUERY) { + responseString = popupWindow.location.search; + } else { + responseString = popupWindow.location.hash; + } + } + this.logger.verbose("PopupHandler.monitorPopupForHash - popup window is on same origin as caller"); + resolve(responseString); + }, this.config.system.pollIntervalMilliseconds); + }).finally(() => { + this.cleanPopup(popupWindow, popupWindowParent); + }); + } + /** + * @hidden + * + * Configures popup window for login. + * + * @param urlNavigate + * @param title + * @param popUpWidth + * @param popUpHeight + * @param popupWindowAttributes + * @ignore + * @hidden + */ + openPopup(urlNavigate, popupParams) { + try { + let popupWindow; + if (popupParams.popup) { + popupWindow = popupParams.popup; + this.logger.verbosePii(`Navigating popup window to: ${urlNavigate}`); + popupWindow.location.assign(urlNavigate); + } else if (typeof popupParams.popup === "undefined") { + this.logger.verbosePii(`Opening popup window to: ${urlNavigate}`); + popupWindow = this.openSizedPopup(urlNavigate, popupParams); + } + if (!popupWindow) { + throw createBrowserAuthError(emptyWindowError); + } + if (popupWindow.focus) { + popupWindow.focus(); + } + this.currentWindow = popupWindow; + popupParams.popupWindowParent.addEventListener("beforeunload", this.unloadWindow); + return popupWindow; + } catch (e) { + this.logger.error("error opening popup " + e.message); + throw createBrowserAuthError(popupWindowError); + } + } + /** + * Helper function to set popup window dimensions and position + * @param urlNavigate + * @param popupName + * @param popupWindowAttributes + * @returns + */ + openSizedPopup(urlNavigate, { popupName, popupWindowAttributes, popupWindowParent }) { + var _a, _b, _c, _d; + const winLeft = popupWindowParent.screenLeft ? popupWindowParent.screenLeft : popupWindowParent.screenX; + const winTop = popupWindowParent.screenTop ? popupWindowParent.screenTop : popupWindowParent.screenY; + const winWidth = popupWindowParent.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; + const winHeight = popupWindowParent.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + let width = (_a = popupWindowAttributes.popupSize) == null ? void 0 : _a.width; + let height = (_b = popupWindowAttributes.popupSize) == null ? void 0 : _b.height; + let top = (_c = popupWindowAttributes.popupPosition) == null ? void 0 : _c.top; + let left = (_d = popupWindowAttributes.popupPosition) == null ? void 0 : _d.left; + if (!width || width < 0 || width > winWidth) { + this.logger.verbose("Default popup window width used. Window width not configured or invalid."); + width = BrowserConstants.POPUP_WIDTH; + } + if (!height || height < 0 || height > winHeight) { + this.logger.verbose("Default popup window height used. Window height not configured or invalid."); + height = BrowserConstants.POPUP_HEIGHT; + } + if (!top || top < 0 || top > winHeight) { + this.logger.verbose("Default popup window top position used. Window top not configured or invalid."); + top = Math.max(0, winHeight / 2 - BrowserConstants.POPUP_HEIGHT / 2 + winTop); + } + if (!left || left < 0 || left > winWidth) { + this.logger.verbose("Default popup window left position used. Window left not configured or invalid."); + left = Math.max(0, winWidth / 2 - BrowserConstants.POPUP_WIDTH / 2 + winLeft); + } + return popupWindowParent.open(urlNavigate, popupName, `width=${width}, height=${height}, top=${top}, left=${left}, scrollbars=yes`); + } + /** + * Event callback to unload main window. + */ + unloadWindow(e) { + if (this.currentWindow) { + this.currentWindow.close(); + } + e.preventDefault(); + } + /** + * Closes popup, removes any state vars created during popup calls. + * @param popupWindow + */ + cleanPopup(popupWindow, popupWindowParent) { + popupWindow.close(); + popupWindowParent.removeEventListener("beforeunload", this.unloadWindow); + } + /** + * Generates the name for the popup based on the client id and request + * @param clientId + * @param request + */ + generatePopupName(scopes, authority) { + return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${scopes.join("-")}.${authority}.${this.correlationId}`; + } + /** + * Generates the name for the popup based on the client id and request for logouts + * @param clientId + * @param request + */ + generateLogoutPopupName(request) { + const homeAccountId = request.account && request.account.homeAccountId; + return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${homeAccountId}.${this.correlationId}`; + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_client/RedirectClient.mjs +function getNavigationType() { + if (typeof window === "undefined" || typeof window.performance === "undefined" || typeof window.performance.getEntriesByType !== "function") { + return void 0; + } + const navigationEntries = window.performance.getEntriesByType("navigation"); + const navigation = navigationEntries.length ? navigationEntries[0] : void 0; + return navigation == null ? void 0 : navigation.type; +} +var RedirectClient = class extends StandardInteractionClient { + constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, nativeStorageImpl, platformAuthHandler, correlationId) { + super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthHandler, correlationId); + this.nativeStorage = nativeStorageImpl; + } + /** + * Redirects the page to the /authorize endpoint of the IDP + * @param request + */ + async acquireToken(request) { + const validRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, this.correlationId)(request, InteractionType.Redirect); + validRequest.platformBroker = isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, request.authenticationScheme); + const handleBackButton = (event) => { + if (event.persisted) { + this.logger.verbose("Page was restored from back/forward cache. Clearing temporary cache."); + this.browserStorage.resetRequestCache(); + this.eventHandler.emitEvent(EventType.RESTORE_FROM_BFCACHE, InteractionType.Redirect); + } + }; + const redirectStartPage = this.getRedirectStartPage(request.redirectStartPage); + this.logger.verbosePii(`Redirect start page: ${redirectStartPage}`); + this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, redirectStartPage, true); + window.addEventListener("pageshow", handleBackButton); + try { + if (this.config.auth.protocolMode === ProtocolMode.EAR) { + await this.executeEarFlow(validRequest); + } else { + await this.executeCodeFlow(validRequest, request.onRedirectNavigate); + } + } catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + } + window.removeEventListener("pageshow", handleBackButton); + throw e; + } + } + /** + * Executes auth code + PKCE flow + * @param request + * @returns + */ + async executeCodeFlow(request, onRedirectNavigate) { + const correlationId = request.correlationId; + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenRedirect); + const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId); + const redirectRequest = { + ...request, + codeChallenge: pkceCodes.challenge + }; + this.browserStorage.cacheAuthorizeRequest(redirectRequest, pkceCodes.verifier); + try { + if (redirectRequest.httpMethod === HttpMethod.POST) { + return await this.executeCodeFlowWithPost(redirectRequest); + } else { + const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({ + serverTelemetryManager, + requestAuthority: redirectRequest.authority, + requestAzureCloudOptions: redirectRequest.azureCloudOptions, + requestExtraQueryParameters: redirectRequest.extraQueryParameters, + account: redirectRequest.account + }); + const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, request.correlationId)(this.config, authClient.authority, redirectRequest, this.logger, this.performanceClient); + return await this.initiateAuthRequest(navigateUrl, onRedirectNavigate); + } + } catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + throw e; + } + } + /** + * Executes EAR flow + * @param request + */ + async executeEarFlow(request) { + const correlationId = request.correlationId; + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({ + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + const earJwk = await invokeAsync(generateEarKey, PerformanceEvents.GenerateEarKey, this.logger, this.performanceClient, correlationId)(); + const redirectRequest = { + ...request, + earJwk + }; + this.browserStorage.cacheAuthorizeRequest(redirectRequest); + const form = await getEARForm(document, this.config, discoveredAuthority, redirectRequest, this.logger, this.performanceClient); + form.submit(); + return new Promise((resolve, reject) => { + setTimeout(() => { + reject(createBrowserAuthError(timedOut, "failed_to_redirect")); + }, this.config.system.redirectNavigationTimeout); + }); + } + /** + * Executes classic Authorization Code flow with a POST request. + * @param request + */ + async executeCodeFlowWithPost(request) { + const correlationId = request.correlationId; + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({ + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + this.browserStorage.cacheAuthorizeRequest(request); + const form = await getCodeForm(document, this.config, discoveredAuthority, request, this.logger, this.performanceClient); + form.submit(); + return new Promise((resolve, reject) => { + setTimeout(() => { + reject(createBrowserAuthError(timedOut, "failed_to_redirect")); + }, this.config.system.redirectNavigationTimeout); + }); + } + /** + * Checks if navigateToLoginRequestUrl is set, and: + * - if true, performs logic to cache and navigate + * - if false, handles hash string and parses response + * @param hash {string} url hash + * @param parentMeasurement {InProgressPerformanceEvent} parent measurement + */ + async handleRedirectPromise(hash = "", request, pkceVerifier, parentMeasurement) { + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.handleRedirectPromise); + try { + const [serverParams, responseString] = this.getRedirectResponse(hash || ""); + if (!serverParams) { + this.logger.info("handleRedirectPromise did not detect a response as a result of a redirect. Cleaning temporary cache."); + this.browserStorage.resetRequestCache(); + if (getNavigationType() !== "back_forward") { + parentMeasurement.event.errorCode = "no_server_response"; + } else { + this.logger.verbose("Back navigation event detected. Muting no_server_response error"); + } + return null; + } + const loginRequestUrl = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, true) || Constants.EMPTY_STRING; + const loginRequestUrlNormalized = UrlString.removeHashFromUrl(loginRequestUrl); + const currentUrlNormalized = UrlString.removeHashFromUrl(window.location.href); + if (loginRequestUrlNormalized === currentUrlNormalized && this.config.auth.navigateToLoginRequestUrl) { + this.logger.verbose("Current page is loginRequestUrl, handling response"); + if (loginRequestUrl.indexOf("#") > -1) { + replaceHash(loginRequestUrl); + } + const handleHashResult = await this.handleResponse(serverParams, request, pkceVerifier, serverTelemetryManager); + return handleHashResult; + } else if (!this.config.auth.navigateToLoginRequestUrl) { + this.logger.verbose("NavigateToLoginRequestUrl set to false, handling response"); + return await this.handleResponse(serverParams, request, pkceVerifier, serverTelemetryManager); + } else if (!isInIframe() || this.config.system.allowRedirectInIframe) { + this.browserStorage.setTemporaryCache(TemporaryCacheKeys.URL_HASH, responseString, true); + const navigationOptions = { + apiId: ApiId.handleRedirectPromise, + timeout: this.config.system.redirectNavigationTimeout, + noHistory: true + }; + let processHashOnRedirect = true; + if (!loginRequestUrl || loginRequestUrl === "null") { + const homepage = getHomepage(); + this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, homepage, true); + this.logger.warning("Unable to get valid login request url from cache, redirecting to home page"); + processHashOnRedirect = await this.navigationClient.navigateInternal(homepage, navigationOptions); + } else { + this.logger.verbose(`Navigating to loginRequestUrl: ${loginRequestUrl}`); + processHashOnRedirect = await this.navigationClient.navigateInternal(loginRequestUrl, navigationOptions); + } + if (!processHashOnRedirect) { + return await this.handleResponse(serverParams, request, pkceVerifier, serverTelemetryManager); + } + } + return null; + } catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + throw e; + } + } + /** + * Gets the response hash for a redirect request + * Returns null if interactionType in the state value is not "redirect" or the hash does not contain known properties + * @param hash + */ + getRedirectResponse(userProvidedResponse) { + this.logger.verbose("getRedirectResponseHash called"); + let responseString = userProvidedResponse; + if (!responseString) { + if (this.config.auth.OIDCOptions.serverResponseType === ServerResponseType.QUERY) { + responseString = window.location.search; + } else { + responseString = window.location.hash; + } + } + let response = UrlUtils_exports.getDeserializedResponse(responseString); + if (response) { + try { + validateInteractionType(response, this.browserCrypto, InteractionType.Redirect); + } catch (e) { + if (e instanceof AuthError) { + this.logger.error(`Interaction type validation failed due to ${e.errorCode}: ${e.errorMessage}`); + } + return [null, ""]; + } + clearHash(window); + this.logger.verbose("Hash contains known properties, returning response hash"); + return [response, responseString]; + } + const cachedHash = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.URL_HASH, true); + this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH)); + if (cachedHash) { + response = UrlUtils_exports.getDeserializedResponse(cachedHash); + if (response) { + this.logger.verbose("Hash does not contain known properties, returning cached hash"); + return [response, cachedHash]; + } + } + return [null, ""]; + } + /** + * Checks if hash exists and handles in window. + * @param hash + * @param state + */ + async handleResponse(serverParams, request, codeVerifier, serverTelemetryManager) { + const state = serverParams.state; + if (!state) { + throw createBrowserAuthError(noStateInHash); + } + if (serverParams.ear_jwe) { + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, request.correlationId)({ + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + return invokeAsync(handleResponseEAR, PerformanceEvents.HandleResponseEar, this.logger, this.performanceClient, request.correlationId)(request, serverParams, ApiId.acquireTokenRedirect, this.config, discoveredAuthority, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } + const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({ serverTelemetryManager, requestAuthority: request.authority }); + return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, request.correlationId)(request, serverParams, codeVerifier, ApiId.acquireTokenRedirect, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } + /** + * Redirects window to given URL. + * @param urlNavigate + * @param onRedirectNavigateRequest - onRedirectNavigate callback provided on the request + */ + async initiateAuthRequest(requestUrl, onRedirectNavigateRequest) { + this.logger.verbose("RedirectHandler.initiateAuthRequest called"); + if (requestUrl) { + this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`); + const navigationOptions = { + apiId: ApiId.acquireTokenRedirect, + timeout: this.config.system.redirectNavigationTimeout, + noHistory: false + }; + const onRedirectNavigate = onRedirectNavigateRequest || this.config.auth.onRedirectNavigate; + if (typeof onRedirectNavigate === "function") { + this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback"); + const navigate = onRedirectNavigate(requestUrl); + if (navigate !== false) { + this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating"); + await this.navigationClient.navigateExternal(requestUrl, navigationOptions); + return; + } else { + this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation"); + return; + } + } else { + this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url"); + await this.navigationClient.navigateExternal(requestUrl, navigationOptions); + return; + } + } else { + this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty"); + throw createBrowserAuthError(emptyNavigateUri); + } + } + /** + * Use to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param logoutRequest + */ + async logout(logoutRequest) { + var _a; + this.logger.verbose("logoutRedirect called"); + const validLogoutRequest = this.initializeLogoutRequest(logoutRequest); + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.logout); + try { + this.eventHandler.emitEvent(EventType.LOGOUT_START, InteractionType.Redirect, logoutRequest); + await this.clearCacheOnLogout(this.correlationId, validLogoutRequest.account); + const navigationOptions = { + apiId: ApiId.logout, + timeout: this.config.system.redirectNavigationTimeout, + noHistory: false + }; + const authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, this.correlationId)({ + serverTelemetryManager, + requestAuthority: logoutRequest && logoutRequest.authority, + requestExtraQueryParameters: logoutRequest == null ? void 0 : logoutRequest.extraQueryParameters, + account: logoutRequest && logoutRequest.account || void 0 + }); + if (authClient.authority.protocolMode === ProtocolMode.OIDC) { + try { + authClient.authority.endSessionEndpoint; + } catch { + if ((_a = validLogoutRequest.account) == null ? void 0 : _a.homeAccountId) { + this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest); + return; + } + } + } + const logoutUri = authClient.getLogoutUri(validLogoutRequest); + this.eventHandler.emitEvent(EventType.LOGOUT_SUCCESS, InteractionType.Redirect, validLogoutRequest); + if (logoutRequest && typeof logoutRequest.onRedirectNavigate === "function") { + const navigate = logoutRequest.onRedirectNavigate(logoutUri); + if (navigate !== false) { + this.logger.verbose("Logout onRedirectNavigate did not return false, navigating"); + if (!this.browserStorage.getInteractionInProgress()) { + this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT); + } + await this.navigationClient.navigateExternal(logoutUri, navigationOptions); + return; + } else { + this.browserStorage.setInteractionInProgress(false); + this.logger.verbose("Logout onRedirectNavigate returned false, stopping navigation"); + } + } else { + if (!this.browserStorage.getInteractionInProgress()) { + this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT); + } + await this.navigationClient.navigateExternal(logoutUri, navigationOptions); + return; + } + } catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + this.eventHandler.emitEvent(EventType.LOGOUT_FAILURE, InteractionType.Redirect, null, e); + this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect); + throw e; + } + this.eventHandler.emitEvent(EventType.LOGOUT_END, InteractionType.Redirect); + } + /** + * Use to get the redirectStartPage either from request or use current window + * @param requestStartPage + */ + getRedirectStartPage(requestStartPage) { + const redirectStartPage = requestStartPage || window.location.href; + return UrlString.getAbsoluteUrl(redirectStartPage, getCurrentUri()); + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_handler/SilentHandler.mjs +async function initiateCodeRequest(requestUrl, performanceClient, logger, correlationId, navigateFrameWait) { + performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, correlationId); + if (!requestUrl) { + logger.info("Navigate url is empty"); + throw createBrowserAuthError(emptyNavigateUri); + } + if (navigateFrameWait) { + return invokeAsync(loadFrame, PerformanceEvents.SilentHandlerLoadFrame, logger, performanceClient, correlationId)(requestUrl, navigateFrameWait, performanceClient, correlationId); + } + return invoke(loadFrameSync, PerformanceEvents.SilentHandlerLoadFrameSync, logger, performanceClient, correlationId)(requestUrl); +} +async function initiateCodeFlowWithPost(config, authority, request, logger, performanceClient) { + const frame = createHiddenIframe(); + if (!frame.contentDocument) { + throw "No document associated with iframe!"; + } + const form = await getCodeForm(frame.contentDocument, config, authority, request, logger, performanceClient); + form.submit(); + return frame; +} +async function initiateEarRequest(config, authority, request, logger, performanceClient) { + const frame = createHiddenIframe(); + if (!frame.contentDocument) { + throw "No document associated with iframe!"; + } + const form = await getEARForm(frame.contentDocument, config, authority, request, logger, performanceClient); + form.submit(); + return frame; +} +async function monitorIframeForHash(iframe, timeout, pollIntervalMilliseconds, performanceClient, logger, correlationId, responseType) { + performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, correlationId); + return new Promise((resolve, reject) => { + if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) { + logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`); + } + const timeoutId = window.setTimeout(() => { + window.clearInterval(intervalId); + reject(createBrowserAuthError(monitorWindowTimeout)); + }, timeout); + const intervalId = window.setInterval(() => { + let href = ""; + const contentWindow = iframe.contentWindow; + try { + href = contentWindow ? contentWindow.location.href : ""; + } catch (e) { + } + if (!href || href === "about:blank") { + return; + } + let responseString = ""; + if (contentWindow) { + if (responseType === ServerResponseType.QUERY) { + responseString = contentWindow.location.search; + } else { + responseString = contentWindow.location.hash; + } + } + window.clearTimeout(timeoutId); + window.clearInterval(intervalId); + resolve(responseString); + }, pollIntervalMilliseconds); + }).finally(() => { + invoke(removeHiddenIframe, PerformanceEvents.RemoveHiddenIframe, logger, performanceClient, correlationId)(iframe); + }); +} +function loadFrame(urlNavigate, navigateFrameWait, performanceClient, correlationId) { + performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, correlationId); + return new Promise((resolve, reject) => { + const frameHandle = createHiddenIframe(); + window.setTimeout(() => { + if (!frameHandle) { + reject("Unable to load iframe"); + return; + } + frameHandle.src = urlNavigate; + resolve(frameHandle); + }, navigateFrameWait); + }); +} +function loadFrameSync(urlNavigate) { + const frameHandle = createHiddenIframe(); + frameHandle.src = urlNavigate; + return frameHandle; +} +function createHiddenIframe() { + const authFrame = document.createElement("iframe"); + authFrame.className = "msalSilentIframe"; + authFrame.style.visibility = "hidden"; + authFrame.style.position = "absolute"; + authFrame.style.width = authFrame.style.height = "0"; + authFrame.style.border = "0"; + authFrame.setAttribute("sandbox", "allow-scripts allow-same-origin allow-forms"); + document.body.appendChild(authFrame); + return authFrame; +} +function removeHiddenIframe(iframe) { + if (document.body === iframe.parentNode) { + document.body.removeChild(iframe); + } +} + +// node_modules/@azure/msal-browser/dist/interaction_client/SilentIframeClient.mjs +var SilentIframeClient = class extends StandardInteractionClient { + constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, nativeStorageImpl, platformAuthProvider, correlationId) { + super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthProvider, correlationId); + this.apiId = apiId; + this.nativeStorage = nativeStorageImpl; + } + /** + * Acquires a token silently by opening a hidden iframe to the /authorize endpoint with prompt=none or prompt=no_session + * @param request + */ + async acquireToken(request) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientAcquireToken, request.correlationId); + if (!request.loginHint && !request.sid && (!request.account || !request.account.username)) { + this.logger.warning("No user hint provided. The authorization server may need more information to complete this request."); + } + const inputRequest = { ...request }; + if (inputRequest.prompt) { + if (inputRequest.prompt !== PromptValue.NONE && inputRequest.prompt !== PromptValue.NO_SESSION) { + this.logger.warning(`SilentIframeClient. Replacing invalid prompt ${inputRequest.prompt} with ${PromptValue.NONE}`); + inputRequest.prompt = PromptValue.NONE; + } + } else { + inputRequest.prompt = PromptValue.NONE; + } + const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(inputRequest, InteractionType.Silent); + silentRequest.platformBroker = isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, silentRequest.authenticationScheme); + preconnect(silentRequest.authority); + if (this.config.auth.protocolMode === ProtocolMode.EAR) { + return this.executeEarFlow(silentRequest); + } else { + return this.executeCodeFlow(silentRequest); + } + } + /** + * Executes auth code + PKCE flow + * @param request + * @returns + */ + async executeCodeFlow(request) { + let authClient; + const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId); + try { + authClient = await invokeAsync(this.createAuthCodeClient.bind(this), PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.logger, this.performanceClient, request.correlationId)({ + serverTelemetryManager, + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + return await invokeAsync(this.silentTokenHelper.bind(this), PerformanceEvents.SilentIframeClientTokenHelper, this.logger, this.performanceClient, request.correlationId)(authClient, request); + } catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + if (!authClient || !(e instanceof AuthError) || e.errorCode !== BrowserConstants.INVALID_GRANT_ERROR) { + throw e; + } + this.performanceClient.addFields({ + retryError: e.errorCode + }, this.correlationId); + return await invokeAsync(this.silentTokenHelper.bind(this), PerformanceEvents.SilentIframeClientTokenHelper, this.logger, this.performanceClient, this.correlationId)(authClient, request); + } + } + /** + * Executes EAR flow + * @param request + */ + async executeEarFlow(request) { + const correlationId = request.correlationId; + const discoveredAuthority = await invokeAsync(this.getDiscoveredAuthority.bind(this), PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.logger, this.performanceClient, correlationId)({ + requestAuthority: request.authority, + requestAzureCloudOptions: request.azureCloudOptions, + requestExtraQueryParameters: request.extraQueryParameters, + account: request.account + }); + const earJwk = await invokeAsync(generateEarKey, PerformanceEvents.GenerateEarKey, this.logger, this.performanceClient, correlationId)(); + const silentRequest = { + ...request, + earJwk + }; + const msalFrame = await invokeAsync(initiateEarRequest, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(this.config, discoveredAuthority, silentRequest, this.logger, this.performanceClient); + const responseType = this.config.auth.OIDCOptions.serverResponseType; + const responseString = await invokeAsync(monitorIframeForHash, PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(msalFrame, this.config.system.iframeHashTimeout, this.config.system.pollIntervalMilliseconds, this.performanceClient, this.logger, correlationId, responseType); + const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, correlationId)(responseString, responseType, this.logger); + return invokeAsync(handleResponseEAR, PerformanceEvents.HandleResponseEar, this.logger, this.performanceClient, correlationId)(silentRequest, serverParams, this.apiId, this.config, discoveredAuthority, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } + /** + * Currently Unsupported + */ + logout() { + return Promise.reject(createBrowserAuthError(silentLogoutUnsupported)); + } + /** + * Helper which acquires an authorization code silently using a hidden iframe from given url + * using the scopes requested as part of the id, and exchanges the code for a set of OAuth tokens. + * @param navigateUrl + * @param userRequestScopes + */ + async silentTokenHelper(authClient, request) { + const correlationId = request.correlationId; + this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentIframeClientTokenHelper, correlationId); + const pkceCodes = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId); + const silentRequest = { + ...request, + codeChallenge: pkceCodes.challenge + }; + let msalFrame; + if (request.httpMethod === HttpMethod.POST) { + msalFrame = await invokeAsync(initiateCodeFlowWithPost, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, silentRequest, this.logger, this.performanceClient); + } else { + const navigateUrl = await invokeAsync(getAuthCodeRequestUrl, PerformanceEvents.GetAuthCodeUrl, this.logger, this.performanceClient, correlationId)(this.config, authClient.authority, silentRequest, this.logger, this.performanceClient); + msalFrame = await invokeAsync(initiateCodeRequest, PerformanceEvents.SilentHandlerInitiateAuthRequest, this.logger, this.performanceClient, correlationId)(navigateUrl, this.performanceClient, this.logger, correlationId, this.config.system.navigateFrameWait); + } + const responseType = this.config.auth.OIDCOptions.serverResponseType; + const responseString = await invokeAsync(monitorIframeForHash, PerformanceEvents.SilentHandlerMonitorIframeForHash, this.logger, this.performanceClient, correlationId)(msalFrame, this.config.system.iframeHashTimeout, this.config.system.pollIntervalMilliseconds, this.performanceClient, this.logger, correlationId, responseType); + const serverParams = invoke(deserializeResponse, PerformanceEvents.DeserializeResponse, this.logger, this.performanceClient, correlationId)(responseString, responseType, this.logger); + return invokeAsync(handleResponseCode, PerformanceEvents.HandleResponseCode, this.logger, this.performanceClient, correlationId)(request, serverParams, pkceCodes.verifier, this.apiId, this.config, authClient, this.browserStorage, this.nativeStorage, this.eventHandler, this.logger, this.performanceClient, this.platformAuthProvider); + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_client/SilentRefreshClient.mjs +var SilentRefreshClient = class extends StandardInteractionClient { + /** + * Exchanges the refresh token for new tokens + * @param request + */ + async acquireToken(request) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentRefreshClientAcquireToken, request.correlationId); + const baseRequest = await invokeAsync(initializeBaseRequest, PerformanceEvents.InitializeBaseRequest, this.logger, this.performanceClient, request.correlationId)(request, this.config, this.performanceClient, this.logger); + const silentRequest = { + ...request, + ...baseRequest + }; + if (request.redirectUri) { + silentRequest.redirectUri = this.getRedirectUri(request.redirectUri); + } + const serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow); + const refreshTokenClient = await this.createRefreshTokenClient({ + serverTelemetryManager, + authorityUrl: silentRequest.authority, + azureCloudOptions: silentRequest.azureCloudOptions, + account: silentRequest.account + }); + return invokeAsync(refreshTokenClient.acquireTokenByRefreshToken.bind(refreshTokenClient), PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken, this.logger, this.performanceClient, request.correlationId)(silentRequest).catch((e) => { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + throw e; + }); + } + /** + * Currently Unsupported + */ + logout() { + return Promise.reject(createBrowserAuthError(silentLogoutUnsupported)); + } + /** + * Creates a Refresh Client with the given authority, or the default authority. + * @param params { + * serverTelemetryManager: ServerTelemetryManager; + * authorityUrl?: string; + * azureCloudOptions?: AzureCloudOptions; + * extraQueryParams?: StringDict; + * account?: AccountInfo; + * } + */ + async createRefreshTokenClient(params) { + const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, this.correlationId)({ + serverTelemetryManager: params.serverTelemetryManager, + requestAuthority: params.authorityUrl, + requestAzureCloudOptions: params.azureCloudOptions, + requestExtraQueryParameters: params.extraQueryParameters, + account: params.account + }); + return new RefreshTokenClient(clientConfig, this.performanceClient); + } +}; + +// node_modules/@azure/msal-browser/dist/cache/TokenCache.mjs +var TokenCache = class { + constructor(configuration, storage, logger, cryptoObj) { + this.isBrowserEnvironment = typeof window !== "undefined"; + this.config = configuration; + this.storage = storage; + this.logger = logger; + this.cryptoObj = cryptoObj; + } + // Move getAllAccounts here and cache utility APIs + /** + * API to load tokens to msal-browser cache. + * @param request + * @param response + * @param options + * @returns `AuthenticationResult` for the response that was loaded. + */ + async loadExternalTokens(request, response, options) { + if (!this.isBrowserEnvironment) { + throw createBrowserAuthError(nonBrowserEnvironment); + } + const correlationId = request.correlationId || createNewGuid(); + const idTokenClaims = response.id_token ? AuthToken_exports.extractTokenClaims(response.id_token, base64Decode) : void 0; + const authorityOptions = { + protocolMode: this.config.auth.protocolMode, + knownAuthorities: this.config.auth.knownAuthorities, + cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata, + authorityMetadata: this.config.auth.authorityMetadata, + skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache + }; + const authority = request.authority ? new Authority(Authority.generateAuthority(request.authority, request.azureCloudOptions), this.config.system.networkClient, this.storage, authorityOptions, this.logger, request.correlationId || createNewGuid()) : void 0; + const cacheRecordAccount = await this.loadAccount(request, options.clientInfo || response.client_info || "", correlationId, idTokenClaims, authority); + const idToken = await this.loadIdToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, correlationId); + const accessToken = await this.loadAccessToken(request, response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, cacheRecordAccount.realm, options, correlationId); + const refreshToken = await this.loadRefreshToken(response, cacheRecordAccount.homeAccountId, cacheRecordAccount.environment, correlationId); + return this.generateAuthenticationResult(request, { + account: cacheRecordAccount, + idToken, + accessToken, + refreshToken + }, idTokenClaims, authority); + } + /** + * Helper function to load account to msal-browser cache + * @param idToken + * @param environment + * @param clientInfo + * @param authorityType + * @param requestHomeAccountId + * @returns `AccountEntity` + */ + async loadAccount(request, clientInfo, correlationId, idTokenClaims, authority) { + this.logger.verbose("TokenCache - loading account"); + if (request.account) { + const accountEntity = AccountEntity.createFromAccountInfo(request.account); + await this.storage.setAccount(accountEntity, correlationId); + return accountEntity; + } else if (!authority || !clientInfo && !idTokenClaims) { + this.logger.error("TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead."); + throw createBrowserAuthError(unableToLoadToken); + } + const homeAccountId = AccountEntity.generateHomeAccountId(clientInfo, authority.authorityType, this.logger, this.cryptoObj, idTokenClaims); + const claimsTenantId = idTokenClaims == null ? void 0 : idTokenClaims.tid; + const cachedAccount = buildAccountToCache( + this.storage, + authority, + homeAccountId, + base64Decode, + correlationId, + idTokenClaims, + clientInfo, + authority.hostnameAndPort, + claimsTenantId, + void 0, + // authCodePayload + void 0, + // nativeAccountId + this.logger + ); + await this.storage.setAccount(cachedAccount, correlationId); + return cachedAccount; + } + /** + * Helper function to load id tokens to msal-browser cache + * @param idToken + * @param homeAccountId + * @param environment + * @param tenantId + * @returns `IdTokenEntity` + */ + async loadIdToken(response, homeAccountId, environment, tenantId, correlationId) { + if (!response.id_token) { + this.logger.verbose("TokenCache - no id token found in response"); + return null; + } + this.logger.verbose("TokenCache - loading id token"); + const idTokenEntity = CacheHelpers_exports.createIdTokenEntity(homeAccountId, environment, response.id_token, this.config.auth.clientId, tenantId); + await this.storage.setIdTokenCredential(idTokenEntity, correlationId); + return idTokenEntity; + } + /** + * Helper function to load access tokens to msal-browser cache + * @param request + * @param response + * @param homeAccountId + * @param environment + * @param tenantId + * @returns `AccessTokenEntity` + */ + async loadAccessToken(request, response, homeAccountId, environment, tenantId, options, correlationId) { + if (!response.access_token) { + this.logger.verbose("TokenCache - no access token found in response"); + return null; + } else if (!response.expires_in) { + this.logger.error("TokenCache - no expiration set on the access token. Cannot add it to the cache."); + return null; + } else if (!response.scope && (!request.scopes || !request.scopes.length)) { + this.logger.error("TokenCache - scopes not specified in the request or response. Cannot add token to the cache."); + return null; + } + this.logger.verbose("TokenCache - loading access token"); + const scopes = response.scope ? ScopeSet.fromString(response.scope) : new ScopeSet(request.scopes); + const expiresOn = options.expiresOn || response.expires_in + TimeUtils_exports.nowSeconds(); + const extendedExpiresOn = options.extendedExpiresOn || (response.ext_expires_in || response.expires_in) + TimeUtils_exports.nowSeconds(); + const accessTokenEntity = CacheHelpers_exports.createAccessTokenEntity(homeAccountId, environment, response.access_token, this.config.auth.clientId, tenantId, scopes.printScopes(), expiresOn, extendedExpiresOn, base64Decode); + await this.storage.setAccessTokenCredential(accessTokenEntity, correlationId); + return accessTokenEntity; + } + /** + * Helper function to load refresh tokens to msal-browser cache + * @param request + * @param response + * @param homeAccountId + * @param environment + * @returns `RefreshTokenEntity` + */ + async loadRefreshToken(response, homeAccountId, environment, correlationId) { + if (!response.refresh_token) { + this.logger.verbose("TokenCache - no refresh token found in response"); + return null; + } + this.logger.verbose("TokenCache - loading refresh token"); + const refreshTokenEntity = CacheHelpers_exports.createRefreshTokenEntity( + homeAccountId, + environment, + response.refresh_token, + this.config.auth.clientId, + response.foci, + void 0, + // userAssertionHash + response.refresh_token_expires_in + ); + await this.storage.setRefreshTokenCredential(refreshTokenEntity, correlationId); + return refreshTokenEntity; + } + /** + * Helper function to generate an `AuthenticationResult` for the result. + * @param request + * @param idTokenObj + * @param cacheRecord + * @param authority + * @returns `AuthenticationResult` + */ + generateAuthenticationResult(request, cacheRecord, idTokenClaims, authority) { + var _a, _b, _c; + let accessToken = ""; + let responseScopes = []; + let expiresOn = null; + let extExpiresOn; + if (cacheRecord == null ? void 0 : cacheRecord.accessToken) { + accessToken = cacheRecord.accessToken.secret; + responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray(); + expiresOn = TimeUtils_exports.toDateFromSeconds(cacheRecord.accessToken.expiresOn); + extExpiresOn = TimeUtils_exports.toDateFromSeconds(cacheRecord.accessToken.extendedExpiresOn); + } + const accountEntity = cacheRecord.account; + return { + authority: authority ? authority.canonicalAuthority : "", + uniqueId: cacheRecord.account.localAccountId, + tenantId: cacheRecord.account.realm, + scopes: responseScopes, + account: accountEntity.getAccountInfo(), + idToken: ((_a = cacheRecord.idToken) == null ? void 0 : _a.secret) || "", + idTokenClaims: idTokenClaims || {}, + accessToken, + fromCache: true, + expiresOn, + correlationId: request.correlationId || "", + requestId: "", + extExpiresOn, + familyId: ((_b = cacheRecord.refreshToken) == null ? void 0 : _b.familyId) || "", + tokenType: ((_c = cacheRecord == null ? void 0 : cacheRecord.accessToken) == null ? void 0 : _c.tokenType) || "", + state: request.state || "", + cloudGraphHostName: accountEntity.cloudGraphHostName || "", + msGraphHost: accountEntity.msGraphHost || "", + fromNativeBroker: false + }; + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +var HybridSpaAuthorizationCodeClient = class extends AuthorizationCodeClient { + constructor(config) { + super(config); + this.includeRedirectUri = false; + } +}; + +// node_modules/@azure/msal-browser/dist/interaction_client/SilentAuthCodeClient.mjs +var SilentAuthCodeClient = class extends StandardInteractionClient { + constructor(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, apiId, performanceClient, platformAuthProvider, correlationId) { + super(config, storageImpl, browserCrypto, logger, eventHandler, navigationClient, performanceClient, platformAuthProvider, correlationId); + this.apiId = apiId; + } + /** + * Acquires a token silently by redeeming an authorization code against the /token endpoint + * @param request + */ + async acquireToken(request) { + if (!request.code) { + throw createBrowserAuthError(authCodeRequired); + } + const silentRequest = await invokeAsync(this.initializeAuthorizationRequest.bind(this), PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.logger, this.performanceClient, request.correlationId)(request, InteractionType.Silent); + const serverTelemetryManager = this.initializeServerTelemetryManager(this.apiId); + try { + const authCodeRequest = { + ...silentRequest, + code: request.code + }; + const clientConfig = await invokeAsync(this.getClientConfiguration.bind(this), PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.logger, this.performanceClient, request.correlationId)({ + serverTelemetryManager, + requestAuthority: silentRequest.authority, + requestAzureCloudOptions: silentRequest.azureCloudOptions, + requestExtraQueryParameters: silentRequest.extraQueryParameters, + account: silentRequest.account + }); + const authClient = new HybridSpaAuthorizationCodeClient(clientConfig); + this.logger.verbose("Auth code client created"); + const interactionHandler = new InteractionHandler(authClient, this.browserStorage, authCodeRequest, this.logger, this.performanceClient); + return await invokeAsync(interactionHandler.handleCodeResponseFromServer.bind(interactionHandler), PerformanceEvents.HandleCodeResponseFromServer, this.logger, this.performanceClient, request.correlationId)({ + code: request.code, + msgraph_host: request.msGraphHost, + cloud_graph_host_name: request.cloudGraphHostName, + cloud_instance_host_name: request.cloudInstanceHostName + }, silentRequest, false); + } catch (e) { + if (e instanceof AuthError) { + e.setCorrelationId(this.correlationId); + serverTelemetryManager.cacheFailedRequest(e); + } + throw e; + } + } + /** + * Currently Unsupported + */ + logout() { + return Promise.reject(createBrowserAuthError(silentLogoutUnsupported)); + } +}; + +// node_modules/@azure/msal-browser/dist/utils/MsalFrameStatsUtils.mjs +function collectInstanceStats(currentClientId, performanceEvent, logger) { + var _a; + const frameInstances = ( + // @ts-ignore + ((_a = window.msal) == null ? void 0 : _a.clientIds) || [] + ); + const msalInstanceCount = frameInstances.length; + const sameClientIdInstanceCount = frameInstances.filter((i) => i === currentClientId).length; + if (sameClientIdInstanceCount > 1) { + logger.warning("There is already an instance of MSAL.js in the window with the same client id."); + } + performanceEvent.add({ + msalInstanceCount, + sameClientIdInstanceCount + }); +} + +// node_modules/@azure/msal-browser/dist/controllers/StandardController.mjs +function getAccountType(account) { + const idTokenClaims = account == null ? void 0 : account.idTokenClaims; + if ((idTokenClaims == null ? void 0 : idTokenClaims.tfp) || (idTokenClaims == null ? void 0 : idTokenClaims.acr)) { + return "B2C"; + } + if (!(idTokenClaims == null ? void 0 : idTokenClaims.tid)) { + return void 0; + } else if ((idTokenClaims == null ? void 0 : idTokenClaims.tid) === "9188040d-6c67-4c5b-b112-36a304b66dad") { + return "MSA"; + } + return "AAD"; +} +function preflightCheck2(initialized, performanceEvent) { + try { + preflightCheck(initialized); + } catch (e) { + performanceEvent.end({ success: false }, e); + throw e; + } +} +var StandardController = class _StandardController { + /** + * @constructor + * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object + * + * Important attributes in the Configuration object for auth are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview + * - authority: the authority URL for your application. + * - redirect_uri: the uri of your application registered in the portal. + * + * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens. + * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here} + * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/ + * Full B2C functionality will be available in this library in future versions. + * + * @param configuration Object for the MSAL PublicClientApplication instance + */ + constructor(operatingContext) { + this.operatingContext = operatingContext; + this.isBrowserEnvironment = this.operatingContext.isBrowserEnvironment(); + this.config = operatingContext.getConfig(); + this.initialized = false; + this.logger = this.operatingContext.getLogger(); + this.networkClient = this.config.system.networkClient; + this.navigationClient = this.config.system.navigationClient; + this.redirectResponse = /* @__PURE__ */ new Map(); + this.hybridAuthCodeResponses = /* @__PURE__ */ new Map(); + this.performanceClient = this.config.telemetry.client; + this.browserCrypto = this.isBrowserEnvironment ? new CryptoOps(this.logger, this.performanceClient) : DEFAULT_CRYPTO_IMPLEMENTATION; + this.eventHandler = new EventHandler(this.logger); + this.browserStorage = this.isBrowserEnvironment ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, this.performanceClient, this.eventHandler, buildStaticAuthorityOptions(this.config.auth)) : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger, this.performanceClient, this.eventHandler); + const nativeCacheOptions = { + cacheLocation: BrowserCacheLocation.MemoryStorage, + cacheRetentionDays: 5, + temporaryCacheLocation: BrowserCacheLocation.MemoryStorage, + storeAuthStateInCookie: false, + secureCookies: false, + cacheMigrationEnabled: false, + claimsBasedCachingEnabled: false + }; + this.nativeInternalStorage = new BrowserCacheManager(this.config.auth.clientId, nativeCacheOptions, this.browserCrypto, this.logger, this.performanceClient, this.eventHandler); + this.tokenCache = new TokenCache(this.config, this.browserStorage, this.logger, this.browserCrypto); + this.activeSilentTokenRequests = /* @__PURE__ */ new Map(); + this.trackPageVisibility = this.trackPageVisibility.bind(this); + this.trackPageVisibilityWithMeasurement = this.trackPageVisibilityWithMeasurement.bind(this); + } + static async createController(operatingContext, request) { + const controller = new _StandardController(operatingContext); + await controller.initialize(request); + return controller; + } + trackPageVisibility(correlationId) { + if (!correlationId) { + return; + } + this.logger.info("Perf: Visibility change detected"); + this.performanceClient.incrementFields({ visibilityChangeCount: 1 }, correlationId); + } + /** + * Initializer function to perform async startup tasks such as connecting to WAM extension + * @param request {?InitializeApplicationRequest} correlation id + */ + async initialize(request, isBroker) { + this.logger.trace("initialize called"); + if (this.initialized) { + this.logger.info("initialize has already been called, exiting early."); + return; + } + if (!this.isBrowserEnvironment) { + this.logger.info("in non-browser environment, exiting early."); + this.initialized = true; + this.eventHandler.emitEvent(EventType.INITIALIZE_END); + return; + } + const initCorrelationId = (request == null ? void 0 : request.correlationId) || this.getRequestCorrelationId(); + const allowPlatformBroker = this.config.system.allowPlatformBroker; + const initMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.InitializeClientApplication, initCorrelationId); + this.eventHandler.emitEvent(EventType.INITIALIZE_START); + if (!isBroker) { + try { + this.logMultipleInstances(initMeasurement); + } catch { + } + } + await invokeAsync(this.browserStorage.initialize.bind(this.browserStorage), PerformanceEvents.InitializeCache, this.logger, this.performanceClient, initCorrelationId)(initCorrelationId); + if (allowPlatformBroker) { + try { + this.platformAuthProvider = await getPlatformAuthProvider(this.logger, this.performanceClient, initCorrelationId, this.config.system.nativeBrokerHandshakeTimeout); + } catch (e) { + this.logger.verbose(e); + } + } + if (!this.config.cache.claimsBasedCachingEnabled) { + this.logger.verbose("Claims-based caching is disabled. Clearing the previous cache with claims"); + invoke(this.browserStorage.clearTokensAndKeysWithClaims.bind(this.browserStorage), PerformanceEvents.ClearTokensAndKeysWithClaims, this.logger, this.performanceClient, initCorrelationId)(initCorrelationId); + } + this.config.system.asyncPopups && await this.preGeneratePkceCodes(initCorrelationId); + this.initialized = true; + this.eventHandler.emitEvent(EventType.INITIALIZE_END); + initMeasurement.end({ + allowPlatformBroker, + success: true + }); + } + // #region Redirect Flow + /** + * Event handler function which allows users to fire events after the PublicClientApplication object + * has loaded during redirect flows. This should be invoked on all page loads involved in redirect + * auth flows. + * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value. + * @returns Token response or null. If the return value is null, then no auth redirect was detected. + */ + async handleRedirectPromise(hash) { + this.logger.verbose("handleRedirectPromise called"); + blockAPICallsBeforeInitialize(this.initialized); + if (this.isBrowserEnvironment) { + const redirectResponseKey = hash || ""; + let response = this.redirectResponse.get(redirectResponseKey); + if (typeof response === "undefined") { + response = this.handleRedirectPromiseInternal(hash); + this.redirectResponse.set(redirectResponseKey, response); + this.logger.verbose("handleRedirectPromise has been called for the first time, storing the promise"); + } else { + this.logger.verbose("handleRedirectPromise has been called previously, returning the result from the first call"); + } + return response; + } + this.logger.verbose("handleRedirectPromise returns null, not browser environment"); + return null; + } + /** + * The internal details of handleRedirectPromise. This is separated out to a helper to allow handleRedirectPromise to memoize requests + * @param hash + * @returns + */ + async handleRedirectPromiseInternal(hash) { + var _a; + if (!this.browserStorage.isInteractionInProgress(true)) { + this.logger.info("handleRedirectPromise called but there is no interaction in progress, returning null."); + return null; + } + const interactionType = (_a = this.browserStorage.getInteractionInProgress()) == null ? void 0 : _a.type; + if (interactionType === INTERACTION_TYPE.SIGNOUT) { + this.logger.verbose("handleRedirectPromise removing interaction_in_progress flag and returning null after sign-out"); + this.browserStorage.setInteractionInProgress(false); + return Promise.resolve(null); + } + const loggedInAccounts = this.getAllAccounts(); + const platformBrokerRequest = this.browserStorage.getCachedNativeRequest(); + const useNative = platformBrokerRequest && this.platformAuthProvider && !hash; + let rootMeasurement; + this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_START, InteractionType.Redirect); + let redirectResponse; + try { + if (useNative && this.platformAuthProvider) { + rootMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenRedirect, (platformBrokerRequest == null ? void 0 : platformBrokerRequest.correlationId) || ""); + this.logger.trace("handleRedirectPromise - acquiring token from native platform"); + const nativeClient = new PlatformAuthInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.handleRedirectPromise, this.performanceClient, this.platformAuthProvider, platformBrokerRequest.accountId, this.nativeInternalStorage, platformBrokerRequest.correlationId); + redirectResponse = invokeAsync(nativeClient.handleRedirectPromise.bind(nativeClient), PerformanceEvents.HandleNativeRedirectPromiseMeasurement, this.logger, this.performanceClient, rootMeasurement.event.correlationId)(this.performanceClient, rootMeasurement.event.correlationId); + } else { + const [standardRequest, codeVerifier] = this.browserStorage.getCachedRequest(); + const correlationId = standardRequest.correlationId; + rootMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenRedirect, correlationId); + this.logger.trace("handleRedirectPromise - acquiring token from web flow"); + const redirectClient = this.createRedirectClient(correlationId); + redirectResponse = invokeAsync(redirectClient.handleRedirectPromise.bind(redirectClient), PerformanceEvents.HandleRedirectPromiseMeasurement, this.logger, this.performanceClient, rootMeasurement.event.correlationId)(hash, standardRequest, codeVerifier, rootMeasurement); + } + } catch (e) { + this.browserStorage.resetRequestCache(); + throw e; + } + return redirectResponse.then((result) => { + if (result) { + this.browserStorage.resetRequestCache(); + const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length; + if (isLoggingIn) { + this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Redirect, result); + this.logger.verbose("handleRedirectResponse returned result, login success"); + } else { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Redirect, result); + this.logger.verbose("handleRedirectResponse returned result, acquire token success"); + } + rootMeasurement.end({ + success: true, + accountType: getAccountType(result.account) + }); + } else { + if (rootMeasurement.event.errorCode) { + rootMeasurement.end({ success: false }); + } else { + rootMeasurement.discard(); + } + } + this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect); + return result; + }).catch((e) => { + this.browserStorage.resetRequestCache(); + const eventError = e; + if (loggedInAccounts.length > 0) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, eventError); + } else { + this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, eventError); + } + this.eventHandler.emitEvent(EventType.HANDLE_REDIRECT_END, InteractionType.Redirect); + rootMeasurement.end({ + success: false + }, eventError); + throw e; + }); + } + /** + * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects + * the page, so any code that follows this function will not execute. + * + * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current + * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function. + * + * @param request + */ + async acquireTokenRedirect(request) { + const correlationId = this.getRequestCorrelationId(request); + this.logger.verbose("acquireTokenRedirect called", correlationId); + const atrMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPreRedirect, correlationId); + atrMeasurement.add({ + accountType: getAccountType(request.account), + scenarioId: request.scenarioId + }); + const onRedirectNavigateCb = request.onRedirectNavigate; + if (onRedirectNavigateCb) { + request.onRedirectNavigate = (url) => { + const navigate = typeof onRedirectNavigateCb === "function" ? onRedirectNavigateCb(url) : void 0; + if (navigate !== false) { + atrMeasurement.end({ success: true }); + } else { + atrMeasurement.discard(); + } + return navigate; + }; + } else { + const configOnRedirectNavigateCb = this.config.auth.onRedirectNavigate; + this.config.auth.onRedirectNavigate = (url) => { + const navigate = typeof configOnRedirectNavigateCb === "function" ? configOnRedirectNavigateCb(url) : void 0; + if (navigate !== false) { + atrMeasurement.end({ success: true }); + } else { + atrMeasurement.discard(); + } + return navigate; + }; + } + const isLoggedIn = this.getAllAccounts().length > 0; + try { + redirectPreflightCheck(this.initialized, this.config); + this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNIN); + if (isLoggedIn) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Redirect, request); + } else { + this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Redirect, request); + } + let result; + if (this.platformAuthProvider && this.canUsePlatformBroker(request)) { + const nativeClient = new PlatformAuthInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenRedirect, this.performanceClient, this.platformAuthProvider, this.getNativeAccountId(request), this.nativeInternalStorage, correlationId); + result = nativeClient.acquireTokenRedirect(request, atrMeasurement).catch((e) => { + if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) { + this.platformAuthProvider = void 0; + const redirectClient = this.createRedirectClient(correlationId); + return redirectClient.acquireToken(request); + } else if (e instanceof InteractionRequiredAuthError) { + this.logger.verbose("acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow"); + const redirectClient = this.createRedirectClient(correlationId); + return redirectClient.acquireToken(request); + } + throw e; + }); + } else { + const redirectClient = this.createRedirectClient(correlationId); + result = redirectClient.acquireToken(request); + } + return await result; + } catch (e) { + this.browserStorage.resetRequestCache(); + atrMeasurement.end({ success: false }, e); + if (isLoggedIn) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Redirect, null, e); + } else { + this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Redirect, null, e); + } + throw e; + } + } + // #endregion + // #region Popup Flow + /** + * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser + * + * @param request + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + acquireTokenPopup(request) { + const correlationId = this.getRequestCorrelationId(request); + const atPopupMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPopup, correlationId); + atPopupMeasurement.add({ + scenarioId: request.scenarioId, + accountType: getAccountType(request.account) + }); + try { + this.logger.verbose("acquireTokenPopup called", correlationId); + preflightCheck2(this.initialized, atPopupMeasurement); + this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNIN); + } catch (e) { + return Promise.reject(e); + } + const loggedInAccounts = this.getAllAccounts(); + if (loggedInAccounts.length > 0) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Popup, request); + } else { + this.eventHandler.emitEvent(EventType.LOGIN_START, InteractionType.Popup, request); + } + let result; + const pkce = this.getPreGeneratedPkceCodes(correlationId); + if (this.canUsePlatformBroker(request)) { + result = this.acquireTokenNative({ + ...request, + correlationId + }, ApiId.acquireTokenPopup).then((response) => { + atPopupMeasurement.end({ + success: true, + isNativeBroker: true, + accountType: getAccountType(response.account) + }); + return response; + }).catch((e) => { + if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) { + this.platformAuthProvider = void 0; + const popupClient = this.createPopupClient(correlationId); + return popupClient.acquireToken(request, pkce); + } else if (e instanceof InteractionRequiredAuthError) { + this.logger.verbose("acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow"); + const popupClient = this.createPopupClient(correlationId); + return popupClient.acquireToken(request, pkce); + } + throw e; + }); + } else { + const popupClient = this.createPopupClient(correlationId); + result = popupClient.acquireToken(request, pkce); + } + return result.then((result2) => { + const isLoggingIn = loggedInAccounts.length < this.getAllAccounts().length; + if (isLoggingIn) { + this.eventHandler.emitEvent(EventType.LOGIN_SUCCESS, InteractionType.Popup, result2); + } else { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Popup, result2); + } + atPopupMeasurement.end({ + success: true, + accessTokenSize: result2.accessToken.length, + idTokenSize: result2.idToken.length, + accountType: getAccountType(result2.account) + }); + return result2; + }).catch((e) => { + if (loggedInAccounts.length > 0) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Popup, null, e); + } else { + this.eventHandler.emitEvent(EventType.LOGIN_FAILURE, InteractionType.Popup, null, e); + } + atPopupMeasurement.end({ + success: false + }, e); + return Promise.reject(e); + }).finally(async () => { + this.browserStorage.setInteractionInProgress(false); + if (this.config.system.asyncPopups) { + await this.preGeneratePkceCodes(correlationId); + } + }); + } + trackPageVisibilityWithMeasurement() { + const measurement = this.ssoSilentMeasurement || this.acquireTokenByCodeAsyncMeasurement; + if (!measurement) { + return; + } + this.logger.info("Perf: Visibility change detected in ", measurement.event.name); + measurement.increment({ + visibilityChangeCount: 1 + }); + } + // #endregion + // #region Silent Flow + /** + * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work: + * - Any browser using a form of Intelligent Tracking Prevention + * - If there is not an established session with the service + * + * In these cases, the request must be done inside a popup or full frame redirect. + * + * For the cases where interaction is required, you cannot send a request with prompt=none. + * + * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as + * you session on the server still exists. + * @param request {@link SsoSilentRequest} + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + async ssoSilent(request) { + var _a, _b; + const correlationId = this.getRequestCorrelationId(request); + const validRequest = { + ...request, + // will be PromptValue.NONE or PromptValue.NO_SESSION + prompt: request.prompt, + correlationId + }; + this.ssoSilentMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoSilent, correlationId); + (_a = this.ssoSilentMeasurement) == null ? void 0 : _a.add({ + scenarioId: request.scenarioId, + accountType: getAccountType(request.account) + }); + preflightCheck2(this.initialized, this.ssoSilentMeasurement); + (_b = this.ssoSilentMeasurement) == null ? void 0 : _b.increment({ + visibilityChangeCount: 0 + }); + document.addEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement); + this.logger.verbose("ssoSilent called", correlationId); + this.eventHandler.emitEvent(EventType.SSO_SILENT_START, InteractionType.Silent, validRequest); + let result; + if (this.canUsePlatformBroker(validRequest)) { + result = this.acquireTokenNative(validRequest, ApiId.ssoSilent).catch((e) => { + if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) { + this.platformAuthProvider = void 0; + const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId); + return silentIframeClient.acquireToken(validRequest); + } + throw e; + }); + } else { + const silentIframeClient = this.createSilentIframeClient(validRequest.correlationId); + result = silentIframeClient.acquireToken(validRequest); + } + return result.then((response) => { + var _a2; + this.eventHandler.emitEvent(EventType.SSO_SILENT_SUCCESS, InteractionType.Silent, response); + (_a2 = this.ssoSilentMeasurement) == null ? void 0 : _a2.end({ + success: true, + isNativeBroker: response.fromNativeBroker, + accessTokenSize: response.accessToken.length, + idTokenSize: response.idToken.length, + accountType: getAccountType(response.account) + }); + return response; + }).catch((e) => { + var _a2; + this.eventHandler.emitEvent(EventType.SSO_SILENT_FAILURE, InteractionType.Silent, null, e); + (_a2 = this.ssoSilentMeasurement) == null ? void 0 : _a2.end({ + success: false + }, e); + throw e; + }).finally(() => { + document.removeEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement); + }); + } + /** + * This function redeems an authorization code (passed as code) from the eSTS token endpoint. + * This authorization code should be acquired server-side using a confidential client to acquire a spa_code. + * This API is not indended for normal authorization code acquisition and redemption. + * + * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client. + * + * @param request {@link AuthorizationCodeRequest} + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + async acquireTokenByCode(request) { + const correlationId = this.getRequestCorrelationId(request); + this.logger.trace("acquireTokenByCode called", correlationId); + const atbcMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCode, correlationId); + preflightCheck2(this.initialized, atbcMeasurement); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_START, InteractionType.Silent, request); + atbcMeasurement.add({ scenarioId: request.scenarioId }); + try { + if (request.code && request.nativeAccountId) { + throw createBrowserAuthError(spaCodeAndNativeAccountIdPresent); + } else if (request.code) { + const hybridAuthCode = request.code; + let response = this.hybridAuthCodeResponses.get(hybridAuthCode); + if (!response) { + this.logger.verbose("Initiating new acquireTokenByCode request", correlationId); + response = this.acquireTokenByCodeAsync({ + ...request, + correlationId + }).then((result) => { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_SUCCESS, InteractionType.Silent, result); + this.hybridAuthCodeResponses.delete(hybridAuthCode); + atbcMeasurement.end({ + success: true, + isNativeBroker: result.fromNativeBroker, + accessTokenSize: result.accessToken.length, + idTokenSize: result.idToken.length, + accountType: getAccountType(result.account) + }); + return result; + }).catch((error) => { + this.hybridAuthCodeResponses.delete(hybridAuthCode); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, error); + atbcMeasurement.end({ + success: false + }, error); + throw error; + }); + this.hybridAuthCodeResponses.set(hybridAuthCode, response); + } else { + this.logger.verbose("Existing acquireTokenByCode request found", correlationId); + atbcMeasurement.discard(); + } + return await response; + } else if (request.nativeAccountId) { + if (this.canUsePlatformBroker(request, request.nativeAccountId)) { + const result = await this.acquireTokenNative({ + ...request, + correlationId + }, ApiId.acquireTokenByCode, request.nativeAccountId).catch((e) => { + if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) { + this.platformAuthProvider = void 0; + } + throw e; + }); + atbcMeasurement.end({ + accountType: getAccountType(result.account), + success: true + }); + return result; + } else { + throw createBrowserAuthError(unableToAcquireTokenFromNativePlatform); + } + } else { + throw createBrowserAuthError(authCodeOrNativeAccountIdRequired); + } + } catch (e) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE, InteractionType.Silent, null, e); + atbcMeasurement.end({ + success: false + }, e); + throw e; + } + } + /** + * Creates a SilentAuthCodeClient to redeem an authorization code. + * @param request + * @returns Result of the operation to redeem the authorization code + */ + async acquireTokenByCodeAsync(request) { + var _a; + this.logger.trace("acquireTokenByCodeAsync called", request.correlationId); + this.acquireTokenByCodeAsyncMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenByCodeAsync, request.correlationId); + (_a = this.acquireTokenByCodeAsyncMeasurement) == null ? void 0 : _a.increment({ + visibilityChangeCount: 0 + }); + document.addEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement); + const silentAuthCodeClient = this.createSilentAuthCodeClient(request.correlationId); + const silentTokenResult = await silentAuthCodeClient.acquireToken(request).then((response) => { + var _a2; + (_a2 = this.acquireTokenByCodeAsyncMeasurement) == null ? void 0 : _a2.end({ + success: true, + fromCache: response.fromCache, + isNativeBroker: response.fromNativeBroker + }); + return response; + }).catch((tokenRenewalError) => { + var _a2; + (_a2 = this.acquireTokenByCodeAsyncMeasurement) == null ? void 0 : _a2.end({ + success: false + }, tokenRenewalError); + throw tokenRenewalError; + }).finally(() => { + document.removeEventListener("visibilitychange", this.trackPageVisibilityWithMeasurement); + }); + return silentTokenResult; + } + /** + * Attempt to acquire an access token from the cache + * @param silentCacheClient SilentCacheClient + * @param commonRequest CommonSilentFlowRequest + * @param silentRequest SilentRequest + * @returns A promise that, when resolved, returns the access token + */ + async acquireTokenFromCache(commonRequest, cacheLookupPolicy) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenFromCache, commonRequest.correlationId); + switch (cacheLookupPolicy) { + case CacheLookupPolicy.Default: + case CacheLookupPolicy.AccessToken: + case CacheLookupPolicy.AccessTokenAndRefreshToken: + const silentCacheClient = this.createSilentCacheClient(commonRequest.correlationId); + return invokeAsync(silentCacheClient.acquireToken.bind(silentCacheClient), PerformanceEvents.SilentCacheClientAcquireToken, this.logger, this.performanceClient, commonRequest.correlationId)(commonRequest); + default: + throw createClientAuthError(ClientAuthErrorCodes_exports.tokenRefreshRequired); + } + } + /** + * Attempt to acquire an access token via a refresh token + * @param commonRequest CommonSilentFlowRequest + * @param cacheLookupPolicy CacheLookupPolicy + * @returns A promise that, when resolved, returns the access token + */ + async acquireTokenByRefreshToken(commonRequest, cacheLookupPolicy) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenByRefreshToken, commonRequest.correlationId); + switch (cacheLookupPolicy) { + case CacheLookupPolicy.Default: + case CacheLookupPolicy.AccessTokenAndRefreshToken: + case CacheLookupPolicy.RefreshToken: + case CacheLookupPolicy.RefreshTokenAndNetwork: + const silentRefreshClient = this.createSilentRefreshClient(commonRequest.correlationId); + return invokeAsync(silentRefreshClient.acquireToken.bind(silentRefreshClient), PerformanceEvents.SilentRefreshClientAcquireToken, this.logger, this.performanceClient, commonRequest.correlationId)(commonRequest); + default: + throw createClientAuthError(ClientAuthErrorCodes_exports.tokenRefreshRequired); + } + } + /** + * Attempt to acquire an access token via an iframe + * @param request CommonSilentFlowRequest + * @returns A promise that, when resolved, returns the access token + */ + async acquireTokenBySilentIframe(request) { + this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenBySilentIframe, request.correlationId); + const silentIframeClient = this.createSilentIframeClient(request.correlationId); + return invokeAsync(silentIframeClient.acquireToken.bind(silentIframeClient), PerformanceEvents.SilentIframeClientAcquireToken, this.logger, this.performanceClient, request.correlationId)(request); + } + // #endregion + // #region Logout + /** + * Deprecated logout function. Use logoutRedirect or logoutPopup instead + * @param logoutRequest + * @deprecated + */ + async logout(logoutRequest) { + const correlationId = this.getRequestCorrelationId(logoutRequest); + this.logger.warning("logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.", correlationId); + return this.logoutRedirect({ + correlationId, + ...logoutRequest + }); + } + /** + * Use to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param logoutRequest + */ + async logoutRedirect(logoutRequest) { + const correlationId = this.getRequestCorrelationId(logoutRequest); + redirectPreflightCheck(this.initialized, this.config); + this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT); + const redirectClient = this.createRedirectClient(correlationId); + return redirectClient.logout(logoutRequest); + } + /** + * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server + * @param logoutRequest + */ + logoutPopup(logoutRequest) { + try { + const correlationId = this.getRequestCorrelationId(logoutRequest); + preflightCheck(this.initialized); + this.browserStorage.setInteractionInProgress(true, INTERACTION_TYPE.SIGNOUT); + const popupClient = this.createPopupClient(correlationId); + return popupClient.logout(logoutRequest).finally(() => { + this.browserStorage.setInteractionInProgress(false); + }); + } catch (e) { + return Promise.reject(e); + } + } + /** + * Creates a cache interaction client to clear broswer cache. + * @param logoutRequest + */ + async clearCache(logoutRequest) { + if (!this.isBrowserEnvironment) { + this.logger.info("in non-browser environment, returning early."); + return; + } + const correlationId = this.getRequestCorrelationId(logoutRequest); + const cacheClient = this.createSilentCacheClient(correlationId); + return cacheClient.logout(logoutRequest); + } + // #endregion + // #region Account APIs + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter) { + const correlationId = this.getRequestCorrelationId(); + return getAllAccounts(this.logger, this.browserStorage, this.isBrowserEnvironment, correlationId, accountFilter); + } + /** + * Returns the first account found in the cache that matches the account filter passed in. + * @param accountFilter + * @returns The first account found in the cache matching the provided filter or null if no account could be found. + */ + getAccount(accountFilter) { + const correlationId = this.getRequestCorrelationId(); + return getAccount(accountFilter, this.logger, this.browserStorage, correlationId); + } + /** + * Returns the signed in account matching username. + * (the account object is created at the time of successful login) + * or null when no matching account is found. + * This API is provided for convenience but getAccountById should be used for best reliability + * @param username + * @returns The account object stored in MSAL + */ + getAccountByUsername(username) { + const correlationId = this.getRequestCorrelationId(); + return getAccountByUsername(username, this.logger, this.browserStorage, correlationId); + } + /** + * Returns the signed in account matching homeAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param homeAccountId + * @returns The account object stored in MSAL + */ + getAccountByHomeId(homeAccountId) { + const correlationId = this.getRequestCorrelationId(); + return getAccountByHomeId(homeAccountId, this.logger, this.browserStorage, correlationId); + } + /** + * Returns the signed in account matching localAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param localAccountId + * @returns The account object stored in MSAL + */ + getAccountByLocalId(localAccountId) { + const correlationId = this.getRequestCorrelationId(); + return getAccountByLocalId(localAccountId, this.logger, this.browserStorage, correlationId); + } + /** + * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account. + * @param account + */ + setActiveAccount(account) { + const correlationId = this.getRequestCorrelationId(); + setActiveAccount(account, this.browserStorage, correlationId); + } + /** + * Gets the currently active account + */ + getActiveAccount() { + const correlationId = this.getRequestCorrelationId(); + return getActiveAccount(this.browserStorage, correlationId); + } + // #endregion + /** + * Hydrates the cache with the tokens from an AuthenticationResult + * @param result + * @param request + * @returns + */ + async hydrateCache(result, request) { + this.logger.verbose("hydrateCache called"); + const accountEntity = AccountEntity.createFromAccountInfo(result.account, result.cloudGraphHostName, result.msGraphHost); + await this.browserStorage.setAccount(accountEntity, result.correlationId); + if (result.fromNativeBroker) { + this.logger.verbose("Response was from native broker, storing in-memory"); + return this.nativeInternalStorage.hydrateCache(result, request); + } else { + return this.browserStorage.hydrateCache(result, request); + } + } + // #region Helpers + /** + * Acquire a token from native device (e.g. WAM) + * @param request + */ + async acquireTokenNative(request, apiId, accountId, cacheLookupPolicy) { + this.logger.trace("acquireTokenNative called"); + if (!this.platformAuthProvider) { + throw createBrowserAuthError(nativeConnectionNotEstablished); + } + const nativeClient = new PlatformAuthInteractionClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, apiId, this.performanceClient, this.platformAuthProvider, accountId || this.getNativeAccountId(request), this.nativeInternalStorage, request.correlationId); + return nativeClient.acquireToken(request, cacheLookupPolicy); + } + /** + * Returns boolean indicating if this request can use the platform broker + * @param request + */ + canUsePlatformBroker(request, accountId) { + this.logger.trace("canUsePlatformBroker called"); + if (!this.platformAuthProvider) { + this.logger.trace("canUsePlatformBroker: platform broker unavilable, returning false"); + return false; + } + if (!isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, request.authenticationScheme)) { + this.logger.trace("canUsePlatformBroker: isBrokerAvailable returned false, returning false"); + return false; + } + if (request.prompt) { + switch (request.prompt) { + case PromptValue.NONE: + case PromptValue.CONSENT: + case PromptValue.LOGIN: + this.logger.trace("canUsePlatformBroker: prompt is compatible with platform broker flow"); + break; + default: + this.logger.trace(`canUsePlatformBroker: prompt = ${request.prompt} is not compatible with platform broker flow, returning false`); + return false; + } + } + if (!accountId && !this.getNativeAccountId(request)) { + this.logger.trace("canUsePlatformBroker: nativeAccountId is not available, returning false"); + return false; + } + return true; + } + /** + * Get the native accountId from the account + * @param request + * @returns + */ + getNativeAccountId(request) { + const account = request.account || this.getAccount({ + loginHint: request.loginHint, + sid: request.sid + }) || this.getActiveAccount(); + return account && account.nativeAccountId || ""; + } + /** + * Returns new instance of the Popup Interaction Client + * @param correlationId + */ + createPopupClient(correlationId) { + return new PopupClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.platformAuthProvider, correlationId); + } + /** + * Returns new instance of the Redirect Interaction Client + * @param correlationId + */ + createRedirectClient(correlationId) { + return new RedirectClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.nativeInternalStorage, this.platformAuthProvider, correlationId); + } + /** + * Returns new instance of the Silent Iframe Interaction Client + * @param correlationId + */ + createSilentIframeClient(correlationId) { + return new SilentIframeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.ssoSilent, this.performanceClient, this.nativeInternalStorage, this.platformAuthProvider, correlationId); + } + /** + * Returns new instance of the Silent Cache Interaction Client + */ + createSilentCacheClient(correlationId) { + return new SilentCacheClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.platformAuthProvider, correlationId); + } + /** + * Returns new instance of the Silent Refresh Interaction Client + */ + createSilentRefreshClient(correlationId) { + return new SilentRefreshClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, this.performanceClient, this.platformAuthProvider, correlationId); + } + /** + * Returns new instance of the Silent AuthCode Interaction Client + */ + createSilentAuthCodeClient(correlationId) { + return new SilentAuthCodeClient(this.config, this.browserStorage, this.browserCrypto, this.logger, this.eventHandler, this.navigationClient, ApiId.acquireTokenByCode, this.performanceClient, this.platformAuthProvider, correlationId); + } + /** + * Adds event callbacks to array + * @param callback + */ + addEventCallback(callback, eventTypes) { + return this.eventHandler.addEventCallback(callback, eventTypes); + } + /** + * Removes callback with provided id from callback array + * @param callbackId + */ + removeEventCallback(callbackId) { + this.eventHandler.removeEventCallback(callbackId); + } + /** + * Registers a callback to receive performance events. + * + * @param {PerformanceCallbackFunction} callback + * @returns {string} + */ + addPerformanceCallback(callback) { + blockNonBrowserEnvironment(); + return this.performanceClient.addPerformanceCallback(callback); + } + /** + * Removes a callback registered with addPerformanceCallback. + * + * @param {string} callbackId + * @returns {boolean} + */ + removePerformanceCallback(callbackId) { + return this.performanceClient.removePerformanceCallback(callbackId); + } + /** + * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window + * @deprecated These events will be raised by default and this method will be removed in a future major version. + */ + enableAccountStorageEvents() { + if (this.config.cache.cacheLocation !== BrowserCacheLocation.LocalStorage) { + this.logger.info("Account storage events are only available when cacheLocation is set to localStorage"); + return; + } + this.eventHandler.subscribeCrossTab(); + } + /** + * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window + * @deprecated These events will be raised by default and this method will be removed in a future major version. + */ + disableAccountStorageEvents() { + if (this.config.cache.cacheLocation !== BrowserCacheLocation.LocalStorage) { + this.logger.info("Account storage events are only available when cacheLocation is set to localStorage"); + return; + } + this.eventHandler.unsubscribeCrossTab(); + } + /** + * Gets the token cache for the application. + */ + getTokenCache() { + return this.tokenCache; + } + /** + * Returns the logger instance + */ + getLogger() { + return this.logger; + } + /** + * Replaces the default logger set in configurations with new Logger with new configurations + * @param logger Logger instance + */ + setLogger(logger) { + this.logger = logger; + } + /** + * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc. + * @param sku + * @param version + */ + initializeWrapperLibrary(sku, version3) { + this.browserStorage.setWrapperMetadata(sku, version3); + } + /** + * Sets navigation client + * @param navigationClient + */ + setNavigationClient(navigationClient) { + this.navigationClient = navigationClient; + } + /** + * Returns the configuration object + */ + getConfiguration() { + return this.config; + } + /** + * Returns the performance client + */ + getPerformanceClient() { + return this.performanceClient; + } + /** + * Returns the browser env indicator + */ + isBrowserEnv() { + return this.isBrowserEnvironment; + } + /** + * Generates a correlation id for a request if none is provided. + * + * @protected + * @param {?Partial} [request] + * @returns {string} + */ + getRequestCorrelationId(request) { + if (request == null ? void 0 : request.correlationId) { + return request.correlationId; + } + if (this.isBrowserEnvironment) { + return createNewGuid(); + } + return Constants.EMPTY_STRING; + } + // #endregion + /** + * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so + * any code that follows this function will not execute. + * + * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current + * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function. + * + * @param request + */ + async loginRedirect(request) { + const correlationId = this.getRequestCorrelationId(request); + this.logger.verbose("loginRedirect called", correlationId); + return this.acquireTokenRedirect({ + correlationId, + ...request || DEFAULT_REQUEST + }); + } + /** + * Use when initiating the login process via opening a popup window in the user's browser + * + * @param request + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + loginPopup(request) { + const correlationId = this.getRequestCorrelationId(request); + this.logger.verbose("loginPopup called", correlationId); + return this.acquireTokenPopup({ + correlationId, + ...request || DEFAULT_REQUEST + }); + } + /** + * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made. + * + * @param {@link (SilentRequest:type)} + * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object + */ + async acquireTokenSilent(request) { + const correlationId = this.getRequestCorrelationId(request); + const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, correlationId); + atsMeasurement.add({ + cacheLookupPolicy: request.cacheLookupPolicy, + scenarioId: request.scenarioId + }); + preflightCheck2(this.initialized, atsMeasurement); + this.logger.verbose("acquireTokenSilent called", correlationId); + const account = request.account || this.getActiveAccount(); + if (!account) { + throw createBrowserAuthError(noAccountError); + } + atsMeasurement.add({ accountType: getAccountType(account) }); + return this.acquireTokenSilentDeduped(request, account, correlationId).then((result) => { + atsMeasurement.end({ + success: true, + fromCache: result.fromCache, + isNativeBroker: result.fromNativeBroker, + accessTokenSize: result.accessToken.length, + idTokenSize: result.idToken.length + }); + return { + ...result, + state: request.state, + correlationId + // Ensures PWB scenarios can correctly match request to response + }; + }).catch((error) => { + if (error instanceof AuthError) { + error.setCorrelationId(correlationId); + } + atsMeasurement.end({ + success: false + }, error); + throw error; + }); + } + /** + * Checks if identical request is already in flight and returns reference to the existing promise or fires off a new one if this is the first + * @param request + * @param account + * @param correlationId + * @returns + */ + async acquireTokenSilentDeduped(request, account, correlationId) { + const thumbprint = getRequestThumbprint(this.config.auth.clientId, { + ...request, + authority: request.authority || this.config.auth.authority, + correlationId + }, account.homeAccountId); + const silentRequestKey = JSON.stringify(thumbprint); + const inProgressRequest = this.activeSilentTokenRequests.get(silentRequestKey); + if (typeof inProgressRequest === "undefined") { + this.logger.verbose("acquireTokenSilent called for the first time, storing active request", correlationId); + this.performanceClient.addFields({ deduped: false }, correlationId); + const activeRequest = invokeAsync(this.acquireTokenSilentAsync.bind(this), PerformanceEvents.AcquireTokenSilentAsync, this.logger, this.performanceClient, correlationId)({ + ...request, + correlationId + }, account); + this.activeSilentTokenRequests.set(silentRequestKey, activeRequest); + return activeRequest.finally(() => { + this.activeSilentTokenRequests.delete(silentRequestKey); + }); + } else { + this.logger.verbose("acquireTokenSilent has been called previously, returning the result from the first call", correlationId); + this.performanceClient.addFields({ deduped: true }, correlationId); + return inProgressRequest; + } + } + /** + * Silently acquire an access token for a given set of scopes. Will use cached token if available, otherwise will attempt to acquire a new token from the network via refresh token. + * @param {@link (SilentRequest:type)} + * @param {@link (AccountInfo:type)} + * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} + */ + async acquireTokenSilentAsync(request, account) { + const trackPageVisibility = () => this.trackPageVisibility(request.correlationId); + this.performanceClient.addQueueMeasurement(PerformanceEvents.AcquireTokenSilentAsync, request.correlationId); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, request); + if (request.correlationId) { + this.performanceClient.incrementFields({ visibilityChangeCount: 0 }, request.correlationId); + } + document.addEventListener("visibilitychange", trackPageVisibility); + const silentRequest = await invokeAsync(initializeSilentRequest, PerformanceEvents.InitializeSilentRequest, this.logger, this.performanceClient, request.correlationId)(request, account, this.config, this.performanceClient, this.logger); + const cacheLookupPolicy = request.cacheLookupPolicy || CacheLookupPolicy.Default; + const result = this.acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy).catch(async (refreshTokenError) => { + const shouldTryToResolveSilently = checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheLookupPolicy); + if (shouldTryToResolveSilently) { + if (!this.activeIframeRequest) { + let _resolve; + this.activeIframeRequest = [ + new Promise((resolve) => { + _resolve = resolve; + }), + silentRequest.correlationId + ]; + this.logger.verbose("Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.", silentRequest.correlationId); + return invokeAsync(this.acquireTokenBySilentIframe.bind(this), PerformanceEvents.AcquireTokenBySilentIframe, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest).then((iframeResult) => { + _resolve(true); + return iframeResult; + }).catch((e) => { + _resolve(false); + throw e; + }).finally(() => { + this.activeIframeRequest = void 0; + }); + } else if (cacheLookupPolicy !== CacheLookupPolicy.Skip) { + const [activePromise, activeCorrelationId] = this.activeIframeRequest; + this.logger.verbose(`Iframe request is already in progress, awaiting resolution for request with correlationId: ${activeCorrelationId}`, silentRequest.correlationId); + const awaitConcurrentIframeMeasure = this.performanceClient.startMeasurement(PerformanceEvents.AwaitConcurrentIframe, silentRequest.correlationId); + awaitConcurrentIframeMeasure.add({ + awaitIframeCorrelationId: activeCorrelationId + }); + const activePromiseResult = await activePromise; + awaitConcurrentIframeMeasure.end({ + success: activePromiseResult + }); + if (activePromiseResult) { + this.logger.verbose(`Parallel iframe request with correlationId: ${activeCorrelationId} succeeded. Retrying cache and/or RT redemption`, silentRequest.correlationId); + return this.acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy); + } else { + this.logger.info(`Iframe request with correlationId: ${activeCorrelationId} failed. Interaction is required.`); + throw refreshTokenError; + } + } else { + this.logger.warning("Another iframe request is currently in progress and CacheLookupPolicy is set to Skip. This may result in degraded performance and/or reliability for both calls. Please consider changing the CacheLookupPolicy to take advantage of request queuing and token cache.", silentRequest.correlationId); + return invokeAsync(this.acquireTokenBySilentIframe.bind(this), PerformanceEvents.AcquireTokenBySilentIframe, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest); + } + } else { + throw refreshTokenError; + } + }); + return result.then((response) => { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, response); + if (request.correlationId) { + this.performanceClient.addFields({ + fromCache: response.fromCache, + isNativeBroker: response.fromNativeBroker + }, request.correlationId); + } + return response; + }).catch((tokenRenewalError) => { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, tokenRenewalError); + throw tokenRenewalError; + }).finally(() => { + document.removeEventListener("visibilitychange", trackPageVisibility); + }); + } + /** + * AcquireTokenSilent without the iframe fallback. This is used to enable the correct fallbacks in cases where there's a potential for multiple silent requests to be made in parallel and prevent those requests from making concurrent iframe requests. + * @param silentRequest + * @param cacheLookupPolicy + * @returns + */ + async acquireTokenSilentNoIframe(silentRequest, cacheLookupPolicy) { + if (isPlatformAuthAllowed(this.config, this.logger, this.platformAuthProvider, silentRequest.authenticationScheme) && silentRequest.account.nativeAccountId) { + this.logger.verbose("acquireTokenSilent - attempting to acquire token from native platform"); + return this.acquireTokenNative(silentRequest, ApiId.acquireTokenSilent_silentFlow, silentRequest.account.nativeAccountId, cacheLookupPolicy).catch(async (e) => { + if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) { + this.logger.verbose("acquireTokenSilent - native platform unavailable, falling back to web flow"); + this.platformAuthProvider = void 0; + throw createClientAuthError(ClientAuthErrorCodes_exports.tokenRefreshRequired); + } + throw e; + }); + } else { + this.logger.verbose("acquireTokenSilent - attempting to acquire token from web flow"); + if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) { + this.logger.verbose("acquireTokenSilent - cache lookup policy set to AccessToken, attempting to acquire token from local cache"); + } + return invokeAsync(this.acquireTokenFromCache.bind(this), PerformanceEvents.AcquireTokenFromCache, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest, cacheLookupPolicy).catch((cacheError) => { + if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) { + throw cacheError; + } + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_NETWORK_START, InteractionType.Silent, silentRequest); + return invokeAsync(this.acquireTokenByRefreshToken.bind(this), PerformanceEvents.AcquireTokenByRefreshToken, this.logger, this.performanceClient, silentRequest.correlationId)(silentRequest, cacheLookupPolicy); + }); + } + } + /** + * Pre-generates PKCE codes and stores it in local variable + * @param correlationId + */ + async preGeneratePkceCodes(correlationId) { + this.logger.verbose("Generating new PKCE codes"); + this.pkceCode = await invokeAsync(generatePkceCodes, PerformanceEvents.GeneratePkceCodes, this.logger, this.performanceClient, correlationId)(this.performanceClient, this.logger, correlationId); + return Promise.resolve(); + } + /** + * Provides pre-generated PKCE codes, if any + * @param correlationId + */ + getPreGeneratedPkceCodes(correlationId) { + this.logger.verbose("Attempting to pick up pre-generated PKCE codes"); + const res = this.pkceCode ? { ...this.pkceCode } : void 0; + this.pkceCode = void 0; + this.logger.verbose(`${res ? "Found" : "Did not find"} pre-generated PKCE codes`); + this.performanceClient.addFields({ usePreGeneratedPkce: !!res }, correlationId); + return res; + } + logMultipleInstances(performanceEvent) { + const clientId = this.config.auth.clientId; + if (!window) + return; + window.msal = window.msal || {}; + window.msal.clientIds = window.msal.clientIds || []; + const clientIds = window.msal.clientIds; + if (clientIds.length > 0) { + this.logger.verbose("There is already an instance of MSAL.js in the window."); + } + window.msal.clientIds.push(clientId); + collectInstanceStats(clientId, performanceEvent, this.logger); + } +}; +function checkIfRefreshTokenErrorCanBeResolvedSilently(refreshTokenError, cacheLookupPolicy) { + const noInteractionRequired = !(refreshTokenError instanceof InteractionRequiredAuthError && // For refresh token errors, bad_token does not always require interaction (silently resolvable) + refreshTokenError.subError !== InteractionRequiredAuthErrorCodes_exports.badToken); + const refreshTokenRefreshRequired = refreshTokenError.errorCode === BrowserConstants.INVALID_GRANT_ERROR || refreshTokenError.errorCode === ClientAuthErrorCodes_exports.tokenRefreshRequired; + const isSilentlyResolvable = noInteractionRequired && refreshTokenRefreshRequired || refreshTokenError.errorCode === InteractionRequiredAuthErrorCodes_exports.noTokensFound || refreshTokenError.errorCode === InteractionRequiredAuthErrorCodes_exports.refreshTokenExpired; + const tryIframeRenewal = iFrameRenewalPolicies.includes(cacheLookupPolicy); + return isSilentlyResolvable && tryIframeRenewal; +} + +// node_modules/@azure/msal-browser/dist/naa/BridgeError.mjs +function isBridgeError(error) { + return error.status !== void 0; +} + +// node_modules/@azure/msal-browser/dist/naa/mapping/NestedAppAuthAdapter.mjs +var NestedAppAuthAdapter = class { + constructor(clientId, clientCapabilities, crypto, logger) { + this.clientId = clientId; + this.clientCapabilities = clientCapabilities; + this.crypto = crypto; + this.logger = logger; + } + toNaaTokenRequest(request) { + var _a; + let extraParams; + if (request.extraQueryParameters === void 0) { + extraParams = /* @__PURE__ */ new Map(); + } else { + extraParams = new Map(Object.entries(request.extraQueryParameters)); + } + const correlationId = request.correlationId || this.crypto.createNewGuid(); + const claims = RequestParameterBuilder_exports.addClientCapabilitiesToClaims(request.claims, this.clientCapabilities); + const scopes = request.scopes || OIDC_DEFAULT_SCOPES; + const tokenRequest = { + platformBrokerId: (_a = request.account) == null ? void 0 : _a.homeAccountId, + clientId: this.clientId, + authority: request.authority, + scope: scopes.join(" "), + correlationId, + claims: !StringUtils.isEmptyObj(claims) ? claims : void 0, + state: request.state, + authenticationScheme: request.authenticationScheme || AuthenticationScheme.BEARER, + extraParameters: extraParams + }; + return tokenRequest; + } + fromNaaTokenResponse(request, response, reqTimestamp) { + if (!response.token.id_token || !response.token.access_token) { + throw createClientAuthError(ClientAuthErrorCodes_exports.nullOrEmptyToken); + } + const expiresOn = TimeUtils_exports.toDateFromSeconds(reqTimestamp + (response.token.expires_in || 0)); + const idTokenClaims = AuthToken_exports.extractTokenClaims(response.token.id_token, this.crypto.base64Decode); + const account = this.fromNaaAccountInfo(response.account, response.token.id_token, idTokenClaims); + const scopes = response.token.scope || request.scope; + const authenticationResult = { + authority: response.token.authority || account.environment, + uniqueId: account.localAccountId, + tenantId: account.tenantId, + scopes: scopes.split(" "), + account, + idToken: response.token.id_token, + idTokenClaims, + accessToken: response.token.access_token, + fromCache: false, + expiresOn, + tokenType: request.authenticationScheme || AuthenticationScheme.BEARER, + correlationId: request.correlationId, + extExpiresOn: expiresOn, + state: request.state + }; + return authenticationResult; + } + /* + * export type AccountInfo = { + * homeAccountId: string; + * environment: string; + * tenantId: string; + * username: string; + * localAccountId: string; + * name?: string; + * idToken?: string; + * idTokenClaims?: TokenClaims & { + * [key: string]: + * | string + * | number + * | string[] + * | object + * | undefined + * | unknown; + * }; + * nativeAccountId?: string; + * authorityType?: string; + * }; + */ + fromNaaAccountInfo(fromAccount, idToken, idTokenClaims) { + const effectiveIdTokenClaims = idTokenClaims || fromAccount.idTokenClaims; + const localAccountId = fromAccount.localAccountId || (effectiveIdTokenClaims == null ? void 0 : effectiveIdTokenClaims.oid) || (effectiveIdTokenClaims == null ? void 0 : effectiveIdTokenClaims.sub) || ""; + const tenantId = fromAccount.tenantId || (effectiveIdTokenClaims == null ? void 0 : effectiveIdTokenClaims.tid) || ""; + const homeAccountId = fromAccount.homeAccountId || `${localAccountId}.${tenantId}`; + const username = fromAccount.username || (effectiveIdTokenClaims == null ? void 0 : effectiveIdTokenClaims.preferred_username) || ""; + const name3 = fromAccount.name || (effectiveIdTokenClaims == null ? void 0 : effectiveIdTokenClaims.name); + const loginHint = fromAccount.loginHint || (effectiveIdTokenClaims == null ? void 0 : effectiveIdTokenClaims.login_hint); + const tenantProfiles = /* @__PURE__ */ new Map(); + const tenantProfile = buildTenantProfile(homeAccountId, localAccountId, tenantId, effectiveIdTokenClaims); + tenantProfiles.set(tenantId, tenantProfile); + const account = { + homeAccountId, + environment: fromAccount.environment, + tenantId, + username, + localAccountId, + name: name3, + loginHint, + idToken, + idTokenClaims: effectiveIdTokenClaims, + tenantProfiles + }; + return account; + } + /** + * + * @param error BridgeError + * @returns AuthError, ClientAuthError, ClientConfigurationError, ServerError, InteractionRequiredError + */ + fromBridgeError(error) { + if (isBridgeError(error)) { + switch (error.status) { + case BridgeStatusCode.UserCancel: + return new ClientAuthError(ClientAuthErrorCodes_exports.userCanceled); + case BridgeStatusCode.NoNetwork: + return new ClientAuthError(ClientAuthErrorCodes_exports.noNetworkConnectivity); + case BridgeStatusCode.AccountUnavailable: + return new ClientAuthError(ClientAuthErrorCodes_exports.noAccountFound); + case BridgeStatusCode.Disabled: + return new ClientAuthError(ClientAuthErrorCodes_exports.nestedAppAuthBridgeDisabled); + case BridgeStatusCode.NestedAppAuthUnavailable: + return new ClientAuthError(error.code || ClientAuthErrorCodes_exports.nestedAppAuthBridgeDisabled, error.description); + case BridgeStatusCode.TransientError: + case BridgeStatusCode.PersistentError: + return new ServerError(error.code, error.description); + case BridgeStatusCode.UserInteractionRequired: + return new InteractionRequiredAuthError(error.code, error.description); + default: + return new AuthError(error.code, error.description); + } + } else { + return new AuthError("unknown_error", "An unknown error occurred"); + } + } + /** + * Returns an AuthenticationResult from the given cache items + * + * @param account + * @param idToken + * @param accessToken + * @param reqTimestamp + * @returns + */ + toAuthenticationResultFromCache(account, idToken, accessToken, request, correlationId) { + if (!idToken || !accessToken) { + throw createClientAuthError(ClientAuthErrorCodes_exports.nullOrEmptyToken); + } + const idTokenClaims = AuthToken_exports.extractTokenClaims(idToken.secret, this.crypto.base64Decode); + const scopes = accessToken.target || request.scopes.join(" "); + const authenticationResult = { + authority: accessToken.environment || account.environment, + uniqueId: account.localAccountId, + tenantId: account.tenantId, + scopes: scopes.split(" "), + account, + idToken: idToken.secret, + idTokenClaims: idTokenClaims || {}, + accessToken: accessToken.secret, + fromCache: true, + expiresOn: TimeUtils_exports.toDateFromSeconds(accessToken.expiresOn), + extExpiresOn: TimeUtils_exports.toDateFromSeconds(accessToken.extendedExpiresOn), + tokenType: request.authenticationScheme || AuthenticationScheme.BEARER, + correlationId, + state: request.state + }; + return authenticationResult; + } +}; + +// node_modules/@azure/msal-browser/dist/error/NestedAppAuthError.mjs +var NestedAppAuthErrorMessage = { + unsupportedMethod: { + code: "unsupported_method", + desc: "This method is not supported in nested app environment." + } +}; +var NestedAppAuthError = class _NestedAppAuthError extends AuthError { + constructor(errorCode, errorMessage) { + super(errorCode, errorMessage); + Object.setPrototypeOf(this, _NestedAppAuthError.prototype); + this.name = "NestedAppAuthError"; + } + static createUnsupportedError() { + return new _NestedAppAuthError(NestedAppAuthErrorMessage.unsupportedMethod.code, NestedAppAuthErrorMessage.unsupportedMethod.desc); + } +}; + +// node_modules/@azure/msal-browser/dist/controllers/NestedAppAuthController.mjs +var NestedAppAuthController = class _NestedAppAuthController { + constructor(operatingContext) { + this.operatingContext = operatingContext; + const proxy = this.operatingContext.getBridgeProxy(); + if (proxy !== void 0) { + this.bridgeProxy = proxy; + } else { + throw new Error("unexpected: bridgeProxy is undefined"); + } + this.config = operatingContext.getConfig(); + this.logger = this.operatingContext.getLogger(); + this.performanceClient = this.config.telemetry.client; + this.browserCrypto = operatingContext.isBrowserEnvironment() ? new CryptoOps(this.logger, this.performanceClient, true) : DEFAULT_CRYPTO_IMPLEMENTATION; + this.eventHandler = new EventHandler(this.logger); + this.browserStorage = this.operatingContext.isBrowserEnvironment() ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, this.performanceClient, this.eventHandler, buildStaticAuthorityOptions(this.config.auth)) : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger, this.performanceClient, this.eventHandler); + this.nestedAppAuthAdapter = new NestedAppAuthAdapter(this.config.auth.clientId, this.config.auth.clientCapabilities, this.browserCrypto, this.logger); + const accountContext = this.bridgeProxy.getAccountContext(); + this.currentAccountContext = accountContext ? accountContext : null; + } + /** + * Factory function to create a new instance of NestedAppAuthController + * @param operatingContext + * @returns Promise + */ + static async createController(operatingContext) { + const controller = new _NestedAppAuthController(operatingContext); + return Promise.resolve(controller); + } + /** + * Specific implementation of initialize function for NestedAppAuthController + * @returns + */ + async initialize(request, isBroker) { + const initCorrelationId = (request == null ? void 0 : request.correlationId) || createNewGuid(); + await this.browserStorage.initialize(initCorrelationId); + return Promise.resolve(); + } + /** + * Validate the incoming request and add correlationId if not present + * @param request + * @returns + */ + ensureValidRequest(request) { + if (request == null ? void 0 : request.correlationId) { + return request; + } + return { + ...request, + correlationId: this.browserCrypto.createNewGuid() + }; + } + /** + * Internal implementation of acquireTokenInteractive flow + * @param request + * @returns + */ + async acquireTokenInteractive(request) { + const validRequest = this.ensureValidRequest(request); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Popup, validRequest); + const atPopupMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenPopup, validRequest.correlationId); + atPopupMeasurement == null ? void 0 : atPopupMeasurement.add({ nestedAppAuthRequest: true }); + try { + const naaRequest = this.nestedAppAuthAdapter.toNaaTokenRequest(validRequest); + const reqTimestamp = TimeUtils_exports.nowSeconds(); + const response = await this.bridgeProxy.getTokenInteractive(naaRequest); + const result = { + ...this.nestedAppAuthAdapter.fromNaaTokenResponse(naaRequest, response, reqTimestamp) + }; + try { + await this.hydrateCache(result, request); + } catch (error) { + this.logger.warningPii(`Failed to hydrate cache. Error: ${error}`, validRequest.correlationId); + } + this.currentAccountContext = { + homeAccountId: result.account.homeAccountId, + environment: result.account.environment, + tenantId: result.account.tenantId + }; + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Popup, result); + atPopupMeasurement.add({ + accessTokenSize: result.accessToken.length, + idTokenSize: result.idToken.length + }); + atPopupMeasurement.end({ + success: true, + requestId: result.requestId + }); + return result; + } catch (e) { + const error = e instanceof AuthError ? e : this.nestedAppAuthAdapter.fromBridgeError(e); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Popup, null, e); + atPopupMeasurement.end({ + success: false + }, e); + throw error; + } + } + /** + * Internal implementation of acquireTokenSilent flow + * @param request + * @returns + */ + async acquireTokenSilentInternal(request) { + const validRequest = this.ensureValidRequest(request); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_START, InteractionType.Silent, validRequest); + const result = await this.acquireTokenFromCache(validRequest); + if (result) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, result); + return result; + } + const ssoSilentMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.SsoSilent, validRequest.correlationId); + ssoSilentMeasurement == null ? void 0 : ssoSilentMeasurement.increment({ + visibilityChangeCount: 0 + }); + ssoSilentMeasurement == null ? void 0 : ssoSilentMeasurement.add({ + nestedAppAuthRequest: true + }); + try { + const naaRequest = this.nestedAppAuthAdapter.toNaaTokenRequest(validRequest); + const reqTimestamp = TimeUtils_exports.nowSeconds(); + const response = await this.bridgeProxy.getTokenSilent(naaRequest); + const result2 = this.nestedAppAuthAdapter.fromNaaTokenResponse(naaRequest, response, reqTimestamp); + try { + await this.hydrateCache(result2, request); + } catch (error) { + this.logger.warningPii(`Failed to hydrate cache. Error: ${error}`, validRequest.correlationId); + } + this.currentAccountContext = { + homeAccountId: result2.account.homeAccountId, + environment: result2.account.environment, + tenantId: result2.account.tenantId + }; + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, result2); + ssoSilentMeasurement == null ? void 0 : ssoSilentMeasurement.add({ + accessTokenSize: result2.accessToken.length, + idTokenSize: result2.idToken.length + }); + ssoSilentMeasurement == null ? void 0 : ssoSilentMeasurement.end({ + success: true, + requestId: result2.requestId + }); + return result2; + } catch (e) { + const error = e instanceof AuthError ? e : this.nestedAppAuthAdapter.fromBridgeError(e); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null, e); + ssoSilentMeasurement == null ? void 0 : ssoSilentMeasurement.end({ + success: false + }, e); + throw error; + } + } + /** + * acquires tokens from cache + * @param request + * @returns + */ + async acquireTokenFromCache(request) { + const atsMeasurement = this.performanceClient.startMeasurement(PerformanceEvents.AcquireTokenSilent, request.correlationId); + atsMeasurement == null ? void 0 : atsMeasurement.add({ + nestedAppAuthRequest: true + }); + if (request.claims) { + this.logger.verbose("Claims are present in the request, skipping cache lookup"); + return null; + } + if (request.forceRefresh) { + this.logger.verbose("forceRefresh is set to true, skipping cache lookup"); + return null; + } + let result = null; + if (!request.cacheLookupPolicy) { + request.cacheLookupPolicy = CacheLookupPolicy.Default; + } + switch (request.cacheLookupPolicy) { + case CacheLookupPolicy.Default: + case CacheLookupPolicy.AccessToken: + case CacheLookupPolicy.AccessTokenAndRefreshToken: + result = await this.acquireTokenFromCacheInternal(request); + break; + default: + return null; + } + if (result) { + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_SUCCESS, InteractionType.Silent, result); + atsMeasurement == null ? void 0 : atsMeasurement.add({ + accessTokenSize: result == null ? void 0 : result.accessToken.length, + idTokenSize: result == null ? void 0 : result.idToken.length + }); + atsMeasurement == null ? void 0 : atsMeasurement.end({ + success: true + }); + return result; + } + this.logger.warning("Cached tokens are not found for the account, proceeding with silent token request."); + this.eventHandler.emitEvent(EventType.ACQUIRE_TOKEN_FAILURE, InteractionType.Silent, null); + atsMeasurement == null ? void 0 : atsMeasurement.end({ + success: false + }); + return null; + } + /** + * + * @param request + * @returns + */ + async acquireTokenFromCacheInternal(request) { + var _a; + const accountContext = this.bridgeProxy.getAccountContext() || this.currentAccountContext; + let currentAccount = null; + const correlationId = request.correlationId || this.browserCrypto.createNewGuid(); + if (accountContext) { + currentAccount = getAccount(accountContext, this.logger, this.browserStorage, correlationId); + } + if (!currentAccount) { + this.logger.verbose("No active account found, falling back to the host"); + return Promise.resolve(null); + } + this.logger.verbose("active account found, attempting to acquire token silently"); + const authRequest = { + ...request, + correlationId: request.correlationId || this.browserCrypto.createNewGuid(), + authority: request.authority || currentAccount.environment, + scopes: ((_a = request.scopes) == null ? void 0 : _a.length) ? request.scopes : [...OIDC_DEFAULT_SCOPES] + }; + const tokenKeys = this.browserStorage.getTokenKeys(); + const cachedAccessToken = this.browserStorage.getAccessToken(currentAccount, authRequest, tokenKeys, currentAccount.tenantId); + if (!cachedAccessToken) { + this.logger.verbose("No cached access token found"); + return Promise.resolve(null); + } else if (TimeUtils_exports.wasClockTurnedBack(cachedAccessToken.cachedAt) || TimeUtils_exports.isTokenExpired(cachedAccessToken.expiresOn, this.config.system.tokenRenewalOffsetSeconds)) { + this.logger.verbose("Cached access token has expired"); + return Promise.resolve(null); + } + const cachedIdToken = this.browserStorage.getIdToken(currentAccount, authRequest.correlationId, tokenKeys, currentAccount.tenantId, this.performanceClient); + if (!cachedIdToken) { + this.logger.verbose("No cached id token found"); + return Promise.resolve(null); + } + return this.nestedAppAuthAdapter.toAuthenticationResultFromCache(currentAccount, cachedIdToken, cachedAccessToken, authRequest, authRequest.correlationId); + } + /** + * acquireTokenPopup flow implementation + * @param request + * @returns + */ + async acquireTokenPopup(request) { + return this.acquireTokenInteractive(request); + } + /** + * acquireTokenRedirect flow is not supported in nested app auth + * @param request + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + acquireTokenRedirect(request) { + throw NestedAppAuthError.createUnsupportedError(); + } + /** + * acquireTokenSilent flow implementation + * @param silentRequest + * @returns + */ + async acquireTokenSilent(silentRequest) { + return this.acquireTokenSilentInternal(silentRequest); + } + /** + * Hybrid flow is not currently supported in nested app auth + * @param request + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + acquireTokenByCode(request) { + throw NestedAppAuthError.createUnsupportedError(); + } + /** + * acquireTokenNative flow is not currently supported in nested app auth + * @param request + * @param apiId + * @param accountId + */ + acquireTokenNative(request, apiId, accountId) { + throw NestedAppAuthError.createUnsupportedError(); + } + /** + * acquireTokenByRefreshToken flow is not currently supported in nested app auth + * @param commonRequest + * @param silentRequest + */ + acquireTokenByRefreshToken(commonRequest, silentRequest) { + throw NestedAppAuthError.createUnsupportedError(); + } + /** + * Adds event callbacks to array + * @param callback + * @param eventTypes + */ + addEventCallback(callback, eventTypes) { + return this.eventHandler.addEventCallback(callback, eventTypes); + } + /** + * Removes callback with provided id from callback array + * @param callbackId + */ + removeEventCallback(callbackId) { + this.eventHandler.removeEventCallback(callbackId); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + addPerformanceCallback(callback) { + throw NestedAppAuthError.createUnsupportedError(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + removePerformanceCallback(callbackId) { + throw NestedAppAuthError.createUnsupportedError(); + } + enableAccountStorageEvents() { + throw NestedAppAuthError.createUnsupportedError(); + } + disableAccountStorageEvents() { + throw NestedAppAuthError.createUnsupportedError(); + } + // #region Account APIs + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter) { + const correlationId = this.browserCrypto.createNewGuid(); + return getAllAccounts(this.logger, this.browserStorage, this.isBrowserEnv(), correlationId, accountFilter); + } + /** + * Returns the first account found in the cache that matches the account filter passed in. + * @param accountFilter + * @returns The first account found in the cache matching the provided filter or null if no account could be found. + */ + getAccount(accountFilter) { + const correlationId = this.browserCrypto.createNewGuid(); + return getAccount(accountFilter, this.logger, this.browserStorage, correlationId); + } + /** + * Returns the signed in account matching username. + * (the account object is created at the time of successful login) + * or null when no matching account is found. + * This API is provided for convenience but getAccountById should be used for best reliability + * @param username + * @returns The account object stored in MSAL + */ + getAccountByUsername(username) { + const correlationId = this.browserCrypto.createNewGuid(); + return getAccountByUsername(username, this.logger, this.browserStorage, correlationId); + } + /** + * Returns the signed in account matching homeAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param homeAccountId + * @returns The account object stored in MSAL + */ + getAccountByHomeId(homeAccountId) { + const correlationId = this.browserCrypto.createNewGuid(); + return getAccountByHomeId(homeAccountId, this.logger, this.browserStorage, correlationId); + } + /** + * Returns the signed in account matching localAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param localAccountId + * @returns The account object stored in MSAL + */ + getAccountByLocalId(localAccountId) { + const correlationId = this.browserCrypto.createNewGuid(); + return getAccountByLocalId(localAccountId, this.logger, this.browserStorage, correlationId); + } + /** + * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account. + * @param account + */ + setActiveAccount(account) { + const correlationId = this.browserCrypto.createNewGuid(); + return setActiveAccount(account, this.browserStorage, correlationId); + } + /** + * Gets the currently active account + */ + getActiveAccount() { + const correlationId = this.browserCrypto.createNewGuid(); + return getActiveAccount(this.browserStorage, correlationId); + } + // #endregion + handleRedirectPromise(hash) { + return Promise.resolve(null); + } + loginPopup(request) { + return this.acquireTokenInteractive(request || DEFAULT_REQUEST); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + loginRedirect(request) { + throw NestedAppAuthError.createUnsupportedError(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + logout(logoutRequest) { + throw NestedAppAuthError.createUnsupportedError(); + } + logoutRedirect(logoutRequest) { + throw NestedAppAuthError.createUnsupportedError(); + } + logoutPopup(logoutRequest) { + throw NestedAppAuthError.createUnsupportedError(); + } + ssoSilent(request) { + return this.acquireTokenSilentInternal(request); + } + getTokenCache() { + throw NestedAppAuthError.createUnsupportedError(); + } + /** + * Returns the logger instance + */ + getLogger() { + return this.logger; + } + /** + * Replaces the default logger set in configurations with new Logger with new configurations + * @param logger Logger instance + */ + setLogger(logger) { + this.logger = logger; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + initializeWrapperLibrary(sku, version3) { + return; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setNavigationClient(navigationClient) { + this.logger.warning("setNavigationClient is not supported in nested app auth"); + } + getConfiguration() { + return this.config; + } + isBrowserEnv() { + return this.operatingContext.isBrowserEnvironment(); + } + getBrowserCrypto() { + return this.browserCrypto; + } + getPerformanceClient() { + throw NestedAppAuthError.createUnsupportedError(); + } + getRedirectResponse() { + throw NestedAppAuthError.createUnsupportedError(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async clearCache(logoutRequest) { + throw NestedAppAuthError.createUnsupportedError(); + } + async hydrateCache(result, request) { + this.logger.verbose("hydrateCache called"); + const accountEntity = AccountEntity.createFromAccountInfo(result.account, result.cloudGraphHostName, result.msGraphHost); + await this.browserStorage.setAccount(accountEntity, result.correlationId); + return this.browserStorage.hydrateCache(result, request); + } +}; + +// node_modules/@azure/msal-browser/dist/controllers/ControllerFactory.mjs +async function createV3Controller(config, request) { + const standard = new StandardOperatingContext(config); + await standard.initialize(); + return StandardController.createController(standard, request); +} +async function createController(config) { + const standard = new StandardOperatingContext(config); + const nestedApp = new NestedAppOperatingContext(config); + const operatingContexts = [standard.initialize(), nestedApp.initialize()]; + await Promise.all(operatingContexts); + if (nestedApp.isAvailable() && config.auth.supportsNestedAppAuth) { + return NestedAppAuthController.createController(nestedApp); + } else if (standard.isAvailable()) { + return StandardController.createController(standard); + } else { + return null; + } +} + +// node_modules/@azure/msal-browser/dist/app/PublicClientApplication.mjs +var PublicClientApplication = class _PublicClientApplication { + /** + * Creates StandardController and passes it to the PublicClientApplication + * + * @param configuration {Configuration} + */ + static async createPublicClientApplication(configuration) { + const controller = await createV3Controller(configuration); + const pca = new _PublicClientApplication(configuration, controller); + return pca; + } + /** + * @constructor + * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object + * + * Important attributes in the Configuration object for auth are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview + * - authority: the authority URL for your application. + * - redirect_uri: the uri of your application registered in the portal. + * + * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens. + * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here} + * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/ + * Full B2C functionality will be available in this library in future versions. + * + * @param configuration Object for the MSAL PublicClientApplication instance + * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor) + */ + constructor(configuration, controller) { + this.isBroker = false; + this.controller = controller || new StandardController(new StandardOperatingContext(configuration)); + } + /** + * Initializer function to perform async startup tasks such as connecting to WAM extension + * @param request {?InitializeApplicationRequest} + */ + async initialize(request) { + return this.controller.initialize(request, this.isBroker); + } + /** + * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser + * + * @param request + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + async acquireTokenPopup(request) { + return this.controller.acquireTokenPopup(request); + } + /** + * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects + * the page, so any code that follows this function will not execute. + * + * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current + * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function. + * + * @param request + */ + acquireTokenRedirect(request) { + return this.controller.acquireTokenRedirect(request); + } + /** + * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made. + * + * @param {@link (SilentRequest:type)} + * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object + */ + acquireTokenSilent(silentRequest) { + return this.controller.acquireTokenSilent(silentRequest); + } + /** + * This function redeems an authorization code (passed as code) from the eSTS token endpoint. + * This authorization code should be acquired server-side using a confidential client to acquire a spa_code. + * This API is not indended for normal authorization code acquisition and redemption. + * + * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client. + * + * @param request {@link AuthorizationCodeRequest} + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + acquireTokenByCode(request) { + return this.controller.acquireTokenByCode(request); + } + /** + * Adds event callbacks to array + * @param callback + * @param eventTypes + */ + addEventCallback(callback, eventTypes) { + return this.controller.addEventCallback(callback, eventTypes); + } + /** + * Removes callback with provided id from callback array + * @param callbackId + */ + removeEventCallback(callbackId) { + return this.controller.removeEventCallback(callbackId); + } + /** + * Registers a callback to receive performance events. + * + * @param {PerformanceCallbackFunction} callback + * @returns {string} + */ + addPerformanceCallback(callback) { + return this.controller.addPerformanceCallback(callback); + } + /** + * Removes a callback registered with addPerformanceCallback. + * + * @param {string} callbackId + * @returns {boolean} + */ + removePerformanceCallback(callbackId) { + return this.controller.removePerformanceCallback(callbackId); + } + /** + * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window + */ + enableAccountStorageEvents() { + this.controller.enableAccountStorageEvents(); + } + /** + * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window + */ + disableAccountStorageEvents() { + this.controller.disableAccountStorageEvents(); + } + /** + * Returns the first account found in the cache that matches the account filter passed in. + * @param accountFilter + * @returns The first account found in the cache matching the provided filter or null if no account could be found. + */ + getAccount(accountFilter) { + return this.controller.getAccount(accountFilter); + } + /** + * Returns the signed in account matching homeAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param homeAccountId + * @returns The account object stored in MSAL + * @deprecated - Use getAccount instead + */ + getAccountByHomeId(homeAccountId) { + return this.controller.getAccountByHomeId(homeAccountId); + } + /** + * Returns the signed in account matching localAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param localAccountId + * @returns The account object stored in MSAL + * @deprecated - Use getAccount instead + */ + getAccountByLocalId(localId) { + return this.controller.getAccountByLocalId(localId); + } + /** + * Returns the signed in account matching username. + * (the account object is created at the time of successful login) + * or null when no matching account is found. + * This API is provided for convenience but getAccountById should be used for best reliability + * @param userName + * @returns The account object stored in MSAL + * @deprecated - Use getAccount instead + */ + getAccountByUsername(userName) { + return this.controller.getAccountByUsername(userName); + } + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter) { + return this.controller.getAllAccounts(accountFilter); + } + /** + * Event handler function which allows users to fire events after the PublicClientApplication object + * has loaded during redirect flows. This should be invoked on all page loads involved in redirect + * auth flows. + * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value. + * @returns Token response or null. If the return value is null, then no auth redirect was detected. + */ + handleRedirectPromise(hash) { + return this.controller.handleRedirectPromise(hash); + } + /** + * Use when initiating the login process via opening a popup window in the user's browser + * + * @param request + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + loginPopup(request) { + return this.controller.loginPopup(request); + } + /** + * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so + * any code that follows this function will not execute. + * + * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current + * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function. + * + * @param request + */ + loginRedirect(request) { + return this.controller.loginRedirect(request); + } + /** + * Deprecated logout function. Use logoutRedirect or logoutPopup instead + * @param logoutRequest + * @deprecated + */ + logout(logoutRequest) { + return this.controller.logout(logoutRequest); + } + /** + * Use to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param logoutRequest + */ + logoutRedirect(logoutRequest) { + return this.controller.logoutRedirect(logoutRequest); + } + /** + * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server + * @param logoutRequest + */ + logoutPopup(logoutRequest) { + return this.controller.logoutPopup(logoutRequest); + } + /** + * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work: + * - Any browser using a form of Intelligent Tracking Prevention + * - If there is not an established session with the service + * + * In these cases, the request must be done inside a popup or full frame redirect. + * + * For the cases where interaction is required, you cannot send a request with prompt=none. + * + * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as + * you session on the server still exists. + * @param request {@link SsoSilentRequest} + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + ssoSilent(request) { + return this.controller.ssoSilent(request); + } + /** + * Gets the token cache for the application. + */ + getTokenCache() { + return this.controller.getTokenCache(); + } + /** + * Returns the logger instance + */ + getLogger() { + return this.controller.getLogger(); + } + /** + * Replaces the default logger set in configurations with new Logger with new configurations + * @param logger Logger instance + */ + setLogger(logger) { + this.controller.setLogger(logger); + } + /** + * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account. + * @param account + */ + setActiveAccount(account) { + this.controller.setActiveAccount(account); + } + /** + * Gets the currently active account + */ + getActiveAccount() { + return this.controller.getActiveAccount(); + } + /** + * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc. + * @param sku + * @param version + */ + initializeWrapperLibrary(sku, version3) { + return this.controller.initializeWrapperLibrary(sku, version3); + } + /** + * Sets navigation client + * @param navigationClient + */ + setNavigationClient(navigationClient) { + this.controller.setNavigationClient(navigationClient); + } + /** + * Returns the configuration object + * @internal + */ + getConfiguration() { + return this.controller.getConfiguration(); + } + /** + * Hydrates cache with the tokens and account in the AuthenticationResult object + * @param result + * @param request - The request object that was used to obtain the AuthenticationResult + * @returns + */ + async hydrateCache(result, request) { + return this.controller.hydrateCache(result, request); + } + /** + * Clears tokens and account from the browser cache. + * @param logoutRequest + */ + clearCache(logoutRequest) { + return this.controller.clearCache(logoutRequest); + } +}; +async function createNestablePublicClientApplication(configuration) { + const nestedAppAuth = new NestedAppOperatingContext(configuration); + await nestedAppAuth.initialize(); + if (nestedAppAuth.isAvailable()) { + const controller = new NestedAppAuthController(nestedAppAuth); + const nestablePCA = new PublicClientApplication(configuration, controller); + await nestablePCA.initialize(); + return nestablePCA; + } + return createStandardPublicClientApplication(configuration); +} +async function createStandardPublicClientApplication(configuration) { + const pca = new PublicClientApplication(configuration); + await pca.initialize(); + return pca; +} + +// node_modules/@azure/msal-browser/dist/controllers/UnknownOperatingContextController.mjs +var UnknownOperatingContextController = class { + constructor(operatingContext) { + this.initialized = false; + this.operatingContext = operatingContext; + this.isBrowserEnvironment = this.operatingContext.isBrowserEnvironment(); + this.config = operatingContext.getConfig(); + this.logger = operatingContext.getLogger(); + this.performanceClient = this.config.telemetry.client; + this.browserCrypto = this.isBrowserEnvironment ? new CryptoOps(this.logger, this.performanceClient) : DEFAULT_CRYPTO_IMPLEMENTATION; + this.eventHandler = new EventHandler(this.logger); + this.browserStorage = this.isBrowserEnvironment ? new BrowserCacheManager(this.config.auth.clientId, this.config.cache, this.browserCrypto, this.logger, this.performanceClient, this.eventHandler, void 0) : DEFAULT_BROWSER_CACHE_MANAGER(this.config.auth.clientId, this.logger, this.performanceClient, this.eventHandler); + } + getBrowserStorage() { + return this.browserStorage; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getAccount(accountFilter) { + return null; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getAccountByHomeId(homeAccountId) { + return null; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getAccountByLocalId(localAccountId) { + return null; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + getAccountByUsername(username) { + return null; + } + getAllAccounts() { + return []; + } + initialize() { + this.initialized = true; + return Promise.resolve(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + acquireTokenPopup(request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + acquireTokenRedirect(request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return Promise.resolve(); + } + acquireTokenSilent(silentRequest) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + acquireTokenByCode(request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + acquireTokenNative(request, apiId, accountId) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + acquireTokenByRefreshToken(commonRequest, silentRequest) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + addEventCallback(callback, eventTypes) { + return null; + } + removeEventCallback(callbackId) { + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + addPerformanceCallback(callback) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return ""; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + removePerformanceCallback(callbackId) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return true; + } + enableAccountStorageEvents() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } + disableAccountStorageEvents() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } + handleRedirectPromise(hash) { + blockAPICallsBeforeInitialize(this.initialized); + return Promise.resolve(null); + } + loginPopup(request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + loginRedirect(request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + logout(logoutRequest) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + logoutRedirect(logoutRequest) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + logoutPopup(logoutRequest) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + ssoSilent(request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + getTokenCache() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + getLogger() { + return this.logger; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setLogger(logger) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setActiveAccount(account) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } + getActiveAccount() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return null; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + initializeWrapperLibrary(sku, version3) { + this.browserStorage.setWrapperMetadata(sku, version3); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setNavigationClient(navigationClient) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } + getConfiguration() { + return this.config; + } + isBrowserEnv() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return true; + } + getBrowserCrypto() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + getPerformanceClient() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + getRedirectResponse() { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + return {}; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async clearCache(logoutRequest) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async hydrateCache(result, request) { + blockAPICallsBeforeInitialize(this.initialized); + blockNonBrowserEnvironment(); + } +}; + +// node_modules/@azure/msal-browser/dist/operatingcontext/UnknownOperatingContext.mjs +var UnknownOperatingContext = class _UnknownOperatingContext extends BaseOperatingContext { + /** + * Returns the unique identifier for this operating context + * @returns string + */ + getId() { + return _UnknownOperatingContext.ID; + } + /** + * Return the module name. Intended for use with import() to enable dynamic import + * of the implementation associated with this operating context + * @returns + */ + getModuleName() { + return _UnknownOperatingContext.MODULE_NAME; + } + /** + * Checks whether the operating context is available. + * Confirms that the code is running a browser rather. This is required. + * @returns Promise indicating whether this operating context is currently available. + */ + async initialize() { + return true; + } +}; +UnknownOperatingContext.MODULE_NAME = ""; +UnknownOperatingContext.ID = "UnknownOperatingContext"; + +// node_modules/@azure/msal-browser/dist/app/PublicClientNext.mjs +var PublicClientNext = class _PublicClientNext { + static async createPublicClientApplication(configuration) { + const controller = await createController(configuration); + let pca; + if (controller !== null) { + pca = new _PublicClientNext(configuration, controller); + } else { + pca = new _PublicClientNext(configuration); + } + return pca; + } + /** + * @constructor + * Constructor for the PublicClientNext used to instantiate the PublicClientNext object + * + * Important attributes in the Configuration object for auth are: + * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview + * - authority: the authority URL for your application. + * - redirect_uri: the uri of your application registered in the portal. + * + * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens. + * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here} + * If your application supports Accounts in one organizational directory, replace "Enter_the_Tenant_Info_Here" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com). + * If your application supports Accounts in any organizational directory, replace "Enter_the_Tenant_Info_Here" value with organizations. + * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace "Enter_the_Tenant_Info_Here" value with common. + * To restrict support to Personal Microsoft accounts only, replace "Enter_the_Tenant_Info_Here" value with consumers. + * + * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/ + * Full B2C functionality will be available in this library in future versions. + * + * @param configuration Object for the MSAL PublicClientApplication instance + * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor) + */ + constructor(configuration, controller) { + this.configuration = configuration; + if (controller) { + this.controller = controller; + } else { + const operatingContext = new UnknownOperatingContext(configuration); + this.controller = new UnknownOperatingContextController(operatingContext); + } + } + /** + * Initializer function to perform async startup tasks such as connecting to WAM extension + */ + async initialize() { + if (this.controller instanceof UnknownOperatingContextController) { + const result = await createController(this.configuration); + if (result !== null) { + this.controller = result; + } + return this.controller.initialize(); + } + return Promise.resolve(); + } + /** + * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser + * + * @param request + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + async acquireTokenPopup(request) { + return this.controller.acquireTokenPopup(request); + } + /** + * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects + * the page, so any code that follows this function will not execute. + * + * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current + * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function. + * + * @param request + */ + acquireTokenRedirect(request) { + return this.controller.acquireTokenRedirect(request); + } + /** + * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made. + * + * @param {@link (SilentRequest:type)} + * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object + */ + acquireTokenSilent(silentRequest) { + return this.controller.acquireTokenSilent(silentRequest); + } + /** + * This function redeems an authorization code (passed as code) from the eSTS token endpoint. + * This authorization code should be acquired server-side using a confidential client to acquire a spa_code. + * This API is not indended for normal authorization code acquisition and redemption. + * + * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client. + * + * @param request {@link AuthorizationCodeRequest} + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + acquireTokenByCode(request) { + return this.controller.acquireTokenByCode(request); + } + /** + * Adds event callbacks to array + * @param callback + */ + addEventCallback(callback, eventTypes) { + return this.controller.addEventCallback(callback, eventTypes); + } + /** + * Removes callback with provided id from callback array + * @param callbackId + */ + removeEventCallback(callbackId) { + return this.controller.removeEventCallback(callbackId); + } + /** + * Registers a callback to receive performance events. + * + * @param {PerformanceCallbackFunction} callback + * @returns {string} + */ + addPerformanceCallback(callback) { + return this.controller.addPerformanceCallback(callback); + } + /** + * Removes a callback registered with addPerformanceCallback. + * + * @param {string} callbackId + * @returns {boolean} + */ + removePerformanceCallback(callbackId) { + return this.controller.removePerformanceCallback(callbackId); + } + /** + * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window + */ + enableAccountStorageEvents() { + this.controller.enableAccountStorageEvents(); + } + /** + * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window + */ + disableAccountStorageEvents() { + this.controller.disableAccountStorageEvents(); + } + /** + * Returns the first account found in the cache that matches the account filter passed in. + * @param accountFilter + * @returns The first account found in the cache matching the provided filter or null if no account could be found. + */ + getAccount(accountFilter) { + return this.controller.getAccount(accountFilter); + } + /** + * Returns the signed in account matching homeAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param homeAccountId + * @returns The account object stored in MSAL + * @deprecated - Use getAccount instead + */ + getAccountByHomeId(homeAccountId) { + return this.controller.getAccountByHomeId(homeAccountId); + } + /** + * Returns the signed in account matching localAccountId. + * (the account object is created at the time of successful login) + * or null when no matching account is found + * @param localAccountId + * @returns The account object stored in MSAL + * @deprecated - Use getAccount instead + */ + getAccountByLocalId(localId) { + return this.controller.getAccountByLocalId(localId); + } + /** + * Returns the signed in account matching username. + * (the account object is created at the time of successful login) + * or null when no matching account is found. + * This API is provided for convenience but getAccountById should be used for best reliability + * @param userName + * @returns The account object stored in MSAL + * @deprecated - Use getAccount instead + */ + getAccountByUsername(userName) { + return this.controller.getAccountByUsername(userName); + } + /** + * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned. + * @param accountFilter - (Optional) filter to narrow down the accounts returned + * @returns Array of AccountInfo objects in cache + */ + getAllAccounts(accountFilter) { + return this.controller.getAllAccounts(accountFilter); + } + /** + * Event handler function which allows users to fire events after the PublicClientApplication object + * has loaded during redirect flows. This should be invoked on all page loads involved in redirect + * auth flows. + * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value. + * @returns Token response or null. If the return value is null, then no auth redirect was detected. + */ + handleRedirectPromise(hash) { + return this.controller.handleRedirectPromise(hash); + } + /** + * Use when initiating the login process via opening a popup window in the user's browser + * + * @param request + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + loginPopup(request) { + return this.controller.loginPopup(request); + } + /** + * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so + * any code that follows this function will not execute. + * + * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current + * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function. + * + * @param request + */ + loginRedirect(request) { + return this.controller.loginRedirect(request); + } + /** + * Deprecated logout function. Use logoutRedirect or logoutPopup instead + * @param logoutRequest + * @deprecated + */ + logout(logoutRequest) { + return this.controller.logout(logoutRequest); + } + /** + * Use to log out the current user, and redirect the user to the postLogoutRedirectUri. + * Default behaviour is to redirect the user to `window.location.href`. + * @param logoutRequest + */ + logoutRedirect(logoutRequest) { + return this.controller.logoutRedirect(logoutRequest); + } + /** + * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server + * @param logoutRequest + */ + logoutPopup(logoutRequest) { + return this.controller.logoutPopup(logoutRequest); + } + /** + * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work: + * - Any browser using a form of Intelligent Tracking Prevention + * - If there is not an established session with the service + * + * In these cases, the request must be done inside a popup or full frame redirect. + * + * For the cases where interaction is required, you cannot send a request with prompt=none. + * + * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as + * you session on the server still exists. + * @param request {@link SsoSilentRequest} + * + * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised. + */ + ssoSilent(request) { + return this.controller.ssoSilent(request); + } + /** + * Gets the token cache for the application. + */ + getTokenCache() { + return this.controller.getTokenCache(); + } + /** + * Returns the logger instance + */ + getLogger() { + return this.controller.getLogger(); + } + /** + * Replaces the default logger set in configurations with new Logger with new configurations + * @param logger Logger instance + */ + setLogger(logger) { + this.controller.setLogger(logger); + } + /** + * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account. + * @param account + */ + setActiveAccount(account) { + this.controller.setActiveAccount(account); + } + /** + * Gets the currently active account + */ + getActiveAccount() { + return this.controller.getActiveAccount(); + } + /** + * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc. + * @param sku + * @param version + */ + initializeWrapperLibrary(sku, version3) { + return this.controller.initializeWrapperLibrary(sku, version3); + } + /** + * Sets navigation client + * @param navigationClient + */ + setNavigationClient(navigationClient) { + this.controller.setNavigationClient(navigationClient); + } + /** + * Returns the configuration object + * @internal + */ + getConfiguration() { + return this.controller.getConfiguration(); + } + /** + * Hydrates cache with the tokens and account in the AuthenticationResult object + * @param result + * @param request - The request object that was used to obtain the AuthenticationResult + * @returns + */ + async hydrateCache(result, request) { + return this.controller.hydrateCache(result, request); + } + /** + * Clears tokens and account from the browser cache. + * @param logoutRequest + */ + clearCache(logoutRequest) { + return this.controller.clearCache(logoutRequest); + } +}; + +// node_modules/@azure/msal-browser/dist/app/IPublicClientApplication.mjs +var stubbedPublicClientApplication = { + initialize: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + acquireTokenPopup: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + acquireTokenRedirect: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + acquireTokenSilent: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + acquireTokenByCode: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + getAllAccounts: () => { + return []; + }, + getAccount: () => { + return null; + }, + getAccountByHomeId: () => { + return null; + }, + getAccountByUsername: () => { + return null; + }, + getAccountByLocalId: () => { + return null; + }, + handleRedirectPromise: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + loginPopup: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + loginRedirect: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + logout: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + logoutRedirect: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + logoutPopup: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + ssoSilent: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + addEventCallback: () => { + return null; + }, + removeEventCallback: () => { + return; + }, + addPerformanceCallback: () => { + return ""; + }, + removePerformanceCallback: () => { + return false; + }, + enableAccountStorageEvents: () => { + return; + }, + disableAccountStorageEvents: () => { + return; + }, + getTokenCache: () => { + throw createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled); + }, + getLogger: () => { + throw createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled); + }, + setLogger: () => { + return; + }, + setActiveAccount: () => { + return; + }, + getActiveAccount: () => { + return null; + }, + initializeWrapperLibrary: () => { + return; + }, + setNavigationClient: () => { + return; + }, + getConfiguration: () => { + throw createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled); + }, + hydrateCache: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + }, + clearCache: () => { + return Promise.reject(createBrowserConfigurationAuthError(stubbedPublicClientApplicationCalled)); + } +}; + +// node_modules/@azure/msal-browser/dist/event/EventMessage.mjs +var EventMessageUtils = class { + /** + * Gets interaction status from event message + * @param message + * @param currentStatus + */ + static getInteractionStatusFromEvent(message, currentStatus) { + switch (message.eventType) { + case EventType.LOGIN_START: + return InteractionStatus.Login; + case EventType.SSO_SILENT_START: + return InteractionStatus.SsoSilent; + case EventType.ACQUIRE_TOKEN_START: + if (message.interactionType === InteractionType.Redirect || message.interactionType === InteractionType.Popup) { + return InteractionStatus.AcquireToken; + } + break; + case EventType.HANDLE_REDIRECT_START: + return InteractionStatus.HandleRedirect; + case EventType.LOGOUT_START: + return InteractionStatus.Logout; + case EventType.SSO_SILENT_SUCCESS: + case EventType.SSO_SILENT_FAILURE: + if (currentStatus && currentStatus !== InteractionStatus.SsoSilent) { + break; + } + return InteractionStatus.None; + case EventType.LOGOUT_END: + if (currentStatus && currentStatus !== InteractionStatus.Logout) { + break; + } + return InteractionStatus.None; + case EventType.HANDLE_REDIRECT_END: + if (currentStatus && currentStatus !== InteractionStatus.HandleRedirect) { + break; + } + return InteractionStatus.None; + case EventType.LOGIN_SUCCESS: + case EventType.LOGIN_FAILURE: + case EventType.ACQUIRE_TOKEN_SUCCESS: + case EventType.ACQUIRE_TOKEN_FAILURE: + case EventType.RESTORE_FROM_BFCACHE: + if (message.interactionType === InteractionType.Redirect || message.interactionType === InteractionType.Popup) { + if (currentStatus && currentStatus !== InteractionStatus.Login && currentStatus !== InteractionStatus.AcquireToken) { + break; + } + return InteractionStatus.None; + } + break; + } + return null; + } +}; + +// node_modules/@azure/msal-browser/dist/crypto/SignedHttpRequest.mjs +var SignedHttpRequest = class { + constructor(shrParameters, shrOptions) { + const loggerOptions = shrOptions && shrOptions.loggerOptions || {}; + this.logger = new Logger(loggerOptions, name2, version2); + this.cryptoOps = new CryptoOps(this.logger); + this.popTokenGenerator = new PopTokenGenerator(this.cryptoOps); + this.shrParameters = shrParameters; + } + /** + * Generates and caches a keypair for the given request options. + * @returns Public key digest, which should be sent to the token issuer. + */ + async generatePublicKeyThumbprint() { + const { kid } = await this.popTokenGenerator.generateKid(this.shrParameters); + return kid; + } + /** + * Generates a signed http request for the given payload with the given key. + * @param payload Payload to sign (e.g. access token) + * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API) + * @param claims Additional claims to include/override in the signed JWT + * @returns Pop token signed with the corresponding private key + */ + async signRequest(payload, publicKeyThumbprint, claims) { + return this.popTokenGenerator.signPayload(payload, publicKeyThumbprint, this.shrParameters, claims); + } + /** + * Removes cached keys from browser for given public key thumbprint + * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API) + * @returns If keys are properly deleted + */ + async removeKeys(publicKeyThumbprint) { + return this.cryptoOps.removeTokenBindingKey(publicKeyThumbprint).then(() => true).catch((error) => { + if (error instanceof ClientAuthError && error.errorCode === ClientAuthErrorCodes_exports.bindingKeyNotRemoved) { + return false; + } + throw error; + }); + } +}; + +// node_modules/@azure/msal-browser/dist/telemetry/BrowserPerformanceClient.mjs +function getPerfMeasurementModule() { + let sessionStorage; + try { + sessionStorage = window[BrowserCacheLocation.SessionStorage]; + const perfEnabled = sessionStorage == null ? void 0 : sessionStorage.getItem(BROWSER_PERF_ENABLED_KEY); + if (Number(perfEnabled) === 1) { + return import("./BrowserPerformanceMeasurement-PMMEVXX3.js"); + } + } catch (e) { + } + return void 0; +} +function supportsBrowserPerformanceNow() { + return typeof window !== "undefined" && typeof window.performance !== "undefined" && typeof window.performance.now === "function"; +} +function getPerfDurationMs(startTime) { + if (!startTime || !supportsBrowserPerformanceNow()) { + return void 0; + } + return Math.round(window.performance.now() - startTime); +} +var BrowserPerformanceClient = class extends PerformanceClient { + constructor(configuration, intFields, abbreviations) { + var _a, _b; + super(configuration.auth.clientId, configuration.auth.authority || `${Constants.DEFAULT_AUTHORITY}`, new Logger(((_a = configuration.system) == null ? void 0 : _a.loggerOptions) || {}, name2, version2), name2, version2, ((_b = configuration.telemetry) == null ? void 0 : _b.application) || { + appName: "", + appVersion: "" + }, intFields, abbreviations); + } + generateId() { + return createNewGuid(); + } + getPageVisibility() { + var _a; + return ((_a = document.visibilityState) == null ? void 0 : _a.toString()) || null; + } + deleteIncompleteSubMeasurements(inProgressEvent) { + var _a; + void ((_a = getPerfMeasurementModule()) == null ? void 0 : _a.then((module) => { + const rootEvent = this.eventsByCorrelationId.get(inProgressEvent.event.correlationId); + const isRootEvent = rootEvent && rootEvent.eventId === inProgressEvent.event.eventId; + const incompleteMeasurements = []; + if (isRootEvent && (rootEvent == null ? void 0 : rootEvent.incompleteSubMeasurements)) { + rootEvent.incompleteSubMeasurements.forEach((subMeasurement) => { + incompleteMeasurements.push({ ...subMeasurement }); + }); + } + module.BrowserPerformanceMeasurement.flushMeasurements(inProgressEvent.event.correlationId, incompleteMeasurements); + })); + } + /** + * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement. + * Also captures browser page visibilityState. + * + * @param {PerformanceEvents} measureName + * @param {?string} [correlationId] + * @returns {((event?: Partial) => PerformanceEvent| null)} + */ + startMeasurement(measureName, correlationId) { + var _a; + const startPageVisibility = this.getPageVisibility(); + const inProgressEvent = super.startMeasurement(measureName, correlationId); + const startTime = supportsBrowserPerformanceNow() ? window.performance.now() : void 0; + const browserMeasurement = (_a = getPerfMeasurementModule()) == null ? void 0 : _a.then((module) => { + return new module.BrowserPerformanceMeasurement(measureName, inProgressEvent.event.correlationId); + }); + void (browserMeasurement == null ? void 0 : browserMeasurement.then((measurement) => measurement.startMeasurement())); + return { + ...inProgressEvent, + end: (event, error) => { + const res = inProgressEvent.end({ + ...event, + startPageVisibility, + endPageVisibility: this.getPageVisibility(), + durationMs: getPerfDurationMs(startTime) + }, error); + void (browserMeasurement == null ? void 0 : browserMeasurement.then((measurement) => measurement.endMeasurement())); + this.deleteIncompleteSubMeasurements(inProgressEvent); + return res; + }, + discard: () => { + inProgressEvent.discard(); + void (browserMeasurement == null ? void 0 : browserMeasurement.then((measurement) => measurement.flushMeasurement())); + this.deleteIncompleteSubMeasurements(inProgressEvent); + } + }; + } + /** + * Adds pre-queue time to preQueueTimeByCorrelationId map. + * @param {PerformanceEvents} eventName + * @param {?string} correlationId + * @returns + */ + setPreQueueTime(eventName, correlationId) { + if (!supportsBrowserPerformanceNow()) { + this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to set telemetry queue time for ${eventName}`); + return; + } + if (!correlationId) { + this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to set telemetry queue time`); + return; + } + const preQueueEvent = this.preQueueTimeByCorrelationId.get(correlationId); + if (preQueueEvent) { + this.logger.trace(`BrowserPerformanceClient: Incomplete pre-queue ${preQueueEvent.name} found`, correlationId); + this.addQueueMeasurement(preQueueEvent.name, correlationId, void 0, true); + } + this.preQueueTimeByCorrelationId.set(correlationId, { + name: eventName, + time: window.performance.now() + }); + } + /** + * Calculates and adds queue time measurement for given performance event. + * + * @param {PerformanceEvents} eventName + * @param {?string} correlationId + * @param {?number} queueTime + * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements + * @returns + */ + addQueueMeasurement(eventName, correlationId, queueTime, manuallyCompleted) { + if (!supportsBrowserPerformanceNow()) { + this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to add queue measurement for ${eventName}`); + return; + } + if (!correlationId) { + this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to add queue measurement`); + return; + } + const preQueueTime = super.getPreQueueTime(eventName, correlationId); + if (!preQueueTime) { + return; + } + const currentTime = window.performance.now(); + const resQueueTime = queueTime || super.calculateQueuedTime(preQueueTime, currentTime); + return super.addQueueMeasurement(eventName, correlationId, resQueueTime, manuallyCompleted); + } +}; + +export { + OIDC_DEFAULT_SCOPES, + PromptValue, + ServerResponseType, + AuthenticationScheme, + JsonWebTokenTypes, + AuthErrorCodes_exports, + AuthErrorMessage, + AuthError, + ClientAuthErrorCodes_exports, + ClientAuthErrorMessage, + ClientAuthError, + LogLevel, + Logger, + AzureCloudInstance, + ClientConfigurationErrorCodes_exports, + ClientConfigurationErrorMessage, + ClientConfigurationError, + StringUtils, + UrlString, + ProtocolMode, + PerformanceEvents, + StubPerformanceClient, + ServerError, + AccountEntity, + InteractionRequiredAuthErrorCodes_exports, + InteractionRequiredAuthErrorMessage, + InteractionRequiredAuthError, + AuthenticationHeaderParser, + BrowserAuthErrorCodes_exports, + BrowserAuthErrorMessage, + BrowserAuthError, + BrowserCacheLocation, + ApiId, + InteractionType, + InteractionStatus, + WrapperSKU, + CacheLookupPolicy, + BrowserConfigurationAuthErrorCodes_exports, + BrowserConfigurationAuthErrorMessage, + BrowserConfigurationAuthError, + BrowserUtils_exports, + NavigationClient, + DEFAULT_IFRAME_TIMEOUT_MS, + version2 as version, + MemoryStorage, + LocalStorage, + SessionStorage, + EventType, + EventHandler, + isPlatformBrokerAvailable, + PublicClientApplication, + createNestablePublicClientApplication, + createStandardPublicClientApplication, + PublicClientNext, + stubbedPublicClientApplication, + EventMessageUtils, + SignedHttpRequest, + BrowserPerformanceClient +}; +/*! Bundled license information: + +@azure/msal-common/dist/utils/Constants.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/AuthErrorCodes.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/AuthError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/ClientAuthErrorCodes.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/ClientAuthError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/crypto/ICrypto.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/logger/Logger.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/packageMetadata.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/AuthorityOptions.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/ClientConfigurationErrorCodes.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/ClientConfigurationError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/utils/StringUtils.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/request/ScopeSet.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/account/AccountInfo.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/account/AuthToken.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/utils/UrlUtils.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/url/UrlString.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/AuthorityMetadata.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/CacheErrorCodes.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/CacheError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/cache/CacheManager.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/ProtocolMode.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/telemetry/performance/PerformanceEvent.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/telemetry/performance/StubPerformanceClient.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/config/ClientConfiguration.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/account/CcsCredential.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/account/ClientInfo.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/constants/AADServerParamKeys.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/request/RequestParameterBuilder.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/AuthorityType.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/OpenIdConfigResponse.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/CloudInstanceDiscoveryResponse.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/utils/FunctionWrappers.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/RegionDiscovery.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/utils/TimeUtils.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/cache/utils/CacheHelpers.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/Authority.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/authority/AuthorityFactory.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/ServerError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/network/RequestThumbprint.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/network/ThrottlingUtils.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/NetworkError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/client/BaseClient.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/account/TokenClaims.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/cache/entities/AccountEntity.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/InteractionRequiredAuthErrorCodes.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/InteractionRequiredAuthError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/utils/ProtocolUtils.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/crypto/PopTokenGenerator.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/cache/persistence/TokenCacheContext.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/response/ResponseHandler.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/utils/ClientAssertionUtils.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/client/AuthorizationCodeClient.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/client/RefreshTokenClient.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/client/SilentFlowClient.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/network/INetworkModule.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/protocol/Authorize.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/request/AuthenticationHeaderParser.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/telemetry/server/ServerTelemetryManager.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/JoseHeaderErrorCodes.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/error/JoseHeaderError.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/crypto/JoseHeader.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/telemetry/performance/PerformanceClient.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-common/dist/index-browser.mjs: + (*! @azure/msal-common v15.10.0 2025-08-05 *) + +@azure/msal-browser/dist/error/BrowserAuthErrorCodes.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/error/BrowserAuthError.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/utils/BrowserConstants.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/encode/Base64Encode.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/encode/Base64Decode.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/crypto/BrowserCrypto.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/error/BrowserConfigurationAuthErrorCodes.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/error/BrowserConfigurationAuthError.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/utils/BrowserUtils.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/navigation/NavigationClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/network/FetchClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/config/Configuration.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/packageMetadata.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/CacheKeys.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/operatingcontext/BaseOperatingContext.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/naa/BridgeStatusCode.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/naa/BridgeProxy.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/operatingcontext/NestedAppOperatingContext.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/operatingcontext/StandardOperatingContext.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/DatabaseStorage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/MemoryStorage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/AsyncMemoryStorage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/crypto/CryptoOps.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/CookieStorage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/CacheHelpers.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/EncryptedData.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/LocalStorage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/SessionStorage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/event/EventType.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/utils/Helpers.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/BrowserCacheManager.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/AccountManager.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/event/EventHandler.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/BaseInteractionClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/request/RequestHelpers.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/StandardInteractionClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/utils/BrowserProtocolUtils.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/response/ResponseHandler.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_handler/InteractionHandler.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/error/NativeAuthErrorCodes.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/broker/nativeBroker/NativeStatusCodes.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/error/NativeAuthError.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/SilentCacheClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/PlatformAuthInteractionClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/protocol/Authorize.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/crypto/PkceGenerator.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthExtensionHandler.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthDOMHandler.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/broker/nativeBroker/PlatformAuthProvider.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/PopupClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/RedirectClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_handler/SilentHandler.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/SilentIframeClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/SilentRefreshClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/cache/TokenCache.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/interaction_client/SilentAuthCodeClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/utils/MsalFrameStatsUtils.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/controllers/StandardController.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/naa/BridgeError.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/naa/mapping/NestedAppAuthAdapter.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/error/NestedAppAuthError.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/controllers/NestedAppAuthController.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/controllers/ControllerFactory.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/app/PublicClientApplication.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/controllers/UnknownOperatingContextController.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/operatingcontext/UnknownOperatingContext.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/app/PublicClientNext.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/app/IPublicClientApplication.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/event/EventMessage.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/crypto/SignedHttpRequest.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/telemetry/BrowserPerformanceClient.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) + +@azure/msal-browser/dist/index.mjs: + (*! @azure/msal-browser v4.19.0 2025-08-05 *) +*/ +//# sourceMappingURL=chunk-Z3MJAI5R.js.map diff --git a/node_modules/.vite/deps/chunk-Z3MJAI5R.js.map b/node_modules/.vite/deps/chunk-Z3MJAI5R.js.map new file mode 100644 index 00000000..b47d8969 --- /dev/null +++ b/node_modules/.vite/deps/chunk-Z3MJAI5R.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../@azure/msal-common/src/utils/Constants.ts", "../../@azure/msal-common/src/error/AuthErrorCodes.ts", "../../@azure/msal-common/src/error/AuthError.ts", "../../@azure/msal-common/src/error/ClientAuthErrorCodes.ts", "../../@azure/msal-common/src/error/ClientAuthError.ts", "../../@azure/msal-common/src/crypto/ICrypto.ts", "../../@azure/msal-common/src/logger/Logger.ts", "../../@azure/msal-common/src/packageMetadata.ts", "../../@azure/msal-common/src/authority/AuthorityOptions.ts", "../../@azure/msal-common/src/error/ClientConfigurationErrorCodes.ts", "../../@azure/msal-common/src/error/ClientConfigurationError.ts", "../../@azure/msal-common/src/utils/StringUtils.ts", "../../@azure/msal-common/src/request/ScopeSet.ts", "../../@azure/msal-common/src/account/AccountInfo.ts", "../../@azure/msal-common/src/account/AuthToken.ts", "../../@azure/msal-common/src/utils/UrlUtils.ts", "../../@azure/msal-common/src/url/UrlString.ts", "../../@azure/msal-common/src/authority/AuthorityMetadata.ts", "../../@azure/msal-common/src/error/CacheErrorCodes.ts", "../../@azure/msal-common/src/error/CacheError.ts", "../../@azure/msal-common/src/cache/CacheManager.ts", "../../@azure/msal-common/src/authority/ProtocolMode.ts", "../../@azure/msal-common/src/telemetry/performance/PerformanceEvent.ts", "../../@azure/msal-common/src/telemetry/performance/StubPerformanceClient.ts", "../../@azure/msal-common/src/config/ClientConfiguration.ts", "../../@azure/msal-common/src/account/CcsCredential.ts", "../../@azure/msal-common/src/account/ClientInfo.ts", "../../@azure/msal-common/src/constants/AADServerParamKeys.ts", "../../@azure/msal-common/src/request/RequestParameterBuilder.ts", "../../@azure/msal-common/src/authority/AuthorityType.ts", "../../@azure/msal-common/src/authority/OpenIdConfigResponse.ts", "../../@azure/msal-common/src/authority/CloudInstanceDiscoveryResponse.ts", "../../@azure/msal-common/src/authority/CloudInstanceDiscoveryErrorResponse.ts", "../../@azure/msal-common/src/utils/FunctionWrappers.ts", "../../@azure/msal-common/src/authority/RegionDiscovery.ts", "../../@azure/msal-common/src/utils/TimeUtils.ts", "../../@azure/msal-common/src/cache/utils/CacheHelpers.ts", "../../@azure/msal-common/src/authority/Authority.ts", "../../@azure/msal-common/src/authority/AuthorityFactory.ts", "../../@azure/msal-common/src/error/ServerError.ts", "../../@azure/msal-common/src/network/RequestThumbprint.ts", "../../@azure/msal-common/src/network/ThrottlingUtils.ts", "../../@azure/msal-common/src/error/NetworkError.ts", "../../@azure/msal-common/src/client/BaseClient.ts", "../../@azure/msal-common/src/account/TokenClaims.ts", "../../@azure/msal-common/src/cache/entities/AccountEntity.ts", "../../@azure/msal-common/src/error/InteractionRequiredAuthErrorCodes.ts", "../../@azure/msal-common/src/error/InteractionRequiredAuthError.ts", "../../@azure/msal-common/src/utils/ProtocolUtils.ts", "../../@azure/msal-common/src/crypto/PopTokenGenerator.ts", "../../@azure/msal-common/src/cache/persistence/TokenCacheContext.ts", "../../@azure/msal-common/src/response/ResponseHandler.ts", "../../@azure/msal-common/src/utils/ClientAssertionUtils.ts", "../../@azure/msal-common/src/client/AuthorizationCodeClient.ts", "../../@azure/msal-common/src/client/RefreshTokenClient.ts", "../../@azure/msal-common/src/client/SilentFlowClient.ts", "../../@azure/msal-common/src/network/INetworkModule.ts", "../../@azure/msal-common/src/protocol/Authorize.ts", "../../@azure/msal-common/src/request/AuthenticationHeaderParser.ts", "../../@azure/msal-common/src/telemetry/server/ServerTelemetryManager.ts", "../../@azure/msal-common/src/error/JoseHeaderErrorCodes.ts", "../../@azure/msal-common/src/error/JoseHeaderError.ts", "../../@azure/msal-common/src/crypto/JoseHeader.ts", "../../@azure/msal-common/src/telemetry/performance/PerformanceClient.ts", "../../@azure/msal-browser/src/error/BrowserAuthErrorCodes.ts", "../../@azure/msal-browser/src/error/BrowserAuthError.ts", "../../@azure/msal-browser/src/utils/BrowserConstants.ts", "../../@azure/msal-browser/src/encode/Base64Encode.ts", "../../@azure/msal-browser/src/encode/Base64Decode.ts", "../../@azure/msal-browser/src/crypto/BrowserCrypto.ts", "../../@azure/msal-browser/src/error/BrowserConfigurationAuthErrorCodes.ts", "../../@azure/msal-browser/src/error/BrowserConfigurationAuthError.ts", "../../@azure/msal-browser/src/utils/BrowserUtils.ts", "../../@azure/msal-browser/src/navigation/NavigationClient.ts", "../../@azure/msal-browser/src/network/FetchClient.ts", "../../@azure/msal-browser/src/config/Configuration.ts", "../../@azure/msal-browser/src/packageMetadata.ts", "../../@azure/msal-browser/src/cache/CacheKeys.ts", "../../@azure/msal-browser/src/operatingcontext/BaseOperatingContext.ts", "../../@azure/msal-browser/src/naa/BridgeStatusCode.ts", "../../@azure/msal-browser/src/naa/BridgeProxy.ts", "../../@azure/msal-browser/src/operatingcontext/NestedAppOperatingContext.ts", "../../@azure/msal-browser/src/operatingcontext/StandardOperatingContext.ts", "../../@azure/msal-browser/src/cache/DatabaseStorage.ts", "../../@azure/msal-browser/src/cache/MemoryStorage.ts", "../../@azure/msal-browser/src/cache/AsyncMemoryStorage.ts", "../../@azure/msal-browser/src/crypto/CryptoOps.ts", "../../@azure/msal-browser/src/cache/CookieStorage.ts", "../../@azure/msal-browser/src/cache/CacheHelpers.ts", "../../@azure/msal-browser/src/cache/EncryptedData.ts", "../../@azure/msal-browser/src/cache/LocalStorage.ts", "../../@azure/msal-browser/src/cache/SessionStorage.ts", "../../@azure/msal-browser/src/event/EventType.ts", "../../@azure/msal-browser/src/utils/Helpers.ts", "../../@azure/msal-browser/src/cache/BrowserCacheManager.ts", "../../@azure/msal-browser/src/cache/AccountManager.ts", "../../@azure/msal-browser/src/event/EventHandler.ts", "../../@azure/msal-browser/src/interaction_client/BaseInteractionClient.ts", "../../@azure/msal-browser/src/request/RequestHelpers.ts", "../../@azure/msal-browser/src/interaction_client/StandardInteractionClient.ts", "../../@azure/msal-browser/src/utils/BrowserProtocolUtils.ts", "../../@azure/msal-browser/src/response/ResponseHandler.ts", "../../@azure/msal-browser/src/interaction_handler/InteractionHandler.ts", "../../@azure/msal-browser/src/error/NativeAuthErrorCodes.ts", "../../@azure/msal-browser/src/broker/nativeBroker/NativeStatusCodes.ts", "../../@azure/msal-browser/src/error/NativeAuthError.ts", "../../@azure/msal-browser/src/interaction_client/SilentCacheClient.ts", "../../@azure/msal-browser/src/interaction_client/PlatformAuthInteractionClient.ts", "../../@azure/msal-browser/src/protocol/Authorize.ts", "../../@azure/msal-browser/src/crypto/PkceGenerator.ts", "../../@azure/msal-browser/src/broker/nativeBroker/PlatformAuthExtensionHandler.ts", "../../@azure/msal-browser/src/broker/nativeBroker/PlatformAuthDOMHandler.ts", "../../@azure/msal-browser/src/broker/nativeBroker/PlatformAuthProvider.ts", "../../@azure/msal-browser/src/interaction_client/PopupClient.ts", "../../@azure/msal-browser/src/interaction_client/RedirectClient.ts", "../../@azure/msal-browser/src/interaction_handler/SilentHandler.ts", "../../@azure/msal-browser/src/interaction_client/SilentIframeClient.ts", "../../@azure/msal-browser/src/interaction_client/SilentRefreshClient.ts", "../../@azure/msal-browser/src/cache/TokenCache.ts", "../../@azure/msal-browser/src/interaction_client/HybridSpaAuthorizationCodeClient.ts", "../../@azure/msal-browser/src/interaction_client/SilentAuthCodeClient.ts", "../../@azure/msal-browser/src/utils/MsalFrameStatsUtils.ts", "../../@azure/msal-browser/src/controllers/StandardController.ts", "../../@azure/msal-browser/src/naa/BridgeError.ts", "../../@azure/msal-browser/src/naa/mapping/NestedAppAuthAdapter.ts", "../../@azure/msal-browser/src/error/NestedAppAuthError.ts", "../../@azure/msal-browser/src/controllers/NestedAppAuthController.ts", "../../@azure/msal-browser/src/controllers/ControllerFactory.ts", "../../@azure/msal-browser/src/app/PublicClientApplication.ts", "../../@azure/msal-browser/src/controllers/UnknownOperatingContextController.ts", "../../@azure/msal-browser/src/operatingcontext/UnknownOperatingContext.ts", "../../@azure/msal-browser/src/app/PublicClientNext.ts", "../../@azure/msal-browser/src/app/IPublicClientApplication.ts", "../../@azure/msal-browser/src/event/EventMessage.ts", "../../@azure/msal-browser/src/crypto/SignedHttpRequest.ts", "../../@azure/msal-browser/src/telemetry/BrowserPerformanceClient.ts"], + "sourcesContent": ["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const Constants = {\n LIBRARY_NAME: \"MSAL.JS\",\n SKU: \"msal.js.common\",\n // default authority\n DEFAULT_AUTHORITY: \"https://login.microsoftonline.com/common/\",\n DEFAULT_AUTHORITY_HOST: \"login.microsoftonline.com\",\n DEFAULT_COMMON_TENANT: \"common\",\n // ADFS String\n ADFS: \"adfs\",\n DSTS: \"dstsv2\",\n // Default AAD Instance Discovery Endpoint\n AAD_INSTANCE_DISCOVERY_ENDPT:\n \"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=\",\n // CIAM URL\n CIAM_AUTH_URL: \".ciamlogin.com\",\n AAD_TENANT_DOMAIN_SUFFIX: \".onmicrosoft.com\",\n // Resource delimiter - used for certain cache entries\n RESOURCE_DELIM: \"|\",\n // Placeholder for non-existent account ids/objects\n NO_ACCOUNT: \"NO_ACCOUNT\",\n // Claims\n CLAIMS: \"claims\",\n // Consumer UTID\n CONSUMER_UTID: \"9188040d-6c67-4c5b-b112-36a304b66dad\",\n // Default scopes\n OPENID_SCOPE: \"openid\",\n PROFILE_SCOPE: \"profile\",\n OFFLINE_ACCESS_SCOPE: \"offline_access\",\n EMAIL_SCOPE: \"email\",\n CODE_GRANT_TYPE: \"authorization_code\",\n RT_GRANT_TYPE: \"refresh_token\",\n S256_CODE_CHALLENGE_METHOD: \"S256\",\n URL_FORM_CONTENT_TYPE: \"application/x-www-form-urlencoded;charset=utf-8\",\n AUTHORIZATION_PENDING: \"authorization_pending\",\n NOT_DEFINED: \"not_defined\",\n EMPTY_STRING: \"\",\n NOT_APPLICABLE: \"N/A\",\n NOT_AVAILABLE: \"Not Available\",\n FORWARD_SLASH: \"/\",\n IMDS_ENDPOINT: \"http://169.254.169.254/metadata/instance/compute/location\",\n IMDS_VERSION: \"2020-06-01\",\n IMDS_TIMEOUT: 2000,\n AZURE_REGION_AUTO_DISCOVER_FLAG: \"TryAutoDetect\",\n REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: \"login.microsoft.com\",\n KNOWN_PUBLIC_CLOUDS: [\n \"login.microsoftonline.com\",\n \"login.windows.net\",\n \"login.microsoft.com\",\n \"sts.windows.net\",\n ],\n SHR_NONCE_VALIDITY: 240,\n INVALID_INSTANCE: \"invalid_instance\",\n};\n\nexport const HttpStatus = {\n SUCCESS: 200,\n SUCCESS_RANGE_START: 200,\n SUCCESS_RANGE_END: 299,\n REDIRECT: 302,\n CLIENT_ERROR: 400,\n CLIENT_ERROR_RANGE_START: 400,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n NOT_FOUND: 404,\n REQUEST_TIMEOUT: 408,\n GONE: 410,\n TOO_MANY_REQUESTS: 429,\n CLIENT_ERROR_RANGE_END: 499,\n SERVER_ERROR: 500,\n SERVER_ERROR_RANGE_START: 500,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n SERVER_ERROR_RANGE_END: 599,\n MULTI_SIDED_ERROR: 600,\n} as const;\nexport type HttpStatus = (typeof HttpStatus)[keyof typeof HttpStatus];\n\nexport const HttpMethod = {\n GET: \"GET\",\n POST: \"POST\",\n} as const;\nexport type HttpMethod = (typeof HttpMethod)[keyof typeof HttpMethod];\n\nexport const OIDC_DEFAULT_SCOPES = [\n Constants.OPENID_SCOPE,\n Constants.PROFILE_SCOPE,\n Constants.OFFLINE_ACCESS_SCOPE,\n];\n\nexport const OIDC_SCOPES = [...OIDC_DEFAULT_SCOPES, Constants.EMAIL_SCOPE];\n\n/**\n * Request header names\n */\nexport const HeaderNames = {\n CONTENT_TYPE: \"Content-Type\",\n CONTENT_LENGTH: \"Content-Length\",\n RETRY_AFTER: \"Retry-After\",\n CCS_HEADER: \"X-AnchorMailbox\",\n WWWAuthenticate: \"WWW-Authenticate\",\n AuthenticationInfo: \"Authentication-Info\",\n X_MS_REQUEST_ID: \"x-ms-request-id\",\n X_MS_HTTP_VERSION: \"x-ms-httpver\",\n} as const;\nexport type HeaderNames = (typeof HeaderNames)[keyof typeof HeaderNames];\n\n/**\n * Persistent cache keys MSAL which stay while user is logged in.\n */\nexport const PersistentCacheKeys = {\n ACTIVE_ACCOUNT_FILTERS: \"active-account-filters\", // new cache entry for active_account for a more robust version for browser\n} as const;\nexport type PersistentCacheKeys =\n (typeof PersistentCacheKeys)[keyof typeof PersistentCacheKeys];\n\n/**\n * String constants related to AAD Authority\n */\nexport const AADAuthorityConstants = {\n COMMON: \"common\",\n ORGANIZATIONS: \"organizations\",\n CONSUMERS: \"consumers\",\n} as const;\nexport type AADAuthorityConstants =\n (typeof AADAuthorityConstants)[keyof typeof AADAuthorityConstants];\n\n/**\n * Claims request keys\n */\nexport const ClaimsRequestKeys = {\n ACCESS_TOKEN: \"access_token\",\n XMS_CC: \"xms_cc\",\n} as const;\nexport type ClaimsRequestKeys =\n (typeof ClaimsRequestKeys)[keyof typeof ClaimsRequestKeys];\n\n/**\n * we considered making this \"enum\" in the request instead of string, however it looks like the allowed list of\n * prompt values kept changing over past couple of years. There are some undocumented prompt values for some\n * internal partners too, hence the choice of generic \"string\" type instead of the \"enum\"\n */\nexport const PromptValue = {\n LOGIN: \"login\",\n SELECT_ACCOUNT: \"select_account\",\n CONSENT: \"consent\",\n NONE: \"none\",\n CREATE: \"create\",\n NO_SESSION: \"no_session\",\n};\n\n/**\n * allowed values for codeVerifier\n */\nexport const CodeChallengeMethodValues = {\n PLAIN: \"plain\",\n S256: \"S256\",\n};\n\n/**\n * Allowed values for response_type\n */\nexport const OAuthResponseType = {\n CODE: \"code\",\n IDTOKEN_TOKEN: \"id_token token\",\n IDTOKEN_TOKEN_REFRESHTOKEN: \"id_token token refresh_token\",\n} as const;\nexport type OAuthResponseType =\n (typeof OAuthResponseType)[keyof typeof OAuthResponseType];\n\n/**\n * allowed values for server response type\n * @deprecated Use ResponseMode instead\n */\nexport const ServerResponseType = {\n QUERY: \"query\",\n FRAGMENT: \"fragment\",\n} as const;\nexport type ServerResponseType =\n (typeof ServerResponseType)[keyof typeof ServerResponseType];\n\n/**\n * allowed values for response_mode\n */\nexport const ResponseMode = {\n QUERY: \"query\",\n FRAGMENT: \"fragment\",\n FORM_POST: \"form_post\",\n} as const;\nexport type ResponseMode = (typeof ResponseMode)[keyof typeof ResponseMode];\n\n/**\n * allowed grant_type\n */\nexport const GrantType = {\n IMPLICIT_GRANT: \"implicit\",\n AUTHORIZATION_CODE_GRANT: \"authorization_code\",\n CLIENT_CREDENTIALS_GRANT: \"client_credentials\",\n RESOURCE_OWNER_PASSWORD_GRANT: \"password\",\n REFRESH_TOKEN_GRANT: \"refresh_token\",\n DEVICE_CODE_GRANT: \"device_code\",\n JWT_BEARER: \"urn:ietf:params:oauth:grant-type:jwt-bearer\",\n} as const;\nexport type GrantType = (typeof GrantType)[keyof typeof GrantType];\n\n/**\n * Account types in Cache\n */\nexport const CacheAccountType = {\n MSSTS_ACCOUNT_TYPE: \"MSSTS\",\n ADFS_ACCOUNT_TYPE: \"ADFS\",\n MSAV1_ACCOUNT_TYPE: \"MSA\",\n GENERIC_ACCOUNT_TYPE: \"Generic\", // NTLM, Kerberos, FBA, Basic etc\n} as const;\nexport type CacheAccountType =\n (typeof CacheAccountType)[keyof typeof CacheAccountType];\n\n/**\n * Separators used in cache\n */\nexport const Separators = {\n CACHE_KEY_SEPARATOR: \"-\",\n CLIENT_INFO_SEPARATOR: \".\",\n} as const;\nexport type Separators = (typeof Separators)[keyof typeof Separators];\n\n/**\n * Credential Type stored in the cache\n */\nexport const CredentialType = {\n ID_TOKEN: \"IdToken\",\n ACCESS_TOKEN: \"AccessToken\",\n ACCESS_TOKEN_WITH_AUTH_SCHEME: \"AccessToken_With_AuthScheme\",\n REFRESH_TOKEN: \"RefreshToken\",\n} as const;\nexport type CredentialType =\n (typeof CredentialType)[keyof typeof CredentialType];\n\n/**\n * Combine all cache types\n */\nexport const CacheType = {\n ADFS: 1001,\n MSA: 1002,\n MSSTS: 1003,\n GENERIC: 1004,\n ACCESS_TOKEN: 2001,\n REFRESH_TOKEN: 2002,\n ID_TOKEN: 2003,\n APP_METADATA: 3001,\n UNDEFINED: 9999,\n} as const;\nexport type CacheType = (typeof CacheType)[keyof typeof CacheType];\n\n/**\n * More Cache related constants\n */\nexport const APP_METADATA = \"appmetadata\";\nexport const CLIENT_INFO = \"client_info\";\nexport const THE_FAMILY_ID = \"1\";\n\nexport const AUTHORITY_METADATA_CONSTANTS = {\n CACHE_KEY: \"authority-metadata\",\n REFRESH_TIME_SECONDS: 3600 * 24, // 24 Hours\n};\n\nexport const AuthorityMetadataSource = {\n CONFIG: \"config\",\n CACHE: \"cache\",\n NETWORK: \"network\",\n HARDCODED_VALUES: \"hardcoded_values\",\n} as const;\nexport type AuthorityMetadataSource =\n (typeof AuthorityMetadataSource)[keyof typeof AuthorityMetadataSource];\n\nexport const SERVER_TELEM_CONSTANTS = {\n SCHEMA_VERSION: 5,\n MAX_CUR_HEADER_BYTES: 80, // ESTS limit is 100B, set to 80 to provide a 20B buffer\n MAX_LAST_HEADER_BYTES: 330, // ESTS limit is 350B, set to 330 to provide a 20B buffer,\n MAX_CACHED_ERRORS: 50, // Limit the number of errors that can be stored to prevent uncontrolled size gains\n CACHE_KEY: \"server-telemetry\",\n CATEGORY_SEPARATOR: \"|\",\n VALUE_SEPARATOR: \",\",\n OVERFLOW_TRUE: \"1\",\n OVERFLOW_FALSE: \"0\",\n UNKNOWN_ERROR: \"unknown_error\",\n};\n\n/**\n * Type of the authentication request\n */\nexport const AuthenticationScheme = {\n BEARER: \"Bearer\",\n POP: \"pop\",\n SSH: \"ssh-cert\",\n} as const;\nexport type AuthenticationScheme =\n (typeof AuthenticationScheme)[keyof typeof AuthenticationScheme];\n\n/**\n * Constants related to throttling\n */\nexport const ThrottlingConstants = {\n // Default time to throttle RequestThumbprint in seconds\n DEFAULT_THROTTLE_TIME_SECONDS: 60,\n // Default maximum time to throttle in seconds, overrides what the server sends back\n DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600,\n // Prefix for storing throttling entries\n THROTTLING_PREFIX: \"throttling\",\n // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling\n X_MS_LIB_CAPABILITY_VALUE: \"retry-after, h429\",\n};\n\nexport const Errors = {\n INVALID_GRANT_ERROR: \"invalid_grant\",\n CLIENT_MISMATCH_ERROR: \"client_mismatch\",\n};\n\n/**\n * Password grant parameters\n */\nexport const PasswordGrantConstants = {\n username: \"username\",\n password: \"password\",\n} as const;\nexport type PasswordGrantConstants =\n (typeof PasswordGrantConstants)[keyof typeof PasswordGrantConstants];\n\n/**\n * Region Discovery Sources\n */\nexport const RegionDiscoverySources = {\n FAILED_AUTO_DETECTION: \"1\",\n INTERNAL_CACHE: \"2\",\n ENVIRONMENT_VARIABLE: \"3\",\n IMDS: \"4\",\n} as const;\nexport type RegionDiscoverySources =\n (typeof RegionDiscoverySources)[keyof typeof RegionDiscoverySources];\n\n/**\n * Region Discovery Outcomes\n */\nexport const RegionDiscoveryOutcomes = {\n CONFIGURED_MATCHES_DETECTED: \"1\",\n CONFIGURED_NO_AUTO_DETECTION: \"2\",\n CONFIGURED_NOT_DETECTED: \"3\",\n AUTO_DETECTION_REQUESTED_SUCCESSFUL: \"4\",\n AUTO_DETECTION_REQUESTED_FAILED: \"5\",\n} as const;\nexport type RegionDiscoveryOutcomes =\n (typeof RegionDiscoveryOutcomes)[keyof typeof RegionDiscoveryOutcomes];\n\n/**\n * Specifies the reason for fetching the access token from the identity provider\n */\nexport const CacheOutcome = {\n // When a token is found in the cache or the cache is not supposed to be hit when making the request\n NOT_APPLICABLE: \"0\",\n // When the token request goes to the identity provider because force_refresh was set to true. Also occurs if claims were requested\n FORCE_REFRESH_OR_CLAIMS: \"1\",\n // When the token request goes to the identity provider because no cached access token exists\n NO_CACHED_ACCESS_TOKEN: \"2\",\n // When the token request goes to the identity provider because cached access token expired\n CACHED_ACCESS_TOKEN_EXPIRED: \"3\",\n // When the token request goes to the identity provider because refresh_in was used and the existing token needs to be refreshed\n PROACTIVELY_REFRESHED: \"4\",\n} as const;\nexport type CacheOutcome = (typeof CacheOutcome)[keyof typeof CacheOutcome];\n\nexport const JsonWebTokenTypes = {\n Jwt: \"JWT\",\n Jwk: \"JWK\",\n Pop: \"pop\",\n} as const;\nexport type JsonWebTokenTypes =\n (typeof JsonWebTokenTypes)[keyof typeof JsonWebTokenTypes];\n\nexport const ONE_DAY_IN_MS = 86400000;\n\n// Token renewal offset default in seconds\nexport const DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;\n\nexport const EncodingTypes = {\n BASE64: \"base64\",\n HEX: \"hex\",\n UTF8: \"utf-8\",\n} as const;\nexport type EncodingTypes = (typeof EncodingTypes)[keyof typeof EncodingTypes];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * AuthErrorMessage class containing string constants used by error codes and messages.\n */\nexport const unexpectedError = \"unexpected_error\";\nexport const postRequestFailed = \"post_request_failed\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Constants } from \"../utils/Constants.js\";\nimport * as AuthErrorCodes from \"./AuthErrorCodes.js\";\nexport { AuthErrorCodes };\n\nexport const AuthErrorMessages = {\n [AuthErrorCodes.unexpectedError]: \"Unexpected error in authentication.\",\n [AuthErrorCodes.postRequestFailed]:\n \"Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.\",\n};\n\n/**\n * AuthErrorMessage class containing string constants used by error codes and messages.\n * @deprecated Use AuthErrorCodes instead\n */\nexport const AuthErrorMessage = {\n unexpectedError: {\n code: AuthErrorCodes.unexpectedError,\n desc: AuthErrorMessages[AuthErrorCodes.unexpectedError],\n },\n postRequestFailed: {\n code: AuthErrorCodes.postRequestFailed,\n desc: AuthErrorMessages[AuthErrorCodes.postRequestFailed],\n },\n};\n\n/**\n * General error class thrown by the MSAL.js library.\n */\nexport class AuthError extends Error {\n /**\n * Short string denoting error\n */\n errorCode: string;\n\n /**\n * Detailed description of error\n */\n errorMessage: string;\n\n /**\n * Describes the subclass of an error\n */\n subError: string;\n\n /**\n * CorrelationId associated with the error\n */\n correlationId: string;\n\n constructor(errorCode?: string, errorMessage?: string, suberror?: string) {\n const errorString = errorMessage\n ? `${errorCode}: ${errorMessage}`\n : errorCode;\n super(errorString);\n Object.setPrototypeOf(this, AuthError.prototype);\n\n this.errorCode = errorCode || Constants.EMPTY_STRING;\n this.errorMessage = errorMessage || Constants.EMPTY_STRING;\n this.subError = suberror || Constants.EMPTY_STRING;\n this.name = \"AuthError\";\n }\n\n setCorrelationId(correlationId: string): void {\n this.correlationId = correlationId;\n }\n}\n\nexport function createAuthError(\n code: string,\n additionalMessage?: string\n): AuthError {\n return new AuthError(\n code,\n additionalMessage\n ? `${AuthErrorMessages[code]} ${additionalMessage}`\n : AuthErrorMessages[code]\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const clientInfoDecodingError = \"client_info_decoding_error\";\nexport const clientInfoEmptyError = \"client_info_empty_error\";\nexport const tokenParsingError = \"token_parsing_error\";\nexport const nullOrEmptyToken = \"null_or_empty_token\";\nexport const endpointResolutionError = \"endpoints_resolution_error\";\nexport const networkError = \"network_error\";\nexport const openIdConfigError = \"openid_config_error\";\nexport const hashNotDeserialized = \"hash_not_deserialized\";\nexport const invalidState = \"invalid_state\";\nexport const stateMismatch = \"state_mismatch\";\nexport const stateNotFound = \"state_not_found\";\nexport const nonceMismatch = \"nonce_mismatch\";\nexport const authTimeNotFound = \"auth_time_not_found\";\nexport const maxAgeTranspired = \"max_age_transpired\";\nexport const multipleMatchingTokens = \"multiple_matching_tokens\";\nexport const multipleMatchingAccounts = \"multiple_matching_accounts\";\nexport const multipleMatchingAppMetadata = \"multiple_matching_appMetadata\";\nexport const requestCannotBeMade = \"request_cannot_be_made\";\nexport const cannotRemoveEmptyScope = \"cannot_remove_empty_scope\";\nexport const cannotAppendScopeSet = \"cannot_append_scopeset\";\nexport const emptyInputScopeSet = \"empty_input_scopeset\";\nexport const deviceCodePollingCancelled = \"device_code_polling_cancelled\";\nexport const deviceCodeExpired = \"device_code_expired\";\nexport const deviceCodeUnknownError = \"device_code_unknown_error\";\nexport const noAccountInSilentRequest = \"no_account_in_silent_request\";\nexport const invalidCacheRecord = \"invalid_cache_record\";\nexport const invalidCacheEnvironment = \"invalid_cache_environment\";\nexport const noAccountFound = \"no_account_found\";\nexport const noCryptoObject = \"no_crypto_object\";\nexport const unexpectedCredentialType = \"unexpected_credential_type\";\nexport const invalidAssertion = \"invalid_assertion\";\nexport const invalidClientCredential = \"invalid_client_credential\";\nexport const tokenRefreshRequired = \"token_refresh_required\";\nexport const userTimeoutReached = \"user_timeout_reached\";\nexport const tokenClaimsCnfRequiredForSignedJwt =\n \"token_claims_cnf_required_for_signedjwt\";\nexport const authorizationCodeMissingFromServerResponse =\n \"authorization_code_missing_from_server_response\";\nexport const bindingKeyNotRemoved = \"binding_key_not_removed\";\nexport const endSessionEndpointNotSupported =\n \"end_session_endpoint_not_supported\";\nexport const keyIdMissing = \"key_id_missing\";\nexport const noNetworkConnectivity = \"no_network_connectivity\";\nexport const userCanceled = \"user_canceled\";\nexport const missingTenantIdError = \"missing_tenant_id_error\";\nexport const methodNotImplemented = \"method_not_implemented\";\nexport const nestedAppAuthBridgeDisabled = \"nested_app_auth_bridge_disabled\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"./AuthError.js\";\nimport * as ClientAuthErrorCodes from \"./ClientAuthErrorCodes.js\";\nexport { ClientAuthErrorCodes }; // Allow importing as \"ClientAuthErrorCodes\";\n\n/**\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\n */\n\nexport const ClientAuthErrorMessages = {\n [ClientAuthErrorCodes.clientInfoDecodingError]:\n \"The client info could not be parsed/decoded correctly\",\n [ClientAuthErrorCodes.clientInfoEmptyError]: \"The client info was empty\",\n [ClientAuthErrorCodes.tokenParsingError]: \"Token cannot be parsed\",\n [ClientAuthErrorCodes.nullOrEmptyToken]: \"The token is null or empty\",\n [ClientAuthErrorCodes.endpointResolutionError]:\n \"Endpoints cannot be resolved\",\n [ClientAuthErrorCodes.networkError]: \"Network request failed\",\n [ClientAuthErrorCodes.openIdConfigError]:\n \"Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.\",\n [ClientAuthErrorCodes.hashNotDeserialized]:\n \"The hash parameters could not be deserialized\",\n [ClientAuthErrorCodes.invalidState]: \"State was not the expected format\",\n [ClientAuthErrorCodes.stateMismatch]: \"State mismatch error\",\n [ClientAuthErrorCodes.stateNotFound]: \"State not found\",\n [ClientAuthErrorCodes.nonceMismatch]: \"Nonce mismatch error\",\n [ClientAuthErrorCodes.authTimeNotFound]:\n \"Max Age was requested and the ID token is missing the auth_time variable.\" +\n \" auth_time is an optional claim and is not enabled by default - it must be enabled.\" +\n \" See https://aka.ms/msaljs/optional-claims for more information.\",\n [ClientAuthErrorCodes.maxAgeTranspired]:\n \"Max Age is set to 0, or too much time has elapsed since the last end-user authentication.\",\n [ClientAuthErrorCodes.multipleMatchingTokens]:\n \"The cache contains multiple tokens satisfying the requirements. \" +\n \"Call AcquireToken again providing more requirements such as authority or account.\",\n [ClientAuthErrorCodes.multipleMatchingAccounts]:\n \"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account\",\n [ClientAuthErrorCodes.multipleMatchingAppMetadata]:\n \"The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata\",\n [ClientAuthErrorCodes.requestCannotBeMade]:\n \"Token request cannot be made without authorization code or refresh token.\",\n [ClientAuthErrorCodes.cannotRemoveEmptyScope]:\n \"Cannot remove null or empty scope from ScopeSet\",\n [ClientAuthErrorCodes.cannotAppendScopeSet]: \"Cannot append ScopeSet\",\n [ClientAuthErrorCodes.emptyInputScopeSet]:\n \"Empty input ScopeSet cannot be processed\",\n [ClientAuthErrorCodes.deviceCodePollingCancelled]:\n \"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.\",\n [ClientAuthErrorCodes.deviceCodeExpired]: \"Device code is expired.\",\n [ClientAuthErrorCodes.deviceCodeUnknownError]:\n \"Device code stopped polling for unknown reasons.\",\n [ClientAuthErrorCodes.noAccountInSilentRequest]:\n \"Please pass an account object, silent flow is not supported without account information\",\n [ClientAuthErrorCodes.invalidCacheRecord]:\n \"Cache record object was null or undefined.\",\n [ClientAuthErrorCodes.invalidCacheEnvironment]:\n \"Invalid environment when attempting to create cache entry\",\n [ClientAuthErrorCodes.noAccountFound]:\n \"No account found in cache for given key.\",\n [ClientAuthErrorCodes.noCryptoObject]: \"No crypto object detected.\",\n [ClientAuthErrorCodes.unexpectedCredentialType]:\n \"Unexpected credential type.\",\n [ClientAuthErrorCodes.invalidAssertion]:\n \"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515\",\n [ClientAuthErrorCodes.invalidClientCredential]:\n \"Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential\",\n [ClientAuthErrorCodes.tokenRefreshRequired]:\n \"Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.\",\n [ClientAuthErrorCodes.userTimeoutReached]:\n \"User defined timeout for device code polling reached\",\n [ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt]:\n \"Cannot generate a POP jwt if the token_claims are not populated\",\n [ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse]:\n \"Server response does not contain an authorization code to proceed\",\n [ClientAuthErrorCodes.bindingKeyNotRemoved]:\n \"Could not remove the credential's binding key from storage.\",\n [ClientAuthErrorCodes.endSessionEndpointNotSupported]:\n \"The provided authority does not support logout\",\n [ClientAuthErrorCodes.keyIdMissing]:\n \"A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.\",\n [ClientAuthErrorCodes.noNetworkConnectivity]:\n \"No network connectivity. Check your internet connection.\",\n [ClientAuthErrorCodes.userCanceled]: \"User cancelled the flow.\",\n [ClientAuthErrorCodes.missingTenantIdError]:\n \"A tenant id - not common, organizations, or consumers - must be specified when using the client_credentials flow.\",\n [ClientAuthErrorCodes.methodNotImplemented]:\n \"This method has not been implemented\",\n [ClientAuthErrorCodes.nestedAppAuthBridgeDisabled]:\n \"The nested app auth bridge is disabled\",\n};\n\n/**\n * String constants used by error codes and messages.\n * @deprecated Use ClientAuthErrorCodes instead\n */\nexport const ClientAuthErrorMessage = {\n clientInfoDecodingError: {\n code: ClientAuthErrorCodes.clientInfoDecodingError,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.clientInfoDecodingError\n ],\n },\n clientInfoEmptyError: {\n code: ClientAuthErrorCodes.clientInfoEmptyError,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.clientInfoEmptyError\n ],\n },\n tokenParsingError: {\n code: ClientAuthErrorCodes.tokenParsingError,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.tokenParsingError],\n },\n nullOrEmptyToken: {\n code: ClientAuthErrorCodes.nullOrEmptyToken,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.nullOrEmptyToken],\n },\n endpointResolutionError: {\n code: ClientAuthErrorCodes.endpointResolutionError,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.endpointResolutionError\n ],\n },\n networkError: {\n code: ClientAuthErrorCodes.networkError,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.networkError],\n },\n unableToGetOpenidConfigError: {\n code: ClientAuthErrorCodes.openIdConfigError,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.openIdConfigError],\n },\n hashNotDeserialized: {\n code: ClientAuthErrorCodes.hashNotDeserialized,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.hashNotDeserialized],\n },\n invalidStateError: {\n code: ClientAuthErrorCodes.invalidState,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.invalidState],\n },\n stateMismatchError: {\n code: ClientAuthErrorCodes.stateMismatch,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.stateMismatch],\n },\n stateNotFoundError: {\n code: ClientAuthErrorCodes.stateNotFound,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.stateNotFound],\n },\n nonceMismatchError: {\n code: ClientAuthErrorCodes.nonceMismatch,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.nonceMismatch],\n },\n authTimeNotFoundError: {\n code: ClientAuthErrorCodes.authTimeNotFound,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.authTimeNotFound],\n },\n maxAgeTranspired: {\n code: ClientAuthErrorCodes.maxAgeTranspired,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.maxAgeTranspired],\n },\n multipleMatchingTokens: {\n code: ClientAuthErrorCodes.multipleMatchingTokens,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.multipleMatchingTokens\n ],\n },\n multipleMatchingAccounts: {\n code: ClientAuthErrorCodes.multipleMatchingAccounts,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.multipleMatchingAccounts\n ],\n },\n multipleMatchingAppMetadata: {\n code: ClientAuthErrorCodes.multipleMatchingAppMetadata,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.multipleMatchingAppMetadata\n ],\n },\n tokenRequestCannotBeMade: {\n code: ClientAuthErrorCodes.requestCannotBeMade,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.requestCannotBeMade],\n },\n removeEmptyScopeError: {\n code: ClientAuthErrorCodes.cannotRemoveEmptyScope,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.cannotRemoveEmptyScope\n ],\n },\n appendScopeSetError: {\n code: ClientAuthErrorCodes.cannotAppendScopeSet,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.cannotAppendScopeSet\n ],\n },\n emptyInputScopeSetError: {\n code: ClientAuthErrorCodes.emptyInputScopeSet,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.emptyInputScopeSet],\n },\n DeviceCodePollingCancelled: {\n code: ClientAuthErrorCodes.deviceCodePollingCancelled,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.deviceCodePollingCancelled\n ],\n },\n DeviceCodeExpired: {\n code: ClientAuthErrorCodes.deviceCodeExpired,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.deviceCodeExpired],\n },\n DeviceCodeUnknownError: {\n code: ClientAuthErrorCodes.deviceCodeUnknownError,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.deviceCodeUnknownError\n ],\n },\n NoAccountInSilentRequest: {\n code: ClientAuthErrorCodes.noAccountInSilentRequest,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.noAccountInSilentRequest\n ],\n },\n invalidCacheRecord: {\n code: ClientAuthErrorCodes.invalidCacheRecord,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.invalidCacheRecord],\n },\n invalidCacheEnvironment: {\n code: ClientAuthErrorCodes.invalidCacheEnvironment,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.invalidCacheEnvironment\n ],\n },\n noAccountFound: {\n code: ClientAuthErrorCodes.noAccountFound,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.noAccountFound],\n },\n noCryptoObj: {\n code: ClientAuthErrorCodes.noCryptoObject,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.noCryptoObject],\n },\n unexpectedCredentialType: {\n code: ClientAuthErrorCodes.unexpectedCredentialType,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.unexpectedCredentialType\n ],\n },\n invalidAssertion: {\n code: ClientAuthErrorCodes.invalidAssertion,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.invalidAssertion],\n },\n invalidClientCredential: {\n code: ClientAuthErrorCodes.invalidClientCredential,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.invalidClientCredential\n ],\n },\n tokenRefreshRequired: {\n code: ClientAuthErrorCodes.tokenRefreshRequired,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.tokenRefreshRequired\n ],\n },\n userTimeoutReached: {\n code: ClientAuthErrorCodes.userTimeoutReached,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.userTimeoutReached],\n },\n tokenClaimsRequired: {\n code: ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt\n ],\n },\n noAuthorizationCodeFromServer: {\n code: ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse\n ],\n },\n bindingKeyNotRemovedError: {\n code: ClientAuthErrorCodes.bindingKeyNotRemoved,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.bindingKeyNotRemoved\n ],\n },\n logoutNotSupported: {\n code: ClientAuthErrorCodes.endSessionEndpointNotSupported,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.endSessionEndpointNotSupported\n ],\n },\n keyIdMissing: {\n code: ClientAuthErrorCodes.keyIdMissing,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.keyIdMissing],\n },\n noNetworkConnectivity: {\n code: ClientAuthErrorCodes.noNetworkConnectivity,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.noNetworkConnectivity\n ],\n },\n userCanceledError: {\n code: ClientAuthErrorCodes.userCanceled,\n desc: ClientAuthErrorMessages[ClientAuthErrorCodes.userCanceled],\n },\n missingTenantIdError: {\n code: ClientAuthErrorCodes.missingTenantIdError,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.missingTenantIdError\n ],\n },\n nestedAppAuthBridgeDisabled: {\n code: ClientAuthErrorCodes.nestedAppAuthBridgeDisabled,\n desc: ClientAuthErrorMessages[\n ClientAuthErrorCodes.nestedAppAuthBridgeDisabled\n ],\n },\n};\n\n/**\n * Error thrown when there is an error in the client code running on the browser.\n */\nexport class ClientAuthError extends AuthError {\n constructor(errorCode: string, additionalMessage?: string) {\n super(\n errorCode,\n additionalMessage\n ? `${ClientAuthErrorMessages[errorCode]}: ${additionalMessage}`\n : ClientAuthErrorMessages[errorCode]\n );\n this.name = \"ClientAuthError\";\n\n Object.setPrototypeOf(this, ClientAuthError.prototype);\n }\n}\n\nexport function createClientAuthError(\n errorCode: string,\n additionalMessage?: string\n): ClientAuthError {\n return new ClientAuthError(errorCode, additionalMessage);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport type { BaseAuthRequest } from \"../request/BaseAuthRequest.js\";\nimport type { ShrOptions, SignedHttpRequest } from \"./SignedHttpRequest.js\";\n\n/**\n * The PkceCodes type describes the structure\n * of objects that contain PKCE code\n * challenge and verifier pairs\n */\nexport type PkceCodes = {\n verifier: string;\n challenge: string;\n};\n\nexport type SignedHttpRequestParameters = Pick<\n BaseAuthRequest,\n | \"resourceRequestMethod\"\n | \"resourceRequestUri\"\n | \"shrClaims\"\n | \"shrNonce\"\n | \"shrOptions\"\n> & {\n correlationId?: string;\n};\n\n/**\n * Interface for crypto functions used by library\n */\nexport interface ICrypto {\n /**\n * Creates a guid randomly.\n */\n createNewGuid(): string;\n /**\n * base64 Encode string\n * @param input\n */\n base64Encode(input: string): string;\n /**\n * base64 decode string\n * @param input\n */\n base64Decode(input: string): string;\n /**\n * base64 URL safe encoded string\n */\n base64UrlEncode(input: string): string;\n /**\n * Stringifies and base64Url encodes input public key\n * @param inputKid\n * @returns Base64Url encoded public key\n */\n encodeKid(inputKid: string): string;\n /**\n * Generates an JWK RSA S256 Thumbprint\n * @param request\n */\n getPublicKeyThumbprint(\n request: SignedHttpRequestParameters\n ): Promise;\n /**\n * Removes cryptographic keypair from key store matching the keyId passed in\n * @param kid\n */\n removeTokenBindingKey(kid: string): Promise;\n /**\n * Removes all cryptographic keys from IndexedDB storage\n */\n clearKeystore(): Promise;\n /**\n * Returns a signed proof-of-possession token with a given acces token that contains a cnf claim with the required kid.\n * @param accessToken\n */\n signJwt(\n payload: SignedHttpRequest,\n kid: string,\n shrOptions?: ShrOptions,\n correlationId?: string\n ): Promise;\n /**\n * Returns the SHA-256 hash of an input string\n * @param plainText\n */\n hashString(plainText: string): Promise;\n}\n\nexport const DEFAULT_CRYPTO_IMPLEMENTATION: ICrypto = {\n createNewGuid: (): string => {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n base64Decode: (): string => {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n base64Encode: (): string => {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n base64UrlEncode: (): string => {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n encodeKid: (): string => {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n async getPublicKeyThumbprint(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n async removeTokenBindingKey(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n async clearKeystore(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n async signJwt(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n async hashString(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n};\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { LoggerOptions } from \"../config/ClientConfiguration.js\";\nimport { Constants } from \"../utils/Constants.js\";\n\n/**\n * Options for logger messages.\n */\nexport type LoggerMessageOptions = {\n logLevel: LogLevel;\n containsPii?: boolean;\n context?: string;\n correlationId?: string;\n};\n\n/**\n * Log message level.\n */\nexport enum LogLevel {\n Error,\n Warning,\n Info,\n Verbose,\n Trace,\n}\n\n/**\n * Callback to send the messages to.\n */\nexport interface ILoggerCallback {\n (level: LogLevel, message: string, containsPii: boolean): void;\n}\n\n/**\n * Class which facilitates logging of messages to a specific place.\n */\nexport class Logger {\n // Correlation ID for request, usually set by user.\n private correlationId: string;\n\n // Current log level, defaults to info.\n private level: LogLevel = LogLevel.Info;\n\n // Boolean describing whether PII logging is allowed.\n private piiLoggingEnabled: boolean;\n\n // Callback to send messages to.\n private localCallback: ILoggerCallback;\n\n // Package name implementing this logger\n private packageName: string;\n\n // Package version implementing this logger\n private packageVersion: string;\n\n constructor(\n loggerOptions: LoggerOptions,\n packageName?: string,\n packageVersion?: string\n ) {\n const defaultLoggerCallback = () => {\n return;\n };\n const setLoggerOptions =\n loggerOptions || Logger.createDefaultLoggerOptions();\n this.localCallback =\n setLoggerOptions.loggerCallback || defaultLoggerCallback;\n this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false;\n this.level =\n typeof setLoggerOptions.logLevel === \"number\"\n ? setLoggerOptions.logLevel\n : LogLevel.Info;\n this.correlationId =\n setLoggerOptions.correlationId || Constants.EMPTY_STRING;\n this.packageName = packageName || Constants.EMPTY_STRING;\n this.packageVersion = packageVersion || Constants.EMPTY_STRING;\n }\n\n private static createDefaultLoggerOptions(): LoggerOptions {\n return {\n loggerCallback: () => {\n // allow users to not set loggerCallback\n },\n piiLoggingEnabled: false,\n logLevel: LogLevel.Info,\n };\n }\n\n /**\n * Create new Logger with existing configurations.\n */\n public clone(\n packageName: string,\n packageVersion: string,\n correlationId?: string\n ): Logger {\n return new Logger(\n {\n loggerCallback: this.localCallback,\n piiLoggingEnabled: this.piiLoggingEnabled,\n logLevel: this.level,\n correlationId: correlationId || this.correlationId,\n },\n packageName,\n packageVersion\n );\n }\n\n /**\n * Log message with required options.\n */\n private logMessage(\n logMessage: string,\n options: LoggerMessageOptions\n ): void {\n if (\n options.logLevel > this.level ||\n (!this.piiLoggingEnabled && options.containsPii)\n ) {\n return;\n }\n const timestamp = new Date().toUTCString();\n\n // Add correlationId to logs if set, correlationId provided on log messages take precedence\n const logHeader = `[${timestamp}] : [${\n options.correlationId || this.correlationId || \"\"\n }]`;\n\n const log = `${logHeader} : ${this.packageName}@${\n this.packageVersion\n } : ${LogLevel[options.logLevel]} - ${logMessage}`;\n // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? \"-Pii\": Constants.EMPTY_STRING}${options.context ? `:${options.context}` : Constants.EMPTY_STRING}`)(logMessage);\n this.executeCallback(\n options.logLevel,\n log,\n options.containsPii || false\n );\n }\n\n /**\n * Execute callback with message.\n */\n executeCallback(\n level: LogLevel,\n message: string,\n containsPii: boolean\n ): void {\n if (this.localCallback) {\n this.localCallback(level, message, containsPii);\n }\n }\n\n /**\n * Logs error messages.\n */\n error(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Error,\n containsPii: false,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs error messages with PII.\n */\n errorPii(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Error,\n containsPii: true,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs warning messages.\n */\n warning(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Warning,\n containsPii: false,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs warning messages with PII.\n */\n warningPii(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Warning,\n containsPii: true,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs info messages.\n */\n info(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Info,\n containsPii: false,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs info messages with PII.\n */\n infoPii(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Info,\n containsPii: true,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs verbose messages.\n */\n verbose(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Verbose,\n containsPii: false,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs verbose messages with PII.\n */\n verbosePii(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Verbose,\n containsPii: true,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs trace messages.\n */\n trace(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Trace,\n containsPii: false,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Logs trace messages with PII.\n */\n tracePii(message: string, correlationId?: string): void {\n this.logMessage(message, {\n logLevel: LogLevel.Trace,\n containsPii: true,\n correlationId: correlationId || Constants.EMPTY_STRING,\n });\n }\n\n /**\n * Returns whether PII Logging is enabled or not.\n */\n isPiiLoggingEnabled(): boolean {\n return this.piiLoggingEnabled || false;\n }\n}\n", "/* eslint-disable header/header */\nexport const name = \"@azure/msal-common\";\nexport const version = \"15.10.0\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ProtocolMode } from \"./ProtocolMode.js\";\nimport { OIDCOptions } from \"./OIDCOptions.js\";\nimport { AzureRegionConfiguration } from \"./AzureRegionConfiguration.js\";\nimport { CloudInstanceDiscoveryResponse } from \"./CloudInstanceDiscoveryResponse.js\";\n\nexport type AuthorityOptions = {\n protocolMode: ProtocolMode;\n OIDCOptions?: OIDCOptions | null;\n knownAuthorities: Array;\n cloudDiscoveryMetadata: string;\n authorityMetadata: string;\n skipAuthorityMetadataCache?: boolean;\n azureRegionConfiguration?: AzureRegionConfiguration;\n authority?: string;\n};\n\nexport type StaticAuthorityOptions = Partial<\n Pick\n> & {\n canonicalAuthority?: string;\n cloudDiscoveryMetadata?: CloudInstanceDiscoveryResponse;\n};\n\nexport const AzureCloudInstance = {\n // AzureCloudInstance is not specified.\n None: \"none\",\n\n // Microsoft Azure public cloud\n AzurePublic: \"https://login.microsoftonline.com\",\n\n // Microsoft PPE\n AzurePpe: \"https://login.windows-ppe.net\",\n\n // Microsoft Chinese national/regional cloud\n AzureChina: \"https://login.chinacloudapi.cn\",\n\n // Microsoft German national/regional cloud (\"Black Forest\")\n AzureGermany: \"https://login.microsoftonline.de\",\n\n // US Government cloud\n AzureUsGovernment: \"https://login.microsoftonline.us\",\n} as const;\nexport type AzureCloudInstance =\n (typeof AzureCloudInstance)[keyof typeof AzureCloudInstance];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const redirectUriEmpty = \"redirect_uri_empty\";\nexport const claimsRequestParsingError = \"claims_request_parsing_error\";\nexport const authorityUriInsecure = \"authority_uri_insecure\";\nexport const urlParseError = \"url_parse_error\";\nexport const urlEmptyError = \"empty_url_error\";\nexport const emptyInputScopesError = \"empty_input_scopes_error\";\nexport const invalidClaims = \"invalid_claims\";\nexport const tokenRequestEmpty = \"token_request_empty\";\nexport const logoutRequestEmpty = \"logout_request_empty\";\nexport const invalidCodeChallengeMethod = \"invalid_code_challenge_method\";\nexport const pkceParamsMissing = \"pkce_params_missing\";\nexport const invalidCloudDiscoveryMetadata = \"invalid_cloud_discovery_metadata\";\nexport const invalidAuthorityMetadata = \"invalid_authority_metadata\";\nexport const untrustedAuthority = \"untrusted_authority\";\nexport const missingSshJwk = \"missing_ssh_jwk\";\nexport const missingSshKid = \"missing_ssh_kid\";\nexport const missingNonceAuthenticationHeader =\n \"missing_nonce_authentication_header\";\nexport const invalidAuthenticationHeader = \"invalid_authentication_header\";\nexport const cannotSetOIDCOptions = \"cannot_set_OIDCOptions\";\nexport const cannotAllowPlatformBroker = \"cannot_allow_platform_broker\";\nexport const authorityMismatch = \"authority_mismatch\";\nexport const invalidRequestMethodForEAR = \"invalid_request_method_for_EAR\";\nexport const invalidAuthorizePostBodyParameters =\n \"invalid_authorize_post_body_parameters\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"./AuthError.js\";\nimport * as ClientConfigurationErrorCodes from \"./ClientConfigurationErrorCodes.js\";\nexport { ClientConfigurationErrorCodes };\n\nexport const ClientConfigurationErrorMessages = {\n [ClientConfigurationErrorCodes.redirectUriEmpty]:\n \"A redirect URI is required for all calls, and none has been set.\",\n [ClientConfigurationErrorCodes.claimsRequestParsingError]:\n \"Could not parse the given claims request object.\",\n [ClientConfigurationErrorCodes.authorityUriInsecure]:\n \"Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options\",\n [ClientConfigurationErrorCodes.urlParseError]:\n \"URL could not be parsed into appropriate segments.\",\n [ClientConfigurationErrorCodes.urlEmptyError]: \"URL was empty or null.\",\n [ClientConfigurationErrorCodes.emptyInputScopesError]:\n \"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.\",\n [ClientConfigurationErrorCodes.invalidClaims]:\n \"Given claims parameter must be a stringified JSON object.\",\n [ClientConfigurationErrorCodes.tokenRequestEmpty]:\n \"Token request was empty and not found in cache.\",\n [ClientConfigurationErrorCodes.logoutRequestEmpty]:\n \"The logout request was null or undefined.\",\n [ClientConfigurationErrorCodes.invalidCodeChallengeMethod]:\n 'code_challenge_method passed is invalid. Valid values are \"plain\" and \"S256\".',\n [ClientConfigurationErrorCodes.pkceParamsMissing]:\n \"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request\",\n [ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata]:\n \"Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields\",\n [ClientConfigurationErrorCodes.invalidAuthorityMetadata]:\n \"Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.\",\n [ClientConfigurationErrorCodes.untrustedAuthority]:\n \"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.\",\n [ClientConfigurationErrorCodes.missingSshJwk]:\n \"Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.\",\n [ClientConfigurationErrorCodes.missingSshKid]:\n \"Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.\",\n [ClientConfigurationErrorCodes.missingNonceAuthenticationHeader]:\n \"Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.\",\n [ClientConfigurationErrorCodes.invalidAuthenticationHeader]:\n \"Invalid authentication header provided\",\n [ClientConfigurationErrorCodes.cannotSetOIDCOptions]:\n \"Cannot set OIDCOptions parameter. Please change the protocol mode to OIDC or use a non-Microsoft authority.\",\n [ClientConfigurationErrorCodes.cannotAllowPlatformBroker]:\n \"Cannot set allowPlatformBroker parameter to true when not in AAD protocol mode.\",\n [ClientConfigurationErrorCodes.authorityMismatch]:\n \"Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.\",\n [ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters]:\n \"Invalid authorize post body parameters provided. If you are using authorizePostBodyParameters, the request method must be POST. Please check the request method and parameters.\",\n [ClientConfigurationErrorCodes.invalidRequestMethodForEAR]:\n \"Invalid request method for EAR protocol mode. The request method cannot be GET when using EAR protocol mode. Please change the request method to POST.\",\n};\n\n/**\n * ClientConfigurationErrorMessage class containing string constants used by error codes and messages.\n * @deprecated Use ClientConfigurationErrorCodes instead\n */\nexport const ClientConfigurationErrorMessage = {\n redirectUriNotSet: {\n code: ClientConfigurationErrorCodes.redirectUriEmpty,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.redirectUriEmpty\n ],\n },\n claimsRequestParsingError: {\n code: ClientConfigurationErrorCodes.claimsRequestParsingError,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.claimsRequestParsingError\n ],\n },\n authorityUriInsecure: {\n code: ClientConfigurationErrorCodes.authorityUriInsecure,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.authorityUriInsecure\n ],\n },\n urlParseError: {\n code: ClientConfigurationErrorCodes.urlParseError,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.urlParseError\n ],\n },\n urlEmptyError: {\n code: ClientConfigurationErrorCodes.urlEmptyError,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.urlEmptyError\n ],\n },\n emptyScopesError: {\n code: ClientConfigurationErrorCodes.emptyInputScopesError,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.emptyInputScopesError\n ],\n },\n invalidClaimsRequest: {\n code: ClientConfigurationErrorCodes.invalidClaims,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidClaims\n ],\n },\n tokenRequestEmptyError: {\n code: ClientConfigurationErrorCodes.tokenRequestEmpty,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.tokenRequestEmpty\n ],\n },\n logoutRequestEmptyError: {\n code: ClientConfigurationErrorCodes.logoutRequestEmpty,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.logoutRequestEmpty\n ],\n },\n invalidCodeChallengeMethod: {\n code: ClientConfigurationErrorCodes.invalidCodeChallengeMethod,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidCodeChallengeMethod\n ],\n },\n invalidCodeChallengeParams: {\n code: ClientConfigurationErrorCodes.pkceParamsMissing,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.pkceParamsMissing\n ],\n },\n invalidCloudDiscoveryMetadata: {\n code: ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata\n ],\n },\n invalidAuthorityMetadata: {\n code: ClientConfigurationErrorCodes.invalidAuthorityMetadata,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidAuthorityMetadata\n ],\n },\n untrustedAuthority: {\n code: ClientConfigurationErrorCodes.untrustedAuthority,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.untrustedAuthority\n ],\n },\n missingSshJwk: {\n code: ClientConfigurationErrorCodes.missingSshJwk,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.missingSshJwk\n ],\n },\n missingSshKid: {\n code: ClientConfigurationErrorCodes.missingSshKid,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.missingSshKid\n ],\n },\n missingNonceAuthenticationHeader: {\n code: ClientConfigurationErrorCodes.missingNonceAuthenticationHeader,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.missingNonceAuthenticationHeader\n ],\n },\n invalidAuthenticationHeader: {\n code: ClientConfigurationErrorCodes.invalidAuthenticationHeader,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidAuthenticationHeader\n ],\n },\n cannotSetOIDCOptions: {\n code: ClientConfigurationErrorCodes.cannotSetOIDCOptions,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.cannotSetOIDCOptions\n ],\n },\n cannotAllowPlatformBroker: {\n code: ClientConfigurationErrorCodes.cannotAllowPlatformBroker,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.cannotAllowPlatformBroker\n ],\n },\n authorityMismatch: {\n code: ClientConfigurationErrorCodes.authorityMismatch,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.authorityMismatch\n ],\n },\n invalidAuthorizePostBodyParameters: {\n code: ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters\n ],\n },\n invalidRequestMethodForEAR: {\n code: ClientConfigurationErrorCodes.invalidRequestMethodForEAR,\n desc: ClientConfigurationErrorMessages[\n ClientConfigurationErrorCodes.invalidRequestMethodForEAR\n ],\n },\n};\n\n/**\n * Error thrown when there is an error in configuration of the MSAL.js library.\n */\nexport class ClientConfigurationError extends AuthError {\n constructor(errorCode: string) {\n super(errorCode, ClientConfigurationErrorMessages[errorCode]);\n this.name = \"ClientConfigurationError\";\n Object.setPrototypeOf(this, ClientConfigurationError.prototype);\n }\n}\n\nexport function createClientConfigurationError(\n errorCode: string\n): ClientConfigurationError {\n return new ClientConfigurationError(errorCode);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @hidden\n */\nexport class StringUtils {\n /**\n * Check if stringified object is empty\n * @param strObj\n */\n static isEmptyObj(strObj?: string): boolean {\n if (strObj) {\n try {\n const obj = JSON.parse(strObj);\n return Object.keys(obj).length === 0;\n } catch (e) {}\n }\n return true;\n }\n\n static startsWith(str: string, search: string): boolean {\n return str.indexOf(search) === 0;\n }\n\n static endsWith(str: string, search: string): boolean {\n return (\n str.length >= search.length &&\n str.lastIndexOf(search) === str.length - search.length\n );\n }\n\n /**\n * Parses string into an object.\n *\n * @param query\n */\n static queryStringToObject(query: string): T {\n const obj: {} = {};\n const params = query.split(\"&\");\n const decode = (s: string) => decodeURIComponent(s.replace(/\\+/g, \" \"));\n params.forEach((pair) => {\n if (pair.trim()) {\n const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character\n if (key && value) {\n obj[decode(key)] = decode(value);\n }\n }\n });\n return obj as T;\n }\n\n /**\n * Trims entries in an array.\n *\n * @param arr\n */\n static trimArrayEntries(arr: Array): Array {\n return arr.map((entry) => entry.trim());\n }\n\n /**\n * Removes empty strings from array\n * @param arr\n */\n static removeEmptyStringsFromArray(arr: Array): Array {\n return arr.filter((entry) => {\n return !!entry;\n });\n }\n\n /**\n * Attempts to parse a string into JSON\n * @param str\n */\n static jsonParseHelper(str: string): T | null {\n try {\n return JSON.parse(str) as T;\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Tests if a given string matches a given pattern, with support for wildcards and queries.\n * @param pattern Wildcard pattern to string match. Supports \"*\" for wildcards and \"?\" for queries\n * @param input String to match against\n */\n static matchPattern(pattern: string, input: string): boolean {\n /**\n * Wildcard support: https://stackoverflow.com/a/3117248/4888559\n * Queries: replaces \"?\" in string with escaped \"\\?\" for regex test\n */\n // eslint-disable-next-line security/detect-non-literal-regexp\n const regex: RegExp = new RegExp(\n pattern\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\*/g, \"[^ ]*\")\n .replace(/\\?/g, \"\\\\?\")\n );\n\n return regex.test(input);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport { StringUtils } from \"../utils/StringUtils.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { Constants, OIDC_SCOPES } from \"../utils/Constants.js\";\n\n/**\n * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes\n * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions\n * to ensure uniqueness of strings.\n */\nexport class ScopeSet {\n // Scopes as a Set of strings\n private scopes: Set;\n\n constructor(inputScopes: Array) {\n // Filter empty string and null/undefined array items\n const scopeArr = inputScopes\n ? StringUtils.trimArrayEntries([...inputScopes])\n : [];\n const filteredInput = scopeArr\n ? StringUtils.removeEmptyStringsFromArray(scopeArr)\n : [];\n\n // Check if scopes array has at least one member\n if (!filteredInput || !filteredInput.length) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.emptyInputScopesError\n );\n }\n\n this.scopes = new Set(); // Iterator in constructor not supported by IE11\n filteredInput.forEach((scope) => this.scopes.add(scope));\n }\n\n /**\n * Factory method to create ScopeSet from space-delimited string\n * @param inputScopeString\n * @param appClientId\n * @param scopesRequired\n */\n static fromString(inputScopeString: string): ScopeSet {\n const scopeString = inputScopeString || Constants.EMPTY_STRING;\n const inputScopes: Array = scopeString.split(\" \");\n return new ScopeSet(inputScopes);\n }\n\n /**\n * Creates the set of scopes to search for in cache lookups\n * @param inputScopeString\n * @returns\n */\n static createSearchScopes(inputScopeString: Array): ScopeSet {\n const scopeSet = new ScopeSet(inputScopeString);\n if (!scopeSet.containsOnlyOIDCScopes()) {\n scopeSet.removeOIDCScopes();\n } else {\n scopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\n }\n\n return scopeSet;\n }\n\n /**\n * Check if a given scope is present in this set of scopes.\n * @param scope\n */\n containsScope(scope: string): boolean {\n const lowerCaseScopes = this.printScopesLowerCase().split(\" \");\n const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes);\n // compare lowercase scopes\n return scope\n ? lowerCaseScopesSet.scopes.has(scope.toLowerCase())\n : false;\n }\n\n /**\n * Check if a set of scopes is present in this set of scopes.\n * @param scopeSet\n */\n containsScopeSet(scopeSet: ScopeSet): boolean {\n if (!scopeSet || scopeSet.scopes.size <= 0) {\n return false;\n }\n\n return (\n this.scopes.size >= scopeSet.scopes.size &&\n scopeSet.asArray().every((scope) => this.containsScope(scope))\n );\n }\n\n /**\n * Check if set of scopes contains only the defaults\n */\n containsOnlyOIDCScopes(): boolean {\n let defaultScopeCount = 0;\n OIDC_SCOPES.forEach((defaultScope: string) => {\n if (this.containsScope(defaultScope)) {\n defaultScopeCount += 1;\n }\n });\n\n return this.scopes.size === defaultScopeCount;\n }\n\n /**\n * Appends single scope if passed\n * @param newScope\n */\n appendScope(newScope: string): void {\n if (newScope) {\n this.scopes.add(newScope.trim());\n }\n }\n\n /**\n * Appends multiple scopes if passed\n * @param newScopes\n */\n appendScopes(newScopes: Array): void {\n try {\n newScopes.forEach((newScope) => this.appendScope(newScope));\n } catch (e) {\n throw createClientAuthError(\n ClientAuthErrorCodes.cannotAppendScopeSet\n );\n }\n }\n\n /**\n * Removes element from set of scopes.\n * @param scope\n */\n removeScope(scope: string): void {\n if (!scope) {\n throw createClientAuthError(\n ClientAuthErrorCodes.cannotRemoveEmptyScope\n );\n }\n this.scopes.delete(scope.trim());\n }\n\n /**\n * Removes default scopes from set of scopes\n * Primarily used to prevent cache misses if the default scopes are not returned from the server\n */\n removeOIDCScopes(): void {\n OIDC_SCOPES.forEach((defaultScope: string) => {\n this.scopes.delete(defaultScope);\n });\n }\n\n /**\n * Combines an array of scopes with the current set of scopes.\n * @param otherScopes\n */\n unionScopeSets(otherScopes: ScopeSet): Set {\n if (!otherScopes) {\n throw createClientAuthError(\n ClientAuthErrorCodes.emptyInputScopeSet\n );\n }\n const unionScopes = new Set(); // Iterator in constructor not supported in IE11\n otherScopes.scopes.forEach((scope) =>\n unionScopes.add(scope.toLowerCase())\n );\n this.scopes.forEach((scope) => unionScopes.add(scope.toLowerCase()));\n return unionScopes;\n }\n\n /**\n * Check if scopes intersect between this set and another.\n * @param otherScopes\n */\n intersectingScopeSets(otherScopes: ScopeSet): boolean {\n if (!otherScopes) {\n throw createClientAuthError(\n ClientAuthErrorCodes.emptyInputScopeSet\n );\n }\n\n // Do not allow OIDC scopes to be the only intersecting scopes\n if (!otherScopes.containsOnlyOIDCScopes()) {\n otherScopes.removeOIDCScopes();\n }\n const unionScopes = this.unionScopeSets(otherScopes);\n const sizeOtherScopes = otherScopes.getScopeCount();\n const sizeThisScopes = this.getScopeCount();\n const sizeUnionScopes = unionScopes.size;\n return sizeUnionScopes < sizeThisScopes + sizeOtherScopes;\n }\n\n /**\n * Returns size of set of scopes.\n */\n getScopeCount(): number {\n return this.scopes.size;\n }\n\n /**\n * Returns the scopes as an array of string values\n */\n asArray(): Array {\n const array: Array = [];\n this.scopes.forEach((val) => array.push(val));\n return array;\n }\n\n /**\n * Prints scopes into a space-delimited string\n */\n printScopes(): string {\n if (this.scopes) {\n const scopeArr = this.asArray();\n return scopeArr.join(\" \");\n }\n return Constants.EMPTY_STRING;\n }\n\n /**\n * Prints scopes into a space-delimited lower-case string (used for caching)\n */\n printScopesLowerCase(): string {\n return this.printScopes().toLowerCase();\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { TokenClaims } from \"./TokenClaims.js\";\n/**\n * Account object with the following signature:\n * - homeAccountId - Home account identifier for this account object\n * - environment - Entity which issued the token represented by the domain of the issuer (e.g. login.microsoftonline.com)\n * - tenantId - Full tenant or organizational id that this account belongs to\n * - username - preferred_username claim of the id_token that represents this account\n * - localAccountId - Local, tenant-specific account identifer for this account object, usually used in legacy cases\n * - name - Full name for the account, including given name and family name\n * - idToken - raw ID token\n * - idTokenClaims - Object contains claims from ID token\n * - nativeAccountId - The user's native account ID\n * - tenantProfiles - Map of tenant profile objects for each tenant that the account has authenticated with in the browser\n */\nexport type AccountInfo = {\n homeAccountId: string;\n environment: string;\n tenantId: string;\n username: string;\n localAccountId: string;\n loginHint?: string;\n name?: string;\n idToken?: string;\n idTokenClaims?: TokenClaims & {\n [key: string]:\n | string\n | number\n | string[]\n | object\n | undefined\n | unknown;\n };\n nativeAccountId?: string;\n authorityType?: string;\n tenantProfiles?: Map;\n};\n\n/**\n * Account details that vary across tenants for the same user\n */\nexport type TenantProfile = Pick<\n AccountInfo,\n \"tenantId\" | \"localAccountId\" | \"name\" | \"username\" | \"loginHint\"\n> & {\n /**\n * - isHomeTenant - True if this is the home tenant profile of the account, false if it's a guest tenant profile\n */\n isHomeTenant?: boolean;\n};\n\nexport type ActiveAccountFilters = {\n homeAccountId: string;\n localAccountId: string;\n tenantId?: string;\n lastUpdatedAt?: string;\n};\n\n/**\n * Returns true if tenantId matches the utid portion of homeAccountId\n * @param tenantId\n * @param homeAccountId\n * @returns\n */\nexport function tenantIdMatchesHomeTenant(\n tenantId?: string,\n homeAccountId?: string\n): boolean {\n return (\n !!tenantId &&\n !!homeAccountId &&\n tenantId === homeAccountId.split(\".\")[1]\n );\n}\n\n/**\n * Build tenant profile\n * @param homeAccountId - Home account identifier for this account object\n * @param localAccountId - Local account identifer for this account object\n * @param tenantId - Full tenant or organizational id that this account belongs to\n * @param idTokenClaims - Claims from the ID token\n * @returns\n */\nexport function buildTenantProfile(\n homeAccountId: string,\n localAccountId: string,\n tenantId: string,\n idTokenClaims?: TokenClaims\n): TenantProfile {\n if (idTokenClaims) {\n const {\n oid,\n sub,\n tid,\n name,\n tfp,\n acr,\n preferred_username,\n upn,\n login_hint,\n } = idTokenClaims;\n\n /**\n * Since there is no way to determine if the authority is AAD or B2C, we exhaust all the possible claims that can serve as tenant ID with the following precedence:\n * tid - TenantID claim that identifies the tenant that issued the token in AAD. Expected in all AAD ID tokens, not present in B2C ID Tokens.\n * tfp - Trust Framework Policy claim that identifies the policy that was used to authenticate the user. Functions as tenant for B2C scenarios.\n * acr - Authentication Context Class Reference claim used only with older B2C policies. Fallback in case tfp is not present, but likely won't be present anyway.\n */\n const tenantId = tid || tfp || acr || \"\";\n\n return {\n tenantId: tenantId,\n localAccountId: oid || sub || \"\",\n name: name,\n username: preferred_username || upn || \"\",\n loginHint: login_hint,\n isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),\n };\n } else {\n return {\n tenantId,\n localAccountId,\n username: \"\",\n isHomeTenant: tenantIdMatchesHomeTenant(tenantId, homeAccountId),\n };\n }\n}\n\n/**\n * Replaces account info that varies by tenant profile sourced from the ID token claims passed in with the tenant-specific account info\n * @param baseAccountInfo\n * @param idTokenClaims\n * @returns\n */\nexport function updateAccountTenantProfileData(\n baseAccountInfo: AccountInfo,\n tenantProfile?: TenantProfile,\n idTokenClaims?: TokenClaims,\n idTokenSecret?: string\n): AccountInfo {\n let updatedAccountInfo = baseAccountInfo;\n // Tenant Profile overrides passed in account info\n if (tenantProfile) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isHomeTenant, ...tenantProfileOverride } = tenantProfile;\n updatedAccountInfo = { ...baseAccountInfo, ...tenantProfileOverride };\n }\n\n // ID token claims override passed in account info and tenant profile\n if (idTokenClaims) {\n // Ignore isHomeTenant, loginHint, and sid which are part of tenant profile but not base account info\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isHomeTenant, ...claimsSourcedTenantProfile } =\n buildTenantProfile(\n baseAccountInfo.homeAccountId,\n baseAccountInfo.localAccountId,\n baseAccountInfo.tenantId,\n idTokenClaims\n );\n\n updatedAccountInfo = {\n ...updatedAccountInfo,\n ...claimsSourcedTenantProfile,\n idTokenClaims: idTokenClaims,\n idToken: idTokenSecret,\n };\n\n return updatedAccountInfo;\n }\n\n return updatedAccountInfo;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { TokenClaims } from \"./TokenClaims.js\";\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../error/ClientAuthError.js\";\n\n/**\n * Extract token by decoding the rawToken\n *\n * @param encodedToken\n */\nexport function extractTokenClaims(\n encodedToken: string,\n base64Decode: (input: string) => string\n): TokenClaims {\n const jswPayload = getJWSPayload(encodedToken);\n\n // token will be decoded to get the username\n try {\n // base64Decode() should throw an error if there is an issue\n const base64Decoded = base64Decode(jswPayload);\n return JSON.parse(base64Decoded) as TokenClaims;\n } catch (err) {\n throw createClientAuthError(ClientAuthErrorCodes.tokenParsingError);\n }\n}\n\n/**\n * decode a JWT\n *\n * @param authToken\n */\nexport function getJWSPayload(authToken: string): string {\n if (!authToken) {\n throw createClientAuthError(ClientAuthErrorCodes.nullOrEmptyToken);\n }\n const tokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\n const matches = tokenPartsRegex.exec(authToken);\n if (!matches || matches.length < 4) {\n throw createClientAuthError(ClientAuthErrorCodes.tokenParsingError);\n }\n /**\n * const crackedToken = {\n * header: matches[1],\n * JWSPayload: matches[2],\n * JWSSig: matches[3],\n * };\n */\n\n return matches[2];\n}\n\n/**\n * Determine if the token's max_age has transpired\n */\nexport function checkMaxAge(authTime: number, maxAge: number): void {\n /*\n * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest\n * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access,\n * provide a value of 0 for the max_age parameter and the AS will force a fresh login.\n */\n const fiveMinuteSkew = 300000; // five minutes in milliseconds\n if (maxAge === 0 || Date.now() - fiveMinuteSkew > authTime + maxAge) {\n throw createClientAuthError(ClientAuthErrorCodes.maxAgeTranspired);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorizeResponse } from \"../response/AuthorizeResponse.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { StringDict } from \"./MsalTypes.js\";\n\n/**\n * Parses hash string from given string. Returns empty string if no hash symbol is found.\n * @param hashString\n */\nexport function stripLeadingHashOrQuery(responseString: string): string {\n if (responseString.startsWith(\"#/\")) {\n return responseString.substring(2);\n } else if (\n responseString.startsWith(\"#\") ||\n responseString.startsWith(\"?\")\n ) {\n return responseString.substring(1);\n }\n\n return responseString;\n}\n\n/**\n * Returns URL hash as server auth code response object.\n */\nexport function getDeserializedResponse(\n responseString: string\n): AuthorizeResponse | null {\n // Check if given hash is empty\n if (!responseString || responseString.indexOf(\"=\") < 0) {\n return null;\n }\n try {\n // Strip the # or ? symbol if present\n const normalizedResponse = stripLeadingHashOrQuery(responseString);\n // If # symbol was not present, above will return empty string, so give original hash value\n const deserializedHash: AuthorizeResponse = Object.fromEntries(\n new URLSearchParams(normalizedResponse)\n );\n\n // Check for known response properties\n if (\n deserializedHash.code ||\n deserializedHash.ear_jwe ||\n deserializedHash.error ||\n deserializedHash.error_description ||\n deserializedHash.state\n ) {\n return deserializedHash;\n }\n } catch (e) {\n throw createClientAuthError(ClientAuthErrorCodes.hashNotDeserialized);\n }\n\n return null;\n}\n\n/**\n * Utility to create a URL from the params map\n */\nexport function mapToQueryString(\n parameters: Map,\n encodeExtraParams: boolean = true,\n extraQueryParameters?: StringDict\n): string {\n const queryParameterArray: Array = new Array();\n\n parameters.forEach((value, key) => {\n if (\n !encodeExtraParams &&\n extraQueryParameters &&\n key in extraQueryParameters\n ) {\n queryParameterArray.push(`${key}=${value}`);\n } else {\n queryParameterArray.push(`${key}=${encodeURIComponent(value)}`);\n }\n });\n\n return queryParameterArray.join(\"&\");\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport { StringUtils } from \"../utils/StringUtils.js\";\nimport { IUri } from \"./IUri.js\";\nimport { AADAuthorityConstants, Constants } from \"../utils/Constants.js\";\nimport * as UrlUtils from \"../utils/UrlUtils.js\";\n\n/**\n * Url object class which can perform various transformations on url strings.\n */\nexport class UrlString {\n // internal url string field\n private _urlString: string;\n public get urlString(): string {\n return this._urlString;\n }\n\n constructor(url: string) {\n this._urlString = url;\n if (!this._urlString) {\n // Throws error if url is empty\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.urlEmptyError\n );\n }\n\n if (!url.includes(\"#\")) {\n this._urlString = UrlString.canonicalizeUri(url);\n }\n }\n\n /**\n * Ensure urls are lower case and end with a / character.\n * @param url\n */\n static canonicalizeUri(url: string): string {\n if (url) {\n let lowerCaseUrl = url.toLowerCase();\n\n if (StringUtils.endsWith(lowerCaseUrl, \"?\")) {\n lowerCaseUrl = lowerCaseUrl.slice(0, -1);\n } else if (StringUtils.endsWith(lowerCaseUrl, \"?/\")) {\n lowerCaseUrl = lowerCaseUrl.slice(0, -2);\n }\n\n if (!StringUtils.endsWith(lowerCaseUrl, \"/\")) {\n lowerCaseUrl += \"/\";\n }\n\n return lowerCaseUrl;\n }\n\n return url;\n }\n\n /**\n * Throws if urlString passed is not a valid authority URI string.\n */\n validateAsUri(): void {\n // Attempts to parse url for uri components\n let components;\n try {\n components = this.getUrlComponents();\n } catch (e) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.urlParseError\n );\n }\n\n // Throw error if URI or path segments are not parseable.\n if (!components.HostNameAndPort || !components.PathSegments) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.urlParseError\n );\n }\n\n // Throw error if uri is insecure.\n if (\n !components.Protocol ||\n components.Protocol.toLowerCase() !== \"https:\"\n ) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.authorityUriInsecure\n );\n }\n }\n\n /**\n * Given a url and a query string return the url with provided query string appended\n * @param url\n * @param queryString\n */\n static appendQueryString(url: string, queryString: string): string {\n if (!queryString) {\n return url;\n }\n\n return url.indexOf(\"?\") < 0\n ? `${url}?${queryString}`\n : `${url}&${queryString}`;\n }\n\n /**\n * Returns a url with the hash removed\n * @param url\n */\n static removeHashFromUrl(url: string): string {\n return UrlString.canonicalizeUri(url.split(\"#\")[0]);\n }\n\n /**\n * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d\n * @param href The url\n * @param tenantId The tenant id to replace\n */\n replaceTenantPath(tenantId: string): UrlString {\n const urlObject = this.getUrlComponents();\n const pathArray = urlObject.PathSegments;\n if (\n tenantId &&\n pathArray.length !== 0 &&\n (pathArray[0] === AADAuthorityConstants.COMMON ||\n pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)\n ) {\n pathArray[0] = tenantId;\n }\n return UrlString.constructAuthorityUriFromObject(urlObject);\n }\n\n /**\n * Parses out the components from a url string.\n * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.\n */\n getUrlComponents(): IUri {\n // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\n const regEx = RegExp(\n \"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\"\n );\n\n // If url string does not match regEx, we throw an error\n const match = this.urlString.match(regEx);\n if (!match) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.urlParseError\n );\n }\n\n // Url component object\n const urlComponents = {\n Protocol: match[1],\n HostNameAndPort: match[4],\n AbsolutePath: match[5],\n QueryString: match[7],\n } as IUri;\n\n let pathSegments = urlComponents.AbsolutePath.split(\"/\");\n pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements\n urlComponents.PathSegments = pathSegments;\n\n if (\n urlComponents.QueryString &&\n urlComponents.QueryString.endsWith(\"/\")\n ) {\n urlComponents.QueryString = urlComponents.QueryString.substring(\n 0,\n urlComponents.QueryString.length - 1\n );\n }\n return urlComponents;\n }\n\n static getDomainFromUrl(url: string): string {\n const regEx = RegExp(\"^([^:/?#]+://)?([^/?#]*)\");\n\n const match = url.match(regEx);\n\n if (!match) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.urlParseError\n );\n }\n\n return match[2];\n }\n\n static getAbsoluteUrl(relativeUrl: string, baseUrl: string): string {\n if (relativeUrl[0] === Constants.FORWARD_SLASH) {\n const url = new UrlString(baseUrl);\n const baseComponents = url.getUrlComponents();\n\n return (\n baseComponents.Protocol +\n \"//\" +\n baseComponents.HostNameAndPort +\n relativeUrl\n );\n }\n\n return relativeUrl;\n }\n\n static constructAuthorityUriFromObject(urlObject: IUri): UrlString {\n return new UrlString(\n urlObject.Protocol +\n \"//\" +\n urlObject.HostNameAndPort +\n \"/\" +\n urlObject.PathSegments.join(\"/\")\n );\n }\n\n /**\n * Check if the hash of the URL string contains known properties\n * @deprecated This API will be removed in a future version\n */\n static hashContainsKnownProperties(response: string): boolean {\n return !!UrlUtils.getDeserializedResponse(response);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Logger } from \"../logger/Logger.js\";\nimport { UrlString } from \"../url/UrlString.js\";\nimport { AuthorityMetadataSource } from \"../utils/Constants.js\";\nimport { StaticAuthorityOptions } from \"./AuthorityOptions.js\";\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata.js\";\nimport { CloudInstanceDiscoveryResponse } from \"./CloudInstanceDiscoveryResponse.js\";\nimport { OpenIdConfigResponse } from \"./OpenIdConfigResponse.js\";\n\ntype RawMetadata = {\n endpointMetadata: { [key: string]: OpenIdConfigResponse };\n instanceDiscoveryMetadata: CloudInstanceDiscoveryResponse;\n};\n\nexport const rawMetdataJSON: RawMetadata = {\n endpointMetadata: {\n \"login.microsoftonline.com\": {\n token_endpoint:\n \"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token\",\n jwks_uri:\n \"https://login.microsoftonline.com/{tenantid}/discovery/v2.0/keys\",\n issuer: \"https://login.microsoftonline.com/{tenantid}/v2.0\",\n authorization_endpoint:\n \"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/authorize\",\n end_session_endpoint:\n \"https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout\",\n },\n \"login.chinacloudapi.cn\": {\n token_endpoint:\n \"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/token\",\n jwks_uri:\n \"https://login.chinacloudapi.cn/{tenantid}/discovery/v2.0/keys\",\n issuer: \"https://login.partner.microsoftonline.cn/{tenantid}/v2.0\",\n authorization_endpoint:\n \"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/authorize\",\n end_session_endpoint:\n \"https://login.chinacloudapi.cn/{tenantid}/oauth2/v2.0/logout\",\n },\n \"login.microsoftonline.us\": {\n token_endpoint:\n \"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/token\",\n jwks_uri:\n \"https://login.microsoftonline.us/{tenantid}/discovery/v2.0/keys\",\n issuer: \"https://login.microsoftonline.us/{tenantid}/v2.0\",\n authorization_endpoint:\n \"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/authorize\",\n end_session_endpoint:\n \"https://login.microsoftonline.us/{tenantid}/oauth2/v2.0/logout\",\n },\n },\n instanceDiscoveryMetadata: {\n tenant_discovery_endpoint:\n \"https://{canonicalAuthority}/v2.0/.well-known/openid-configuration\",\n metadata: [\n {\n preferred_network: \"login.microsoftonline.com\",\n preferred_cache: \"login.windows.net\",\n aliases: [\n \"login.microsoftonline.com\",\n \"login.windows.net\",\n \"login.microsoft.com\",\n \"sts.windows.net\",\n ],\n },\n {\n preferred_network: \"login.partner.microsoftonline.cn\",\n preferred_cache: \"login.partner.microsoftonline.cn\",\n aliases: [\n \"login.partner.microsoftonline.cn\",\n \"login.chinacloudapi.cn\",\n ],\n },\n {\n preferred_network: \"login.microsoftonline.de\",\n preferred_cache: \"login.microsoftonline.de\",\n aliases: [\"login.microsoftonline.de\"],\n },\n {\n preferred_network: \"login.microsoftonline.us\",\n preferred_cache: \"login.microsoftonline.us\",\n aliases: [\n \"login.microsoftonline.us\",\n \"login.usgovcloudapi.net\",\n ],\n },\n {\n preferred_network: \"login-us.microsoftonline.com\",\n preferred_cache: \"login-us.microsoftonline.com\",\n aliases: [\"login-us.microsoftonline.com\"],\n },\n ],\n },\n};\n\nexport const EndpointMetadata = rawMetdataJSON.endpointMetadata;\nexport const InstanceDiscoveryMetadata =\n rawMetdataJSON.instanceDiscoveryMetadata;\n\nexport const InstanceDiscoveryMetadataAliases: Set = new Set();\nInstanceDiscoveryMetadata.metadata.forEach(\n (metadataEntry: CloudDiscoveryMetadata) => {\n metadataEntry.aliases.forEach((alias: string) => {\n InstanceDiscoveryMetadataAliases.add(alias);\n });\n }\n);\n\n/**\n * Attempts to get an aliases array from the static authority metadata sources based on the canonical authority host\n * @param staticAuthorityOptions\n * @param logger\n * @returns\n */\nexport function getAliasesFromStaticSources(\n staticAuthorityOptions: StaticAuthorityOptions,\n logger?: Logger\n): string[] {\n let staticAliases: string[] | undefined;\n const canonicalAuthority = staticAuthorityOptions.canonicalAuthority;\n if (canonicalAuthority) {\n const authorityHost = new UrlString(\n canonicalAuthority\n ).getUrlComponents().HostNameAndPort;\n staticAliases =\n getAliasesFromMetadata(\n authorityHost,\n staticAuthorityOptions.cloudDiscoveryMetadata?.metadata,\n AuthorityMetadataSource.CONFIG,\n logger\n ) ||\n getAliasesFromMetadata(\n authorityHost,\n InstanceDiscoveryMetadata.metadata,\n AuthorityMetadataSource.HARDCODED_VALUES,\n logger\n ) ||\n staticAuthorityOptions.knownAuthorities;\n }\n\n return staticAliases || [];\n}\n\n/**\n * Returns aliases for from the raw cloud discovery metadata passed in\n * @param authorityHost\n * @param rawCloudDiscoveryMetadata\n * @returns\n */\nexport function getAliasesFromMetadata(\n authorityHost?: string,\n cloudDiscoveryMetadata?: CloudDiscoveryMetadata[],\n source?: AuthorityMetadataSource,\n logger?: Logger\n): string[] | null {\n logger?.trace(`getAliasesFromMetadata called with source: ${source}`);\n if (authorityHost && cloudDiscoveryMetadata) {\n const metadata = getCloudDiscoveryMetadataFromNetworkResponse(\n cloudDiscoveryMetadata,\n authorityHost\n );\n\n if (metadata) {\n logger?.trace(\n `getAliasesFromMetadata: found cloud discovery metadata in ${source}, returning aliases`\n );\n return metadata.aliases;\n } else {\n logger?.trace(\n `getAliasesFromMetadata: did not find cloud discovery metadata in ${source}`\n );\n }\n }\n\n return null;\n}\n\n/**\n * Get cloud discovery metadata for common authorities\n */\nexport function getCloudDiscoveryMetadataFromHardcodedValues(\n authorityHost: string\n): CloudDiscoveryMetadata | null {\n const metadata = getCloudDiscoveryMetadataFromNetworkResponse(\n InstanceDiscoveryMetadata.metadata,\n authorityHost\n );\n return metadata;\n}\n\n/**\n * Searches instance discovery network response for the entry that contains the host in the aliases list\n * @param response\n * @param authority\n */\nexport function getCloudDiscoveryMetadataFromNetworkResponse(\n response: CloudDiscoveryMetadata[],\n authorityHost: string\n): CloudDiscoveryMetadata | null {\n for (let i = 0; i < response.length; i++) {\n const metadata = response[i];\n if (metadata.aliases.includes(authorityHost)) {\n return metadata;\n }\n }\n\n return null;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const cacheQuotaExceeded = \"cache_quota_exceeded\";\nexport const cacheErrorUnknown = \"cache_error_unknown\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"./AuthError.js\";\nimport * as CacheErrorCodes from \"./CacheErrorCodes.js\";\nexport { CacheErrorCodes };\n\nexport const CacheErrorMessages = {\n [CacheErrorCodes.cacheQuotaExceeded]: \"Exceeded cache storage capacity.\",\n [CacheErrorCodes.cacheErrorUnknown]:\n \"Unexpected error occurred when using cache storage.\",\n};\n\n/**\n * Error thrown when there is an error with the cache\n */\nexport class CacheError extends AuthError {\n /**\n * Short string denoting error\n */\n errorCode: string;\n\n /**\n * Detailed description of error\n */\n errorMessage: string;\n\n constructor(errorCode: string, errorMessage?: string) {\n const message =\n errorMessage ||\n (CacheErrorMessages[errorCode]\n ? CacheErrorMessages[errorCode]\n : CacheErrorMessages[CacheErrorCodes.cacheErrorUnknown]);\n\n super(`${errorCode}: ${message}`);\n Object.setPrototypeOf(this, CacheError.prototype);\n\n this.name = \"CacheError\";\n this.errorCode = errorCode;\n this.errorMessage = message;\n }\n}\n\n/**\n * Helper function to wrap browser errors in a CacheError object\n * @param e\n * @returns\n */\nexport function createCacheError(e: unknown): CacheError {\n if (!(e instanceof Error)) {\n return new CacheError(CacheErrorCodes.cacheErrorUnknown);\n }\n\n if (\n e.name === \"QuotaExceededError\" ||\n e.name === \"NS_ERROR_DOM_QUOTA_REACHED\" ||\n e.message.includes(\"exceeded the quota\")\n ) {\n return new CacheError(CacheErrorCodes.cacheQuotaExceeded);\n } else {\n return new CacheError(e.name, e.message);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AccountFilter,\n CredentialFilter,\n ValidCredentialType,\n AppMetadataFilter,\n AppMetadataCache,\n TokenKeys,\n TenantProfileFilter,\n} from \"./utils/CacheTypes.js\";\nimport { CacheRecord } from \"./entities/CacheRecord.js\";\nimport {\n CredentialType,\n APP_METADATA,\n THE_FAMILY_ID,\n AUTHORITY_METADATA_CONSTANTS,\n AuthenticationScheme,\n} from \"../utils/Constants.js\";\nimport { CredentialEntity } from \"./entities/CredentialEntity.js\";\nimport { ScopeSet } from \"../request/ScopeSet.js\";\nimport { AccountEntity } from \"./entities/AccountEntity.js\";\nimport { AccessTokenEntity } from \"./entities/AccessTokenEntity.js\";\nimport { IdTokenEntity } from \"./entities/IdTokenEntity.js\";\nimport { RefreshTokenEntity } from \"./entities/RefreshTokenEntity.js\";\nimport { ICacheManager } from \"./interface/ICacheManager.js\";\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../error/ClientAuthError.js\";\nimport {\n AccountInfo,\n TenantProfile,\n updateAccountTenantProfileData,\n} from \"../account/AccountInfo.js\";\nimport { AppMetadataEntity } from \"./entities/AppMetadataEntity.js\";\nimport { ServerTelemetryEntity } from \"./entities/ServerTelemetryEntity.js\";\nimport { ThrottlingEntity } from \"./entities/ThrottlingEntity.js\";\nimport { extractTokenClaims } from \"../account/AuthToken.js\";\nimport { ICrypto } from \"../crypto/ICrypto.js\";\nimport { AuthorityMetadataEntity } from \"./entities/AuthorityMetadataEntity.js\";\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest.js\";\nimport { Logger } from \"../logger/Logger.js\";\nimport { name, version } from \"../packageMetadata.js\";\nimport { StoreInCache } from \"../request/StoreInCache.js\";\nimport { getAliasesFromStaticSources } from \"../authority/AuthorityMetadata.js\";\nimport { StaticAuthorityOptions } from \"../authority/AuthorityOptions.js\";\nimport { TokenClaims } from \"../account/TokenClaims.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { createCacheError } from \"../error/CacheError.js\";\nimport { AuthError } from \"../error/AuthError.js\";\n\n/**\n * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.\n * @internal\n */\nexport abstract class CacheManager implements ICacheManager {\n protected clientId: string;\n protected cryptoImpl: ICrypto;\n // Instance of logger for functions defined in the msal-common layer\n private commonLogger: Logger;\n private staticAuthorityOptions?: StaticAuthorityOptions;\n protected performanceClient: IPerformanceClient;\n\n constructor(\n clientId: string,\n cryptoImpl: ICrypto,\n logger: Logger,\n performanceClient: IPerformanceClient,\n staticAuthorityOptions?: StaticAuthorityOptions\n ) {\n this.clientId = clientId;\n this.cryptoImpl = cryptoImpl;\n this.commonLogger = logger.clone(name, version);\n this.staticAuthorityOptions = staticAuthorityOptions;\n this.performanceClient = performanceClient;\n }\n\n /**\n * fetch the account entity from the platform cache\n * @param accountKey\n */\n abstract getAccount(\n accountKey: string,\n correlationId: string\n ): AccountEntity | null;\n\n /**\n * set account entity in the platform cache\n * @param account\n * @param correlationId\n */\n abstract setAccount(\n account: AccountEntity,\n correlationId: string\n ): Promise;\n\n /**\n * fetch the idToken entity from the platform cache\n * @param idTokenKey\n */\n abstract getIdTokenCredential(\n idTokenKey: string,\n correlationId: string\n ): IdTokenEntity | null;\n\n /**\n * set idToken entity to the platform cache\n * @param idToken\n * @param correlationId\n */\n abstract setIdTokenCredential(\n idToken: IdTokenEntity,\n correlationId: string\n ): Promise;\n\n /**\n * fetch the idToken entity from the platform cache\n * @param accessTokenKey\n */\n abstract getAccessTokenCredential(\n accessTokenKey: string,\n correlationId: string\n ): AccessTokenEntity | null;\n\n /**\n * set accessToken entity to the platform cache\n * @param accessToken\n * @param correlationId\n */\n abstract setAccessTokenCredential(\n accessToken: AccessTokenEntity,\n correlationId: string\n ): Promise;\n\n /**\n * fetch the idToken entity from the platform cache\n * @param refreshTokenKey\n */\n abstract getRefreshTokenCredential(\n refreshTokenKey: string,\n correlationId: string\n ): RefreshTokenEntity | null;\n\n /**\n * set refreshToken entity to the platform cache\n * @param refreshToken\n * @param correlationId\n */\n abstract setRefreshTokenCredential(\n refreshToken: RefreshTokenEntity,\n correlationId: string\n ): Promise;\n\n /**\n * fetch appMetadata entity from the platform cache\n * @param appMetadataKey\n */\n abstract getAppMetadata(appMetadataKey: string): AppMetadataEntity | null;\n\n /**\n * set appMetadata entity to the platform cache\n * @param appMetadata\n */\n abstract setAppMetadata(\n appMetadata: AppMetadataEntity,\n correlationId: string\n ): void;\n\n /**\n * fetch server telemetry entity from the platform cache\n * @param serverTelemetryKey\n */\n abstract getServerTelemetry(\n serverTelemetryKey: string\n ): ServerTelemetryEntity | null;\n\n /**\n * set server telemetry entity to the platform cache\n * @param serverTelemetryKey\n * @param serverTelemetry\n */\n abstract setServerTelemetry(\n serverTelemetryKey: string,\n serverTelemetry: ServerTelemetryEntity,\n correlationId: string\n ): void;\n\n /**\n * fetch cloud discovery metadata entity from the platform cache\n * @param key\n */\n abstract getAuthorityMetadata(key: string): AuthorityMetadataEntity | null;\n\n /**\n *\n */\n abstract getAuthorityMetadataKeys(): Array;\n\n /**\n * set cloud discovery metadata entity to the platform cache\n * @param key\n * @param value\n */\n abstract setAuthorityMetadata(\n key: string,\n value: AuthorityMetadataEntity\n ): void;\n\n /**\n * fetch throttling entity from the platform cache\n * @param throttlingCacheKey\n */\n abstract getThrottlingCache(\n throttlingCacheKey: string\n ): ThrottlingEntity | null;\n\n /**\n * set throttling entity to the platform cache\n * @param throttlingCacheKey\n * @param throttlingCache\n */\n abstract setThrottlingCache(\n throttlingCacheKey: string,\n throttlingCache: ThrottlingEntity,\n correlationId: string\n ): void;\n\n /**\n * Function to remove an item from cache given its key.\n * @param key\n */\n abstract removeItem(key: string, correlationId: string): void;\n\n /**\n * Function which retrieves all current keys from the cache.\n */\n abstract getKeys(): string[];\n\n /**\n * Function which retrieves all account keys from the cache\n */\n abstract getAccountKeys(): string[];\n\n /**\n * Function which retrieves all token keys from the cache\n */\n abstract getTokenKeys(): TokenKeys;\n\n /**\n * Returns credential cache key from the entity\n * @param credential\n */\n abstract generateCredentialKey(credential: CredentialEntity): string;\n\n /**\n * Returns the account cache key from the account info\n * @param account\n */\n abstract generateAccountKey(account: AccountInfo): string;\n\n /**\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\n * @returns Array of AccountInfo objects in cache\n */\n getAllAccounts(\n accountFilter: AccountFilter,\n correlationId: string\n ): AccountInfo[] {\n return this.buildTenantProfiles(\n this.getAccountsFilteredBy(accountFilter, correlationId),\n correlationId,\n accountFilter\n );\n }\n\n /**\n * Gets first tenanted AccountInfo object found based on provided filters\n */\n getAccountInfoFilteredBy(\n accountFilter: AccountFilter,\n correlationId: string\n ): AccountInfo | null {\n const allAccounts = this.getAllAccounts(accountFilter, correlationId);\n if (allAccounts.length > 1) {\n // If one or more accounts are found, prioritize accounts that have an ID token\n const sortedAccounts = allAccounts.sort((account) => {\n return account.idTokenClaims ? -1 : 1;\n });\n return sortedAccounts[0];\n } else if (allAccounts.length === 1) {\n // If only one account is found, return it regardless of whether a matching ID token was found\n return allAccounts[0];\n } else {\n return null;\n }\n }\n\n /**\n * Returns a single matching\n * @param accountFilter\n * @returns\n */\n getBaseAccountInfo(\n accountFilter: AccountFilter,\n correlationId: string\n ): AccountInfo | null {\n const accountEntities = this.getAccountsFilteredBy(\n accountFilter,\n correlationId\n );\n if (accountEntities.length > 0) {\n return accountEntities[0].getAccountInfo();\n } else {\n return null;\n }\n }\n\n /**\n * Matches filtered account entities with cached ID tokens that match the tenant profile-specific account filters\n * and builds the account info objects from the matching ID token's claims\n * @param cachedAccounts\n * @param accountFilter\n * @returns Array of AccountInfo objects that match account and tenant profile filters\n */\n private buildTenantProfiles(\n cachedAccounts: AccountEntity[],\n correlationId: string,\n accountFilter?: AccountFilter\n ): AccountInfo[] {\n return cachedAccounts.flatMap((accountEntity) => {\n return this.getTenantProfilesFromAccountEntity(\n accountEntity,\n correlationId,\n accountFilter?.tenantId,\n accountFilter\n );\n });\n }\n\n private getTenantedAccountInfoByFilter(\n accountInfo: AccountInfo,\n tokenKeys: TokenKeys,\n tenantProfile: TenantProfile,\n correlationId: string,\n tenantProfileFilter?: TenantProfileFilter\n ): AccountInfo | null {\n let tenantedAccountInfo: AccountInfo | null = null;\n let idTokenClaims: TokenClaims | undefined;\n\n if (tenantProfileFilter) {\n if (\n !this.tenantProfileMatchesFilter(\n tenantProfile,\n tenantProfileFilter\n )\n ) {\n return null;\n }\n }\n\n const idToken = this.getIdToken(\n accountInfo,\n correlationId,\n tokenKeys,\n tenantProfile.tenantId\n );\n\n if (idToken) {\n idTokenClaims = extractTokenClaims(\n idToken.secret,\n this.cryptoImpl.base64Decode\n );\n\n if (\n !this.idTokenClaimsMatchTenantProfileFilter(\n idTokenClaims,\n tenantProfileFilter\n )\n ) {\n // ID token sourced claims don't match so this tenant profile is not a match\n return null;\n }\n }\n\n // Expand tenant profile into account info based on matching tenant profile and if available matching ID token claims\n tenantedAccountInfo = updateAccountTenantProfileData(\n accountInfo,\n tenantProfile,\n idTokenClaims,\n idToken?.secret\n );\n\n return tenantedAccountInfo;\n }\n\n private getTenantProfilesFromAccountEntity(\n accountEntity: AccountEntity,\n correlationId: string,\n targetTenantId?: string,\n tenantProfileFilter?: TenantProfileFilter\n ): AccountInfo[] {\n const accountInfo = accountEntity.getAccountInfo();\n let searchTenantProfiles: Map =\n accountInfo.tenantProfiles || new Map();\n const tokenKeys = this.getTokenKeys();\n\n // If a tenant ID was provided, only return the tenant profile for that tenant ID if it exists\n if (targetTenantId) {\n const tenantProfile = searchTenantProfiles.get(targetTenantId);\n if (tenantProfile) {\n // Reduce search field to just this tenant profile\n searchTenantProfiles = new Map([\n [targetTenantId, tenantProfile],\n ]);\n } else {\n // No tenant profile for search tenant ID, return empty array\n return [];\n }\n }\n\n const matchingTenantProfiles: AccountInfo[] = [];\n searchTenantProfiles.forEach((tenantProfile: TenantProfile) => {\n const tenantedAccountInfo = this.getTenantedAccountInfoByFilter(\n accountInfo,\n tokenKeys,\n tenantProfile,\n correlationId,\n tenantProfileFilter\n );\n if (tenantedAccountInfo) {\n matchingTenantProfiles.push(tenantedAccountInfo);\n }\n });\n\n return matchingTenantProfiles;\n }\n\n private tenantProfileMatchesFilter(\n tenantProfile: TenantProfile,\n tenantProfileFilter: TenantProfileFilter\n ): boolean {\n if (\n !!tenantProfileFilter.localAccountId &&\n !this.matchLocalAccountIdFromTenantProfile(\n tenantProfile,\n tenantProfileFilter.localAccountId\n )\n ) {\n return false;\n }\n\n if (\n !!tenantProfileFilter.name &&\n !(tenantProfile.name === tenantProfileFilter.name)\n ) {\n return false;\n }\n\n if (\n tenantProfileFilter.isHomeTenant !== undefined &&\n !(tenantProfile.isHomeTenant === tenantProfileFilter.isHomeTenant)\n ) {\n return false;\n }\n\n return true;\n }\n\n private idTokenClaimsMatchTenantProfileFilter(\n idTokenClaims: TokenClaims,\n tenantProfileFilter?: TenantProfileFilter\n ): boolean {\n // Tenant Profile filtering\n if (tenantProfileFilter) {\n if (\n !!tenantProfileFilter.localAccountId &&\n !this.matchLocalAccountIdFromTokenClaims(\n idTokenClaims,\n tenantProfileFilter.localAccountId\n )\n ) {\n return false;\n }\n\n if (\n !!tenantProfileFilter.loginHint &&\n !this.matchLoginHintFromTokenClaims(\n idTokenClaims,\n tenantProfileFilter.loginHint\n )\n ) {\n return false;\n }\n\n if (\n !!tenantProfileFilter.username &&\n !this.matchUsername(\n idTokenClaims.preferred_username,\n tenantProfileFilter.username\n )\n ) {\n return false;\n }\n\n if (\n !!tenantProfileFilter.name &&\n !this.matchName(idTokenClaims, tenantProfileFilter.name)\n ) {\n return false;\n }\n\n if (\n !!tenantProfileFilter.sid &&\n !this.matchSid(idTokenClaims, tenantProfileFilter.sid)\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * saves a cache record\n * @param cacheRecord {CacheRecord}\n * @param storeInCache {?StoreInCache}\n * @param correlationId {?string} correlation id\n */\n async saveCacheRecord(\n cacheRecord: CacheRecord,\n correlationId: string,\n storeInCache?: StoreInCache\n ): Promise {\n if (!cacheRecord) {\n throw createClientAuthError(\n ClientAuthErrorCodes.invalidCacheRecord\n );\n }\n\n try {\n if (!!cacheRecord.account) {\n await this.setAccount(cacheRecord.account, correlationId);\n }\n\n if (!!cacheRecord.idToken && storeInCache?.idToken !== false) {\n await this.setIdTokenCredential(\n cacheRecord.idToken,\n correlationId\n );\n }\n\n if (\n !!cacheRecord.accessToken &&\n storeInCache?.accessToken !== false\n ) {\n await this.saveAccessToken(\n cacheRecord.accessToken,\n correlationId\n );\n }\n\n if (\n !!cacheRecord.refreshToken &&\n storeInCache?.refreshToken !== false\n ) {\n await this.setRefreshTokenCredential(\n cacheRecord.refreshToken,\n correlationId\n );\n }\n\n if (!!cacheRecord.appMetadata) {\n this.setAppMetadata(cacheRecord.appMetadata, correlationId);\n }\n } catch (e: unknown) {\n this.commonLogger?.error(`CacheManager.saveCacheRecord: failed`);\n if (e instanceof AuthError) {\n throw e;\n } else {\n throw createCacheError(e);\n }\n }\n }\n\n /**\n * saves access token credential\n * @param credential\n */\n private async saveAccessToken(\n credential: AccessTokenEntity,\n correlationId: string\n ): Promise {\n const accessTokenFilter: CredentialFilter = {\n clientId: credential.clientId,\n credentialType: credential.credentialType,\n environment: credential.environment,\n homeAccountId: credential.homeAccountId,\n realm: credential.realm,\n tokenType: credential.tokenType,\n requestedClaimsHash: credential.requestedClaimsHash,\n };\n\n const tokenKeys = this.getTokenKeys();\n const currentScopes = ScopeSet.fromString(credential.target);\n\n tokenKeys.accessToken.forEach((key) => {\n if (\n !this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)\n ) {\n return;\n }\n\n const tokenEntity = this.getAccessTokenCredential(\n key,\n correlationId\n );\n\n if (\n tokenEntity &&\n this.credentialMatchesFilter(tokenEntity, accessTokenFilter)\n ) {\n const tokenScopeSet = ScopeSet.fromString(tokenEntity.target);\n if (tokenScopeSet.intersectingScopeSets(currentScopes)) {\n this.removeAccessToken(key, correlationId);\n }\n }\n });\n await this.setAccessTokenCredential(credential, correlationId);\n }\n\n /**\n * Retrieve account entities matching all provided tenant-agnostic filters; if no filter is set, get all account entities in the cache\n * Not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared\n * @param accountFilter - An object containing Account properties to filter by\n */\n getAccountsFilteredBy(\n accountFilter: AccountFilter,\n correlationId: string\n ): AccountEntity[] {\n const allAccountKeys = this.getAccountKeys();\n const matchingAccounts: AccountEntity[] = [];\n allAccountKeys.forEach((cacheKey) => {\n const entity: AccountEntity | null = this.getAccount(\n cacheKey,\n correlationId\n );\n\n // Match base account fields\n\n if (!entity) {\n return;\n }\n\n if (\n !!accountFilter.homeAccountId &&\n !this.matchHomeAccountId(entity, accountFilter.homeAccountId)\n ) {\n return;\n }\n\n if (\n !!accountFilter.username &&\n !this.matchUsername(entity.username, accountFilter.username)\n ) {\n return;\n }\n\n if (\n !!accountFilter.environment &&\n !this.matchEnvironment(entity, accountFilter.environment)\n ) {\n return;\n }\n\n if (\n !!accountFilter.realm &&\n !this.matchRealm(entity, accountFilter.realm)\n ) {\n return;\n }\n\n if (\n !!accountFilter.nativeAccountId &&\n !this.matchNativeAccountId(\n entity,\n accountFilter.nativeAccountId\n )\n ) {\n return;\n }\n\n if (\n !!accountFilter.authorityType &&\n !this.matchAuthorityType(entity, accountFilter.authorityType)\n ) {\n return;\n }\n\n // If at least one tenant profile matches the tenant profile filter, add the account to the list of matching accounts\n const tenantProfileFilter: TenantProfileFilter = {\n localAccountId: accountFilter?.localAccountId,\n name: accountFilter?.name,\n };\n\n const matchingTenantProfiles = entity.tenantProfiles?.filter(\n (tenantProfile: TenantProfile) => {\n return this.tenantProfileMatchesFilter(\n tenantProfile,\n tenantProfileFilter\n );\n }\n );\n\n if (matchingTenantProfiles && matchingTenantProfiles.length === 0) {\n // No tenant profile for this account matches filter, don't add to list of matching accounts\n return;\n }\n\n matchingAccounts.push(entity);\n });\n\n return matchingAccounts;\n }\n\n /**\n * Returns whether or not the given credential entity matches the filter\n * @param entity\n * @param filter\n * @returns\n */\n credentialMatchesFilter(\n entity: ValidCredentialType,\n filter: CredentialFilter\n ): boolean {\n if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) {\n return false;\n }\n\n if (\n !!filter.userAssertionHash &&\n !this.matchUserAssertionHash(entity, filter.userAssertionHash)\n ) {\n return false;\n }\n\n /*\n * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of \"\"\n * because we don't want a client_credential request to return a cached token that has a homeAccountId\n */\n if (\n typeof filter.homeAccountId === \"string\" &&\n !this.matchHomeAccountId(entity, filter.homeAccountId)\n ) {\n return false;\n }\n\n if (\n !!filter.environment &&\n !this.matchEnvironment(entity, filter.environment)\n ) {\n return false;\n }\n\n if (!!filter.realm && !this.matchRealm(entity, filter.realm)) {\n return false;\n }\n\n if (\n !!filter.credentialType &&\n !this.matchCredentialType(entity, filter.credentialType)\n ) {\n return false;\n }\n\n if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) {\n return false;\n }\n\n /*\n * idTokens do not have \"target\", target specific refreshTokens do exist for some types of authentication\n * Resource specific refresh tokens case will be added when the support is deemed necessary\n */\n if (!!filter.target && !this.matchTarget(entity, filter.target)) {\n return false;\n }\n\n // If request OR cached entity has requested Claims Hash, check if they match\n if (filter.requestedClaimsHash || entity.requestedClaimsHash) {\n // Don't match if either is undefined or they are different\n if (entity.requestedClaimsHash !== filter.requestedClaimsHash) {\n return false;\n }\n }\n\n // Access Token with Auth Scheme specific matching\n if (\n entity.credentialType ===\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME\n ) {\n if (\n !!filter.tokenType &&\n !this.matchTokenType(entity, filter.tokenType)\n ) {\n return false;\n }\n\n // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key\n if (filter.tokenType === AuthenticationScheme.SSH) {\n if (filter.keyId && !this.matchKeyId(entity, filter.keyId)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata\n * @param filter\n */\n getAppMetadataFilteredBy(filter: AppMetadataFilter): AppMetadataCache {\n const allCacheKeys = this.getKeys();\n const matchingAppMetadata: AppMetadataCache = {};\n\n allCacheKeys.forEach((cacheKey) => {\n // don't parse any non-appMetadata type cache entities\n if (!this.isAppMetadata(cacheKey)) {\n return;\n }\n\n // Attempt retrieval\n const entity = this.getAppMetadata(cacheKey);\n\n if (!entity) {\n return;\n }\n\n if (\n !!filter.environment &&\n !this.matchEnvironment(entity, filter.environment)\n ) {\n return;\n }\n\n if (\n !!filter.clientId &&\n !this.matchClientId(entity, filter.clientId)\n ) {\n return;\n }\n\n matchingAppMetadata[cacheKey] = entity;\n });\n\n return matchingAppMetadata;\n }\n\n /**\n * retrieve authorityMetadata that contains a matching alias\n * @param filter\n */\n getAuthorityMetadataByAlias(host: string): AuthorityMetadataEntity | null {\n const allCacheKeys = this.getAuthorityMetadataKeys();\n let matchedEntity = null;\n\n allCacheKeys.forEach((cacheKey) => {\n // don't parse any non-authorityMetadata type cache entities\n if (\n !this.isAuthorityMetadata(cacheKey) ||\n cacheKey.indexOf(this.clientId) === -1\n ) {\n return;\n }\n\n // Attempt retrieval\n const entity = this.getAuthorityMetadata(cacheKey);\n\n if (!entity) {\n return;\n }\n\n if (entity.aliases.indexOf(host) === -1) {\n return;\n }\n\n matchedEntity = entity;\n });\n\n return matchedEntity;\n }\n\n /**\n * Removes all accounts and related tokens from cache.\n */\n removeAllAccounts(correlationId: string): void {\n const accounts = this.getAllAccounts({}, correlationId);\n accounts.forEach((account) => {\n this.removeAccount(account, correlationId);\n });\n }\n\n /**\n * Removes the account and related tokens for a given account key\n * @param account\n */\n removeAccount(account: AccountInfo, correlationId: string): void {\n this.removeAccountContext(account, correlationId);\n const accountKeys = this.getAccountKeys();\n const keyFilter = (key: string): boolean => {\n return (\n key.includes(account.homeAccountId) &&\n key.includes(account.environment)\n );\n };\n accountKeys.filter(keyFilter).forEach((key) => {\n this.removeItem(key, correlationId);\n this.performanceClient.incrementFields(\n { accountsRemoved: 1 },\n correlationId\n );\n });\n }\n\n /**\n * Removes credentials associated with the provided account\n * @param account\n */\n removeAccountContext(account: AccountInfo, correlationId: string): void {\n const allTokenKeys = this.getTokenKeys();\n const keyFilter = (key: string): boolean => {\n return (\n key.includes(account.homeAccountId) &&\n key.includes(account.environment)\n );\n };\n\n allTokenKeys.idToken.filter(keyFilter).forEach((key) => {\n this.removeIdToken(key, correlationId);\n });\n\n allTokenKeys.accessToken.filter(keyFilter).forEach((key) => {\n this.removeAccessToken(key, correlationId);\n });\n\n allTokenKeys.refreshToken.filter(keyFilter).forEach((key) => {\n this.removeRefreshToken(key, correlationId);\n });\n }\n\n /**\n * Removes accessToken from the cache\n * @param key\n * @param correlationId\n */\n removeAccessToken(key: string, correlationId: string): void {\n const credential = this.getAccessTokenCredential(key, correlationId);\n this.removeItem(key, correlationId);\n this.performanceClient.incrementFields(\n { accessTokensRemoved: 1 },\n correlationId\n );\n\n if (\n !credential ||\n credential.credentialType.toLowerCase() !==\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase() ||\n credential.tokenType !== AuthenticationScheme.POP\n ) {\n // If the credential is not a PoP token, we can return\n return;\n }\n\n // Remove Token Binding Key from key store for PoP Tokens Credentials\n const kid = credential.keyId;\n\n if (kid) {\n void this.cryptoImpl.removeTokenBindingKey(kid).catch(() => {\n this.commonLogger.error(\n `Failed to remove token binding key ${kid}`,\n correlationId\n );\n this.performanceClient?.incrementFields(\n { removeTokenBindingKeyFailure: 1 },\n correlationId\n );\n });\n }\n }\n\n /**\n * Removes all app metadata objects from cache.\n */\n removeAppMetadata(correlationId: string): boolean {\n const allCacheKeys = this.getKeys();\n allCacheKeys.forEach((cacheKey) => {\n if (this.isAppMetadata(cacheKey)) {\n this.removeItem(cacheKey, correlationId);\n }\n });\n\n return true;\n }\n\n /**\n * Retrieve IdTokenEntity from cache\n * @param account {AccountInfo}\n * @param tokenKeys {?TokenKeys}\n * @param targetRealm {?string}\n * @param performanceClient {?IPerformanceClient}\n * @param correlationId {?string}\n */\n getIdToken(\n account: AccountInfo,\n correlationId: string,\n tokenKeys?: TokenKeys,\n targetRealm?: string,\n performanceClient?: IPerformanceClient\n ): IdTokenEntity | null {\n this.commonLogger.trace(\"CacheManager - getIdToken called\");\n const idTokenFilter: CredentialFilter = {\n homeAccountId: account.homeAccountId,\n environment: account.environment,\n credentialType: CredentialType.ID_TOKEN,\n clientId: this.clientId,\n realm: targetRealm,\n };\n\n const idTokenMap: Map = this.getIdTokensByFilter(\n idTokenFilter,\n correlationId,\n tokenKeys\n );\n\n const numIdTokens = idTokenMap.size;\n\n if (numIdTokens < 1) {\n this.commonLogger.info(\"CacheManager:getIdToken - No token found\");\n return null;\n } else if (numIdTokens > 1) {\n let tokensToBeRemoved: Map = idTokenMap;\n // Multiple tenant profiles and no tenant specified, pick home account\n if (!targetRealm) {\n const homeIdTokenMap: Map = new Map<\n string,\n IdTokenEntity\n >();\n idTokenMap.forEach((idToken, key) => {\n if (idToken.realm === account.tenantId) {\n homeIdTokenMap.set(key, idToken);\n }\n });\n const numHomeIdTokens = homeIdTokenMap.size;\n if (numHomeIdTokens < 1) {\n this.commonLogger.info(\n \"CacheManager:getIdToken - Multiple ID tokens found for account but none match account entity tenant id, returning first result\"\n );\n return idTokenMap.values().next().value;\n } else if (numHomeIdTokens === 1) {\n this.commonLogger.info(\n \"CacheManager:getIdToken - Multiple ID tokens found for account, defaulting to home tenant profile\"\n );\n return homeIdTokenMap.values().next().value;\n } else {\n // Multiple ID tokens for home tenant profile, remove all and return null\n tokensToBeRemoved = homeIdTokenMap;\n }\n }\n // Multiple tokens for a single tenant profile, remove all and return null\n this.commonLogger.info(\n \"CacheManager:getIdToken - Multiple matching ID tokens found, clearing them\"\n );\n tokensToBeRemoved.forEach((idToken, key) => {\n this.removeIdToken(key, correlationId);\n });\n if (performanceClient && correlationId) {\n performanceClient.addFields(\n { multiMatchedID: idTokenMap.size },\n correlationId\n );\n }\n return null;\n }\n\n this.commonLogger.info(\"CacheManager:getIdToken - Returning ID token\");\n return idTokenMap.values().next().value;\n }\n\n /**\n * Gets all idTokens matching the given filter\n * @param filter\n * @returns\n */\n getIdTokensByFilter(\n filter: CredentialFilter,\n correlationId: string,\n tokenKeys?: TokenKeys\n ): Map {\n const idTokenKeys =\n (tokenKeys && tokenKeys.idToken) || this.getTokenKeys().idToken;\n\n const idTokens: Map = new Map<\n string,\n IdTokenEntity\n >();\n idTokenKeys.forEach((key) => {\n if (\n !this.idTokenKeyMatchesFilter(key, {\n clientId: this.clientId,\n ...filter,\n })\n ) {\n return;\n }\n const idToken = this.getIdTokenCredential(key, correlationId);\n if (idToken && this.credentialMatchesFilter(idToken, filter)) {\n idTokens.set(key, idToken);\n }\n });\n\n return idTokens;\n }\n\n /**\n * Validate the cache key against filter before retrieving and parsing cache value\n * @param key\n * @param filter\n * @returns\n */\n idTokenKeyMatchesFilter(\n inputKey: string,\n filter: CredentialFilter\n ): boolean {\n const key = inputKey.toLowerCase();\n if (\n filter.clientId &&\n key.indexOf(filter.clientId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n if (\n filter.homeAccountId &&\n key.indexOf(filter.homeAccountId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Removes idToken from the cache\n * @param key\n */\n removeIdToken(key: string, correlationId: string): void {\n this.removeItem(key, correlationId);\n }\n\n /**\n * Removes refresh token from the cache\n * @param key\n */\n removeRefreshToken(key: string, correlationId: string): void {\n this.removeItem(key, correlationId);\n }\n\n /**\n * Retrieve AccessTokenEntity from cache\n * @param account {AccountInfo}\n * @param request {BaseAuthRequest}\n * @param correlationId {?string}\n * @param tokenKeys {?TokenKeys}\n * @param performanceClient {?IPerformanceClient}\n */\n getAccessToken(\n account: AccountInfo,\n request: BaseAuthRequest,\n tokenKeys?: TokenKeys,\n targetRealm?: string\n ): AccessTokenEntity | null {\n const correlationId = request.correlationId;\n this.commonLogger.trace(\n \"CacheManager - getAccessToken called\",\n correlationId\n );\n const scopes = ScopeSet.createSearchScopes(request.scopes);\n const authScheme =\n request.authenticationScheme || AuthenticationScheme.BEARER;\n /*\n * Distinguish between Bearer and PoP/SSH token cache types\n * Cast to lowercase to handle \"bearer\" from ADFS\n */\n const credentialType =\n authScheme &&\n authScheme.toLowerCase() !==\n AuthenticationScheme.BEARER.toLowerCase()\n ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME\n : CredentialType.ACCESS_TOKEN;\n\n const accessTokenFilter: CredentialFilter = {\n homeAccountId: account.homeAccountId,\n environment: account.environment,\n credentialType: credentialType,\n clientId: this.clientId,\n realm: targetRealm || account.tenantId,\n target: scopes,\n tokenType: authScheme,\n keyId: request.sshKid,\n requestedClaimsHash: request.requestedClaimsHash,\n };\n\n const accessTokenKeys =\n (tokenKeys && tokenKeys.accessToken) ||\n this.getTokenKeys().accessToken;\n const accessTokens: AccessTokenEntity[] = [];\n\n accessTokenKeys.forEach((key) => {\n // Validate key\n if (\n this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)\n ) {\n const accessToken = this.getAccessTokenCredential(\n key,\n correlationId\n );\n\n // Validate value\n if (\n accessToken &&\n this.credentialMatchesFilter(accessToken, accessTokenFilter)\n ) {\n accessTokens.push(accessToken);\n }\n }\n });\n\n const numAccessTokens = accessTokens.length;\n if (numAccessTokens < 1) {\n this.commonLogger.info(\n \"CacheManager:getAccessToken - No token found\",\n correlationId\n );\n return null;\n } else if (numAccessTokens > 1) {\n this.commonLogger.info(\n \"CacheManager:getAccessToken - Multiple access tokens found, clearing them\",\n correlationId\n );\n accessTokens.forEach((accessToken) => {\n this.removeAccessToken(\n this.generateCredentialKey(accessToken),\n correlationId\n );\n });\n this.performanceClient.addFields(\n { multiMatchedAT: accessTokens.length },\n correlationId\n );\n return null;\n }\n\n this.commonLogger.info(\n \"CacheManager:getAccessToken - Returning access token\",\n correlationId\n );\n return accessTokens[0];\n }\n\n /**\n * Validate the cache key against filter before retrieving and parsing cache value\n * @param key\n * @param filter\n * @param keyMustContainAllScopes\n * @returns\n */\n accessTokenKeyMatchesFilter(\n inputKey: string,\n filter: CredentialFilter,\n keyMustContainAllScopes: boolean\n ): boolean {\n const key = inputKey.toLowerCase();\n if (\n filter.clientId &&\n key.indexOf(filter.clientId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n if (\n filter.homeAccountId &&\n key.indexOf(filter.homeAccountId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) {\n return false;\n }\n\n if (\n filter.requestedClaimsHash &&\n key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1\n ) {\n return false;\n }\n\n if (filter.target) {\n const scopes = filter.target.asArray();\n for (let i = 0; i < scopes.length; i++) {\n if (\n keyMustContainAllScopes &&\n !key.includes(scopes[i].toLowerCase())\n ) {\n // When performing a cache lookup a missing scope would be a cache miss\n return false;\n } else if (\n !keyMustContainAllScopes &&\n key.includes(scopes[i].toLowerCase())\n ) {\n // When performing a cache write, any token with a subset of requested scopes should be replaced\n return true;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Gets all access tokens matching the filter\n * @param filter\n * @returns\n */\n getAccessTokensByFilter(\n filter: CredentialFilter,\n correlationId: string\n ): AccessTokenEntity[] {\n const tokenKeys = this.getTokenKeys();\n\n const accessTokens: AccessTokenEntity[] = [];\n tokenKeys.accessToken.forEach((key) => {\n if (!this.accessTokenKeyMatchesFilter(key, filter, true)) {\n return;\n }\n\n const accessToken = this.getAccessTokenCredential(\n key,\n correlationId\n );\n if (\n accessToken &&\n this.credentialMatchesFilter(accessToken, filter)\n ) {\n accessTokens.push(accessToken);\n }\n });\n\n return accessTokens;\n }\n\n /**\n * Helper to retrieve the appropriate refresh token from cache\n * @param account {AccountInfo}\n * @param familyRT {boolean}\n * @param correlationId {?string}\n * @param tokenKeys {?TokenKeys}\n * @param performanceClient {?IPerformanceClient}\n */\n getRefreshToken(\n account: AccountInfo,\n familyRT: boolean,\n correlationId: string,\n tokenKeys?: TokenKeys,\n performanceClient?: IPerformanceClient\n ): RefreshTokenEntity | null {\n this.commonLogger.trace(\"CacheManager - getRefreshToken called\");\n const id = familyRT ? THE_FAMILY_ID : undefined;\n const refreshTokenFilter: CredentialFilter = {\n homeAccountId: account.homeAccountId,\n environment: account.environment,\n credentialType: CredentialType.REFRESH_TOKEN,\n clientId: this.clientId,\n familyId: id,\n };\n\n const refreshTokenKeys =\n (tokenKeys && tokenKeys.refreshToken) ||\n this.getTokenKeys().refreshToken;\n const refreshTokens: RefreshTokenEntity[] = [];\n\n refreshTokenKeys.forEach((key) => {\n // Validate key\n if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) {\n const refreshToken = this.getRefreshTokenCredential(\n key,\n correlationId\n );\n // Validate value\n if (\n refreshToken &&\n this.credentialMatchesFilter(\n refreshToken,\n refreshTokenFilter\n )\n ) {\n refreshTokens.push(refreshToken);\n }\n }\n });\n\n const numRefreshTokens = refreshTokens.length;\n if (numRefreshTokens < 1) {\n this.commonLogger.info(\n \"CacheManager:getRefreshToken - No refresh token found.\"\n );\n return null;\n }\n // address the else case after remove functions address environment aliases\n\n if (numRefreshTokens > 1 && performanceClient && correlationId) {\n performanceClient.addFields(\n { multiMatchedRT: numRefreshTokens },\n correlationId\n );\n }\n\n this.commonLogger.info(\n \"CacheManager:getRefreshToken - returning refresh token\"\n );\n return refreshTokens[0] as RefreshTokenEntity;\n }\n\n /**\n * Validate the cache key against filter before retrieving and parsing cache value\n * @param key\n * @param filter\n */\n refreshTokenKeyMatchesFilter(\n inputKey: string,\n filter: CredentialFilter\n ): boolean {\n const key = inputKey.toLowerCase();\n if (\n filter.familyId &&\n key.indexOf(filter.familyId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n // If familyId is used, clientId is not in the key\n if (\n !filter.familyId &&\n filter.clientId &&\n key.indexOf(filter.clientId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n if (\n filter.homeAccountId &&\n key.indexOf(filter.homeAccountId.toLowerCase()) === -1\n ) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Retrieve AppMetadataEntity from cache\n */\n readAppMetadataFromCache(environment: string): AppMetadataEntity | null {\n const appMetadataFilter: AppMetadataFilter = {\n environment,\n clientId: this.clientId,\n };\n\n const appMetadata: AppMetadataCache =\n this.getAppMetadataFilteredBy(appMetadataFilter);\n const appMetadataEntries: AppMetadataEntity[] = Object.keys(\n appMetadata\n ).map((key) => appMetadata[key]);\n\n const numAppMetadata = appMetadataEntries.length;\n if (numAppMetadata < 1) {\n return null;\n } else if (numAppMetadata > 1) {\n throw createClientAuthError(\n ClientAuthErrorCodes.multipleMatchingAppMetadata\n );\n }\n\n return appMetadataEntries[0] as AppMetadataEntity;\n }\n\n /**\n * Return the family_id value associated with FOCI\n * @param environment\n * @param clientId\n */\n isAppMetadataFOCI(environment: string): boolean {\n const appMetadata = this.readAppMetadataFromCache(environment);\n return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID);\n }\n\n /**\n * helper to match account ids\n * @param value\n * @param homeAccountId\n */\n private matchHomeAccountId(\n entity: AccountEntity | CredentialEntity,\n homeAccountId: string\n ): boolean {\n return !!(\n typeof entity.homeAccountId === \"string\" &&\n homeAccountId === entity.homeAccountId\n );\n }\n\n /**\n * helper to match account ids\n * @param entity\n * @param localAccountId\n * @returns\n */\n private matchLocalAccountIdFromTokenClaims(\n tokenClaims: TokenClaims,\n localAccountId: string\n ): boolean {\n const idTokenLocalAccountId = tokenClaims.oid || tokenClaims.sub;\n return localAccountId === idTokenLocalAccountId;\n }\n\n private matchLocalAccountIdFromTenantProfile(\n tenantProfile: TenantProfile,\n localAccountId: string\n ): boolean {\n return tenantProfile.localAccountId === localAccountId;\n }\n\n /**\n * helper to match names\n * @param entity\n * @param name\n * @returns true if the downcased name properties are present and match in the filter and the entity\n */\n private matchName(claims: TokenClaims, name: string): boolean {\n return !!(name.toLowerCase() === claims.name?.toLowerCase());\n }\n\n /**\n * helper to match usernames\n * @param entity\n * @param username\n * @returns\n */\n private matchUsername(\n cachedUsername?: string,\n filterUsername?: string\n ): boolean {\n return !!(\n cachedUsername &&\n typeof cachedUsername === \"string\" &&\n filterUsername?.toLowerCase() === cachedUsername.toLowerCase()\n );\n }\n\n /**\n * helper to match assertion\n * @param value\n * @param oboAssertion\n */\n private matchUserAssertionHash(\n entity: CredentialEntity,\n userAssertionHash: string\n ): boolean {\n return !!(\n entity.userAssertionHash &&\n userAssertionHash === entity.userAssertionHash\n );\n }\n\n /**\n * helper to match environment\n * @param value\n * @param environment\n */\n private matchEnvironment(\n entity: AccountEntity | CredentialEntity | AppMetadataEntity,\n environment: string\n ): boolean {\n // Check static authority options first for cases where authority metadata has not been resolved and cached yet\n if (this.staticAuthorityOptions) {\n const staticAliases = getAliasesFromStaticSources(\n this.staticAuthorityOptions,\n this.commonLogger\n );\n if (\n staticAliases.includes(environment) &&\n staticAliases.includes(entity.environment)\n ) {\n return true;\n }\n }\n\n // Query metadata cache if no static authority configuration has aliases that match enviroment\n const cloudMetadata = this.getAuthorityMetadataByAlias(environment);\n if (\n cloudMetadata &&\n cloudMetadata.aliases.indexOf(entity.environment) > -1\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * helper to match credential type\n * @param entity\n * @param credentialType\n */\n private matchCredentialType(\n entity: CredentialEntity,\n credentialType: string\n ): boolean {\n return (\n entity.credentialType &&\n credentialType.toLowerCase() === entity.credentialType.toLowerCase()\n );\n }\n\n /**\n * helper to match client ids\n * @param entity\n * @param clientId\n */\n private matchClientId(\n entity: CredentialEntity | AppMetadataEntity,\n clientId: string\n ): boolean {\n return !!(entity.clientId && clientId === entity.clientId);\n }\n\n /**\n * helper to match family ids\n * @param entity\n * @param familyId\n */\n private matchFamilyId(\n entity: CredentialEntity | AppMetadataEntity,\n familyId: string\n ): boolean {\n return !!(entity.familyId && familyId === entity.familyId);\n }\n\n /**\n * helper to match realm\n * @param entity\n * @param realm\n */\n private matchRealm(\n entity: AccountEntity | CredentialEntity,\n realm: string\n ): boolean {\n return !!(entity.realm?.toLowerCase() === realm.toLowerCase());\n }\n\n /**\n * helper to match nativeAccountId\n * @param entity\n * @param nativeAccountId\n * @returns boolean indicating the match result\n */\n private matchNativeAccountId(\n entity: AccountEntity,\n nativeAccountId: string\n ): boolean {\n return !!(\n entity.nativeAccountId && nativeAccountId === entity.nativeAccountId\n );\n }\n\n /**\n * helper to match loginHint which can be either:\n * 1. login_hint ID token claim\n * 2. username in cached account object\n * 3. upn in ID token claims\n * @param entity\n * @param loginHint\n * @returns\n */\n private matchLoginHintFromTokenClaims(\n tokenClaims: TokenClaims,\n loginHint: string\n ): boolean {\n if (tokenClaims.login_hint === loginHint) {\n return true;\n }\n\n if (tokenClaims.preferred_username === loginHint) {\n return true;\n }\n\n if (tokenClaims.upn === loginHint) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Helper to match sid\n * @param entity\n * @param sid\n * @returns true if the sid claim is present and matches the filter\n */\n private matchSid(idTokenClaims: TokenClaims, sid: string): boolean {\n return idTokenClaims.sid === sid;\n }\n\n private matchAuthorityType(\n entity: AccountEntity,\n authorityType: string\n ): boolean {\n return !!(\n entity.authorityType &&\n authorityType.toLowerCase() === entity.authorityType.toLowerCase()\n );\n }\n\n /**\n * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.\n * @param entity\n * @param target\n */\n private matchTarget(entity: CredentialEntity, target: ScopeSet): boolean {\n const isNotAccessTokenCredential =\n entity.credentialType !== CredentialType.ACCESS_TOKEN &&\n entity.credentialType !==\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\n\n if (isNotAccessTokenCredential || !entity.target) {\n return false;\n }\n\n const entityScopeSet: ScopeSet = ScopeSet.fromString(entity.target);\n\n return entityScopeSet.containsScopeSet(target);\n }\n\n /**\n * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise\n * @param entity\n * @param tokenType\n */\n private matchTokenType(\n entity: CredentialEntity,\n tokenType: AuthenticationScheme\n ): boolean {\n return !!(entity.tokenType && entity.tokenType === tokenType);\n }\n\n /**\n * Returns true if the credential's keyId matches the one in the request, false otherwise\n * @param entity\n * @param keyId\n */\n private matchKeyId(entity: CredentialEntity, keyId: string): boolean {\n return !!(entity.keyId && entity.keyId === keyId);\n }\n\n /**\n * returns if a given cache entity is of the type appmetadata\n * @param key\n */\n private isAppMetadata(key: string): boolean {\n return key.indexOf(APP_METADATA) !== -1;\n }\n\n /**\n * returns if a given cache entity is of the type authoritymetadata\n * @param key\n */\n protected isAuthorityMetadata(key: string): boolean {\n return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1;\n }\n\n /**\n * returns cache key used for cloud instance metadata\n */\n generateAuthorityMetadataCacheKey(authority: string): string {\n return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`;\n }\n\n /**\n * Helper to convert serialized data to object\n * @param obj\n * @param json\n */\n static toObject(obj: T, json: object): T {\n for (const propertyName in json) {\n obj[propertyName] = json[propertyName];\n }\n return obj;\n }\n}\n\n/** @internal */\nexport class DefaultStorageClass extends CacheManager {\n async setAccount(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getAccount(): AccountEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n async setIdTokenCredential(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getIdTokenCredential(): IdTokenEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n async setAccessTokenCredential(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getAccessTokenCredential(): AccessTokenEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n async setRefreshTokenCredential(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getRefreshTokenCredential(): RefreshTokenEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n setAppMetadata(): void {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getAppMetadata(): AppMetadataEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n setServerTelemetry(): void {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getServerTelemetry(): ServerTelemetryEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n setAuthorityMetadata(): void {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getAuthorityMetadata(): AuthorityMetadataEntity | null {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getAuthorityMetadataKeys(): Array {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n setThrottlingCache(): void {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getThrottlingCache(): ThrottlingEntity {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n removeItem(): boolean {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getKeys(): string[] {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getAccountKeys(): string[] {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n getTokenKeys(): TokenKeys {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n generateCredentialKey(): string {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n generateAccountKey(): string {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Protocol modes supported by MSAL.\n */\nexport const ProtocolMode = {\n /**\n * Auth Code + PKCE with Entra ID (formerly AAD) specific optimizations and features\n */\n AAD: \"AAD\",\n /**\n * Auth Code + PKCE without Entra ID specific optimizations and features. For use only with non-Microsoft owned authorities.\n * Support is limited for this mode.\n */\n OIDC: \"OIDC\",\n /**\n * Encrypted Authorize Response (EAR) with Entra ID specific optimizations and features\n */\n EAR: \"EAR\",\n} as const;\nexport type ProtocolMode = (typeof ProtocolMode)[keyof typeof ProtocolMode];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Enumeration of operations that are instrumented by have their performance measured by the PerformanceClient.\n *\n * @export\n * @enum {number}\n */\nexport const PerformanceEvents = {\n /**\n * acquireTokenByCode API (msal-browser and msal-node).\n * Used to acquire tokens by trading an authorization code against the token endpoint.\n */\n AcquireTokenByCode: \"acquireTokenByCode\",\n\n /**\n * acquireTokenByRefreshToken API (msal-browser and msal-node).\n * Used to renew an access token using a refresh token against the token endpoint.\n */\n AcquireTokenByRefreshToken: \"acquireTokenByRefreshToken\",\n\n /**\n * acquireTokenSilent API (msal-browser and msal-node).\n * Used to silently acquire a new access token (from the cache or the network).\n */\n AcquireTokenSilent: \"acquireTokenSilent\",\n\n /**\n * acquireTokenSilentAsync (msal-browser).\n * Internal API for acquireTokenSilent.\n */\n AcquireTokenSilentAsync: \"acquireTokenSilentAsync\",\n\n /**\n * acquireTokenPopup (msal-browser).\n * Used to acquire a new access token interactively through pop ups\n */\n AcquireTokenPopup: \"acquireTokenPopup\",\n\n /**\n * acquireTokenPreRedirect (msal-browser).\n * First part of the redirect flow.\n * Used to acquire a new access token interactively through redirects.\n */\n AcquireTokenPreRedirect: \"acquireTokenPreRedirect\",\n\n /**\n * acquireTokenRedirect (msal-browser).\n * Second part of the redirect flow.\n * Used to acquire a new access token interactively through redirects.\n */\n AcquireTokenRedirect: \"acquireTokenRedirect\",\n\n /**\n * getPublicKeyThumbprint API in CryptoOpts class (msal-browser).\n * Used to generate a public/private keypair and generate a public key thumbprint for pop requests.\n */\n CryptoOptsGetPublicKeyThumbprint: \"cryptoOptsGetPublicKeyThumbprint\",\n\n /**\n * signJwt API in CryptoOpts class (msal-browser).\n * Used to signed a pop token.\n */\n CryptoOptsSignJwt: \"cryptoOptsSignJwt\",\n\n /**\n * acquireToken API in the SilentCacheClient class (msal-browser).\n * Used to read access tokens from the cache.\n */\n SilentCacheClientAcquireToken: \"silentCacheClientAcquireToken\",\n\n /**\n * acquireToken API in the SilentIframeClient class (msal-browser).\n * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe.\n */\n SilentIframeClientAcquireToken: \"silentIframeClientAcquireToken\",\n AwaitConcurrentIframe: \"awaitConcurrentIframe\", // Time spent waiting for a concurrent iframe to complete\n\n /**\n * acquireToken API in SilentRereshClient (msal-browser).\n * Used to acquire a new set of tokens from the token endpoint using a refresh token.\n */\n SilentRefreshClientAcquireToken: \"silentRefreshClientAcquireToken\",\n\n /**\n * ssoSilent API (msal-browser).\n * Used to silently acquire an authorization code and set of tokens using a hidden iframe.\n */\n SsoSilent: \"ssoSilent\",\n\n /**\n * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser).\n * Used to load authority metadata for a request.\n */\n StandardInteractionClientGetDiscoveredAuthority:\n \"standardInteractionClientGetDiscoveredAuthority\",\n\n /**\n * acquireToken APIs in msal-browser.\n * Used to make an /authorize endpoint call with native brokering enabled.\n */\n FetchAccountIdWithNativeBroker: \"fetchAccountIdWithNativeBroker\",\n\n /**\n * acquireToken API in NativeInteractionClient class (msal-browser).\n * Used to acquire a token from Native component when native brokering is enabled.\n */\n NativeInteractionClientAcquireToken: \"nativeInteractionClientAcquireToken\",\n /**\n * Time spent creating default headers for requests to token endpoint\n */\n BaseClientCreateTokenRequestHeaders: \"baseClientCreateTokenRequestHeaders\",\n /**\n * Time spent sending/waiting for the response of a request to the token endpoint\n */\n NetworkClientSendPostRequestAsync: \"networkClientSendPostRequestAsync\",\n RefreshTokenClientExecutePostToTokenEndpoint:\n \"refreshTokenClientExecutePostToTokenEndpoint\",\n AuthorizationCodeClientExecutePostToTokenEndpoint:\n \"authorizationCodeClientExecutePostToTokenEndpoint\",\n /**\n * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).\n */\n BrokerHandhshake: \"brokerHandshake\",\n /**\n * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) .\n */\n AcquireTokenByRefreshTokenInBroker: \"acquireTokenByRefreshTokenInBroker\",\n /**\n * Time taken for token acquisition by broker\n */\n AcquireTokenByBroker: \"acquireTokenByBroker\",\n\n /**\n * Time spent on the network for refresh token acquisition\n */\n RefreshTokenClientExecuteTokenRequest:\n \"refreshTokenClientExecuteTokenRequest\",\n\n /**\n * Time taken for acquiring refresh token , records RT size\n */\n RefreshTokenClientAcquireToken: \"refreshTokenClientAcquireToken\",\n\n /**\n * Time taken for acquiring cached refresh token\n */\n RefreshTokenClientAcquireTokenWithCachedRefreshToken:\n \"refreshTokenClientAcquireTokenWithCachedRefreshToken\",\n\n /**\n * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common).\n */\n RefreshTokenClientAcquireTokenByRefreshToken:\n \"refreshTokenClientAcquireTokenByRefreshToken\",\n\n /**\n * Helper function to create token request body in RefreshTokenClient (msal-common).\n */\n RefreshTokenClientCreateTokenRequestBody:\n \"refreshTokenClientCreateTokenRequestBody\",\n\n /**\n * acquireTokenFromCache (msal-browser).\n * Internal API for acquiring token from cache\n */\n AcquireTokenFromCache: \"acquireTokenFromCache\",\n SilentFlowClientAcquireCachedToken: \"silentFlowClientAcquireCachedToken\",\n SilentFlowClientGenerateResultFromCacheRecord:\n \"silentFlowClientGenerateResultFromCacheRecord\",\n\n /**\n * acquireTokenBySilentIframe (msal-browser).\n * Internal API for acquiring token by silent Iframe\n */\n AcquireTokenBySilentIframe: \"acquireTokenBySilentIframe\",\n\n /**\n * Internal API for initializing base request in BaseInteractionClient (msal-browser)\n */\n InitializeBaseRequest: \"initializeBaseRequest\",\n\n /**\n * Internal API for initializing silent request in SilentCacheClient (msal-browser)\n */\n InitializeSilentRequest: \"initializeSilentRequest\",\n\n InitializeClientApplication: \"initializeClientApplication\",\n\n InitializeCache: \"initializeCache\",\n\n /**\n * Helper function in SilentIframeClient class (msal-browser).\n */\n SilentIframeClientTokenHelper: \"silentIframeClientTokenHelper\",\n\n /**\n * SilentHandler\n */\n SilentHandlerInitiateAuthRequest: \"silentHandlerInitiateAuthRequest\",\n SilentHandlerMonitorIframeForHash: \"silentHandlerMonitorIframeForHash\",\n SilentHandlerLoadFrame: \"silentHandlerLoadFrame\",\n SilentHandlerLoadFrameSync: \"silentHandlerLoadFrameSync\",\n\n /**\n * Helper functions in StandardInteractionClient class (msal-browser)\n */\n StandardInteractionClientCreateAuthCodeClient:\n \"standardInteractionClientCreateAuthCodeClient\",\n StandardInteractionClientGetClientConfiguration:\n \"standardInteractionClientGetClientConfiguration\",\n StandardInteractionClientInitializeAuthorizationRequest:\n \"standardInteractionClientInitializeAuthorizationRequest\",\n\n /**\n * getAuthCodeUrl API (msal-browser and msal-node).\n */\n GetAuthCodeUrl: \"getAuthCodeUrl\",\n GetStandardParams: \"getStandardParams\",\n\n /**\n * Functions from InteractionHandler (msal-browser)\n */\n HandleCodeResponseFromServer: \"handleCodeResponseFromServer\",\n HandleCodeResponse: \"handleCodeResponse\",\n HandleResponseEar: \"handleResponseEar\",\n HandleResponsePlatformBroker: \"handleResponsePlatformBroker\",\n HandleResponseCode: \"handleResponseCode\",\n UpdateTokenEndpointAuthority: \"updateTokenEndpointAuthority\",\n\n /**\n * APIs in Authorization Code Client (msal-common)\n */\n AuthClientAcquireToken: \"authClientAcquireToken\",\n AuthClientExecuteTokenRequest: \"authClientExecuteTokenRequest\",\n AuthClientCreateTokenRequestBody: \"authClientCreateTokenRequestBody\",\n\n /**\n * Generate functions in PopTokenGenerator (msal-common)\n */\n PopTokenGenerateCnf: \"popTokenGenerateCnf\",\n PopTokenGenerateKid: \"popTokenGenerateKid\",\n\n /**\n * handleServerTokenResponse API in ResponseHandler (msal-common)\n */\n HandleServerTokenResponse: \"handleServerTokenResponse\",\n DeserializeResponse: \"deserializeResponse\",\n\n /**\n * Authority functions\n */\n AuthorityFactoryCreateDiscoveredInstance:\n \"authorityFactoryCreateDiscoveredInstance\",\n AuthorityResolveEndpointsAsync: \"authorityResolveEndpointsAsync\",\n AuthorityResolveEndpointsFromLocalSources:\n \"authorityResolveEndpointsFromLocalSources\",\n AuthorityGetCloudDiscoveryMetadataFromNetwork:\n \"authorityGetCloudDiscoveryMetadataFromNetwork\",\n AuthorityUpdateCloudDiscoveryMetadata:\n \"authorityUpdateCloudDiscoveryMetadata\",\n AuthorityGetEndpointMetadataFromNetwork:\n \"authorityGetEndpointMetadataFromNetwork\",\n AuthorityUpdateEndpointMetadata: \"authorityUpdateEndpointMetadata\",\n AuthorityUpdateMetadataWithRegionalInformation:\n \"authorityUpdateMetadataWithRegionalInformation\",\n\n /**\n * Region Discovery functions\n */\n RegionDiscoveryDetectRegion: \"regionDiscoveryDetectRegion\",\n RegionDiscoveryGetRegionFromIMDS: \"regionDiscoveryGetRegionFromIMDS\",\n RegionDiscoveryGetCurrentVersion: \"regionDiscoveryGetCurrentVersion\",\n\n AcquireTokenByCodeAsync: \"acquireTokenByCodeAsync\",\n\n GetEndpointMetadataFromNetwork: \"getEndpointMetadataFromNetwork\",\n GetCloudDiscoveryMetadataFromNetworkMeasurement:\n \"getCloudDiscoveryMetadataFromNetworkMeasurement\",\n\n HandleRedirectPromiseMeasurement: \"handleRedirectPromise\",\n HandleNativeRedirectPromiseMeasurement: \"handleNativeRedirectPromise\",\n\n UpdateCloudDiscoveryMetadataMeasurement:\n \"updateCloudDiscoveryMetadataMeasurement\",\n\n UsernamePasswordClientAcquireToken: \"usernamePasswordClientAcquireToken\",\n\n NativeMessageHandlerHandshake: \"nativeMessageHandlerHandshake\",\n\n NativeGenerateAuthResult: \"nativeGenerateAuthResult\",\n\n RemoveHiddenIframe: \"removeHiddenIframe\",\n\n /**\n * Cache operations\n */\n ClearTokensAndKeysWithClaims: \"clearTokensAndKeysWithClaims\",\n CacheManagerGetRefreshToken: \"cacheManagerGetRefreshToken\",\n ImportExistingCache: \"importExistingCache\",\n SetUserData: \"setUserData\",\n LocalStorageUpdated: \"localStorageUpdated\",\n\n /**\n * Crypto Operations\n */\n GeneratePkceCodes: \"generatePkceCodes\",\n GenerateCodeVerifier: \"generateCodeVerifier\",\n GenerateCodeChallengeFromVerifier: \"generateCodeChallengeFromVerifier\",\n Sha256Digest: \"sha256Digest\",\n GetRandomValues: \"getRandomValues\",\n GenerateHKDF: \"generateHKDF\",\n GenerateBaseKey: \"generateBaseKey\",\n Base64Decode: \"base64Decode\",\n UrlEncodeArr: \"urlEncodeArr\",\n Encrypt: \"encrypt\",\n Decrypt: \"decrypt\",\n GenerateEarKey: \"generateEarKey\",\n DecryptEarResponse: \"decryptEarResponse\",\n} as const;\nexport type PerformanceEvents =\n (typeof PerformanceEvents)[keyof typeof PerformanceEvents];\n\nexport const PerformanceEventAbbreviations: ReadonlyMap =\n new Map([\n [PerformanceEvents.AcquireTokenByCode, \"ATByCode\"],\n [PerformanceEvents.AcquireTokenByRefreshToken, \"ATByRT\"],\n [PerformanceEvents.AcquireTokenSilent, \"ATS\"],\n [PerformanceEvents.AcquireTokenSilentAsync, \"ATSAsync\"],\n [PerformanceEvents.AcquireTokenPopup, \"ATPopup\"],\n [PerformanceEvents.AcquireTokenRedirect, \"ATRedirect\"],\n [\n PerformanceEvents.CryptoOptsGetPublicKeyThumbprint,\n \"CryptoGetPKThumb\",\n ],\n [PerformanceEvents.CryptoOptsSignJwt, \"CryptoSignJwt\"],\n [PerformanceEvents.SilentCacheClientAcquireToken, \"SltCacheClientAT\"],\n [PerformanceEvents.SilentIframeClientAcquireToken, \"SltIframeClientAT\"],\n [PerformanceEvents.SilentRefreshClientAcquireToken, \"SltRClientAT\"],\n [PerformanceEvents.SsoSilent, \"SsoSlt\"],\n [\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n \"StdIntClientGetDiscAuth\",\n ],\n [\n PerformanceEvents.FetchAccountIdWithNativeBroker,\n \"FetchAccIdWithNtvBroker\",\n ],\n [\n PerformanceEvents.NativeInteractionClientAcquireToken,\n \"NtvIntClientAT\",\n ],\n [\n PerformanceEvents.BaseClientCreateTokenRequestHeaders,\n \"BaseClientCreateTReqHead\",\n ],\n [\n PerformanceEvents.NetworkClientSendPostRequestAsync,\n \"NetClientSendPost\",\n ],\n [\n PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,\n \"RTClientExecPost\",\n ],\n [\n PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,\n \"AuthCodeClientExecPost\",\n ],\n [PerformanceEvents.BrokerHandhshake, \"BrokerHandshake\"],\n [\n PerformanceEvents.AcquireTokenByRefreshTokenInBroker,\n \"ATByRTInBroker\",\n ],\n [PerformanceEvents.AcquireTokenByBroker, \"ATByBroker\"],\n [\n PerformanceEvents.RefreshTokenClientExecuteTokenRequest,\n \"RTClientExecTReq\",\n ],\n [PerformanceEvents.RefreshTokenClientAcquireToken, \"RTClientAT\"],\n [\n PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\n \"RTClientATWithCachedRT\",\n ],\n [\n PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken,\n \"RTClientATByRT\",\n ],\n [\n PerformanceEvents.RefreshTokenClientCreateTokenRequestBody,\n \"RTClientCreateTReqBody\",\n ],\n [PerformanceEvents.AcquireTokenFromCache, \"ATFromCache\"],\n [\n PerformanceEvents.SilentFlowClientAcquireCachedToken,\n \"SltFlowClientATCached\",\n ],\n [\n PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,\n \"SltFlowClientGenResFromCache\",\n ],\n [PerformanceEvents.AcquireTokenBySilentIframe, \"ATBySltIframe\"],\n [PerformanceEvents.InitializeBaseRequest, \"InitBaseReq\"],\n [PerformanceEvents.InitializeSilentRequest, \"InitSltReq\"],\n [\n PerformanceEvents.InitializeClientApplication,\n \"InitClientApplication\",\n ],\n [PerformanceEvents.InitializeCache, \"InitCache\"],\n [PerformanceEvents.ImportExistingCache, \"importCache\"],\n [PerformanceEvents.SetUserData, \"setUserData\"],\n [PerformanceEvents.LocalStorageUpdated, \"localStorageUpdated\"],\n [PerformanceEvents.SilentIframeClientTokenHelper, \"SIClientTHelper\"],\n [\n PerformanceEvents.SilentHandlerInitiateAuthRequest,\n \"SHandlerInitAuthReq\",\n ],\n [\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\n \"SltHandlerMonitorIframeForHash\",\n ],\n [PerformanceEvents.SilentHandlerLoadFrame, \"SHandlerLoadFrame\"],\n [PerformanceEvents.SilentHandlerLoadFrameSync, \"SHandlerLoadFrameSync\"],\n\n [\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n \"StdIntClientCreateAuthCodeClient\",\n ],\n [\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\n \"StdIntClientGetClientConf\",\n ],\n [\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\n \"StdIntClientInitAuthReq\",\n ],\n\n [PerformanceEvents.GetAuthCodeUrl, \"GetAuthCodeUrl\"],\n\n [\n PerformanceEvents.HandleCodeResponseFromServer,\n \"HandleCodeResFromServer\",\n ],\n [PerformanceEvents.HandleCodeResponse, \"HandleCodeResp\"],\n [PerformanceEvents.HandleResponseEar, \"HandleRespEar\"],\n [PerformanceEvents.HandleResponseCode, \"HandleRespCode\"],\n [\n PerformanceEvents.HandleResponsePlatformBroker,\n \"HandleRespPlatBroker\",\n ],\n [PerformanceEvents.UpdateTokenEndpointAuthority, \"UpdTEndpointAuth\"],\n\n [PerformanceEvents.AuthClientAcquireToken, \"AuthClientAT\"],\n [PerformanceEvents.AuthClientExecuteTokenRequest, \"AuthClientExecTReq\"],\n [\n PerformanceEvents.AuthClientCreateTokenRequestBody,\n \"AuthClientCreateTReqBody\",\n ],\n [PerformanceEvents.PopTokenGenerateCnf, \"PopTGenCnf\"],\n [PerformanceEvents.PopTokenGenerateKid, \"PopTGenKid\"],\n [PerformanceEvents.HandleServerTokenResponse, \"HandleServerTRes\"],\n [PerformanceEvents.DeserializeResponse, \"DeserializeRes\"],\n [\n PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance,\n \"AuthFactCreateDiscInst\",\n ],\n [\n PerformanceEvents.AuthorityResolveEndpointsAsync,\n \"AuthResolveEndpointsAsync\",\n ],\n [\n PerformanceEvents.AuthorityResolveEndpointsFromLocalSources,\n \"AuthResolveEndpointsFromLocal\",\n ],\n [\n PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,\n \"AuthGetCDMetaFromNet\",\n ],\n [\n PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata,\n \"AuthUpdCDMeta\",\n ],\n [\n PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,\n \"AuthUpdCDMetaFromNet\",\n ],\n [\n PerformanceEvents.AuthorityUpdateEndpointMetadata,\n \"AuthUpdEndpointMeta\",\n ],\n [\n PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\n \"AuthUpdMetaWithRegInfo\",\n ],\n [PerformanceEvents.RegionDiscoveryDetectRegion, \"RegDiscDetectReg\"],\n [\n PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,\n \"RegDiscGetRegFromIMDS\",\n ],\n [\n PerformanceEvents.RegionDiscoveryGetCurrentVersion,\n \"RegDiscGetCurrentVer\",\n ],\n [PerformanceEvents.AcquireTokenByCodeAsync, \"ATByCodeAsync\"],\n [\n PerformanceEvents.GetEndpointMetadataFromNetwork,\n \"GetEndpointMetaFromNet\",\n ],\n [\n PerformanceEvents.GetCloudDiscoveryMetadataFromNetworkMeasurement,\n \"GetCDMetaFromNet\",\n ],\n [\n PerformanceEvents.HandleRedirectPromiseMeasurement,\n \"HandleRedirectPromise\",\n ],\n [\n PerformanceEvents.HandleNativeRedirectPromiseMeasurement,\n \"HandleNtvRedirectPromise\",\n ],\n [\n PerformanceEvents.UpdateCloudDiscoveryMetadataMeasurement,\n \"UpdateCDMeta\",\n ],\n [\n PerformanceEvents.UsernamePasswordClientAcquireToken,\n \"UserPassClientAT\",\n ],\n [\n PerformanceEvents.NativeMessageHandlerHandshake,\n \"NtvMsgHandlerHandshake\",\n ],\n [PerformanceEvents.NativeGenerateAuthResult, \"NtvGenAuthRes\"],\n [PerformanceEvents.RemoveHiddenIframe, \"RemoveHiddenIframe\"],\n [\n PerformanceEvents.ClearTokensAndKeysWithClaims,\n \"ClearTAndKeysWithClaims\",\n ],\n [PerformanceEvents.CacheManagerGetRefreshToken, \"CacheManagerGetRT\"],\n [PerformanceEvents.GeneratePkceCodes, \"GenPkceCodes\"],\n [PerformanceEvents.GenerateCodeVerifier, \"GenCodeVerifier\"],\n [\n PerformanceEvents.GenerateCodeChallengeFromVerifier,\n \"GenCodeChallengeFromVerifier\",\n ],\n [PerformanceEvents.Sha256Digest, \"Sha256Digest\"],\n [PerformanceEvents.GetRandomValues, \"GetRandomValues\"],\n [PerformanceEvents.GenerateHKDF, \"genHKDF\"],\n [PerformanceEvents.GenerateBaseKey, \"genBaseKey\"],\n [PerformanceEvents.Base64Decode, \"b64Decode\"],\n [PerformanceEvents.UrlEncodeArr, \"urlEncArr\"],\n [PerformanceEvents.Encrypt, \"encrypt\"],\n [PerformanceEvents.Decrypt, \"decrypt\"],\n [PerformanceEvents.GenerateEarKey, \"genEarKey\"],\n [PerformanceEvents.DecryptEarResponse, \"decryptEarResp\"],\n ]);\n\n/**\n * State of the performance event.\n *\n * @export\n * @enum {number}\n */\nexport const PerformanceEventStatus = {\n NotStarted: 0,\n InProgress: 1,\n Completed: 2,\n} as const;\nexport type PerformanceEventStatus =\n (typeof PerformanceEventStatus)[keyof typeof PerformanceEventStatus];\n\nexport type SubMeasurement = {\n name: string;\n startTimeMs: number;\n};\n\n/**\n * Performance measurement taken by the library, including metadata about the request and application.\n *\n * @export\n * @typedef {PerformanceEvent}\n */\nexport type PerformanceEvent = {\n /**\n * Unique id for the event\n *\n * @type {string}\n */\n eventId: string;\n\n /**\n * State of the perforance measure.\n *\n * @type {PerformanceEventStatus}\n */\n status: PerformanceEventStatus;\n\n /**\n * Login authority used for the request\n *\n * @type {string}\n */\n authority: string;\n\n /**\n * Client id for the application\n *\n * @type {string}\n */\n clientId: string;\n\n /**\n * Correlation ID used for the request\n *\n * @type {string}\n */\n correlationId: string;\n\n /**\n * End-to-end duration in milliseconds.\n * @date 3/22/2022 - 3:40:05 PM\n *\n * @type {number}\n */\n durationMs?: number;\n\n /**\n * Visibility of the page when the event completed.\n * Read from: https://developer.mozilla.org/docs/Web/API/Page_Visibility_API\n *\n * @type {?(string | null)}\n */\n endPageVisibility?: string | null;\n\n /**\n * Whether the result was retrieved from the cache.\n *\n * @type {(boolean | null)}\n */\n fromCache?: boolean | null;\n\n /**\n * Event name (usually in the form of classNameFunctionName)\n *\n * @type {string}\n */\n name: string;\n\n /**\n * Visibility of the page when the event completed.\n * Read from: https://developer.mozilla.org/docs/Web/API/Page_Visibility_API\n *\n * @type {?(string | null)}\n */\n startPageVisibility?: string | null;\n\n /**\n * Unix millisecond timestamp when the event was initiated.\n *\n * @type {number}\n */\n startTimeMs: number;\n\n /**\n * Whether or the operation completed successfully.\n *\n * @type {(boolean | null)}\n */\n success?: boolean | null;\n\n /**\n * Add specific error code in case of failure\n *\n * @type {string}\n */\n errorCode?: string;\n\n /**\n * Add specific sub error code in case of failure\n *\n * @type {string}\n */\n subErrorCode?: string;\n\n /**\n * Server error number\n */\n serverErrorNo?: string;\n\n /**\n * Name of the library used for the operation.\n *\n * @type {string}\n */\n libraryName: string;\n\n /**\n * Version of the library used for the operation.\n *\n * @type {string}\n */\n libraryVersion: string;\n\n /**\n * Version of the library used last. Used to track upgrades and downgrades\n */\n previousLibraryVersion?: string;\n\n /**\n * Whether the response is from a native component (e.g., WAM)\n *\n * @type {?boolean}\n */\n isNativeBroker?: boolean;\n\n /**\n * Request ID returned from the response\n *\n * @type {?string}\n */\n requestId?: string;\n\n /**\n * Cache lookup policy\n *\n * @type {?number}\n */\n cacheLookupPolicy?: number | undefined;\n\n /**\n * Cache Outcome\n * @type {?number}\n */\n cacheOutcome?: number;\n\n /**\n * Amount of time spent in the JS queue in milliseconds.\n *\n * @type {?number}\n */\n queuedTimeMs?: number;\n\n /**\n * Sub-measurements for internal use. To be deleted before flushing.\n */\n incompleteSubMeasurements?: Map;\n\n visibilityChangeCount?: number;\n incompleteSubsCount?: number;\n\n /**\n * CorrelationId of the in progress iframe request that was awaited\n */\n awaitIframeCorrelationId?: string;\n /**\n * Amount of times queued in the JS event queue.\n *\n * @type {?number}\n */\n queuedCount?: number;\n /**\n * Amount of manually completed queue events.\n *\n * @type {?number}\n */\n queuedManuallyCompletedCount?: number;\n\n /**\n * Size of the id token\n *\n * @type {number}\n */\n idTokenSize?: number;\n\n /**\n *\n * Size of the access token\n *\n * @type {number}\n */\n\n accessTokenSize?: number;\n\n /**\n *\n * Size of the refresh token\n *\n * @type {number}\n */\n\n refreshTokenSize?: number | undefined;\n\n /**\n * Application name as specified by the app.\n *\n * @type {?string}\n */\n appName?: string;\n\n /**\n * Application version as specified by the app.\n *\n * @type {?string}\n */\n appVersion?: string;\n\n /**\n * The following are fields that may be emitted in native broker scenarios\n */\n extensionId?: string;\n extensionVersion?: string;\n matsBrokerVersion?: string;\n matsAccountJoinOnStart?: string;\n matsAccountJoinOnEnd?: string;\n matsDeviceJoin?: string;\n matsPromptBehavior?: string;\n matsApiErrorCode?: number;\n matsUiVisible?: boolean;\n matsSilentCode?: number;\n matsSilentBiSubCode?: number;\n matsSilentMessage?: string;\n matsSilentStatus?: number;\n matsHttpStatus?: number;\n matsHttpEventCount?: number;\n\n /**\n * Http POST metadata\n */\n httpVerToken?: string;\n httpStatus?: number;\n contentTypeHeader?: string;\n contentLengthHeader?: string;\n\n /**\n * Platform broker fields\n */\n allowPlatformBroker?: boolean;\n extensionInstalled?: boolean;\n extensionHandshakeTimeoutMs?: number;\n extensionHandshakeTimedOut?: boolean;\n\n /**\n * Nested App Auth Fields\n */\n nestedAppAuthRequest?: boolean;\n\n /**\n * Multiple matched access/id/refresh tokens in the cache\n */\n multiMatchedAT?: number;\n multiMatchedID?: number;\n multiMatchedRT?: number;\n\n errorName?: string;\n errorStack?: string[];\n\n // Event context as JSON string\n context?: string;\n\n // Cache Data\n cacheLocation?: string;\n cacheRetentionDays?: number;\n\n // Number of tokens in the cache to be reported when cache quota is exceeded\n cacheRtCount?: number;\n cacheIdCount?: number;\n cacheAtCount?: number;\n\n // Scenario id to track custom user prompts\n scenarioId?: string;\n\n accountType?: \"AAD\" | \"MSA\" | \"B2C\";\n\n /**\n * Server error that triggers a request retry\n *\n * @type {string}\n */\n retryError?: string;\n\n embeddedClientId?: string;\n embeddedRedirectUri?: string;\n\n isAsyncPopup?: boolean;\n\n rtExpiresOnMs?: number;\n\n sidFromClaims?: boolean;\n sidFromRequest?: boolean;\n loginHintFromRequest?: boolean;\n loginHintFromUpn?: boolean;\n loginHintFromClaim?: boolean;\n domainHintFromRequest?: boolean;\n\n prompt?: string;\n\n usePreGeneratedPkce?: boolean;\n\n // Number of MSAL JS instances in the frame\n msalInstanceCount?: number;\n // Number of MSAL JS instances using the same client id in the frame\n sameClientIdInstanceCount?: number;\n};\n\nexport type PerformanceEventContext = {\n dur?: number;\n err?: string;\n subErr?: string;\n fail?: number;\n};\n\nexport type PerformanceEventStackedContext = PerformanceEventContext & {\n name?: string;\n childErr?: string;\n};\n\nexport const IntFields: ReadonlySet = new Set([\n \"accessTokenSize\",\n \"durationMs\",\n \"idTokenSize\",\n \"matsSilentStatus\",\n \"matsHttpStatus\",\n \"refreshTokenSize\",\n \"queuedTimeMs\",\n \"startTimeMs\",\n \"status\",\n \"multiMatchedAT\",\n \"multiMatchedID\",\n \"multiMatchedRT\",\n \"unencryptedCacheCount\",\n \"encryptedCacheExpiredCount\",\n \"oldAccountCount\",\n \"oldAccessCount\",\n \"oldIdCount\",\n \"oldRefreshCount\",\n \"currAccountCount\",\n \"currAccessCount\",\n \"currIdCount\",\n \"currRefreshCount\",\n \"expiredCacheRemovedCount\",\n \"upgradedCacheCount\",\n]);\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IPerformanceClient,\n InProgressPerformanceEvent,\n} from \"./IPerformanceClient.js\";\nimport { IPerformanceMeasurement } from \"./IPerformanceMeasurement.js\";\nimport {\n PerformanceEvent,\n PerformanceEventStatus,\n} from \"./PerformanceEvent.js\";\n\nexport class StubPerformanceMeasurement implements IPerformanceMeasurement {\n startMeasurement(): void {\n return;\n }\n endMeasurement(): void {\n return;\n }\n flushMeasurement(): number | null {\n return null;\n }\n}\n\nexport class StubPerformanceClient implements IPerformanceClient {\n generateId(): string {\n return \"callback-id\";\n }\n\n startMeasurement(\n measureName: string,\n correlationId?: string | undefined\n ): InProgressPerformanceEvent {\n return {\n end: () => null,\n discard: () => {},\n add: () => {},\n increment: () => {},\n event: {\n eventId: this.generateId(),\n status: PerformanceEventStatus.InProgress,\n authority: \"\",\n libraryName: \"\",\n libraryVersion: \"\",\n clientId: \"\",\n name: measureName,\n startTimeMs: Date.now(),\n correlationId: correlationId || \"\",\n },\n measurement: new StubPerformanceMeasurement(),\n };\n }\n\n startPerformanceMeasurement(): IPerformanceMeasurement {\n return new StubPerformanceMeasurement();\n }\n calculateQueuedTime(): number {\n return 0;\n }\n\n addQueueMeasurement(): void {\n return;\n }\n\n setPreQueueTime(): void {\n return;\n }\n\n endMeasurement(): PerformanceEvent | null {\n return null;\n }\n\n discardMeasurements(): void {\n return;\n }\n\n removePerformanceCallback(): boolean {\n return true;\n }\n\n addPerformanceCallback(): string {\n return \"\";\n }\n\n emitEvents(): void {\n return;\n }\n\n addFields(): void {\n return;\n }\n\n incrementFields(): void {\n return;\n }\n\n cacheEventByCorrelationId(): void {\n return;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { INetworkModule } from \"../network/INetworkModule.js\";\nimport { DEFAULT_CRYPTO_IMPLEMENTATION, ICrypto } from \"../crypto/ICrypto.js\";\nimport { ILoggerCallback, Logger, LogLevel } from \"../logger/Logger.js\";\nimport {\n Constants,\n DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\n} from \"../utils/Constants.js\";\nimport { version } from \"../packageMetadata.js\";\nimport type { Authority } from \"../authority/Authority.js\";\nimport { AzureCloudInstance } from \"../authority/AuthorityOptions.js\";\nimport { CacheManager, DefaultStorageClass } from \"../cache/CacheManager.js\";\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager.js\";\nimport { ICachePlugin } from \"../cache/interface/ICachePlugin.js\";\nimport { ISerializableTokenCache } from \"../cache/interface/ISerializableTokenCache.js\";\nimport { ClientCredentials } from \"../account/ClientCredentials.js\";\nimport { ProtocolMode } from \"../authority/ProtocolMode.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { StubPerformanceClient } from \"../telemetry/performance/StubPerformanceClient.js\";\n\n/**\n * Use the configuration object to configure MSAL Modules and initialize the base interfaces for MSAL.\n *\n * This object allows you to configure important elements of MSAL functionality:\n * - authOptions - Authentication for application\n * - cryptoInterface - Implementation of crypto functions\n * - libraryInfo - Library metadata\n * - telemetry - Telemetry options and data\n * - loggerOptions - Logging for application\n * - networkInterface - Network implementation\n * - storageInterface - Storage implementation\n * - systemOptions - Additional library options\n * - clientCredentials - Credentials options for confidential clients\n * @internal\n */\nexport type ClientConfiguration = {\n authOptions: AuthOptions;\n systemOptions?: SystemOptions;\n loggerOptions?: LoggerOptions;\n cacheOptions?: CacheOptions;\n storageInterface?: CacheManager;\n networkInterface?: INetworkModule;\n cryptoInterface?: ICrypto;\n clientCredentials?: ClientCredentials;\n libraryInfo?: LibraryInfo;\n telemetry?: TelemetryOptions;\n serverTelemetryManager?: ServerTelemetryManager | null;\n persistencePlugin?: ICachePlugin | null;\n serializableCache?: ISerializableTokenCache | null;\n};\n\nexport type CommonClientConfiguration = {\n authOptions: Required;\n systemOptions: Required;\n loggerOptions: Required;\n cacheOptions: Required;\n storageInterface: CacheManager;\n networkInterface: INetworkModule;\n cryptoInterface: Required;\n libraryInfo: LibraryInfo;\n telemetry: Required;\n serverTelemetryManager: ServerTelemetryManager | null;\n clientCredentials: ClientCredentials;\n persistencePlugin: ICachePlugin | null;\n serializableCache: ISerializableTokenCache | null;\n};\n\n/**\n * Use this to configure the auth options in the ClientConfiguration object\n *\n * - clientId - Client ID of your app registered with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview in Microsoft Identity Platform\n * - authority - You can configure a specific authority, defaults to \" \" or \"https://login.microsoftonline.com/common\"\n * - knownAuthorities - An array of URIs that are known to be valid. Used in B2C scenarios.\n * - cloudDiscoveryMetadata - A string containing the cloud discovery response. Used in AAD scenarios.\n * - clientCapabilities - Array of capabilities which will be added to the claims.access_token.xms_cc request property on every network request.\n * - protocolMode - Enum that represents the protocol that msal follows. Used for configuring proper endpoints.\n * - skipAuthorityMetadataCache - A flag to choose whether to use or not use the local metadata cache during authority initialization. Defaults to false.\n * - instanceAware - A flag of whether the STS will send back additional parameters to specify where the tokens should be retrieved from.\n * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.\n * - encodeExtraQueryParams - A flag to choose whether to encode the extra query parameters or not. Defaults to false.\n * @internal\n */\nexport type AuthOptions = {\n clientId: string;\n authority: Authority;\n redirectUri: string;\n clientCapabilities?: Array;\n azureCloudOptions?: AzureCloudOptions;\n skipAuthorityMetadataCache?: boolean;\n instanceAware?: boolean;\n /**\n * @deprecated This flag is deprecated and will be removed in the next major version where all extra query params will be encoded by default.\n */\n encodeExtraQueryParams?: boolean;\n};\n\n/**\n * Use this to configure token renewal info in the Configuration object\n *\n * - tokenRenewalOffsetSeconds - Sets the window of offset needed to renew the token before expiry\n */\nexport type SystemOptions = {\n tokenRenewalOffsetSeconds?: number;\n preventCorsPreflight?: boolean;\n};\n\n/**\n * Use this to configure the logging that MSAL does, by configuring logger options in the Configuration object\n *\n * - loggerCallback - Callback for logger\n * - piiLoggingEnabled - Sets whether pii logging is enabled\n * - logLevel - Sets the level at which logging happens\n * - correlationId - Sets the correlationId printed by the logger\n */\nexport type LoggerOptions = {\n loggerCallback?: ILoggerCallback;\n piiLoggingEnabled?: boolean;\n logLevel?: LogLevel;\n correlationId?: string;\n};\n\n/**\n * Use this to configure credential cache preferences in the ClientConfiguration object\n *\n * - claimsBasedCachingEnabled - Sets whether tokens should be cached based on the claims hash. Default is false.\n */\nexport type CacheOptions = {\n /**\n * @deprecated claimsBasedCachingEnabled is deprecated and will be removed in the next major version.\n */\n claimsBasedCachingEnabled?: boolean;\n};\n\n/**\n * Library-specific options\n */\nexport type LibraryInfo = {\n sku: string;\n version: string;\n cpu: string;\n os: string;\n};\n\n/**\n * AzureCloudInstance specific options\n *\n * - azureCloudInstance - string enum providing short notation for soverign and public cloud authorities\n * - tenant - provision to provide the tenant info\n */\nexport type AzureCloudOptions = {\n azureCloudInstance: AzureCloudInstance;\n tenant?: string;\n};\n\nexport type TelemetryOptions = {\n application: ApplicationTelemetry;\n};\n\n/**\n * Telemetry information sent on request\n * - appName: Unique string name of an application\n * - appVersion: Version of the application using MSAL\n */\nexport type ApplicationTelemetry = {\n appName: string;\n appVersion: string;\n};\n\nexport const DEFAULT_SYSTEM_OPTIONS: Required = {\n tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\n preventCorsPreflight: false,\n};\n\nconst DEFAULT_LOGGER_IMPLEMENTATION: Required = {\n loggerCallback: () => {\n // allow users to not set loggerCallback\n },\n piiLoggingEnabled: false,\n logLevel: LogLevel.Info,\n correlationId: Constants.EMPTY_STRING,\n};\n\nconst DEFAULT_CACHE_OPTIONS: Required = {\n claimsBasedCachingEnabled: false,\n};\n\nconst DEFAULT_NETWORK_IMPLEMENTATION: INetworkModule = {\n async sendGetRequestAsync(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n async sendPostRequestAsync(): Promise {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n },\n};\n\nconst DEFAULT_LIBRARY_INFO: LibraryInfo = {\n sku: Constants.SKU,\n version: version,\n cpu: Constants.EMPTY_STRING,\n os: Constants.EMPTY_STRING,\n};\n\nconst DEFAULT_CLIENT_CREDENTIALS: ClientCredentials = {\n clientSecret: Constants.EMPTY_STRING,\n clientAssertion: undefined,\n};\n\nconst DEFAULT_AZURE_CLOUD_OPTIONS: AzureCloudOptions = {\n azureCloudInstance: AzureCloudInstance.None,\n tenant: `${Constants.DEFAULT_COMMON_TENANT}`,\n};\n\nconst DEFAULT_TELEMETRY_OPTIONS: Required = {\n application: {\n appName: \"\",\n appVersion: \"\",\n },\n};\n\n/**\n * Function that sets the default options when not explicitly configured from app developer\n *\n * @param Configuration\n *\n * @returns Configuration\n */\nexport function buildClientConfiguration({\n authOptions: userAuthOptions,\n systemOptions: userSystemOptions,\n loggerOptions: userLoggerOption,\n cacheOptions: userCacheOptions,\n storageInterface: storageImplementation,\n networkInterface: networkImplementation,\n cryptoInterface: cryptoImplementation,\n clientCredentials: clientCredentials,\n libraryInfo: libraryInfo,\n telemetry: telemetry,\n serverTelemetryManager: serverTelemetryManager,\n persistencePlugin: persistencePlugin,\n serializableCache: serializableCache,\n}: ClientConfiguration): CommonClientConfiguration {\n const loggerOptions = {\n ...DEFAULT_LOGGER_IMPLEMENTATION,\n ...userLoggerOption,\n };\n\n return {\n authOptions: buildAuthOptions(userAuthOptions),\n systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions },\n loggerOptions: loggerOptions,\n cacheOptions: { ...DEFAULT_CACHE_OPTIONS, ...userCacheOptions },\n storageInterface:\n storageImplementation ||\n new DefaultStorageClass(\n userAuthOptions.clientId,\n DEFAULT_CRYPTO_IMPLEMENTATION,\n new Logger(loggerOptions),\n new StubPerformanceClient()\n ),\n networkInterface:\n networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION,\n cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION,\n clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS,\n libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo },\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry },\n serverTelemetryManager: serverTelemetryManager || null,\n persistencePlugin: persistencePlugin || null,\n serializableCache: serializableCache || null,\n };\n}\n\n/**\n * Construct authoptions from the client and platform passed values\n * @param authOptions\n */\nfunction buildAuthOptions(authOptions: AuthOptions): Required {\n return {\n clientCapabilities: [],\n azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS,\n skipAuthorityMetadataCache: false,\n instanceAware: false,\n encodeExtraQueryParams: false,\n ...authOptions,\n };\n}\n\n/**\n * Returns true if config has protocolMode set to ProtocolMode.OIDC, false otherwise\n * @param ClientConfiguration\n */\nexport function isOidcProtocolMode(config: ClientConfiguration): boolean {\n return (\n config.authOptions.authority.options.protocolMode === ProtocolMode.OIDC\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type CcsCredential = {\n credential: string;\n type: CcsCredentialType;\n};\n\nexport const CcsCredentialType = {\n HOME_ACCOUNT_ID: \"home_account_id\",\n UPN: \"UPN\",\n} as const;\nexport type CcsCredentialType =\n (typeof CcsCredentialType)[keyof typeof CcsCredentialType];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../error/ClientAuthError.js\";\nimport { Separators, Constants } from \"../utils/Constants.js\";\n\n/**\n * Client info object which consists of two IDs. Need to add more info here.\n */\nexport type ClientInfo = {\n uid: string;\n utid: string;\n};\n\n/**\n * Function to build a client info object from server clientInfo string\n * @param rawClientInfo\n * @param crypto\n */\nexport function buildClientInfo(\n rawClientInfo: string,\n base64Decode: (input: string) => string\n): ClientInfo {\n if (!rawClientInfo) {\n throw createClientAuthError(ClientAuthErrorCodes.clientInfoEmptyError);\n }\n\n try {\n const decodedClientInfo: string = base64Decode(rawClientInfo);\n return JSON.parse(decodedClientInfo) as ClientInfo;\n } catch (e) {\n throw createClientAuthError(\n ClientAuthErrorCodes.clientInfoDecodingError\n );\n }\n}\n\n/**\n * Function to build a client info object from cached homeAccountId string\n * @param homeAccountId\n */\nexport function buildClientInfoFromHomeAccountId(\n homeAccountId: string\n): ClientInfo {\n if (!homeAccountId) {\n throw createClientAuthError(\n ClientAuthErrorCodes.clientInfoDecodingError\n );\n }\n const clientInfoParts: string[] = homeAccountId.split(\n Separators.CLIENT_INFO_SEPARATOR,\n 2\n );\n return {\n uid: clientInfoParts[0],\n utid:\n clientInfoParts.length < 2\n ? Constants.EMPTY_STRING\n : clientInfoParts[1],\n };\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const CLIENT_ID = \"client_id\";\nexport const REDIRECT_URI = \"redirect_uri\";\nexport const RESPONSE_TYPE = \"response_type\";\nexport const RESPONSE_MODE = \"response_mode\";\nexport const GRANT_TYPE = \"grant_type\";\nexport const CLAIMS = \"claims\";\nexport const SCOPE = \"scope\";\nexport const ERROR = \"error\";\nexport const ERROR_DESCRIPTION = \"error_description\";\nexport const ACCESS_TOKEN = \"access_token\";\nexport const ID_TOKEN = \"id_token\";\nexport const REFRESH_TOKEN = \"refresh_token\";\nexport const EXPIRES_IN = \"expires_in\";\nexport const REFRESH_TOKEN_EXPIRES_IN = \"refresh_token_expires_in\";\nexport const STATE = \"state\";\nexport const NONCE = \"nonce\";\nexport const PROMPT = \"prompt\";\nexport const SESSION_STATE = \"session_state\";\nexport const CLIENT_INFO = \"client_info\";\nexport const CODE = \"code\";\nexport const CODE_CHALLENGE = \"code_challenge\";\nexport const CODE_CHALLENGE_METHOD = \"code_challenge_method\";\nexport const CODE_VERIFIER = \"code_verifier\";\nexport const CLIENT_REQUEST_ID = \"client-request-id\";\nexport const X_CLIENT_SKU = \"x-client-SKU\";\nexport const X_CLIENT_VER = \"x-client-VER\";\nexport const X_CLIENT_OS = \"x-client-OS\";\nexport const X_CLIENT_CPU = \"x-client-CPU\";\nexport const X_CLIENT_CURR_TELEM = \"x-client-current-telemetry\";\nexport const X_CLIENT_LAST_TELEM = \"x-client-last-telemetry\";\nexport const X_MS_LIB_CAPABILITY = \"x-ms-lib-capability\";\nexport const X_APP_NAME = \"x-app-name\";\nexport const X_APP_VER = \"x-app-ver\";\nexport const POST_LOGOUT_URI = \"post_logout_redirect_uri\";\nexport const ID_TOKEN_HINT = \"id_token_hint\";\nexport const DEVICE_CODE = \"device_code\";\nexport const CLIENT_SECRET = \"client_secret\";\nexport const CLIENT_ASSERTION = \"client_assertion\";\nexport const CLIENT_ASSERTION_TYPE = \"client_assertion_type\";\nexport const TOKEN_TYPE = \"token_type\";\nexport const REQ_CNF = \"req_cnf\";\nexport const OBO_ASSERTION = \"assertion\";\nexport const REQUESTED_TOKEN_USE = \"requested_token_use\";\nexport const ON_BEHALF_OF = \"on_behalf_of\";\nexport const FOCI = \"foci\";\nexport const CCS_HEADER = \"X-AnchorMailbox\";\nexport const RETURN_SPA_CODE = \"return_spa_code\";\nexport const NATIVE_BROKER = \"nativebroker\";\nexport const LOGOUT_HINT = \"logout_hint\";\nexport const SID = \"sid\";\nexport const LOGIN_HINT = \"login_hint\";\nexport const DOMAIN_HINT = \"domain_hint\";\nexport const X_CLIENT_EXTRA_SKU = \"x-client-xtra-sku\";\nexport const BROKER_CLIENT_ID = \"brk_client_id\";\nexport const BROKER_REDIRECT_URI = \"brk_redirect_uri\";\nexport const INSTANCE_AWARE = \"instance_aware\";\nexport const EAR_JWK = \"ear_jwk\";\nexport const EAR_JWE_CRYPTO = \"ear_jwe_crypto\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ResponseMode,\n CLIENT_INFO,\n AuthenticationScheme,\n ClaimsRequestKeys,\n PasswordGrantConstants,\n OIDC_DEFAULT_SCOPES,\n ThrottlingConstants,\n HeaderNames,\n OAuthResponseType,\n} from \"../utils/Constants.js\";\nimport * as AADServerParamKeys from \"../constants/AADServerParamKeys.js\";\nimport { ScopeSet } from \"./ScopeSet.js\";\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport { StringDict } from \"../utils/MsalTypes.js\";\nimport {\n ApplicationTelemetry,\n LibraryInfo,\n} from \"../config/ClientConfiguration.js\";\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager.js\";\nimport { ClientInfo } from \"../account/ClientInfo.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\n\nexport function instrumentBrokerParams(\n parameters: Map,\n correlationId?: string,\n performanceClient?: IPerformanceClient\n): void {\n if (!correlationId) {\n return;\n }\n\n const clientId = parameters.get(AADServerParamKeys.CLIENT_ID);\n if (clientId && parameters.has(AADServerParamKeys.BROKER_CLIENT_ID)) {\n performanceClient?.addFields(\n {\n embeddedClientId: clientId,\n embeddedRedirectUri: parameters.get(\n AADServerParamKeys.REDIRECT_URI\n ),\n },\n correlationId\n );\n }\n}\n\n/**\n * Add the given response_type\n * @param parameters\n * @param responseType\n */\nexport function addResponseType(\n parameters: Map,\n responseType: OAuthResponseType\n): void {\n parameters.set(AADServerParamKeys.RESPONSE_TYPE, responseType);\n}\n\n/**\n * add response_mode. defaults to query.\n * @param responseMode\n */\nexport function addResponseMode(\n parameters: Map,\n responseMode?: ResponseMode\n): void {\n parameters.set(\n AADServerParamKeys.RESPONSE_MODE,\n responseMode ? responseMode : ResponseMode.QUERY\n );\n}\n\n/**\n * Add flag to indicate STS should attempt to use WAM if available\n */\nexport function addNativeBroker(parameters: Map): void {\n parameters.set(AADServerParamKeys.NATIVE_BROKER, \"1\");\n}\n\n/**\n * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios\n * @param scopeSet\n * @param addOidcScopes\n */\nexport function addScopes(\n parameters: Map,\n scopes: string[],\n addOidcScopes: boolean = true,\n defaultScopes: Array = OIDC_DEFAULT_SCOPES\n): void {\n // Always add openid to the scopes when adding OIDC scopes\n if (\n addOidcScopes &&\n !defaultScopes.includes(\"openid\") &&\n !scopes.includes(\"openid\")\n ) {\n defaultScopes.push(\"openid\");\n }\n const requestScopes = addOidcScopes\n ? [...(scopes || []), ...defaultScopes]\n : scopes || [];\n const scopeSet = new ScopeSet(requestScopes);\n parameters.set(AADServerParamKeys.SCOPE, scopeSet.printScopes());\n}\n\n/**\n * add clientId\n * @param clientId\n */\nexport function addClientId(\n parameters: Map,\n clientId: string\n): void {\n parameters.set(AADServerParamKeys.CLIENT_ID, clientId);\n}\n\n/**\n * add redirect_uri\n * @param redirectUri\n */\nexport function addRedirectUri(\n parameters: Map,\n redirectUri: string\n): void {\n parameters.set(AADServerParamKeys.REDIRECT_URI, redirectUri);\n}\n\n/**\n * add post logout redirectUri\n * @param redirectUri\n */\nexport function addPostLogoutRedirectUri(\n parameters: Map,\n redirectUri: string\n): void {\n parameters.set(AADServerParamKeys.POST_LOGOUT_URI, redirectUri);\n}\n\n/**\n * add id_token_hint to logout request\n * @param idTokenHint\n */\nexport function addIdTokenHint(\n parameters: Map,\n idTokenHint: string\n): void {\n parameters.set(AADServerParamKeys.ID_TOKEN_HINT, idTokenHint);\n}\n\n/**\n * add domain_hint\n * @param domainHint\n */\nexport function addDomainHint(\n parameters: Map,\n domainHint: string\n): void {\n parameters.set(AADServerParamKeys.DOMAIN_HINT, domainHint);\n}\n\n/**\n * add login_hint\n * @param loginHint\n */\nexport function addLoginHint(\n parameters: Map,\n loginHint: string\n): void {\n parameters.set(AADServerParamKeys.LOGIN_HINT, loginHint);\n}\n\n/**\n * Adds the CCS (Cache Credential Service) query parameter for login_hint\n * @param loginHint\n */\nexport function addCcsUpn(\n parameters: Map,\n loginHint: string\n): void {\n parameters.set(HeaderNames.CCS_HEADER, `UPN:${loginHint}`);\n}\n\n/**\n * Adds the CCS (Cache Credential Service) query parameter for account object\n * @param loginHint\n */\nexport function addCcsOid(\n parameters: Map,\n clientInfo: ClientInfo\n): void {\n parameters.set(\n HeaderNames.CCS_HEADER,\n `Oid:${clientInfo.uid}@${clientInfo.utid}`\n );\n}\n\n/**\n * add sid\n * @param sid\n */\nexport function addSid(parameters: Map, sid: string): void {\n parameters.set(AADServerParamKeys.SID, sid);\n}\n\n/**\n * add claims\n * @param claims\n */\nexport function addClaims(\n parameters: Map,\n claims?: string,\n clientCapabilities?: Array\n): void {\n const mergedClaims = addClientCapabilitiesToClaims(\n claims,\n clientCapabilities\n );\n try {\n JSON.parse(mergedClaims);\n } catch (e) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidClaims\n );\n }\n parameters.set(AADServerParamKeys.CLAIMS, mergedClaims);\n}\n\n/**\n * add correlationId\n * @param correlationId\n */\nexport function addCorrelationId(\n parameters: Map,\n correlationId: string\n): void {\n parameters.set(AADServerParamKeys.CLIENT_REQUEST_ID, correlationId);\n}\n\n/**\n * add library info query params\n * @param libraryInfo\n */\nexport function addLibraryInfo(\n parameters: Map,\n libraryInfo: LibraryInfo\n): void {\n // Telemetry Info\n parameters.set(AADServerParamKeys.X_CLIENT_SKU, libraryInfo.sku);\n parameters.set(AADServerParamKeys.X_CLIENT_VER, libraryInfo.version);\n if (libraryInfo.os) {\n parameters.set(AADServerParamKeys.X_CLIENT_OS, libraryInfo.os);\n }\n if (libraryInfo.cpu) {\n parameters.set(AADServerParamKeys.X_CLIENT_CPU, libraryInfo.cpu);\n }\n}\n\n/**\n * Add client telemetry parameters\n * @param appTelemetry\n */\nexport function addApplicationTelemetry(\n parameters: Map,\n appTelemetry: ApplicationTelemetry\n): void {\n if (appTelemetry?.appName) {\n parameters.set(AADServerParamKeys.X_APP_NAME, appTelemetry.appName);\n }\n\n if (appTelemetry?.appVersion) {\n parameters.set(AADServerParamKeys.X_APP_VER, appTelemetry.appVersion);\n }\n}\n\n/**\n * add prompt\n * @param prompt\n */\nexport function addPrompt(\n parameters: Map,\n prompt: string\n): void {\n parameters.set(AADServerParamKeys.PROMPT, prompt);\n}\n\n/**\n * add state\n * @param state\n */\nexport function addState(parameters: Map, state: string): void {\n if (state) {\n parameters.set(AADServerParamKeys.STATE, state);\n }\n}\n\n/**\n * add nonce\n * @param nonce\n */\nexport function addNonce(parameters: Map, nonce: string): void {\n parameters.set(AADServerParamKeys.NONCE, nonce);\n}\n\n/**\n * add code_challenge and code_challenge_method\n * - throw if either of them are not passed\n * @param codeChallenge\n * @param codeChallengeMethod\n */\nexport function addCodeChallengeParams(\n parameters: Map,\n codeChallenge?: string,\n codeChallengeMethod?: string\n): void {\n if (codeChallenge && codeChallengeMethod) {\n parameters.set(AADServerParamKeys.CODE_CHALLENGE, codeChallenge);\n parameters.set(\n AADServerParamKeys.CODE_CHALLENGE_METHOD,\n codeChallengeMethod\n );\n } else {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.pkceParamsMissing\n );\n }\n}\n\n/**\n * add the `authorization_code` passed by the user to exchange for a token\n * @param code\n */\nexport function addAuthorizationCode(\n parameters: Map,\n code: string\n): void {\n parameters.set(AADServerParamKeys.CODE, code);\n}\n\n/**\n * add the `authorization_code` passed by the user to exchange for a token\n * @param code\n */\nexport function addDeviceCode(\n parameters: Map,\n code: string\n): void {\n parameters.set(AADServerParamKeys.DEVICE_CODE, code);\n}\n\n/**\n * add the `refreshToken` passed by the user\n * @param refreshToken\n */\nexport function addRefreshToken(\n parameters: Map,\n refreshToken: string\n): void {\n parameters.set(AADServerParamKeys.REFRESH_TOKEN, refreshToken);\n}\n\n/**\n * add the `code_verifier` passed by the user to exchange for a token\n * @param codeVerifier\n */\nexport function addCodeVerifier(\n parameters: Map,\n codeVerifier: string\n): void {\n parameters.set(AADServerParamKeys.CODE_VERIFIER, codeVerifier);\n}\n\n/**\n * add client_secret\n * @param clientSecret\n */\nexport function addClientSecret(\n parameters: Map,\n clientSecret: string\n): void {\n parameters.set(AADServerParamKeys.CLIENT_SECRET, clientSecret);\n}\n\n/**\n * add clientAssertion for confidential client flows\n * @param clientAssertion\n */\nexport function addClientAssertion(\n parameters: Map,\n clientAssertion: string\n): void {\n if (clientAssertion) {\n parameters.set(AADServerParamKeys.CLIENT_ASSERTION, clientAssertion);\n }\n}\n\n/**\n * add clientAssertionType for confidential client flows\n * @param clientAssertionType\n */\nexport function addClientAssertionType(\n parameters: Map,\n clientAssertionType: string\n): void {\n if (clientAssertionType) {\n parameters.set(\n AADServerParamKeys.CLIENT_ASSERTION_TYPE,\n clientAssertionType\n );\n }\n}\n\n/**\n * add OBO assertion for confidential client flows\n * @param clientAssertion\n */\nexport function addOboAssertion(\n parameters: Map,\n oboAssertion: string\n): void {\n parameters.set(AADServerParamKeys.OBO_ASSERTION, oboAssertion);\n}\n\n/**\n * add grant type\n * @param grantType\n */\nexport function addRequestTokenUse(\n parameters: Map,\n tokenUse: string\n): void {\n parameters.set(AADServerParamKeys.REQUESTED_TOKEN_USE, tokenUse);\n}\n\n/**\n * add grant type\n * @param grantType\n */\nexport function addGrantType(\n parameters: Map,\n grantType: string\n): void {\n parameters.set(AADServerParamKeys.GRANT_TYPE, grantType);\n}\n\n/**\n * add client info\n *\n */\nexport function addClientInfo(parameters: Map): void {\n parameters.set(CLIENT_INFO, \"1\");\n}\n\nexport function addInstanceAware(parameters: Map): void {\n if (!parameters.has(AADServerParamKeys.INSTANCE_AWARE)) {\n parameters.set(AADServerParamKeys.INSTANCE_AWARE, \"true\");\n }\n}\n\n/**\n * add extraQueryParams\n * @param eQParams\n */\nexport function addExtraQueryParameters(\n parameters: Map,\n eQParams: StringDict\n): void {\n Object.entries(eQParams).forEach(([key, value]) => {\n if (!parameters.has(key) && value) {\n parameters.set(key, value);\n }\n });\n}\n\nexport function addClientCapabilitiesToClaims(\n claims?: string,\n clientCapabilities?: Array\n): string {\n let mergedClaims: object;\n\n // Parse provided claims into JSON object or initialize empty object\n if (!claims) {\n mergedClaims = {};\n } else {\n try {\n mergedClaims = JSON.parse(claims);\n } catch (e) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidClaims\n );\n }\n }\n\n if (clientCapabilities && clientCapabilities.length > 0) {\n if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {\n // Add access_token key to claims object\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};\n }\n\n // Add xms_cc claim with provided clientCapabilities to access_token key\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] =\n {\n values: clientCapabilities,\n };\n }\n\n return JSON.stringify(mergedClaims);\n}\n\n/**\n * adds `username` for Password Grant flow\n * @param username\n */\nexport function addUsername(\n parameters: Map,\n username: string\n): void {\n parameters.set(PasswordGrantConstants.username, username);\n}\n\n/**\n * adds `password` for Password Grant flow\n * @param password\n */\nexport function addPassword(\n parameters: Map,\n password: string\n): void {\n parameters.set(PasswordGrantConstants.password, password);\n}\n\n/**\n * add pop_jwk to query params\n * @param cnfString\n */\nexport function addPopToken(\n parameters: Map,\n cnfString: string\n): void {\n if (cnfString) {\n parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.POP);\n parameters.set(AADServerParamKeys.REQ_CNF, cnfString);\n }\n}\n\n/**\n * add SSH JWK and key ID to query params\n */\nexport function addSshJwk(\n parameters: Map,\n sshJwkString: string\n): void {\n if (sshJwkString) {\n parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.SSH);\n parameters.set(AADServerParamKeys.REQ_CNF, sshJwkString);\n }\n}\n\n/**\n * add server telemetry fields\n * @param serverTelemetryManager\n */\nexport function addServerTelemetry(\n parameters: Map,\n serverTelemetryManager: ServerTelemetryManager\n): void {\n parameters.set(\n AADServerParamKeys.X_CLIENT_CURR_TELEM,\n serverTelemetryManager.generateCurrentRequestHeaderValue()\n );\n parameters.set(\n AADServerParamKeys.X_CLIENT_LAST_TELEM,\n serverTelemetryManager.generateLastRequestHeaderValue()\n );\n}\n\n/**\n * Adds parameter that indicates to the server that throttling is supported\n */\nexport function addThrottling(parameters: Map): void {\n parameters.set(\n AADServerParamKeys.X_MS_LIB_CAPABILITY,\n ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE\n );\n}\n\n/**\n * Adds logout_hint parameter for \"silent\" logout which prevent server account picker\n */\nexport function addLogoutHint(\n parameters: Map,\n logoutHint: string\n): void {\n parameters.set(AADServerParamKeys.LOGOUT_HINT, logoutHint);\n}\n\nexport function addBrokerParameters(\n parameters: Map,\n brokerClientId: string,\n brokerRedirectUri: string\n): void {\n if (!parameters.has(AADServerParamKeys.BROKER_CLIENT_ID)) {\n parameters.set(AADServerParamKeys.BROKER_CLIENT_ID, brokerClientId);\n }\n if (!parameters.has(AADServerParamKeys.BROKER_REDIRECT_URI)) {\n parameters.set(\n AADServerParamKeys.BROKER_REDIRECT_URI,\n brokerRedirectUri\n );\n }\n}\n\n/**\n * Add EAR (Encrypted Authorize Response) request parameters\n * @param parameters\n * @param jwk\n */\nexport function addEARParameters(\n parameters: Map,\n jwk: string\n): void {\n parameters.set(AADServerParamKeys.EAR_JWK, encodeURIComponent(jwk));\n\n // ear_jwe_crypto will always have value: {\"alg\":\"dir\",\"enc\":\"A256GCM\"} so we can hardcode this\n const jweCryptoB64Encoded = \"eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0\";\n parameters.set(AADServerParamKeys.EAR_JWE_CRYPTO, jweCryptoB64Encoded);\n}\n\n/**\n * Adds authorize body parameters to the request parameters\n * @param parameters\n * @param bodyParameters\n */\nexport function addPostBodyParameters(\n parameters: Map,\n bodyParameters: StringDict\n): void {\n Object.entries(bodyParameters).forEach(([key, value]) => {\n if (value) {\n parameters.set(key, value);\n }\n });\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Authority types supported by MSAL.\n */\nexport const AuthorityType = {\n Default: 0,\n Adfs: 1,\n Dsts: 2,\n Ciam: 3,\n} as const;\nexport type AuthorityType = (typeof AuthorityType)[keyof typeof AuthorityType];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Tenant Discovery Response which contains the relevant OAuth endpoints and data needed for authentication and authorization.\n */\nexport type OpenIdConfigResponse = {\n authorization_endpoint: string;\n token_endpoint: string;\n end_session_endpoint?: string;\n issuer: string;\n jwks_uri: string;\n};\n\nexport function isOpenIdConfigResponse(response: object): boolean {\n return (\n response.hasOwnProperty(\"authorization_endpoint\") &&\n response.hasOwnProperty(\"token_endpoint\") &&\n response.hasOwnProperty(\"issuer\") &&\n response.hasOwnProperty(\"jwks_uri\")\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata.js\";\n\n/**\n * The OpenID Configuration Endpoint Response type. Used by the authority class to get relevant OAuth endpoints.\n */\nexport type CloudInstanceDiscoveryResponse = {\n tenant_discovery_endpoint: string;\n metadata: Array;\n};\n\nexport function isCloudInstanceDiscoveryResponse(response: object): boolean {\n return (\n response.hasOwnProperty(\"tenant_discovery_endpoint\") &&\n response.hasOwnProperty(\"metadata\")\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * The OpenID Configuration Endpoint Response type. Used by the authority class to get relevant OAuth endpoints.\n */\nexport type CloudInstanceDiscoveryErrorResponse = {\n error: String;\n error_description: String;\n error_codes?: Array;\n timestamp?: String;\n trace_id?: String;\n correlation_id?: String;\n error_uri?: String;\n};\n\nexport function isCloudInstanceDiscoveryErrorResponse(\n response: object\n): boolean {\n return (\n response.hasOwnProperty(\"error\") &&\n response.hasOwnProperty(\"error_description\")\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Logger } from \"../logger/Logger.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\n\n/**\n * Wraps a function with a performance measurement.\n * Usage: invoke(functionToCall, performanceClient, \"EventName\", \"correlationId\")(...argsToPassToFunction)\n * @param callback\n * @param eventName\n * @param logger\n * @param telemetryClient\n * @param correlationId\n * @returns\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const invoke = , U>(\n callback: (...args: T) => U,\n eventName: string,\n logger: Logger,\n telemetryClient?: IPerformanceClient,\n correlationId?: string\n) => {\n return (...args: T): U => {\n logger.trace(`Executing function ${eventName}`);\n const inProgressEvent = telemetryClient?.startMeasurement(\n eventName,\n correlationId\n );\n if (correlationId) {\n // Track number of times this API is called in a single request\n const eventCount = eventName + \"CallCount\";\n telemetryClient?.incrementFields(\n { [eventCount]: 1 },\n correlationId\n );\n }\n try {\n const result = callback(...args);\n inProgressEvent?.end({\n success: true,\n });\n logger.trace(`Returning result from ${eventName}`);\n return result;\n } catch (e) {\n logger.trace(`Error occurred in ${eventName}`);\n try {\n logger.trace(JSON.stringify(e));\n } catch (e) {\n logger.trace(\"Unable to print error message.\");\n }\n inProgressEvent?.end(\n {\n success: false,\n },\n e\n );\n throw e;\n }\n };\n};\n\n/**\n * Wraps an async function with a performance measurement.\n * Usage: invokeAsync(functionToCall, performanceClient, \"EventName\", \"correlationId\")(...argsToPassToFunction)\n * @param callback\n * @param eventName\n * @param logger\n * @param telemetryClient\n * @param correlationId\n * @returns\n * @internal\n *\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const invokeAsync = , U>(\n callback: (...args: T) => Promise,\n eventName: string,\n logger: Logger,\n telemetryClient?: IPerformanceClient,\n correlationId?: string\n) => {\n return (...args: T): Promise => {\n logger.trace(`Executing function ${eventName}`);\n const inProgressEvent = telemetryClient?.startMeasurement(\n eventName,\n correlationId\n );\n if (correlationId) {\n // Track number of times this API is called in a single request\n const eventCount = eventName + \"CallCount\";\n telemetryClient?.incrementFields(\n { [eventCount]: 1 },\n correlationId\n );\n }\n telemetryClient?.setPreQueueTime(eventName, correlationId);\n return callback(...args)\n .then((response) => {\n logger.trace(`Returning result from ${eventName}`);\n inProgressEvent?.end({\n success: true,\n });\n return response;\n })\n .catch((e) => {\n logger.trace(`Error occurred in ${eventName}`);\n try {\n logger.trace(JSON.stringify(e));\n } catch (e) {\n logger.trace(\"Unable to print error message.\");\n }\n inProgressEvent?.end(\n {\n success: false,\n },\n e\n );\n throw e;\n });\n };\n};\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { INetworkModule } from \"../network/INetworkModule.js\";\nimport { NetworkResponse } from \"../network/NetworkResponse.js\";\nimport { IMDSBadResponse } from \"../response/IMDSBadResponse.js\";\nimport {\n Constants,\n HttpStatus,\n RegionDiscoverySources,\n} from \"../utils/Constants.js\";\nimport { RegionDiscoveryMetadata } from \"./RegionDiscoveryMetadata.js\";\nimport { ImdsOptions } from \"./ImdsOptions.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\nimport { Logger } from \"../logger/Logger.js\";\n\nexport class RegionDiscovery {\n // Network interface to make requests with.\n protected networkInterface: INetworkModule;\n // Logger\n private logger: Logger;\n // Performance client\n protected performanceClient: IPerformanceClient | undefined;\n // CorrelationId\n protected correlationId: string | undefined;\n // Options for the IMDS endpoint request\n protected static IMDS_OPTIONS: ImdsOptions = {\n headers: {\n Metadata: \"true\",\n },\n };\n\n constructor(\n networkInterface: INetworkModule,\n logger: Logger,\n performanceClient?: IPerformanceClient,\n correlationId?: string\n ) {\n this.networkInterface = networkInterface;\n this.logger = logger;\n this.performanceClient = performanceClient;\n this.correlationId = correlationId;\n }\n\n /**\n * Detect the region from the application's environment.\n *\n * @returns Promise\n */\n public async detectRegion(\n environmentRegion: string | undefined,\n regionDiscoveryMetadata: RegionDiscoveryMetadata\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RegionDiscoveryDetectRegion,\n this.correlationId\n );\n\n // Initialize auto detected region with the region from the envrionment\n let autodetectedRegionName = environmentRegion;\n\n // Check if a region was detected from the environment, if not, attempt to get the region from IMDS\n if (!autodetectedRegionName) {\n const options = RegionDiscovery.IMDS_OPTIONS;\n\n try {\n const localIMDSVersionResponse = await invokeAsync(\n this.getRegionFromIMDS.bind(this),\n PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(Constants.IMDS_VERSION, options);\n if (localIMDSVersionResponse.status === HttpStatus.SUCCESS) {\n autodetectedRegionName = localIMDSVersionResponse.body;\n regionDiscoveryMetadata.region_source =\n RegionDiscoverySources.IMDS;\n }\n\n // If the response using the local IMDS version failed, try to fetch the current version of IMDS and retry.\n if (\n localIMDSVersionResponse.status === HttpStatus.BAD_REQUEST\n ) {\n const currentIMDSVersion = await invokeAsync(\n this.getCurrentVersion.bind(this),\n PerformanceEvents.RegionDiscoveryGetCurrentVersion,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(options);\n if (!currentIMDSVersion) {\n regionDiscoveryMetadata.region_source =\n RegionDiscoverySources.FAILED_AUTO_DETECTION;\n return null;\n }\n\n const currentIMDSVersionResponse = await invokeAsync(\n this.getRegionFromIMDS.bind(this),\n PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(currentIMDSVersion, options);\n if (\n currentIMDSVersionResponse.status === HttpStatus.SUCCESS\n ) {\n autodetectedRegionName =\n currentIMDSVersionResponse.body;\n regionDiscoveryMetadata.region_source =\n RegionDiscoverySources.IMDS;\n }\n }\n } catch (e) {\n regionDiscoveryMetadata.region_source =\n RegionDiscoverySources.FAILED_AUTO_DETECTION;\n return null;\n }\n } else {\n regionDiscoveryMetadata.region_source =\n RegionDiscoverySources.ENVIRONMENT_VARIABLE;\n }\n\n // If no region was auto detected from the environment or from the IMDS endpoint, mark the attempt as a FAILED_AUTO_DETECTION\n if (!autodetectedRegionName) {\n regionDiscoveryMetadata.region_source =\n RegionDiscoverySources.FAILED_AUTO_DETECTION;\n }\n\n return autodetectedRegionName || null;\n }\n\n /**\n * Make the call to the IMDS endpoint\n *\n * @param imdsEndpointUrl\n * @returns Promise>\n */\n private async getRegionFromIMDS(\n version: string,\n options: ImdsOptions\n ): Promise> {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RegionDiscoveryGetRegionFromIMDS,\n this.correlationId\n );\n return this.networkInterface.sendGetRequestAsync(\n `${Constants.IMDS_ENDPOINT}?api-version=${version}&format=text`,\n options,\n Constants.IMDS_TIMEOUT\n );\n }\n\n /**\n * Get the most recent version of the IMDS endpoint available\n *\n * @returns Promise\n */\n private async getCurrentVersion(\n options: ImdsOptions\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RegionDiscoveryGetCurrentVersion,\n this.correlationId\n );\n try {\n const response =\n await this.networkInterface.sendGetRequestAsync(\n `${Constants.IMDS_ENDPOINT}?format=json`,\n options\n );\n\n // When IMDS endpoint is called without the api version query param, bad request response comes back with latest version.\n if (\n response.status === HttpStatus.BAD_REQUEST &&\n response.body &&\n response.body[\"newest-versions\"] &&\n response.body[\"newest-versions\"].length > 0\n ) {\n return response.body[\"newest-versions\"][0];\n }\n\n return null;\n } catch (e) {\n return null;\n }\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Utility functions for managing date and time operations.\n */\n\n/**\n * return the current time in Unix time (seconds).\n */\nexport function nowSeconds(): number {\n // Date.getTime() returns in milliseconds.\n return Math.round(new Date().getTime() / 1000.0);\n}\n\n/**\n * Converts JS Date object to seconds\n * @param date Date\n */\nexport function toSecondsFromDate(date: Date): number {\n // Convert date to seconds\n return date.getTime() / 1000;\n}\n\n/**\n * Convert seconds to JS Date object. Seconds can be in a number or string format or undefined (will still return a date).\n * @param seconds\n */\nexport function toDateFromSeconds(seconds: number | string | undefined): Date {\n if (seconds) {\n return new Date(Number(seconds) * 1000);\n }\n return new Date();\n}\n\n/**\n * check if a token is expired based on given UTC time in seconds.\n * @param expiresOn\n */\nexport function isTokenExpired(expiresOn: string, offset: number): boolean {\n // check for access token expiry\n const expirationSec = Number(expiresOn) || 0;\n const offsetCurrentTimeSec = nowSeconds() + offset;\n\n // If current time + offset is greater than token expiration time, then token is expired.\n return offsetCurrentTimeSec > expirationSec;\n}\n\n/**\n * Checks if a cache entry is expired based on the last updated time and cache retention days.\n * @param lastUpdatedAt\n * @param cacheRetentionDays\n * @returns\n */\nexport function isCacheExpired(\n lastUpdatedAt: string,\n cacheRetentionDays: number\n): boolean {\n const cacheExpirationTimestamp =\n Number(lastUpdatedAt) + cacheRetentionDays * 24 * 60 * 60 * 1000;\n return Date.now() > cacheExpirationTimestamp;\n}\n\n/**\n * If the current time is earlier than the time that a token was cached at, we must discard the token\n * i.e. The system clock was turned back after acquiring the cached token\n * @param cachedAt\n * @param offset\n */\nexport function wasClockTurnedBack(cachedAt: string): boolean {\n const cachedAtSec = Number(cachedAt);\n\n return cachedAtSec > nowSeconds();\n}\n\n/**\n * Waits for t number of milliseconds\n * @param t number\n * @param value T\n */\nexport function delay(t: number, value?: T): Promise {\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { extractTokenClaims } from \"../../account/AuthToken.js\";\nimport { TokenClaims } from \"../../account/TokenClaims.js\";\nimport { CloudDiscoveryMetadata } from \"../../authority/CloudDiscoveryMetadata.js\";\nimport { OpenIdConfigResponse } from \"../../authority/OpenIdConfigResponse.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../../error/ClientAuthError.js\";\nimport {\n APP_METADATA,\n AUTHORITY_METADATA_CONSTANTS,\n AuthenticationScheme,\n CredentialType,\n SERVER_TELEM_CONSTANTS,\n Separators,\n ThrottlingConstants,\n} from \"../../utils/Constants.js\";\nimport * as TimeUtils from \"../../utils/TimeUtils.js\";\nimport { AccessTokenEntity } from \"../entities/AccessTokenEntity.js\";\nimport { AppMetadataEntity } from \"../entities/AppMetadataEntity.js\";\nimport { AuthorityMetadataEntity } from \"../entities/AuthorityMetadataEntity.js\";\nimport { CredentialEntity } from \"../entities/CredentialEntity.js\";\nimport { IdTokenEntity } from \"../entities/IdTokenEntity.js\";\nimport { RefreshTokenEntity } from \"../entities/RefreshTokenEntity.js\";\n\n/**\n * Create IdTokenEntity\n * @param homeAccountId\n * @param authenticationResult\n * @param clientId\n * @param authority\n */\nexport function createIdTokenEntity(\n homeAccountId: string,\n environment: string,\n idToken: string,\n clientId: string,\n tenantId: string\n): IdTokenEntity {\n const idTokenEntity: IdTokenEntity = {\n credentialType: CredentialType.ID_TOKEN,\n homeAccountId: homeAccountId,\n environment: environment,\n clientId: clientId,\n secret: idToken,\n realm: tenantId,\n lastUpdatedAt: Date.now().toString(), // Set the last updated time to now\n };\n\n return idTokenEntity;\n}\n\n/**\n * Create AccessTokenEntity\n * @param homeAccountId\n * @param environment\n * @param accessToken\n * @param clientId\n * @param tenantId\n * @param scopes\n * @param expiresOn\n * @param extExpiresOn\n */\nexport function createAccessTokenEntity(\n homeAccountId: string,\n environment: string,\n accessToken: string,\n clientId: string,\n tenantId: string,\n scopes: string,\n expiresOn: number,\n extExpiresOn: number,\n base64Decode: (input: string) => string,\n refreshOn?: number,\n tokenType?: AuthenticationScheme,\n userAssertionHash?: string,\n keyId?: string,\n requestedClaims?: string,\n requestedClaimsHash?: string\n): AccessTokenEntity {\n const atEntity: AccessTokenEntity = {\n homeAccountId: homeAccountId,\n credentialType: CredentialType.ACCESS_TOKEN,\n secret: accessToken,\n cachedAt: TimeUtils.nowSeconds().toString(),\n expiresOn: expiresOn.toString(),\n extendedExpiresOn: extExpiresOn.toString(),\n environment: environment,\n clientId: clientId,\n realm: tenantId,\n target: scopes,\n tokenType: tokenType || AuthenticationScheme.BEARER,\n lastUpdatedAt: Date.now().toString(), // Set the last updated time to now\n };\n\n if (userAssertionHash) {\n atEntity.userAssertionHash = userAssertionHash;\n }\n\n if (refreshOn) {\n atEntity.refreshOn = refreshOn.toString();\n }\n\n if (requestedClaims) {\n atEntity.requestedClaims = requestedClaims;\n atEntity.requestedClaimsHash = requestedClaimsHash;\n }\n\n /*\n * Create Access Token With Auth Scheme instead of regular access token\n * Cast to lower to handle \"bearer\" from ADFS\n */\n if (\n atEntity.tokenType?.toLowerCase() !==\n AuthenticationScheme.BEARER.toLowerCase()\n ) {\n atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\n switch (atEntity.tokenType) {\n case AuthenticationScheme.POP:\n // Make sure keyId is present and add it to credential\n const tokenClaims: TokenClaims | null = extractTokenClaims(\n accessToken,\n base64Decode\n );\n if (!tokenClaims?.cnf?.kid) {\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt\n );\n }\n atEntity.keyId = tokenClaims.cnf.kid;\n break;\n case AuthenticationScheme.SSH:\n atEntity.keyId = keyId;\n }\n }\n\n return atEntity;\n}\n\n/**\n * Create RefreshTokenEntity\n * @param homeAccountId\n * @param authenticationResult\n * @param clientId\n * @param authority\n */\nexport function createRefreshTokenEntity(\n homeAccountId: string,\n environment: string,\n refreshToken: string,\n clientId: string,\n familyId?: string,\n userAssertionHash?: string,\n expiresOn?: number\n): RefreshTokenEntity {\n const rtEntity: RefreshTokenEntity = {\n credentialType: CredentialType.REFRESH_TOKEN,\n homeAccountId: homeAccountId,\n environment: environment,\n clientId: clientId,\n secret: refreshToken,\n lastUpdatedAt: Date.now().toString(),\n };\n\n if (userAssertionHash) {\n rtEntity.userAssertionHash = userAssertionHash;\n }\n\n if (familyId) {\n rtEntity.familyId = familyId;\n }\n\n if (expiresOn) {\n rtEntity.expiresOn = expiresOn.toString();\n }\n\n return rtEntity;\n}\n\nexport function isCredentialEntity(entity: object): entity is CredentialEntity {\n return (\n entity.hasOwnProperty(\"homeAccountId\") &&\n entity.hasOwnProperty(\"environment\") &&\n entity.hasOwnProperty(\"credentialType\") &&\n entity.hasOwnProperty(\"clientId\") &&\n entity.hasOwnProperty(\"secret\")\n );\n}\n\n/**\n * Validates an entity: checks for all expected params\n * @param entity\n */\nexport function isAccessTokenEntity(\n entity: object\n): entity is AccessTokenEntity {\n if (!entity) {\n return false;\n }\n\n return (\n isCredentialEntity(entity) &&\n entity.hasOwnProperty(\"realm\") &&\n entity.hasOwnProperty(\"target\") &&\n (entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN ||\n entity[\"credentialType\"] ===\n CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)\n );\n}\n\n/**\n * Validates an entity: checks for all expected params\n * @param entity\n */\nexport function isIdTokenEntity(entity: object): entity is IdTokenEntity {\n if (!entity) {\n return false;\n }\n\n return (\n isCredentialEntity(entity) &&\n entity.hasOwnProperty(\"realm\") &&\n entity[\"credentialType\"] === CredentialType.ID_TOKEN\n );\n}\n\n/**\n * Validates an entity: checks for all expected params\n * @param entity\n */\nexport function isRefreshTokenEntity(\n entity: object\n): entity is RefreshTokenEntity {\n if (!entity) {\n return false;\n }\n\n return (\n isCredentialEntity(entity) &&\n entity[\"credentialType\"] === CredentialType.REFRESH_TOKEN\n );\n}\n\n/**\n * validates if a given cache entry is \"Telemetry\", parses \n * @param key\n * @param entity\n */\nexport function isServerTelemetryEntity(key: string, entity?: object): boolean {\n const validateKey: boolean =\n key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0;\n let validateEntity: boolean = true;\n\n if (entity) {\n validateEntity =\n entity.hasOwnProperty(\"failedRequests\") &&\n entity.hasOwnProperty(\"errors\") &&\n entity.hasOwnProperty(\"cacheHits\");\n }\n\n return validateKey && validateEntity;\n}\n\n/**\n * validates if a given cache entry is \"Throttling\", parses \n * @param key\n * @param entity\n */\nexport function isThrottlingEntity(key: string, entity?: object): boolean {\n let validateKey: boolean = false;\n if (key) {\n validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0;\n }\n\n let validateEntity: boolean = true;\n if (entity) {\n validateEntity = entity.hasOwnProperty(\"throttleTime\");\n }\n\n return validateKey && validateEntity;\n}\n\n/**\n * Generate AppMetadata Cache Key as per the schema: appmetadata--\n */\nexport function generateAppMetadataKey({\n environment,\n clientId,\n}: AppMetadataEntity): string {\n const appMetaDataKeyArray: Array = [\n APP_METADATA,\n environment,\n clientId,\n ];\n return appMetaDataKeyArray\n .join(Separators.CACHE_KEY_SEPARATOR)\n .toLowerCase();\n}\n\n/*\n * Validates an entity: checks for all expected params\n * @param entity\n */\nexport function isAppMetadataEntity(key: string, entity: object): boolean {\n if (!entity) {\n return false;\n }\n\n return (\n key.indexOf(APP_METADATA) === 0 &&\n entity.hasOwnProperty(\"clientId\") &&\n entity.hasOwnProperty(\"environment\")\n );\n}\n\n/**\n * Validates an entity: checks for all expected params\n * @param entity\n */\nexport function isAuthorityMetadataEntity(\n key: string,\n entity: object\n): boolean {\n if (!entity) {\n return false;\n }\n\n return (\n key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 &&\n entity.hasOwnProperty(\"aliases\") &&\n entity.hasOwnProperty(\"preferred_cache\") &&\n entity.hasOwnProperty(\"preferred_network\") &&\n entity.hasOwnProperty(\"canonical_authority\") &&\n entity.hasOwnProperty(\"authorization_endpoint\") &&\n entity.hasOwnProperty(\"token_endpoint\") &&\n entity.hasOwnProperty(\"issuer\") &&\n entity.hasOwnProperty(\"aliasesFromNetwork\") &&\n entity.hasOwnProperty(\"endpointsFromNetwork\") &&\n entity.hasOwnProperty(\"expiresAt\") &&\n entity.hasOwnProperty(\"jwks_uri\")\n );\n}\n\n/**\n * Reset the exiresAt value\n */\nexport function generateAuthorityMetadataExpiresAt(): number {\n return (\n TimeUtils.nowSeconds() +\n AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS\n );\n}\n\nexport function updateAuthorityEndpointMetadata(\n authorityMetadata: AuthorityMetadataEntity,\n updatedValues: OpenIdConfigResponse,\n fromNetwork: boolean\n): void {\n authorityMetadata.authorization_endpoint =\n updatedValues.authorization_endpoint;\n authorityMetadata.token_endpoint = updatedValues.token_endpoint;\n authorityMetadata.end_session_endpoint = updatedValues.end_session_endpoint;\n authorityMetadata.issuer = updatedValues.issuer;\n authorityMetadata.endpointsFromNetwork = fromNetwork;\n authorityMetadata.jwks_uri = updatedValues.jwks_uri;\n}\n\nexport function updateCloudDiscoveryMetadata(\n authorityMetadata: AuthorityMetadataEntity,\n updatedValues: CloudDiscoveryMetadata,\n fromNetwork: boolean\n): void {\n authorityMetadata.aliases = updatedValues.aliases;\n authorityMetadata.preferred_cache = updatedValues.preferred_cache;\n authorityMetadata.preferred_network = updatedValues.preferred_network;\n authorityMetadata.aliasesFromNetwork = fromNetwork;\n}\n\n/**\n * Returns whether or not the data needs to be refreshed\n */\nexport function isAuthorityMetadataExpired(\n metadata: AuthorityMetadataEntity\n): boolean {\n return metadata.expiresAt <= TimeUtils.nowSeconds();\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorityType } from \"./AuthorityType.js\";\nimport {\n isOpenIdConfigResponse,\n OpenIdConfigResponse,\n} from \"./OpenIdConfigResponse.js\";\nimport { UrlString } from \"../url/UrlString.js\";\nimport { IUri } from \"../url/IUri.js\";\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../error/ClientAuthError.js\";\nimport { INetworkModule } from \"../network/INetworkModule.js\";\nimport {\n AADAuthorityConstants,\n AuthorityMetadataSource,\n Constants,\n RegionDiscoveryOutcomes,\n} from \"../utils/Constants.js\";\nimport {\n EndpointMetadata,\n getCloudDiscoveryMetadataFromHardcodedValues,\n getCloudDiscoveryMetadataFromNetworkResponse,\n InstanceDiscoveryMetadataAliases,\n} from \"./AuthorityMetadata.js\";\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport { ProtocolMode } from \"./ProtocolMode.js\";\nimport { ICacheManager } from \"../cache/interface/ICacheManager.js\";\nimport { AuthorityMetadataEntity } from \"../cache/entities/AuthorityMetadataEntity.js\";\nimport {\n AuthorityOptions,\n AzureCloudInstance,\n StaticAuthorityOptions,\n} from \"./AuthorityOptions.js\";\nimport {\n CloudInstanceDiscoveryResponse,\n isCloudInstanceDiscoveryResponse,\n} from \"./CloudInstanceDiscoveryResponse.js\";\nimport {\n CloudInstanceDiscoveryErrorResponse,\n isCloudInstanceDiscoveryErrorResponse,\n} from \"./CloudInstanceDiscoveryErrorResponse.js\";\nimport { CloudDiscoveryMetadata } from \"./CloudDiscoveryMetadata.js\";\nimport { RegionDiscovery } from \"./RegionDiscovery.js\";\nimport { RegionDiscoveryMetadata } from \"./RegionDiscoveryMetadata.js\";\nimport { ImdsOptions } from \"./ImdsOptions.js\";\nimport type { AzureCloudOptions } from \"../config/ClientConfiguration.js\";\nimport { Logger } from \"../logger/Logger.js\";\nimport { AuthError } from \"../error/AuthError.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\nimport * as CacheHelpers from \"../cache/utils/CacheHelpers.js\";\n\n/**\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\n * endpoint. It will store the pertinent config data in this object for use during token calls.\n * @internal\n */\nexport class Authority {\n // Canonical authority url string\n private _canonicalAuthority: UrlString;\n // Canonicaly authority url components\n private _canonicalAuthorityUrlComponents: IUri | null;\n // Network interface to make requests with.\n protected networkInterface: INetworkModule;\n // Cache Manager to cache network responses\n protected cacheManager: ICacheManager;\n // Protocol mode to construct endpoints\n private authorityOptions: AuthorityOptions;\n // Authority metadata\n private metadata: AuthorityMetadataEntity;\n // Region discovery service\n private regionDiscovery: RegionDiscovery;\n // Region discovery metadata\n public regionDiscoveryMetadata: RegionDiscoveryMetadata;\n // Logger object\n private logger: Logger;\n // Performance client\n protected performanceClient: IPerformanceClient | undefined;\n // Correlation Id\n protected correlationId: string;\n // Indicates if the authority is fake, for the purpose of a Managed Identity Application\n private managedIdentity: boolean;\n // Reserved tenant domain names that will not be replaced with tenant id\n private static reservedTenantDomains: Set = new Set([\n \"{tenant}\",\n \"{tenantid}\",\n AADAuthorityConstants.COMMON,\n AADAuthorityConstants.CONSUMERS,\n AADAuthorityConstants.ORGANIZATIONS,\n ]);\n\n constructor(\n authority: string,\n networkInterface: INetworkModule,\n cacheManager: ICacheManager,\n authorityOptions: AuthorityOptions,\n logger: Logger,\n correlationId: string,\n performanceClient?: IPerformanceClient,\n managedIdentity?: boolean\n ) {\n this.canonicalAuthority = authority;\n this._canonicalAuthority.validateAsUri();\n this.networkInterface = networkInterface;\n this.cacheManager = cacheManager;\n this.authorityOptions = authorityOptions;\n this.regionDiscoveryMetadata = {\n region_used: undefined,\n region_source: undefined,\n region_outcome: undefined,\n };\n this.logger = logger;\n this.performanceClient = performanceClient;\n this.correlationId = correlationId;\n this.managedIdentity = managedIdentity || false;\n this.regionDiscovery = new RegionDiscovery(\n networkInterface,\n this.logger,\n this.performanceClient,\n this.correlationId\n );\n }\n\n /**\n * Get {@link AuthorityType}\n * @param authorityUri {@link IUri}\n * @private\n */\n private getAuthorityType(authorityUri: IUri): AuthorityType {\n // CIAM auth url pattern is being standardized as: .ciamlogin.com\n if (authorityUri.HostNameAndPort.endsWith(Constants.CIAM_AUTH_URL)) {\n return AuthorityType.Ciam;\n }\n\n const pathSegments = authorityUri.PathSegments;\n if (pathSegments.length) {\n switch (pathSegments[0].toLowerCase()) {\n case Constants.ADFS:\n return AuthorityType.Adfs;\n case Constants.DSTS:\n return AuthorityType.Dsts;\n default:\n break;\n }\n }\n return AuthorityType.Default;\n }\n\n // See above for AuthorityType\n public get authorityType(): AuthorityType {\n return this.getAuthorityType(this.canonicalAuthorityUrlComponents);\n }\n\n /**\n * ProtocolMode enum representing the way endpoints are constructed.\n */\n public get protocolMode(): ProtocolMode {\n return this.authorityOptions.protocolMode;\n }\n\n /**\n * Returns authorityOptions which can be used to reinstantiate a new authority instance\n */\n public get options(): AuthorityOptions {\n return this.authorityOptions;\n }\n\n /**\n * A URL that is the authority set by the developer\n */\n public get canonicalAuthority(): string {\n return this._canonicalAuthority.urlString;\n }\n\n /**\n * Sets canonical authority.\n */\n public set canonicalAuthority(url: string) {\n this._canonicalAuthority = new UrlString(url);\n this._canonicalAuthority.validateAsUri();\n this._canonicalAuthorityUrlComponents = null;\n }\n\n /**\n * Get authority components.\n */\n public get canonicalAuthorityUrlComponents(): IUri {\n if (!this._canonicalAuthorityUrlComponents) {\n this._canonicalAuthorityUrlComponents =\n this._canonicalAuthority.getUrlComponents();\n }\n\n return this._canonicalAuthorityUrlComponents;\n }\n\n /**\n * Get hostname and port i.e. login.microsoftonline.com\n */\n public get hostnameAndPort(): string {\n return this.canonicalAuthorityUrlComponents.HostNameAndPort.toLowerCase();\n }\n\n /**\n * Get tenant for authority.\n */\n public get tenant(): string {\n return this.canonicalAuthorityUrlComponents.PathSegments[0];\n }\n\n /**\n * OAuth /authorize endpoint for requests\n */\n public get authorizationEndpoint(): string {\n if (this.discoveryComplete()) {\n return this.replacePath(this.metadata.authorization_endpoint);\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n /**\n * OAuth /token endpoint for requests\n */\n public get tokenEndpoint(): string {\n if (this.discoveryComplete()) {\n return this.replacePath(this.metadata.token_endpoint);\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n public get deviceCodeEndpoint(): string {\n if (this.discoveryComplete()) {\n return this.replacePath(\n this.metadata.token_endpoint.replace(\"/token\", \"/devicecode\")\n );\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n /**\n * OAuth logout endpoint for requests\n */\n public get endSessionEndpoint(): string {\n if (this.discoveryComplete()) {\n // ROPC policies may not have end_session_endpoint set\n if (!this.metadata.end_session_endpoint) {\n throw createClientAuthError(\n ClientAuthErrorCodes.endSessionEndpointNotSupported\n );\n }\n return this.replacePath(this.metadata.end_session_endpoint);\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n /**\n * OAuth issuer for requests\n */\n public get selfSignedJwtAudience(): string {\n if (this.discoveryComplete()) {\n return this.replacePath(this.metadata.issuer);\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n /**\n * Jwks_uri for token signing keys\n */\n public get jwksUri(): string {\n if (this.discoveryComplete()) {\n return this.replacePath(this.metadata.jwks_uri);\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n /**\n * Returns a flag indicating that tenant name can be replaced in authority {@link IUri}\n * @param authorityUri {@link IUri}\n * @private\n */\n private canReplaceTenant(authorityUri: IUri): boolean {\n return (\n authorityUri.PathSegments.length === 1 &&\n !Authority.reservedTenantDomains.has(\n authorityUri.PathSegments[0]\n ) &&\n this.getAuthorityType(authorityUri) === AuthorityType.Default &&\n this.protocolMode !== ProtocolMode.OIDC\n );\n }\n\n /**\n * Replaces tenant in url path with current tenant. Defaults to common.\n * @param urlString\n */\n private replaceTenant(urlString: string): string {\n return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\n }\n\n /**\n * Replaces path such as tenant or policy with the current tenant or policy.\n * @param urlString\n */\n private replacePath(urlString: string): string {\n let endpoint = urlString;\n const cachedAuthorityUrl = new UrlString(\n this.metadata.canonical_authority\n );\n const cachedAuthorityUrlComponents =\n cachedAuthorityUrl.getUrlComponents();\n const cachedAuthorityParts = cachedAuthorityUrlComponents.PathSegments;\n const currentAuthorityParts =\n this.canonicalAuthorityUrlComponents.PathSegments;\n\n currentAuthorityParts.forEach((currentPart, index) => {\n let cachedPart = cachedAuthorityParts[index];\n if (\n index === 0 &&\n this.canReplaceTenant(cachedAuthorityUrlComponents)\n ) {\n const tenantId = new UrlString(\n this.metadata.authorization_endpoint\n ).getUrlComponents().PathSegments[0];\n /**\n * Check if AAD canonical authority contains tenant domain name, for example \"testdomain.onmicrosoft.com\",\n * by comparing its first path segment to the corresponding authorization endpoint path segment, which is\n * always resolved with tenant id by OIDC.\n */\n if (cachedPart !== tenantId) {\n this.logger.verbose(\n `Replacing tenant domain name ${cachedPart} with id ${tenantId}`\n );\n cachedPart = tenantId;\n }\n }\n if (currentPart !== cachedPart) {\n endpoint = endpoint.replace(\n `/${cachedPart}/`,\n `/${currentPart}/`\n );\n }\n });\n\n return this.replaceTenant(endpoint);\n }\n\n /**\n * The default open id configuration endpoint for any canonical authority.\n */\n protected get defaultOpenIdConfigurationEndpoint(): string {\n const canonicalAuthorityHost = this.hostnameAndPort;\n if (\n this.canonicalAuthority.endsWith(\"v2.0/\") ||\n this.authorityType === AuthorityType.Adfs ||\n (this.protocolMode === ProtocolMode.OIDC &&\n !this.isAliasOfKnownMicrosoftAuthority(canonicalAuthorityHost))\n ) {\n return `${this.canonicalAuthority}.well-known/openid-configuration`;\n }\n return `${this.canonicalAuthority}v2.0/.well-known/openid-configuration`;\n }\n\n /**\n * Boolean that returns whether or not tenant discovery has been completed.\n */\n discoveryComplete(): boolean {\n return !!this.metadata;\n }\n\n /**\n * Perform endpoint discovery to discover aliases, preferred_cache, preferred_network\n * and the /authorize, /token and logout endpoints.\n */\n public async resolveEndpointsAsync(): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityResolveEndpointsAsync,\n this.correlationId\n );\n\n const metadataEntity = this.getCurrentMetadataEntity();\n\n const cloudDiscoverySource = await invokeAsync(\n this.updateCloudDiscoveryMetadata.bind(this),\n PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(metadataEntity);\n this.canonicalAuthority = this.canonicalAuthority.replace(\n this.hostnameAndPort,\n metadataEntity.preferred_network\n );\n const endpointSource = await invokeAsync(\n this.updateEndpointMetadata.bind(this),\n PerformanceEvents.AuthorityUpdateEndpointMetadata,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(metadataEntity);\n this.updateCachedMetadata(metadataEntity, cloudDiscoverySource, {\n source: endpointSource,\n });\n this.performanceClient?.addFields(\n {\n cloudDiscoverySource: cloudDiscoverySource,\n authorityEndpointSource: endpointSource,\n },\n this.correlationId\n );\n }\n\n /**\n * Returns metadata entity from cache if it exists, otherwiser returns a new metadata entity built\n * from the configured canonical authority\n * @returns\n */\n private getCurrentMetadataEntity(): AuthorityMetadataEntity {\n let metadataEntity: AuthorityMetadataEntity | null =\n this.cacheManager.getAuthorityMetadataByAlias(this.hostnameAndPort);\n\n if (!metadataEntity) {\n metadataEntity = {\n aliases: [],\n preferred_cache: this.hostnameAndPort,\n preferred_network: this.hostnameAndPort,\n canonical_authority: this.canonicalAuthority,\n authorization_endpoint: \"\",\n token_endpoint: \"\",\n end_session_endpoint: \"\",\n issuer: \"\",\n aliasesFromNetwork: false,\n endpointsFromNetwork: false,\n expiresAt: CacheHelpers.generateAuthorityMetadataExpiresAt(),\n jwks_uri: \"\",\n };\n }\n return metadataEntity;\n }\n\n /**\n * Updates cached metadata based on metadata source and sets the instance's metadata\n * property to the same value\n * @param metadataEntity\n * @param cloudDiscoverySource\n * @param endpointMetadataResult\n */\n private updateCachedMetadata(\n metadataEntity: AuthorityMetadataEntity,\n cloudDiscoverySource: AuthorityMetadataSource | null,\n endpointMetadataResult: {\n source: AuthorityMetadataSource;\n metadata?: OpenIdConfigResponse;\n } | null\n ): void {\n if (\n cloudDiscoverySource !== AuthorityMetadataSource.CACHE &&\n endpointMetadataResult?.source !== AuthorityMetadataSource.CACHE\n ) {\n // Reset the expiration time unless both values came from a successful cache lookup\n metadataEntity.expiresAt =\n CacheHelpers.generateAuthorityMetadataExpiresAt();\n metadataEntity.canonical_authority = this.canonicalAuthority;\n }\n\n const cacheKey = this.cacheManager.generateAuthorityMetadataCacheKey(\n metadataEntity.preferred_cache\n );\n this.cacheManager.setAuthorityMetadata(cacheKey, metadataEntity);\n this.metadata = metadataEntity;\n }\n\n /**\n * Update AuthorityMetadataEntity with new endpoints and return where the information came from\n * @param metadataEntity\n */\n private async updateEndpointMetadata(\n metadataEntity: AuthorityMetadataEntity\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityUpdateEndpointMetadata,\n this.correlationId\n );\n\n const localMetadata =\n this.updateEndpointMetadataFromLocalSources(metadataEntity);\n\n // Further update may be required for hardcoded metadata if regional metadata is preferred\n if (localMetadata) {\n if (\n localMetadata.source ===\n AuthorityMetadataSource.HARDCODED_VALUES\n ) {\n // If the user prefers to use an azure region replace the global endpoints with regional information.\n if (\n this.authorityOptions.azureRegionConfiguration?.azureRegion\n ) {\n if (localMetadata.metadata) {\n const hardcodedMetadata = await invokeAsync(\n this.updateMetadataWithRegionalInformation.bind(\n this\n ),\n PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(localMetadata.metadata);\n CacheHelpers.updateAuthorityEndpointMetadata(\n metadataEntity,\n hardcodedMetadata,\n false\n );\n metadataEntity.canonical_authority =\n this.canonicalAuthority;\n }\n }\n }\n return localMetadata.source;\n }\n\n // Get metadata from network if local sources aren't available\n let metadata = await invokeAsync(\n this.getEndpointMetadataFromNetwork.bind(this),\n PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,\n this.logger,\n this.performanceClient,\n this.correlationId\n )();\n if (metadata) {\n // If the user prefers to use an azure region replace the global endpoints with regional information.\n if (this.authorityOptions.azureRegionConfiguration?.azureRegion) {\n metadata = await invokeAsync(\n this.updateMetadataWithRegionalInformation.bind(this),\n PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(metadata);\n }\n\n CacheHelpers.updateAuthorityEndpointMetadata(\n metadataEntity,\n metadata,\n true\n );\n return AuthorityMetadataSource.NETWORK;\n } else {\n // Metadata could not be obtained from the config, cache, network or hardcoded values\n throw createClientAuthError(\n ClientAuthErrorCodes.openIdConfigError,\n this.defaultOpenIdConfigurationEndpoint\n );\n }\n }\n\n /**\n * Updates endpoint metadata from local sources and returns where the information was retrieved from and the metadata config\n * response if the source is hardcoded metadata\n * @param metadataEntity\n * @returns\n */\n private updateEndpointMetadataFromLocalSources(\n metadataEntity: AuthorityMetadataEntity\n ): {\n source: AuthorityMetadataSource;\n metadata?: OpenIdConfigResponse;\n } | null {\n this.logger.verbose(\n \"Attempting to get endpoint metadata from authority configuration\"\n );\n const configMetadata = this.getEndpointMetadataFromConfig();\n if (configMetadata) {\n this.logger.verbose(\n \"Found endpoint metadata in authority configuration\"\n );\n CacheHelpers.updateAuthorityEndpointMetadata(\n metadataEntity,\n configMetadata,\n false\n );\n return {\n source: AuthorityMetadataSource.CONFIG,\n };\n }\n\n this.logger.verbose(\n \"Did not find endpoint metadata in the config... Attempting to get endpoint metadata from the hardcoded values.\"\n );\n\n // skipAuthorityMetadataCache is used to bypass hardcoded authority metadata and force a network metadata cache lookup and network metadata request if no cached response is available.\n if (this.authorityOptions.skipAuthorityMetadataCache) {\n this.logger.verbose(\n \"Skipping hardcoded metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get endpoint metadata from the network metadata cache.\"\n );\n } else {\n const hardcodedMetadata =\n this.getEndpointMetadataFromHardcodedValues();\n if (hardcodedMetadata) {\n CacheHelpers.updateAuthorityEndpointMetadata(\n metadataEntity,\n hardcodedMetadata,\n false\n );\n return {\n source: AuthorityMetadataSource.HARDCODED_VALUES,\n metadata: hardcodedMetadata,\n };\n } else {\n this.logger.verbose(\n \"Did not find endpoint metadata in hardcoded values... Attempting to get endpoint metadata from the network metadata cache.\"\n );\n }\n }\n\n // Check cached metadata entity expiration status\n const metadataEntityExpired =\n CacheHelpers.isAuthorityMetadataExpired(metadataEntity);\n if (\n this.isAuthoritySameType(metadataEntity) &&\n metadataEntity.endpointsFromNetwork &&\n !metadataEntityExpired\n ) {\n // No need to update\n this.logger.verbose(\"Found endpoint metadata in the cache.\");\n return { source: AuthorityMetadataSource.CACHE };\n } else if (metadataEntityExpired) {\n this.logger.verbose(\"The metadata entity is expired.\");\n }\n\n return null;\n }\n\n /**\n * Compares the number of url components after the domain to determine if the cached\n * authority metadata can be used for the requested authority. Protects against same domain different\n * authority such as login.microsoftonline.com/tenant and login.microsoftonline.com/tfp/tenant/policy\n * @param metadataEntity\n */\n private isAuthoritySameType(\n metadataEntity: AuthorityMetadataEntity\n ): boolean {\n const cachedAuthorityUrl = new UrlString(\n metadataEntity.canonical_authority\n );\n const cachedParts = cachedAuthorityUrl.getUrlComponents().PathSegments;\n\n return (\n cachedParts.length ===\n this.canonicalAuthorityUrlComponents.PathSegments.length\n );\n }\n\n /**\n * Parse authorityMetadata config option\n */\n private getEndpointMetadataFromConfig(): OpenIdConfigResponse | null {\n if (this.authorityOptions.authorityMetadata) {\n try {\n return JSON.parse(\n this.authorityOptions.authorityMetadata\n ) as OpenIdConfigResponse;\n } catch (e) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidAuthorityMetadata\n );\n }\n }\n\n return null;\n }\n\n /**\n * Gets OAuth endpoints from the given OpenID configuration endpoint.\n *\n * @param hasHardcodedMetadata boolean\n */\n private async getEndpointMetadataFromNetwork(): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityGetEndpointMetadataFromNetwork,\n this.correlationId\n );\n\n const options: ImdsOptions = {};\n\n /*\n * TODO: Add a timeout if the authority exists in our library's\n * hardcoded list of metadata\n */\n\n const openIdConfigurationEndpoint =\n this.defaultOpenIdConfigurationEndpoint;\n this.logger.verbose(\n `Authority.getEndpointMetadataFromNetwork: attempting to retrieve OAuth endpoints from ${openIdConfigurationEndpoint}`\n );\n\n try {\n const response =\n await this.networkInterface.sendGetRequestAsync(\n openIdConfigurationEndpoint,\n options\n );\n const isValidResponse = isOpenIdConfigResponse(response.body);\n if (isValidResponse) {\n return response.body;\n } else {\n this.logger.verbose(\n `Authority.getEndpointMetadataFromNetwork: could not parse response as OpenID configuration`\n );\n return null;\n }\n } catch (e) {\n this.logger.verbose(\n `Authority.getEndpointMetadataFromNetwork: ${e}`\n );\n return null;\n }\n }\n\n /**\n * Get OAuth endpoints for common authorities.\n */\n private getEndpointMetadataFromHardcodedValues(): OpenIdConfigResponse | null {\n if (this.hostnameAndPort in EndpointMetadata) {\n return EndpointMetadata[this.hostnameAndPort];\n }\n\n return null;\n }\n\n /**\n * Update the retrieved metadata with regional information.\n * User selected Azure region will be used if configured.\n */\n private async updateMetadataWithRegionalInformation(\n metadata: OpenIdConfigResponse\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityUpdateMetadataWithRegionalInformation,\n this.correlationId\n );\n\n const userConfiguredAzureRegion =\n this.authorityOptions.azureRegionConfiguration?.azureRegion;\n\n if (userConfiguredAzureRegion) {\n if (\n userConfiguredAzureRegion !==\n Constants.AZURE_REGION_AUTO_DISCOVER_FLAG\n ) {\n this.regionDiscoveryMetadata.region_outcome =\n RegionDiscoveryOutcomes.CONFIGURED_NO_AUTO_DETECTION;\n this.regionDiscoveryMetadata.region_used =\n userConfiguredAzureRegion;\n return Authority.replaceWithRegionalInformation(\n metadata,\n userConfiguredAzureRegion\n );\n }\n\n const autodetectedRegionName = await invokeAsync(\n this.regionDiscovery.detectRegion.bind(this.regionDiscovery),\n PerformanceEvents.RegionDiscoveryDetectRegion,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(\n this.authorityOptions.azureRegionConfiguration\n ?.environmentRegion,\n this.regionDiscoveryMetadata\n );\n\n if (autodetectedRegionName) {\n this.regionDiscoveryMetadata.region_outcome =\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_SUCCESSFUL;\n this.regionDiscoveryMetadata.region_used =\n autodetectedRegionName;\n return Authority.replaceWithRegionalInformation(\n metadata,\n autodetectedRegionName\n );\n }\n\n this.regionDiscoveryMetadata.region_outcome =\n RegionDiscoveryOutcomes.AUTO_DETECTION_REQUESTED_FAILED;\n }\n\n return metadata;\n }\n\n /**\n * Updates the AuthorityMetadataEntity with new aliases, preferred_network and preferred_cache\n * and returns where the information was retrieved from\n * @param metadataEntity\n * @returns AuthorityMetadataSource\n */\n private async updateCloudDiscoveryMetadata(\n metadataEntity: AuthorityMetadataEntity\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityUpdateCloudDiscoveryMetadata,\n this.correlationId\n );\n const localMetadataSource =\n this.updateCloudDiscoveryMetadataFromLocalSources(metadataEntity);\n if (localMetadataSource) {\n return localMetadataSource;\n }\n\n // Fallback to network as metadata source\n const metadata = await invokeAsync(\n this.getCloudDiscoveryMetadataFromNetwork.bind(this),\n PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,\n this.logger,\n this.performanceClient,\n this.correlationId\n )();\n\n if (metadata) {\n CacheHelpers.updateCloudDiscoveryMetadata(\n metadataEntity,\n metadata,\n true\n );\n return AuthorityMetadataSource.NETWORK;\n }\n\n // Metadata could not be obtained from the config, cache, network or hardcoded values\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.untrustedAuthority\n );\n }\n\n private updateCloudDiscoveryMetadataFromLocalSources(\n metadataEntity: AuthorityMetadataEntity\n ): AuthorityMetadataSource | null {\n this.logger.verbose(\n \"Attempting to get cloud discovery metadata from authority configuration\"\n );\n this.logger.verbosePii(\n `Known Authorities: ${\n this.authorityOptions.knownAuthorities ||\n Constants.NOT_APPLICABLE\n }`\n );\n this.logger.verbosePii(\n `Authority Metadata: ${\n this.authorityOptions.authorityMetadata ||\n Constants.NOT_APPLICABLE\n }`\n );\n this.logger.verbosePii(\n `Canonical Authority: ${\n metadataEntity.canonical_authority || Constants.NOT_APPLICABLE\n }`\n );\n const metadata = this.getCloudDiscoveryMetadataFromConfig();\n if (metadata) {\n this.logger.verbose(\n \"Found cloud discovery metadata in authority configuration\"\n );\n CacheHelpers.updateCloudDiscoveryMetadata(\n metadataEntity,\n metadata,\n false\n );\n return AuthorityMetadataSource.CONFIG;\n }\n\n // If the cached metadata came from config but that config was not passed to this instance, we must go to hardcoded values\n this.logger.verbose(\n \"Did not find cloud discovery metadata in the config... Attempting to get cloud discovery metadata from the hardcoded values.\"\n );\n\n if (this.options.skipAuthorityMetadataCache) {\n this.logger.verbose(\n \"Skipping hardcoded cloud discovery metadata cache since skipAuthorityMetadataCache is set to true. Attempting to get cloud discovery metadata from the network metadata cache.\"\n );\n } else {\n const hardcodedMetadata =\n getCloudDiscoveryMetadataFromHardcodedValues(\n this.hostnameAndPort\n );\n if (hardcodedMetadata) {\n this.logger.verbose(\n \"Found cloud discovery metadata from hardcoded values.\"\n );\n CacheHelpers.updateCloudDiscoveryMetadata(\n metadataEntity,\n hardcodedMetadata,\n false\n );\n return AuthorityMetadataSource.HARDCODED_VALUES;\n }\n\n this.logger.verbose(\n \"Did not find cloud discovery metadata in hardcoded values... Attempting to get cloud discovery metadata from the network metadata cache.\"\n );\n }\n\n const metadataEntityExpired =\n CacheHelpers.isAuthorityMetadataExpired(metadataEntity);\n if (\n this.isAuthoritySameType(metadataEntity) &&\n metadataEntity.aliasesFromNetwork &&\n !metadataEntityExpired\n ) {\n this.logger.verbose(\"Found cloud discovery metadata in the cache.\");\n // No need to update\n return AuthorityMetadataSource.CACHE;\n } else if (metadataEntityExpired) {\n this.logger.verbose(\"The metadata entity is expired.\");\n }\n\n return null;\n }\n\n /**\n * Parse cloudDiscoveryMetadata config or check knownAuthorities\n */\n private getCloudDiscoveryMetadataFromConfig(): CloudDiscoveryMetadata | null {\n // CIAM does not support cloud discovery metadata\n if (this.authorityType === AuthorityType.Ciam) {\n this.logger.verbose(\n \"CIAM authorities do not support cloud discovery metadata, generate the aliases from authority host.\"\n );\n return Authority.createCloudDiscoveryMetadataFromHost(\n this.hostnameAndPort\n );\n }\n\n // Check if network response was provided in config\n if (this.authorityOptions.cloudDiscoveryMetadata) {\n this.logger.verbose(\n \"The cloud discovery metadata has been provided as a network response, in the config.\"\n );\n try {\n this.logger.verbose(\n \"Attempting to parse the cloud discovery metadata.\"\n );\n const parsedResponse = JSON.parse(\n this.authorityOptions.cloudDiscoveryMetadata\n ) as CloudInstanceDiscoveryResponse;\n const metadata = getCloudDiscoveryMetadataFromNetworkResponse(\n parsedResponse.metadata,\n this.hostnameAndPort\n );\n this.logger.verbose(\"Parsed the cloud discovery metadata.\");\n if (metadata) {\n this.logger.verbose(\n \"There is returnable metadata attached to the parsed cloud discovery metadata.\"\n );\n return metadata;\n } else {\n this.logger.verbose(\n \"There is no metadata attached to the parsed cloud discovery metadata.\"\n );\n }\n } catch (e) {\n this.logger.verbose(\n \"Unable to parse the cloud discovery metadata. Throwing Invalid Cloud Discovery Metadata Error.\"\n );\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata\n );\n }\n }\n\n // If cloudDiscoveryMetadata is empty or does not contain the host, check knownAuthorities\n if (this.isInKnownAuthorities()) {\n this.logger.verbose(\n \"The host is included in knownAuthorities. Creating new cloud discovery metadata from the host.\"\n );\n return Authority.createCloudDiscoveryMetadataFromHost(\n this.hostnameAndPort\n );\n }\n\n return null;\n }\n\n /**\n * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\n *\n * @param hasHardcodedMetadata boolean\n */\n private async getCloudDiscoveryMetadataFromNetwork(): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityGetCloudDiscoveryMetadataFromNetwork,\n this.correlationId\n );\n const instanceDiscoveryEndpoint = `${Constants.AAD_INSTANCE_DISCOVERY_ENDPT}${this.canonicalAuthority}oauth2/v2.0/authorize`;\n const options: ImdsOptions = {};\n\n /*\n * TODO: Add a timeout if the authority exists in our library's\n * hardcoded list of metadata\n */\n\n let match = null;\n try {\n const response = await this.networkInterface.sendGetRequestAsync<\n | CloudInstanceDiscoveryResponse\n | CloudInstanceDiscoveryErrorResponse\n >(instanceDiscoveryEndpoint, options);\n let typedResponseBody:\n | CloudInstanceDiscoveryResponse\n | CloudInstanceDiscoveryErrorResponse;\n let metadata: Array;\n if (isCloudInstanceDiscoveryResponse(response.body)) {\n typedResponseBody =\n response.body as CloudInstanceDiscoveryResponse;\n metadata = typedResponseBody.metadata;\n\n this.logger.verbosePii(\n `tenant_discovery_endpoint is: ${typedResponseBody.tenant_discovery_endpoint}`\n );\n } else if (isCloudInstanceDiscoveryErrorResponse(response.body)) {\n this.logger.warning(\n `A CloudInstanceDiscoveryErrorResponse was returned. The cloud instance discovery network request's status code is: ${response.status}`\n );\n\n typedResponseBody =\n response.body as CloudInstanceDiscoveryErrorResponse;\n if (typedResponseBody.error === Constants.INVALID_INSTANCE) {\n this.logger.error(\n \"The CloudInstanceDiscoveryErrorResponse error is invalid_instance.\"\n );\n return null;\n }\n\n this.logger.warning(\n `The CloudInstanceDiscoveryErrorResponse error is ${typedResponseBody.error}`\n );\n this.logger.warning(\n `The CloudInstanceDiscoveryErrorResponse error description is ${typedResponseBody.error_description}`\n );\n\n this.logger.warning(\n \"Setting the value of the CloudInstanceDiscoveryMetadata (returned from the network) to []\"\n );\n metadata = [];\n } else {\n this.logger.error(\n \"AAD did not return a CloudInstanceDiscoveryResponse or CloudInstanceDiscoveryErrorResponse\"\n );\n return null;\n }\n\n this.logger.verbose(\n \"Attempting to find a match between the developer's authority and the CloudInstanceDiscoveryMetadata returned from the network request.\"\n );\n match = getCloudDiscoveryMetadataFromNetworkResponse(\n metadata,\n this.hostnameAndPort\n );\n } catch (error) {\n if (error instanceof AuthError) {\n this.logger.error(\n `There was a network error while attempting to get the cloud discovery instance metadata.\\nError: ${error.errorCode}\\nError Description: ${error.errorMessage}`\n );\n } else {\n const typedError = error as Error;\n this.logger.error(\n `A non-MSALJS error was thrown while attempting to get the cloud instance discovery metadata.\\nError: ${typedError.name}\\nError Description: ${typedError.message}`\n );\n }\n\n return null;\n }\n\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded\n if (!match) {\n this.logger.warning(\n \"The developer's authority was not found within the CloudInstanceDiscoveryMetadata returned from the network request.\"\n );\n this.logger.verbose(\n \"Creating custom Authority for custom domain scenario.\"\n );\n\n match = Authority.createCloudDiscoveryMetadataFromHost(\n this.hostnameAndPort\n );\n }\n return match;\n }\n\n /**\n * Helper function to determine if this host is included in the knownAuthorities config option\n */\n private isInKnownAuthorities(): boolean {\n const matches = this.authorityOptions.knownAuthorities.filter(\n (authority) => {\n return (\n authority &&\n UrlString.getDomainFromUrl(authority).toLowerCase() ===\n this.hostnameAndPort\n );\n }\n );\n return matches.length > 0;\n }\n\n /**\n * helper function to populate the authority based on azureCloudOptions\n * @param authorityString\n * @param azureCloudOptions\n */\n static generateAuthority(\n authorityString: string,\n azureCloudOptions?: AzureCloudOptions\n ): string {\n let authorityAzureCloudInstance;\n\n if (\n azureCloudOptions &&\n azureCloudOptions.azureCloudInstance !== AzureCloudInstance.None\n ) {\n const tenant = azureCloudOptions.tenant\n ? azureCloudOptions.tenant\n : Constants.DEFAULT_COMMON_TENANT;\n authorityAzureCloudInstance = `${azureCloudOptions.azureCloudInstance}/${tenant}/`;\n }\n\n return authorityAzureCloudInstance\n ? authorityAzureCloudInstance\n : authorityString;\n }\n\n /**\n * Creates cloud discovery metadata object from a given host\n * @param host\n */\n static createCloudDiscoveryMetadataFromHost(\n host: string\n ): CloudDiscoveryMetadata {\n return {\n preferred_network: host,\n preferred_cache: host,\n aliases: [host],\n };\n }\n\n /**\n * helper function to generate environment from authority object\n */\n getPreferredCache(): string {\n if (this.managedIdentity) {\n return Constants.DEFAULT_AUTHORITY_HOST;\n } else if (this.discoveryComplete()) {\n return this.metadata.preferred_cache;\n } else {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n }\n\n /**\n * Returns whether or not the provided host is an alias of this authority instance\n * @param host\n */\n isAlias(host: string): boolean {\n return this.metadata.aliases.indexOf(host) > -1;\n }\n\n /**\n * Returns whether or not the provided host is an alias of a known Microsoft authority for purposes of endpoint discovery\n * @param host\n */\n isAliasOfKnownMicrosoftAuthority(host: string): boolean {\n return InstanceDiscoveryMetadataAliases.has(host);\n }\n\n /**\n * Checks whether the provided host is that of a public cloud authority\n *\n * @param authority string\n * @returns bool\n */\n static isPublicCloudAuthority(host: string): boolean {\n return Constants.KNOWN_PUBLIC_CLOUDS.indexOf(host) >= 0;\n }\n\n /**\n * Rebuild the authority string with the region\n *\n * @param host string\n * @param region string\n */\n static buildRegionalAuthorityString(\n host: string,\n region: string,\n queryString?: string\n ): string {\n // Create and validate a Url string object with the initial authority string\n const authorityUrlInstance = new UrlString(host);\n authorityUrlInstance.validateAsUri();\n\n const authorityUrlParts = authorityUrlInstance.getUrlComponents();\n\n let hostNameAndPort = `${region}.${authorityUrlParts.HostNameAndPort}`;\n\n if (this.isPublicCloudAuthority(authorityUrlParts.HostNameAndPort)) {\n hostNameAndPort = `${region}.${Constants.REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX}`;\n }\n\n // Include the query string portion of the url\n const url = UrlString.constructAuthorityUriFromObject({\n ...authorityUrlInstance.getUrlComponents(),\n HostNameAndPort: hostNameAndPort,\n }).urlString;\n\n // Add the query string if a query string was provided\n if (queryString) return `${url}?${queryString}`;\n\n return url;\n }\n\n /**\n * Replace the endpoints in the metadata object with their regional equivalents.\n *\n * @param metadata OpenIdConfigResponse\n * @param azureRegion string\n */\n static replaceWithRegionalInformation(\n metadata: OpenIdConfigResponse,\n azureRegion: string\n ): OpenIdConfigResponse {\n const regionalMetadata = { ...metadata };\n regionalMetadata.authorization_endpoint =\n Authority.buildRegionalAuthorityString(\n regionalMetadata.authorization_endpoint,\n azureRegion\n );\n\n regionalMetadata.token_endpoint =\n Authority.buildRegionalAuthorityString(\n regionalMetadata.token_endpoint,\n azureRegion\n );\n\n if (regionalMetadata.end_session_endpoint) {\n regionalMetadata.end_session_endpoint =\n Authority.buildRegionalAuthorityString(\n regionalMetadata.end_session_endpoint,\n azureRegion\n );\n }\n\n return regionalMetadata;\n }\n\n /**\n * Transform CIAM_AUTHORIY as per the below rules:\n * If no path segments found and it is a CIAM authority (hostname ends with .ciamlogin.com), then transform it\n *\n * NOTE: The transformation path should go away once STS supports CIAM with the format: `tenantIdorDomain.ciamlogin.com`\n * `ciamlogin.com` can also change in the future and we should accommodate the same\n *\n * @param authority\n */\n static transformCIAMAuthority(authority: string): string {\n let ciamAuthority = authority;\n const authorityUrl = new UrlString(authority);\n const authorityUrlComponents = authorityUrl.getUrlComponents();\n\n // check if transformation is needed\n if (\n authorityUrlComponents.PathSegments.length === 0 &&\n authorityUrlComponents.HostNameAndPort.endsWith(\n Constants.CIAM_AUTH_URL\n )\n ) {\n const tenantIdOrDomain =\n authorityUrlComponents.HostNameAndPort.split(\".\")[0];\n ciamAuthority = `${ciamAuthority}${tenantIdOrDomain}${Constants.AAD_TENANT_DOMAIN_SUFFIX}`;\n }\n\n return ciamAuthority;\n }\n}\n\n/**\n * Extract tenantId from authority\n */\nexport function getTenantFromAuthorityString(\n authority: string\n): string | undefined {\n const authorityUrl = new UrlString(authority);\n const authorityUrlComponents = authorityUrl.getUrlComponents();\n /**\n * For credential matching purposes, tenantId is the last path segment of the authority URL:\n * AAD Authority - domain/tenantId -> Credentials are cached with realm = tenantId\n * B2C Authority - domain/{tenantId}?/.../policy -> Credentials are cached with realm = policy\n * tenantId is downcased because B2C policies can have mixed case but tfp claim is downcased\n *\n * Note that we may not have any path segments in certain OIDC scenarios.\n */\n const tenantId =\n authorityUrlComponents.PathSegments.slice(-1)[0]?.toLowerCase();\n\n switch (tenantId) {\n case AADAuthorityConstants.COMMON:\n case AADAuthorityConstants.ORGANIZATIONS:\n case AADAuthorityConstants.CONSUMERS:\n return undefined;\n default:\n return tenantId;\n }\n}\n\nexport function formatAuthorityUri(authorityUri: string): string {\n return authorityUri.endsWith(Constants.FORWARD_SLASH)\n ? authorityUri\n : `${authorityUri}${Constants.FORWARD_SLASH}`;\n}\n\nexport function buildStaticAuthorityOptions(\n authOptions: Partial\n): StaticAuthorityOptions {\n const rawCloudDiscoveryMetadata = authOptions.cloudDiscoveryMetadata;\n let cloudDiscoveryMetadata: CloudInstanceDiscoveryResponse | undefined =\n undefined;\n if (rawCloudDiscoveryMetadata) {\n try {\n cloudDiscoveryMetadata = JSON.parse(rawCloudDiscoveryMetadata);\n } catch (e) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata\n );\n }\n }\n return {\n canonicalAuthority: authOptions.authority\n ? formatAuthorityUri(authOptions.authority)\n : undefined,\n knownAuthorities: authOptions.knownAuthorities,\n cloudDiscoveryMetadata: cloudDiscoveryMetadata,\n };\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Authority, formatAuthorityUri } from \"./Authority.js\";\nimport { INetworkModule } from \"../network/INetworkModule.js\";\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../error/ClientAuthError.js\";\nimport { ICacheManager } from \"../cache/interface/ICacheManager.js\";\nimport { AuthorityOptions } from \"./AuthorityOptions.js\";\nimport { Logger } from \"../logger/Logger.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\n\n/**\n * Create an authority object of the correct type based on the url\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\n *\n * Also performs endpoint discovery.\n *\n * @param authorityUri\n * @param networkClient\n * @param protocolMode\n * @internal\n */\nexport async function createDiscoveredInstance(\n authorityUri: string,\n networkClient: INetworkModule,\n cacheManager: ICacheManager,\n authorityOptions: AuthorityOptions,\n logger: Logger,\n correlationId: string,\n performanceClient?: IPerformanceClient\n): Promise {\n performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance,\n correlationId\n );\n const authorityUriFinal = Authority.transformCIAMAuthority(\n formatAuthorityUri(authorityUri)\n );\n\n // Initialize authority and perform discovery endpoint check.\n const acquireTokenAuthority: Authority = new Authority(\n authorityUriFinal,\n networkClient,\n cacheManager,\n authorityOptions,\n logger,\n correlationId,\n performanceClient\n );\n\n try {\n await invokeAsync(\n acquireTokenAuthority.resolveEndpointsAsync.bind(\n acquireTokenAuthority\n ),\n PerformanceEvents.AuthorityResolveEndpointsAsync,\n logger,\n performanceClient,\n correlationId\n )();\n return acquireTokenAuthority;\n } catch (e) {\n throw createClientAuthError(\n ClientAuthErrorCodes.endpointResolutionError\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"./AuthError.js\";\n\n/**\n * Error thrown when there is an error with the server code, for example, unavailability.\n */\nexport class ServerError extends AuthError {\n /**\n * Server error number;\n */\n readonly errorNo?: string;\n\n /**\n * Http status number;\n */\n readonly status?: number;\n\n constructor(\n errorCode?: string,\n errorMessage?: string,\n subError?: string,\n errorNo?: string,\n status?: number\n ) {\n super(errorCode, errorMessage, subError);\n this.name = \"ServerError\";\n this.errorNo = errorNo;\n this.status = status;\n\n Object.setPrototypeOf(this, ServerError.prototype);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ShrOptions } from \"../crypto/SignedHttpRequest.js\";\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest.js\";\nimport { AuthenticationScheme } from \"../utils/Constants.js\";\n\n/**\n * Type representing a unique request thumbprint.\n */\nexport type RequestThumbprint = {\n clientId: string;\n authority: string;\n scopes: Array;\n homeAccountIdentifier?: string;\n claims?: string;\n authenticationScheme?: AuthenticationScheme;\n resourceRequestMethod?: string;\n resourceRequestUri?: string;\n shrClaims?: string;\n sshKid?: string;\n shrOptions?: ShrOptions;\n embeddedClientId?: string;\n};\n\nexport function getRequestThumbprint(\n clientId: string,\n request: BaseAuthRequest,\n homeAccountId?: string\n): RequestThumbprint {\n return {\n clientId: clientId,\n authority: request.authority,\n scopes: request.scopes,\n homeAccountIdentifier: homeAccountId,\n claims: request.claims,\n authenticationScheme: request.authenticationScheme,\n resourceRequestMethod: request.resourceRequestMethod,\n resourceRequestUri: request.resourceRequestUri,\n shrClaims: request.shrClaims,\n sshKid: request.sshKid,\n embeddedClientId:\n request.embeddedClientId || request.tokenBodyParameters?.clientId,\n };\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { NetworkResponse } from \"./NetworkResponse.js\";\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse.js\";\nimport {\n HeaderNames,\n ThrottlingConstants,\n Constants,\n} from \"../utils/Constants.js\";\nimport { CacheManager } from \"../cache/CacheManager.js\";\nimport { ServerError } from \"../error/ServerError.js\";\nimport {\n getRequestThumbprint,\n RequestThumbprint,\n} from \"./RequestThumbprint.js\";\nimport { ThrottlingEntity } from \"../cache/entities/ThrottlingEntity.js\";\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest.js\";\n\n/** @internal */\nexport class ThrottlingUtils {\n /**\n * Prepares a RequestThumbprint to be stored as a key.\n * @param thumbprint\n */\n static generateThrottlingStorageKey(thumbprint: RequestThumbprint): string {\n return `${ThrottlingConstants.THROTTLING_PREFIX}.${JSON.stringify(\n thumbprint\n )}`;\n }\n\n /**\n * Performs necessary throttling checks before a network request.\n * @param cacheManager\n * @param thumbprint\n */\n static preProcess(\n cacheManager: CacheManager,\n thumbprint: RequestThumbprint,\n correlationId: string\n ): void {\n const key = ThrottlingUtils.generateThrottlingStorageKey(thumbprint);\n const value = cacheManager.getThrottlingCache(key);\n\n if (value) {\n if (value.throttleTime < Date.now()) {\n cacheManager.removeItem(key, correlationId);\n return;\n }\n throw new ServerError(\n value.errorCodes?.join(\" \") || Constants.EMPTY_STRING,\n value.errorMessage,\n value.subError\n );\n }\n }\n\n /**\n * Performs necessary throttling checks after a network request.\n * @param cacheManager\n * @param thumbprint\n * @param response\n */\n static postProcess(\n cacheManager: CacheManager,\n thumbprint: RequestThumbprint,\n response: NetworkResponse,\n correlationId: string\n ): void {\n if (\n ThrottlingUtils.checkResponseStatus(response) ||\n ThrottlingUtils.checkResponseForRetryAfter(response)\n ) {\n const thumbprintValue: ThrottlingEntity = {\n throttleTime: ThrottlingUtils.calculateThrottleTime(\n parseInt(response.headers[HeaderNames.RETRY_AFTER])\n ),\n error: response.body.error,\n errorCodes: response.body.error_codes,\n errorMessage: response.body.error_description,\n subError: response.body.suberror,\n };\n cacheManager.setThrottlingCache(\n ThrottlingUtils.generateThrottlingStorageKey(thumbprint),\n thumbprintValue,\n correlationId\n );\n }\n }\n\n /**\n * Checks a NetworkResponse object's status codes against 429 or 5xx\n * @param response\n */\n static checkResponseStatus(\n response: NetworkResponse\n ): boolean {\n return (\n response.status === 429 ||\n (response.status >= 500 && response.status < 600)\n );\n }\n\n /**\n * Checks a NetworkResponse object's RetryAfter header\n * @param response\n */\n static checkResponseForRetryAfter(\n response: NetworkResponse\n ): boolean {\n if (response.headers) {\n return (\n response.headers.hasOwnProperty(HeaderNames.RETRY_AFTER) &&\n (response.status < 200 || response.status >= 300)\n );\n }\n return false;\n }\n\n /**\n * Calculates the Unix-time value for a throttle to expire given throttleTime in seconds.\n * @param throttleTime\n */\n static calculateThrottleTime(throttleTime: number): number {\n const time = throttleTime <= 0 ? 0 : throttleTime;\n\n const currentSeconds = Date.now() / 1000;\n return Math.floor(\n Math.min(\n currentSeconds +\n (time || ThrottlingConstants.DEFAULT_THROTTLE_TIME_SECONDS),\n currentSeconds +\n ThrottlingConstants.DEFAULT_MAX_THROTTLE_TIME_SECONDS\n ) * 1000\n );\n }\n\n static removeThrottle(\n cacheManager: CacheManager,\n clientId: string,\n request: BaseAuthRequest,\n homeAccountIdentifier?: string\n ): void {\n const thumbprint = getRequestThumbprint(\n clientId,\n request,\n homeAccountIdentifier\n );\n const key = this.generateThrottlingStorageKey(thumbprint);\n cacheManager.removeItem(key, request.correlationId);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"./AuthError.js\";\n\n/**\n * Represents network related errors\n */\nexport class NetworkError extends AuthError {\n error: AuthError;\n httpStatus?: number;\n responseHeaders?: Record;\n\n constructor(\n error: AuthError,\n httpStatus?: number,\n responseHeaders?: Record\n ) {\n super(error.errorCode, error.errorMessage, error.subError);\n\n Object.setPrototypeOf(this, NetworkError.prototype);\n this.name = \"NetworkError\";\n this.error = error;\n this.httpStatus = httpStatus;\n this.responseHeaders = responseHeaders;\n }\n}\n\n/**\n * Creates NetworkError object for a failed network request\n * @param error - Error to be thrown back to the caller\n * @param httpStatus - Status code of the network request\n * @param responseHeaders - Response headers of the network request, when available\n * @returns NetworkError object\n */\nexport function createNetworkError(\n error: AuthError,\n httpStatus?: number,\n responseHeaders?: Record,\n additionalError?: Error\n): NetworkError {\n error.errorMessage = `${error.errorMessage}, additionalErrorInfo: error.name:${additionalError?.name}, error.message:${additionalError?.message}`;\n return new NetworkError(error, httpStatus, responseHeaders);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientConfiguration,\n buildClientConfiguration,\n CommonClientConfiguration,\n} from \"../config/ClientConfiguration.js\";\nimport {\n INetworkModule,\n NetworkRequestOptions,\n} from \"../network/INetworkModule.js\";\nimport { NetworkResponse } from \"../network/NetworkResponse.js\";\nimport { ICrypto } from \"../crypto/ICrypto.js\";\nimport { Authority } from \"../authority/Authority.js\";\nimport { Logger } from \"../logger/Logger.js\";\nimport { Constants, HeaderNames } from \"../utils/Constants.js\";\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse.js\";\nimport { CacheManager } from \"../cache/CacheManager.js\";\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager.js\";\nimport { RequestThumbprint } from \"../network/RequestThumbprint.js\";\nimport { version, name } from \"../packageMetadata.js\";\nimport { CcsCredential, CcsCredentialType } from \"../account/CcsCredential.js\";\nimport { buildClientInfoFromHomeAccountId } from \"../account/ClientInfo.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport * as RequestParameterBuilder from \"../request/RequestParameterBuilder.js\";\nimport * as UrlUtils from \"../utils/UrlUtils.js\";\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest.js\";\nimport { createDiscoveredInstance } from \"../authority/AuthorityFactory.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { ThrottlingUtils } from \"../network/ThrottlingUtils.js\";\nimport { AuthError } from \"../error/AuthError.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { NetworkError } from \"../error/NetworkError.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\n\n/**\n * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow.\n * @internal\n */\nexport abstract class BaseClient {\n // Logger object\n public logger: Logger;\n\n // Application config\n protected config: CommonClientConfiguration;\n\n // Crypto Interface\n protected cryptoUtils: ICrypto;\n\n // Storage Interface\n protected cacheManager: CacheManager;\n\n // Network Interface\n protected networkClient: INetworkModule;\n\n // Server Telemetry Manager\n protected serverTelemetryManager: ServerTelemetryManager | null;\n\n // Default authority object\n public authority: Authority;\n\n // Performance telemetry client\n protected performanceClient?: IPerformanceClient;\n\n protected constructor(\n configuration: ClientConfiguration,\n performanceClient?: IPerformanceClient\n ) {\n // Set the configuration\n this.config = buildClientConfiguration(configuration);\n\n // Initialize the logger\n this.logger = new Logger(this.config.loggerOptions, name, version);\n\n // Initialize crypto\n this.cryptoUtils = this.config.cryptoInterface;\n\n // Initialize storage interface\n this.cacheManager = this.config.storageInterface;\n\n // Set the network interface\n this.networkClient = this.config.networkInterface;\n\n // Set TelemetryManager\n this.serverTelemetryManager = this.config.serverTelemetryManager;\n\n // set Authority\n this.authority = this.config.authOptions.authority;\n\n // set performance telemetry client\n this.performanceClient = performanceClient;\n }\n\n /**\n * Creates default headers for requests to token endpoint\n */\n protected createTokenRequestHeaders(\n ccsCred?: CcsCredential\n ): Record {\n const headers: Record = {};\n headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE;\n if (!this.config.systemOptions.preventCorsPreflight && ccsCred) {\n switch (ccsCred.type) {\n case CcsCredentialType.HOME_ACCOUNT_ID:\n try {\n const clientInfo = buildClientInfoFromHomeAccountId(\n ccsCred.credential\n );\n headers[\n HeaderNames.CCS_HEADER\n ] = `Oid:${clientInfo.uid}@${clientInfo.utid}`;\n } catch (e) {\n this.logger.verbose(\n \"Could not parse home account ID for CCS Header: \" +\n e\n );\n }\n break;\n case CcsCredentialType.UPN:\n headers[\n HeaderNames.CCS_HEADER\n ] = `UPN: ${ccsCred.credential}`;\n break;\n }\n }\n return headers;\n }\n\n /**\n * Http post to token endpoint\n * @param tokenEndpoint\n * @param queryString\n * @param headers\n * @param thumbprint\n */\n protected async executePostToTokenEndpoint(\n tokenEndpoint: string,\n queryString: string,\n headers: Record,\n thumbprint: RequestThumbprint,\n correlationId: string,\n queuedEvent?: string\n ): Promise> {\n if (queuedEvent) {\n this.performanceClient?.addQueueMeasurement(\n queuedEvent,\n correlationId\n );\n }\n\n const response =\n await this.sendPostRequest(\n thumbprint,\n tokenEndpoint,\n { body: queryString, headers: headers },\n correlationId\n );\n\n if (\n this.config.serverTelemetryManager &&\n response.status < 500 &&\n response.status !== 429\n ) {\n // Telemetry data successfully logged by server, clear Telemetry cache\n this.config.serverTelemetryManager.clearTelemetryCache();\n }\n\n return response;\n }\n\n /**\n * Wraps sendPostRequestAsync with necessary preflight and postflight logic\n * @param thumbprint - Request thumbprint for throttling\n * @param tokenEndpoint - Endpoint to make the POST to\n * @param options - Body and Headers to include on the POST request\n * @param correlationId - CorrelationId for telemetry\n */\n async sendPostRequest(\n thumbprint: RequestThumbprint,\n tokenEndpoint: string,\n options: NetworkRequestOptions,\n correlationId: string\n ): Promise> {\n ThrottlingUtils.preProcess(\n this.cacheManager,\n thumbprint,\n correlationId\n );\n\n let response;\n try {\n response = await invokeAsync(\n this.networkClient.sendPostRequestAsync.bind(\n this.networkClient\n ),\n PerformanceEvents.NetworkClientSendPostRequestAsync,\n this.logger,\n this.performanceClient,\n correlationId\n )(tokenEndpoint, options);\n const responseHeaders = response.headers || {};\n this.performanceClient?.addFields(\n {\n refreshTokenSize: response.body.refresh_token?.length || 0,\n httpVerToken:\n responseHeaders[HeaderNames.X_MS_HTTP_VERSION] || \"\",\n requestId:\n responseHeaders[HeaderNames.X_MS_REQUEST_ID] || \"\",\n },\n correlationId\n );\n } catch (e) {\n if (e instanceof NetworkError) {\n const responseHeaders = e.responseHeaders;\n if (responseHeaders) {\n this.performanceClient?.addFields(\n {\n httpVerToken:\n responseHeaders[\n HeaderNames.X_MS_HTTP_VERSION\n ] || \"\",\n requestId:\n responseHeaders[HeaderNames.X_MS_REQUEST_ID] ||\n \"\",\n contentTypeHeader:\n responseHeaders[HeaderNames.CONTENT_TYPE] ||\n undefined,\n contentLengthHeader:\n responseHeaders[HeaderNames.CONTENT_LENGTH] ||\n undefined,\n httpStatus: e.httpStatus,\n },\n correlationId\n );\n }\n throw e.error;\n }\n if (e instanceof AuthError) {\n throw e;\n } else {\n throw createClientAuthError(ClientAuthErrorCodes.networkError);\n }\n }\n\n ThrottlingUtils.postProcess(\n this.cacheManager,\n thumbprint,\n response,\n correlationId\n );\n\n return response;\n }\n\n /**\n * Updates the authority object of the client. Endpoint discovery must be completed.\n * @param updatedAuthority\n */\n async updateAuthority(\n cloudInstanceHostname: string,\n correlationId: string\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.UpdateTokenEndpointAuthority,\n correlationId\n );\n const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${this.authority.tenant}/`;\n const cloudInstanceAuthority = await createDiscoveredInstance(\n cloudInstanceAuthorityUri,\n this.networkClient,\n this.cacheManager,\n this.authority.options,\n this.logger,\n correlationId,\n this.performanceClient\n );\n this.authority = cloudInstanceAuthority;\n }\n\n /**\n * Creates query string for the /token request\n * @param request\n */\n createTokenQueryParameters(request: BaseAuthRequest): string {\n const parameters = new Map();\n\n if (request.embeddedClientId) {\n RequestParameterBuilder.addBrokerParameters(\n parameters,\n this.config.authOptions.clientId,\n this.config.authOptions.redirectUri\n );\n }\n\n if (request.tokenQueryParameters) {\n RequestParameterBuilder.addExtraQueryParameters(\n parameters,\n request.tokenQueryParameters\n );\n }\n\n RequestParameterBuilder.addCorrelationId(\n parameters,\n request.correlationId\n );\n\n RequestParameterBuilder.instrumentBrokerParams(\n parameters,\n request.correlationId,\n this.performanceClient\n );\n return UrlUtils.mapToQueryString(parameters);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Type which describes Id Token claims known by MSAL.\n */\nexport type TokenClaims = {\n /**\n * Audience\n */\n aud?: string;\n /**\n * Issuer\n */\n iss?: string;\n /**\n * Issued at\n */\n iat?: number;\n /**\n * Not valid before\n */\n nbf?: number;\n /**\n * Immutable object identifier, this ID uniquely identifies the user across applications\n */\n oid?: string;\n /**\n * Immutable subject identifier, this is a pairwise identifier - it is unique to a particular application ID\n */\n sub?: string;\n /**\n * Users' tenant or '9188040d-6c67-4c5b-b112-36a304b66dad' for personal accounts.\n */\n tid?: string;\n /**\n * Trusted Framework Policy (B2C) The name of the policy that was used to acquire the ID token.\n */\n tfp?: string;\n /**\n * Authentication Context Class Reference (B2C) Used only with older policies.\n */\n acr?: string;\n ver?: string;\n upn?: string;\n preferred_username?: string;\n login_hint?: string;\n emails?: string[];\n name?: string;\n nonce?: string;\n /**\n * Expiration\n */\n exp?: number;\n home_oid?: string;\n sid?: string;\n cloud_instance_host_name?: string;\n cnf?: {\n kid: string;\n };\n x5c_ca?: string[];\n ts?: number;\n at?: string;\n u?: string;\n p?: string;\n m?: string;\n roles?: string[];\n amr?: string[];\n idp?: string;\n auth_time?: number;\n /**\n * \tRegion of the resource tenant\n */\n tenant_region_scope?: string;\n tenant_region_sub_scope?: string;\n};\n\n/**\n * Gets tenantId from available ID token claims to set as credential realm with the following precedence:\n * 1. tid - if the token is acquired from an Azure AD tenant tid will be present\n * 2. tfp - if the token is acquired from a modern B2C tenant tfp should be present\n * 3. acr - if the token is acquired from a legacy B2C tenant acr should be present\n * Downcased to match the realm case-insensitive comparison requirements\n * @param idTokenClaims\n * @returns\n */\nexport function getTenantIdFromIdTokenClaims(\n idTokenClaims?: TokenClaims\n): string | null {\n if (idTokenClaims) {\n const tenantId =\n idTokenClaims.tid || idTokenClaims.tfp || idTokenClaims.acr;\n return tenantId || null;\n }\n return null;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { CacheAccountType } from \"../../utils/Constants.js\";\nimport type { Authority } from \"../../authority/Authority.js\";\nimport { ICrypto } from \"../../crypto/ICrypto.js\";\nimport { ClientInfo, buildClientInfo } from \"../../account/ClientInfo.js\";\nimport {\n AccountInfo,\n TenantProfile,\n buildTenantProfile,\n} from \"../../account/AccountInfo.js\";\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../../error/ClientAuthError.js\";\nimport { AuthorityType } from \"../../authority/AuthorityType.js\";\nimport { Logger } from \"../../logger/Logger.js\";\nimport {\n TokenClaims,\n getTenantIdFromIdTokenClaims,\n} from \"../../account/TokenClaims.js\";\nimport { ProtocolMode } from \"../../authority/ProtocolMode.js\";\n\n/**\n * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).\n *\n * Key : Value Schema\n *\n * Key: --\n *\n * Value Schema:\n * {\n * homeAccountId: home account identifier for the auth scheme,\n * environment: entity that issued the token, represented as a full host\n * realm: Full tenant or organizational identifier that the account belongs to\n * localAccountId: Original tenant-specific accountID, usually used for legacy cases\n * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt\n * authorityType: Accounts authority type as a string\n * name: Full name for the account, including given name and family name,\n * lastModificationTime: last time this entity was modified in the cache\n * lastModificationApp:\n * nativeAccountId: Account identifier on the native device\n * tenantProfiles: Array of tenant profile objects for each tenant that the account has authenticated with in the browser\n * }\n * @internal\n */\nexport class AccountEntity {\n homeAccountId: string;\n environment: string;\n realm: string;\n localAccountId: string;\n username: string;\n authorityType: string;\n loginHint?: string;\n clientInfo?: string;\n name?: string;\n lastModificationTime?: string;\n lastModificationApp?: string;\n cloudGraphHostName?: string;\n msGraphHost?: string;\n nativeAccountId?: string;\n tenantProfiles?: Array;\n lastUpdatedAt: string;\n\n /**\n * Returns the AccountInfo interface for this account.\n */\n getAccountInfo(): AccountInfo {\n return {\n homeAccountId: this.homeAccountId,\n environment: this.environment,\n tenantId: this.realm,\n username: this.username,\n localAccountId: this.localAccountId,\n loginHint: this.loginHint,\n name: this.name,\n nativeAccountId: this.nativeAccountId,\n authorityType: this.authorityType,\n // Deserialize tenant profiles array into a Map\n tenantProfiles: new Map(\n (this.tenantProfiles || []).map((tenantProfile) => {\n return [tenantProfile.tenantId, tenantProfile];\n })\n ),\n };\n }\n\n /**\n * Returns true if the account entity is in single tenant format (outdated), false otherwise\n */\n isSingleTenant(): boolean {\n return !this.tenantProfiles;\n }\n\n /**\n * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.\n * @param accountDetails\n */\n static createAccount(\n accountDetails: {\n homeAccountId: string;\n idTokenClaims?: TokenClaims;\n clientInfo?: string;\n cloudGraphHostName?: string;\n msGraphHost?: string;\n environment?: string;\n nativeAccountId?: string;\n tenantProfiles?: Array;\n },\n authority: Authority,\n base64Decode?: (input: string) => string\n ): AccountEntity {\n const account: AccountEntity = new AccountEntity();\n\n if (authority.authorityType === AuthorityType.Adfs) {\n account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;\n } else if (authority.protocolMode === ProtocolMode.OIDC) {\n account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;\n } else {\n account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;\n }\n\n let clientInfo: ClientInfo | undefined;\n\n if (accountDetails.clientInfo && base64Decode) {\n clientInfo = buildClientInfo(\n accountDetails.clientInfo,\n base64Decode\n );\n }\n\n account.clientInfo = accountDetails.clientInfo;\n account.homeAccountId = accountDetails.homeAccountId;\n account.nativeAccountId = accountDetails.nativeAccountId;\n\n const env =\n accountDetails.environment ||\n (authority && authority.getPreferredCache());\n\n if (!env) {\n throw createClientAuthError(\n ClientAuthErrorCodes.invalidCacheEnvironment\n );\n }\n\n account.environment = env;\n // non AAD scenarios can have empty realm\n account.realm =\n clientInfo?.utid ||\n getTenantIdFromIdTokenClaims(accountDetails.idTokenClaims) ||\n \"\";\n\n // How do you account for MSA CID here?\n account.localAccountId =\n clientInfo?.uid ||\n accountDetails.idTokenClaims?.oid ||\n accountDetails.idTokenClaims?.sub ||\n \"\";\n\n /*\n * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.\n * In most cases it will contain a single email. This field should not be relied upon if a custom\n * policy is configured to return more than 1 email.\n */\n const preferredUsername =\n accountDetails.idTokenClaims?.preferred_username ||\n accountDetails.idTokenClaims?.upn;\n const email = accountDetails.idTokenClaims?.emails\n ? accountDetails.idTokenClaims.emails[0]\n : null;\n\n account.username = preferredUsername || email || \"\";\n account.loginHint = accountDetails.idTokenClaims?.login_hint;\n account.name = accountDetails.idTokenClaims?.name || \"\";\n\n account.cloudGraphHostName = accountDetails.cloudGraphHostName;\n account.msGraphHost = accountDetails.msGraphHost;\n\n if (accountDetails.tenantProfiles) {\n account.tenantProfiles = accountDetails.tenantProfiles;\n } else {\n const tenantProfile = buildTenantProfile(\n accountDetails.homeAccountId,\n account.localAccountId,\n account.realm,\n accountDetails.idTokenClaims\n );\n account.tenantProfiles = [tenantProfile];\n }\n\n return account;\n }\n\n /**\n * Creates an AccountEntity object from AccountInfo\n * @param accountInfo\n * @param cloudGraphHostName\n * @param msGraphHost\n * @returns\n */\n static createFromAccountInfo(\n accountInfo: AccountInfo,\n cloudGraphHostName?: string,\n msGraphHost?: string\n ): AccountEntity {\n const account: AccountEntity = new AccountEntity();\n\n account.authorityType =\n accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;\n account.homeAccountId = accountInfo.homeAccountId;\n account.localAccountId = accountInfo.localAccountId;\n account.nativeAccountId = accountInfo.nativeAccountId;\n\n account.realm = accountInfo.tenantId;\n account.environment = accountInfo.environment;\n\n account.username = accountInfo.username;\n account.name = accountInfo.name;\n account.loginHint = accountInfo.loginHint;\n\n account.cloudGraphHostName = cloudGraphHostName;\n account.msGraphHost = msGraphHost;\n // Serialize tenant profiles map into an array\n account.tenantProfiles = Array.from(\n accountInfo.tenantProfiles?.values() || []\n );\n\n return account;\n }\n\n /**\n * Generate HomeAccountId from server response\n * @param serverClientInfo\n * @param authType\n */\n static generateHomeAccountId(\n serverClientInfo: string,\n authType: AuthorityType,\n logger: Logger,\n cryptoObj: ICrypto,\n idTokenClaims?: TokenClaims\n ): string {\n // since ADFS/DSTS do not have tid and does not set client_info\n if (\n !(\n authType === AuthorityType.Adfs ||\n authType === AuthorityType.Dsts\n )\n ) {\n // for cases where there is clientInfo\n if (serverClientInfo) {\n try {\n const clientInfo = buildClientInfo(\n serverClientInfo,\n cryptoObj.base64Decode\n );\n if (clientInfo.uid && clientInfo.utid) {\n return `${clientInfo.uid}.${clientInfo.utid}`;\n }\n } catch (e) {}\n }\n logger.warning(\"No client info in response\");\n }\n\n // default to \"sub\" claim\n return idTokenClaims?.sub || \"\";\n }\n\n /**\n * Validates an entity: checks for all expected params\n * @param entity\n */\n static isAccountEntity(entity: object): boolean {\n if (!entity) {\n return false;\n }\n\n return (\n entity.hasOwnProperty(\"homeAccountId\") &&\n entity.hasOwnProperty(\"environment\") &&\n entity.hasOwnProperty(\"realm\") &&\n entity.hasOwnProperty(\"localAccountId\") &&\n entity.hasOwnProperty(\"username\") &&\n entity.hasOwnProperty(\"authorityType\")\n );\n }\n\n /**\n * Helper function to determine whether 2 accountInfo objects represent the same account\n * @param accountA\n * @param accountB\n * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality\n */\n static accountInfoIsEqual(\n accountA: AccountInfo | null,\n accountB: AccountInfo | null,\n compareClaims?: boolean\n ): boolean {\n if (!accountA || !accountB) {\n return false;\n }\n\n let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false\n if (compareClaims) {\n const accountAClaims = (accountA.idTokenClaims ||\n {}) as TokenClaims;\n const accountBClaims = (accountB.idTokenClaims ||\n {}) as TokenClaims;\n\n // issued at timestamp and nonce are expected to change each time a new id token is acquired\n claimsMatch =\n accountAClaims.iat === accountBClaims.iat &&\n accountAClaims.nonce === accountBClaims.nonce;\n }\n\n return (\n accountA.homeAccountId === accountB.homeAccountId &&\n accountA.localAccountId === accountB.localAccountId &&\n accountA.username === accountB.username &&\n accountA.tenantId === accountB.tenantId &&\n accountA.loginHint === accountB.loginHint &&\n accountA.environment === accountB.environment &&\n accountA.nativeAccountId === accountB.nativeAccountId &&\n claimsMatch\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// Codes defined by MSAL\nexport const noTokensFound = \"no_tokens_found\";\nexport const nativeAccountUnavailable = \"native_account_unavailable\";\nexport const refreshTokenExpired = \"refresh_token_expired\";\nexport const uxNotAllowed = \"ux_not_allowed\";\n\n// Codes potentially returned by server\nexport const interactionRequired = \"interaction_required\";\nexport const consentRequired = \"consent_required\";\nexport const loginRequired = \"login_required\";\nexport const badToken = \"bad_token\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Constants } from \"../utils/Constants.js\";\nimport { AuthError } from \"./AuthError.js\";\nimport * as InteractionRequiredAuthErrorCodes from \"./InteractionRequiredAuthErrorCodes.js\";\nexport { InteractionRequiredAuthErrorCodes };\n\n/**\n * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required\n */\nexport const InteractionRequiredServerErrorMessage = [\n InteractionRequiredAuthErrorCodes.interactionRequired,\n InteractionRequiredAuthErrorCodes.consentRequired,\n InteractionRequiredAuthErrorCodes.loginRequired,\n InteractionRequiredAuthErrorCodes.badToken,\n InteractionRequiredAuthErrorCodes.uxNotAllowed,\n];\n\nexport const InteractionRequiredAuthSubErrorMessage = [\n \"message_only\",\n \"additional_action\",\n \"basic_action\",\n \"user_password_expired\",\n \"consent_required\",\n \"bad_token\",\n];\n\nconst InteractionRequiredAuthErrorMessages = {\n [InteractionRequiredAuthErrorCodes.noTokensFound]:\n \"No refresh token found in the cache. Please sign-in.\",\n [InteractionRequiredAuthErrorCodes.nativeAccountUnavailable]:\n \"The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.\",\n [InteractionRequiredAuthErrorCodes.refreshTokenExpired]:\n \"Refresh token has expired.\",\n [InteractionRequiredAuthErrorCodes.badToken]:\n \"Identity provider returned bad_token due to an expired or invalid refresh token. Please invoke an interactive API to resolve.\",\n [InteractionRequiredAuthErrorCodes.uxNotAllowed]:\n \"`canShowUI` flag in Edge was set to false. User interaction required on web page. Please invoke an interactive API to resolve.\",\n};\n\n/**\n * Interaction required errors defined by the SDK\n * @deprecated Use InteractionRequiredAuthErrorCodes instead\n */\nexport const InteractionRequiredAuthErrorMessage = {\n noTokensFoundError: {\n code: InteractionRequiredAuthErrorCodes.noTokensFound,\n desc: InteractionRequiredAuthErrorMessages[\n InteractionRequiredAuthErrorCodes.noTokensFound\n ],\n },\n native_account_unavailable: {\n code: InteractionRequiredAuthErrorCodes.nativeAccountUnavailable,\n desc: InteractionRequiredAuthErrorMessages[\n InteractionRequiredAuthErrorCodes.nativeAccountUnavailable\n ],\n },\n bad_token: {\n code: InteractionRequiredAuthErrorCodes.badToken,\n desc: InteractionRequiredAuthErrorMessages[\n InteractionRequiredAuthErrorCodes.badToken\n ],\n },\n};\n\n/**\n * Error thrown when user interaction is required.\n */\nexport class InteractionRequiredAuthError extends AuthError {\n /**\n * The time the error occured at\n */\n timestamp: string;\n\n /**\n * TraceId associated with the error\n */\n traceId: string;\n\n /**\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/claims-challenge.md\n *\n * A string with extra claims needed for the token request to succeed\n * web site: redirect the user to the authorization page and set the extra claims\n * web api: include the claims in the WWW-Authenticate header that are sent back to the client so that it knows to request a token with the extra claims\n * desktop application or browser context: include the claims when acquiring the token interactively\n * app to app context (client_credentials): include the claims in the AcquireTokenByClientCredential request\n */\n claims: string;\n\n /**\n * Server error number;\n */\n readonly errorNo?: string;\n\n constructor(\n errorCode?: string,\n errorMessage?: string,\n subError?: string,\n timestamp?: string,\n traceId?: string,\n correlationId?: string,\n claims?: string,\n errorNo?: string\n ) {\n super(errorCode, errorMessage, subError);\n Object.setPrototypeOf(this, InteractionRequiredAuthError.prototype);\n\n this.timestamp = timestamp || Constants.EMPTY_STRING;\n this.traceId = traceId || Constants.EMPTY_STRING;\n this.correlationId = correlationId || Constants.EMPTY_STRING;\n this.claims = claims || Constants.EMPTY_STRING;\n this.name = \"InteractionRequiredAuthError\";\n this.errorNo = errorNo;\n }\n}\n\n/**\n * Helper function used to determine if an error thrown by the server requires interaction to resolve\n * @param errorCode\n * @param errorString\n * @param subError\n */\nexport function isInteractionRequiredError(\n errorCode?: string,\n errorString?: string,\n subError?: string\n): boolean {\n const isInteractionRequiredErrorCode =\n !!errorCode &&\n InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1;\n const isInteractionRequiredSubError =\n !!subError &&\n InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1;\n const isInteractionRequiredErrorDesc =\n !!errorString &&\n InteractionRequiredServerErrorMessage.some((irErrorCode) => {\n return errorString.indexOf(irErrorCode) > -1;\n });\n\n return (\n isInteractionRequiredErrorCode ||\n isInteractionRequiredErrorDesc ||\n isInteractionRequiredSubError\n );\n}\n\n/**\n * Creates an InteractionRequiredAuthError\n */\nexport function createInteractionRequiredAuthError(\n errorCode: string\n): InteractionRequiredAuthError {\n return new InteractionRequiredAuthError(\n errorCode,\n InteractionRequiredAuthErrorMessages[errorCode]\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Constants } from \"./Constants.js\";\nimport { ICrypto } from \"../crypto/ICrypto.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\n\n/**\n * Type which defines the object that is stringified, encoded and sent in the state value.\n * Contains the following:\n * - id - unique identifier for this request\n * - ts - timestamp for the time the request was made. Used to ensure that token expiration is not calculated incorrectly.\n * - platformState - string value sent from the platform.\n */\nexport type LibraryStateObject = {\n id: string;\n meta?: Record;\n};\n\n/**\n * Type which defines the stringified and encoded object sent to the service in the authorize request.\n */\nexport type RequestStateObject = {\n userRequestState: string;\n libraryState: LibraryStateObject;\n};\n\n/**\n * Class which provides helpers for OAuth 2.0 protocol specific values\n */\nexport class ProtocolUtils {\n /**\n * Appends user state with random guid, or returns random guid.\n * @param userState\n * @param randomGuid\n */\n static setRequestState(\n cryptoObj: ICrypto,\n userState?: string,\n meta?: Record\n ): string {\n const libraryState = ProtocolUtils.generateLibraryState(\n cryptoObj,\n meta\n );\n return userState\n ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}`\n : libraryState;\n }\n\n /**\n * Generates the state value used by the common library.\n * @param randomGuid\n * @param cryptoObj\n */\n static generateLibraryState(\n cryptoObj: ICrypto,\n meta?: Record\n ): string {\n if (!cryptoObj) {\n throw createClientAuthError(ClientAuthErrorCodes.noCryptoObject);\n }\n\n // Create a state object containing a unique id and the timestamp of the request creation\n const stateObj: LibraryStateObject = {\n id: cryptoObj.createNewGuid(),\n };\n\n if (meta) {\n stateObj.meta = meta;\n }\n\n const stateString = JSON.stringify(stateObj);\n\n return cryptoObj.base64Encode(stateString);\n }\n\n /**\n * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user.\n * @param state\n * @param cryptoObj\n */\n static parseRequestState(\n cryptoObj: ICrypto,\n state: string\n ): RequestStateObject {\n if (!cryptoObj) {\n throw createClientAuthError(ClientAuthErrorCodes.noCryptoObject);\n }\n\n if (!state) {\n throw createClientAuthError(ClientAuthErrorCodes.invalidState);\n }\n\n try {\n // Split the state between library state and user passed state and decode them separately\n const splitState = state.split(Constants.RESOURCE_DELIM);\n const libraryState = splitState[0];\n const userState =\n splitState.length > 1\n ? splitState.slice(1).join(Constants.RESOURCE_DELIM)\n : Constants.EMPTY_STRING;\n const libraryStateString = cryptoObj.base64Decode(libraryState);\n const libraryStateObj = JSON.parse(\n libraryStateString\n ) as LibraryStateObject;\n return {\n userRequestState: userState || Constants.EMPTY_STRING,\n libraryState: libraryStateObj,\n };\n } catch (e) {\n throw createClientAuthError(ClientAuthErrorCodes.invalidState);\n }\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ICrypto, SignedHttpRequestParameters } from \"./ICrypto.js\";\nimport * as TimeUtils from \"../utils/TimeUtils.js\";\nimport { UrlString } from \"../url/UrlString.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\nimport { Logger } from \"../logger/Logger.js\";\n\n/**\n * See eSTS docs for more info.\n * - A kid element, with the value containing an RFC 7638-compliant JWK thumbprint that is base64 encoded.\n * - xms_ksl element, representing the storage location of the key's secret component on the client device. One of two values:\n * - sw: software storage\n * - uhw: hardware storage\n */\ntype ReqCnf = {\n kid: string;\n xms_ksl: KeyLocation;\n};\n\nexport type ReqCnfData = {\n kid: string;\n reqCnfString: string;\n};\n\nconst KeyLocation = {\n SW: \"sw\",\n UHW: \"uhw\",\n} as const;\nexport type KeyLocation = (typeof KeyLocation)[keyof typeof KeyLocation];\n\n/** @internal */\nexport class PopTokenGenerator {\n private cryptoUtils: ICrypto;\n private performanceClient?: IPerformanceClient;\n\n constructor(cryptoUtils: ICrypto, performanceClient?: IPerformanceClient) {\n this.cryptoUtils = cryptoUtils;\n this.performanceClient = performanceClient;\n }\n\n /**\n * Generates the req_cnf validated at the RP in the POP protocol for SHR parameters\n * and returns an object containing the keyid, the full req_cnf string and the req_cnf string hash\n * @param request\n * @returns\n */\n async generateCnf(\n request: SignedHttpRequestParameters,\n logger: Logger\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.PopTokenGenerateCnf,\n request.correlationId\n );\n\n const reqCnf = await invokeAsync(\n this.generateKid.bind(this),\n PerformanceEvents.PopTokenGenerateCnf,\n logger,\n this.performanceClient,\n request.correlationId\n )(request);\n const reqCnfString: string = this.cryptoUtils.base64UrlEncode(\n JSON.stringify(reqCnf)\n );\n\n return {\n kid: reqCnf.kid,\n reqCnfString,\n };\n }\n\n /**\n * Generates key_id for a SHR token request\n * @param request\n * @returns\n */\n async generateKid(request: SignedHttpRequestParameters): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.PopTokenGenerateKid,\n request.correlationId\n );\n\n const kidThumbprint = await this.cryptoUtils.getPublicKeyThumbprint(\n request\n );\n\n return {\n kid: kidThumbprint,\n xms_ksl: KeyLocation.SW,\n };\n }\n\n /**\n * Signs the POP access_token with the local generated key-pair\n * @param accessToken\n * @param request\n * @returns\n */\n async signPopToken(\n accessToken: string,\n keyId: string,\n request: SignedHttpRequestParameters\n ): Promise {\n return this.signPayload(accessToken, keyId, request);\n }\n\n /**\n * Utility function to generate the signed JWT for an access_token\n * @param payload\n * @param kid\n * @param request\n * @param claims\n * @returns\n */\n async signPayload(\n payload: string,\n keyId: string,\n request: SignedHttpRequestParameters,\n claims?: object\n ): Promise {\n // Deconstruct request to extract SHR parameters\n const {\n resourceRequestMethod,\n resourceRequestUri,\n shrClaims,\n shrNonce,\n shrOptions,\n } = request;\n\n const resourceUrlString = resourceRequestUri\n ? new UrlString(resourceRequestUri)\n : undefined;\n const resourceUrlComponents = resourceUrlString?.getUrlComponents();\n return this.cryptoUtils.signJwt(\n {\n at: payload,\n ts: TimeUtils.nowSeconds(),\n m: resourceRequestMethod?.toUpperCase(),\n u: resourceUrlComponents?.HostNameAndPort,\n nonce: shrNonce || this.cryptoUtils.createNewGuid(),\n p: resourceUrlComponents?.AbsolutePath,\n q: resourceUrlComponents?.QueryString\n ? [[], resourceUrlComponents.QueryString]\n : undefined,\n client_claims: shrClaims || undefined,\n ...claims,\n },\n keyId,\n shrOptions,\n request.correlationId\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ISerializableTokenCache } from \"../interface/ISerializableTokenCache.js\";\n\n/**\n * This class instance helps track the memory changes facilitating\n * decisions to read from and write to the persistent cache\n */ export class TokenCacheContext {\n /**\n * boolean indicating cache change\n */\n hasChanged: boolean;\n /**\n * serializable token cache interface\n */\n cache: ISerializableTokenCache;\n\n constructor(tokenCache: ISerializableTokenCache, hasChanged: boolean) {\n this.cache = tokenCache;\n this.hasChanged = hasChanged;\n }\n\n /**\n * boolean which indicates the changes in cache\n */\n get cacheHasChanged(): boolean {\n return this.hasChanged;\n }\n\n /**\n * function to retrieve the token cache\n */\n get tokenCache(): ISerializableTokenCache {\n return this.cache;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ServerAuthorizationTokenResponse } from \"./ServerAuthorizationTokenResponse.js\";\nimport { ICrypto } from \"../crypto/ICrypto.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { Logger } from \"../logger/Logger.js\";\nimport { ServerError } from \"../error/ServerError.js\";\nimport { ScopeSet } from \"../request/ScopeSet.js\";\nimport { AuthenticationResult } from \"./AuthenticationResult.js\";\nimport { AccountEntity } from \"../cache/entities/AccountEntity.js\";\nimport { Authority } from \"../authority/Authority.js\";\nimport { IdTokenEntity } from \"../cache/entities/IdTokenEntity.js\";\nimport { AccessTokenEntity } from \"../cache/entities/AccessTokenEntity.js\";\nimport { RefreshTokenEntity } from \"../cache/entities/RefreshTokenEntity.js\";\nimport {\n InteractionRequiredAuthError,\n isInteractionRequiredError,\n} from \"../error/InteractionRequiredAuthError.js\";\nimport { CacheRecord } from \"../cache/entities/CacheRecord.js\";\nimport { CacheManager } from \"../cache/CacheManager.js\";\nimport { ProtocolUtils, RequestStateObject } from \"../utils/ProtocolUtils.js\";\nimport {\n AuthenticationScheme,\n Constants,\n THE_FAMILY_ID,\n HttpStatus,\n} from \"../utils/Constants.js\";\nimport { PopTokenGenerator } from \"../crypto/PopTokenGenerator.js\";\nimport { AppMetadataEntity } from \"../cache/entities/AppMetadataEntity.js\";\nimport { ICachePlugin } from \"../cache/interface/ICachePlugin.js\";\nimport { TokenCacheContext } from \"../cache/persistence/TokenCacheContext.js\";\nimport { ISerializableTokenCache } from \"../cache/interface/ISerializableTokenCache.js\";\nimport { AuthorizationCodePayload } from \"./AuthorizationCodePayload.js\";\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { checkMaxAge, extractTokenClaims } from \"../account/AuthToken.js\";\nimport {\n TokenClaims,\n getTenantIdFromIdTokenClaims,\n} from \"../account/TokenClaims.js\";\nimport {\n AccountInfo,\n buildTenantProfile,\n updateAccountTenantProfileData,\n} from \"../account/AccountInfo.js\";\nimport * as CacheHelpers from \"../cache/utils/CacheHelpers.js\";\nimport * as TimeUtils from \"../utils/TimeUtils.js\";\n\n/**\n * Class that handles response parsing.\n * @internal\n */\nexport class ResponseHandler {\n private clientId: string;\n private cacheStorage: CacheManager;\n private cryptoObj: ICrypto;\n private logger: Logger;\n private homeAccountIdentifier: string;\n private serializableCache: ISerializableTokenCache | null;\n private persistencePlugin: ICachePlugin | null;\n private performanceClient?: IPerformanceClient;\n\n constructor(\n clientId: string,\n cacheStorage: CacheManager,\n cryptoObj: ICrypto,\n logger: Logger,\n serializableCache: ISerializableTokenCache | null,\n persistencePlugin: ICachePlugin | null,\n performanceClient?: IPerformanceClient\n ) {\n this.clientId = clientId;\n this.cacheStorage = cacheStorage;\n this.cryptoObj = cryptoObj;\n this.logger = logger;\n this.serializableCache = serializableCache;\n this.persistencePlugin = persistencePlugin;\n this.performanceClient = performanceClient;\n }\n\n /**\n * Function which validates server authorization token response.\n * @param serverResponse\n * @param refreshAccessToken\n */\n validateTokenResponse(\n serverResponse: ServerAuthorizationTokenResponse,\n refreshAccessToken?: boolean\n ): void {\n // Check for error\n if (\n serverResponse.error ||\n serverResponse.error_description ||\n serverResponse.suberror\n ) {\n const errString = `Error(s): ${\n serverResponse.error_codes || Constants.NOT_AVAILABLE\n } - Timestamp: ${\n serverResponse.timestamp || Constants.NOT_AVAILABLE\n } - Description: ${\n serverResponse.error_description || Constants.NOT_AVAILABLE\n } - Correlation ID: ${\n serverResponse.correlation_id || Constants.NOT_AVAILABLE\n } - Trace ID: ${\n serverResponse.trace_id || Constants.NOT_AVAILABLE\n }`;\n const serverErrorNo = serverResponse.error_codes?.length\n ? serverResponse.error_codes[0]\n : undefined;\n const serverError = new ServerError(\n serverResponse.error,\n errString,\n serverResponse.suberror,\n serverErrorNo,\n serverResponse.status\n );\n\n // check if 500 error\n if (\n refreshAccessToken &&\n serverResponse.status &&\n serverResponse.status >= HttpStatus.SERVER_ERROR_RANGE_START &&\n serverResponse.status <= HttpStatus.SERVER_ERROR_RANGE_END\n ) {\n this.logger.warning(\n `executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\\n${serverError}`\n );\n\n // don't throw an exception, but alert the user via a log that the token was unable to be refreshed\n return;\n // check if 400 error\n } else if (\n refreshAccessToken &&\n serverResponse.status &&\n serverResponse.status >= HttpStatus.CLIENT_ERROR_RANGE_START &&\n serverResponse.status <= HttpStatus.CLIENT_ERROR_RANGE_END\n ) {\n this.logger.warning(\n `executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\\n${serverError}`\n );\n\n // don't throw an exception, but alert the user via a log that the token was unable to be refreshed\n return;\n }\n\n if (\n isInteractionRequiredError(\n serverResponse.error,\n serverResponse.error_description,\n serverResponse.suberror\n )\n ) {\n throw new InteractionRequiredAuthError(\n serverResponse.error,\n serverResponse.error_description,\n serverResponse.suberror,\n serverResponse.timestamp || Constants.EMPTY_STRING,\n serverResponse.trace_id || Constants.EMPTY_STRING,\n serverResponse.correlation_id || Constants.EMPTY_STRING,\n serverResponse.claims || Constants.EMPTY_STRING,\n serverErrorNo\n );\n }\n\n throw serverError;\n }\n }\n\n /**\n * Returns a constructed token response based on given string. Also manages the cache updates and cleanups.\n * @param serverTokenResponse\n * @param authority\n */\n async handleServerTokenResponse(\n serverTokenResponse: ServerAuthorizationTokenResponse,\n authority: Authority,\n reqTimestamp: number,\n request: BaseAuthRequest,\n authCodePayload?: AuthorizationCodePayload,\n userAssertionHash?: string,\n handlingRefreshTokenResponse?: boolean,\n forceCacheRefreshTokenResponse?: boolean,\n serverRequestId?: string\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.HandleServerTokenResponse,\n serverTokenResponse.correlation_id\n );\n\n // create an idToken object (not entity)\n let idTokenClaims: TokenClaims | undefined;\n if (serverTokenResponse.id_token) {\n idTokenClaims = extractTokenClaims(\n serverTokenResponse.id_token || Constants.EMPTY_STRING,\n this.cryptoObj.base64Decode\n );\n\n // token nonce check (TODO: Add a warning if no nonce is given?)\n if (authCodePayload && authCodePayload.nonce) {\n if (idTokenClaims.nonce !== authCodePayload.nonce) {\n throw createClientAuthError(\n ClientAuthErrorCodes.nonceMismatch\n );\n }\n }\n\n // token max_age check\n if (request.maxAge || request.maxAge === 0) {\n const authTime = idTokenClaims.auth_time;\n if (!authTime) {\n throw createClientAuthError(\n ClientAuthErrorCodes.authTimeNotFound\n );\n }\n\n checkMaxAge(authTime, request.maxAge);\n }\n }\n\n // generate homeAccountId\n this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(\n serverTokenResponse.client_info || Constants.EMPTY_STRING,\n authority.authorityType,\n this.logger,\n this.cryptoObj,\n idTokenClaims\n );\n\n // save the response tokens\n let requestStateObj: RequestStateObject | undefined;\n if (!!authCodePayload && !!authCodePayload.state) {\n requestStateObj = ProtocolUtils.parseRequestState(\n this.cryptoObj,\n authCodePayload.state\n );\n }\n\n // Add keyId from request to serverTokenResponse if defined\n serverTokenResponse.key_id =\n serverTokenResponse.key_id || request.sshKid || undefined;\n\n const cacheRecord = this.generateCacheRecord(\n serverTokenResponse,\n authority,\n reqTimestamp,\n request,\n idTokenClaims,\n userAssertionHash,\n authCodePayload\n );\n let cacheContext;\n try {\n if (this.persistencePlugin && this.serializableCache) {\n this.logger.verbose(\n \"Persistence enabled, calling beforeCacheAccess\"\n );\n cacheContext = new TokenCacheContext(\n this.serializableCache,\n true\n );\n await this.persistencePlugin.beforeCacheAccess(cacheContext);\n }\n /*\n * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache.\n * If not present, we should return null, as it's the case that another application called removeAccount in between\n * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by\n * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration.\n */\n if (\n handlingRefreshTokenResponse &&\n !forceCacheRefreshTokenResponse &&\n cacheRecord.account\n ) {\n const key = this.cacheStorage.generateAccountKey(\n cacheRecord.account.getAccountInfo()\n );\n const account = this.cacheStorage.getAccount(\n key,\n request.correlationId\n );\n if (!account) {\n this.logger.warning(\n \"Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache\"\n );\n return await ResponseHandler.generateAuthenticationResult(\n this.cryptoObj,\n authority,\n cacheRecord,\n false,\n request,\n idTokenClaims,\n requestStateObj,\n undefined,\n serverRequestId\n );\n }\n }\n await this.cacheStorage.saveCacheRecord(\n cacheRecord,\n request.correlationId,\n request.storeInCache\n );\n } finally {\n if (\n this.persistencePlugin &&\n this.serializableCache &&\n cacheContext\n ) {\n this.logger.verbose(\n \"Persistence enabled, calling afterCacheAccess\"\n );\n await this.persistencePlugin.afterCacheAccess(cacheContext);\n }\n }\n\n return ResponseHandler.generateAuthenticationResult(\n this.cryptoObj,\n authority,\n cacheRecord,\n false,\n request,\n idTokenClaims,\n requestStateObj,\n serverTokenResponse,\n serverRequestId\n );\n }\n\n /**\n * Generates CacheRecord\n * @param serverTokenResponse\n * @param idTokenObj\n * @param authority\n */\n private generateCacheRecord(\n serverTokenResponse: ServerAuthorizationTokenResponse,\n authority: Authority,\n reqTimestamp: number,\n request: BaseAuthRequest,\n idTokenClaims?: TokenClaims,\n userAssertionHash?: string,\n authCodePayload?: AuthorizationCodePayload\n ): CacheRecord {\n const env = authority.getPreferredCache();\n if (!env) {\n throw createClientAuthError(\n ClientAuthErrorCodes.invalidCacheEnvironment\n );\n }\n\n const claimsTenantId = getTenantIdFromIdTokenClaims(idTokenClaims);\n\n // IdToken: non AAD scenarios can have empty realm\n let cachedIdToken: IdTokenEntity | undefined;\n let cachedAccount: AccountEntity | undefined;\n if (serverTokenResponse.id_token && !!idTokenClaims) {\n cachedIdToken = CacheHelpers.createIdTokenEntity(\n this.homeAccountIdentifier,\n env,\n serverTokenResponse.id_token,\n this.clientId,\n claimsTenantId || \"\"\n );\n\n cachedAccount = buildAccountToCache(\n this.cacheStorage,\n authority,\n this.homeAccountIdentifier,\n this.cryptoObj.base64Decode,\n request.correlationId,\n idTokenClaims,\n serverTokenResponse.client_info,\n env,\n claimsTenantId,\n authCodePayload,\n undefined, // nativeAccountId\n this.logger\n );\n }\n\n // AccessToken\n let cachedAccessToken: AccessTokenEntity | null = null;\n if (serverTokenResponse.access_token) {\n // If scopes not returned in server response, use request scopes\n const responseScopes = serverTokenResponse.scope\n ? ScopeSet.fromString(serverTokenResponse.scope)\n : new ScopeSet(request.scopes || []);\n\n /*\n * Use timestamp calculated before request\n * Server may return timestamps as strings, parse to numbers if so.\n */\n const expiresIn: number =\n (typeof serverTokenResponse.expires_in === \"string\"\n ? parseInt(serverTokenResponse.expires_in, 10)\n : serverTokenResponse.expires_in) || 0;\n const extExpiresIn: number =\n (typeof serverTokenResponse.ext_expires_in === \"string\"\n ? parseInt(serverTokenResponse.ext_expires_in, 10)\n : serverTokenResponse.ext_expires_in) || 0;\n const refreshIn: number | undefined =\n (typeof serverTokenResponse.refresh_in === \"string\"\n ? parseInt(serverTokenResponse.refresh_in, 10)\n : serverTokenResponse.refresh_in) || undefined;\n const tokenExpirationSeconds = reqTimestamp + expiresIn;\n const extendedTokenExpirationSeconds =\n tokenExpirationSeconds + extExpiresIn;\n const refreshOnSeconds =\n refreshIn && refreshIn > 0\n ? reqTimestamp + refreshIn\n : undefined;\n\n // non AAD scenarios can have empty realm\n cachedAccessToken = CacheHelpers.createAccessTokenEntity(\n this.homeAccountIdentifier,\n env,\n serverTokenResponse.access_token,\n this.clientId,\n claimsTenantId || authority.tenant || \"\",\n responseScopes.printScopes(),\n tokenExpirationSeconds,\n extendedTokenExpirationSeconds,\n this.cryptoObj.base64Decode,\n refreshOnSeconds,\n serverTokenResponse.token_type,\n userAssertionHash,\n serverTokenResponse.key_id,\n request.claims,\n request.requestedClaimsHash\n );\n }\n\n // refreshToken\n let cachedRefreshToken: RefreshTokenEntity | null = null;\n if (serverTokenResponse.refresh_token) {\n let rtExpiresOn: number | undefined;\n if (serverTokenResponse.refresh_token_expires_in) {\n const rtExpiresIn: number =\n typeof serverTokenResponse.refresh_token_expires_in ===\n \"string\"\n ? parseInt(\n serverTokenResponse.refresh_token_expires_in,\n 10\n )\n : serverTokenResponse.refresh_token_expires_in;\n rtExpiresOn = reqTimestamp + rtExpiresIn;\n }\n cachedRefreshToken = CacheHelpers.createRefreshTokenEntity(\n this.homeAccountIdentifier,\n env,\n serverTokenResponse.refresh_token,\n this.clientId,\n serverTokenResponse.foci,\n userAssertionHash,\n rtExpiresOn\n );\n }\n\n // appMetadata\n let cachedAppMetadata: AppMetadataEntity | null = null;\n if (serverTokenResponse.foci) {\n cachedAppMetadata = {\n clientId: this.clientId,\n environment: env,\n familyId: serverTokenResponse.foci,\n };\n }\n\n return {\n account: cachedAccount,\n idToken: cachedIdToken,\n accessToken: cachedAccessToken,\n refreshToken: cachedRefreshToken,\n appMetadata: cachedAppMetadata,\n };\n }\n\n /**\n * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache.\n *\n * Optionally takes a state string that is set as-is in the response.\n *\n * @param cacheRecord\n * @param idTokenObj\n * @param fromTokenCache\n * @param stateString\n */\n static async generateAuthenticationResult(\n cryptoObj: ICrypto,\n authority: Authority,\n cacheRecord: CacheRecord,\n fromTokenCache: boolean,\n request: BaseAuthRequest,\n idTokenClaims?: TokenClaims,\n requestState?: RequestStateObject,\n serverTokenResponse?: ServerAuthorizationTokenResponse,\n requestId?: string\n ): Promise {\n let accessToken: string = Constants.EMPTY_STRING;\n let responseScopes: Array = [];\n let expiresOn: Date | null = null;\n let extExpiresOn: Date | undefined;\n let refreshOn: Date | undefined;\n let familyId: string = Constants.EMPTY_STRING;\n\n if (cacheRecord.accessToken) {\n /*\n * if the request object has `popKid` property, `signPopToken` will be set to false and\n * the token will be returned unsigned\n */\n if (\n cacheRecord.accessToken.tokenType ===\n AuthenticationScheme.POP &&\n !request.popKid\n ) {\n const popTokenGenerator: PopTokenGenerator =\n new PopTokenGenerator(cryptoObj);\n const { secret, keyId } = cacheRecord.accessToken;\n\n if (!keyId) {\n throw createClientAuthError(\n ClientAuthErrorCodes.keyIdMissing\n );\n }\n\n accessToken = await popTokenGenerator.signPopToken(\n secret,\n keyId,\n request\n );\n } else {\n accessToken = cacheRecord.accessToken.secret;\n }\n responseScopes = ScopeSet.fromString(\n cacheRecord.accessToken.target\n ).asArray();\n // Access token expiresOn cached in seconds, converting to Date for AuthenticationResult\n expiresOn = TimeUtils.toDateFromSeconds(\n cacheRecord.accessToken.expiresOn\n );\n extExpiresOn = TimeUtils.toDateFromSeconds(\n cacheRecord.accessToken.extendedExpiresOn\n );\n if (cacheRecord.accessToken.refreshOn) {\n refreshOn = TimeUtils.toDateFromSeconds(\n cacheRecord.accessToken.refreshOn\n );\n }\n }\n\n if (cacheRecord.appMetadata) {\n familyId =\n cacheRecord.appMetadata.familyId === THE_FAMILY_ID\n ? THE_FAMILY_ID\n : \"\";\n }\n const uid = idTokenClaims?.oid || idTokenClaims?.sub || \"\";\n const tid = idTokenClaims?.tid || \"\";\n\n // for hybrid + native bridge enablement, send back the native account Id\n if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) {\n cacheRecord.account.nativeAccountId =\n serverTokenResponse?.spa_accountid;\n }\n\n const accountInfo: AccountInfo | null = cacheRecord.account\n ? updateAccountTenantProfileData(\n cacheRecord.account.getAccountInfo(),\n undefined, // tenantProfile optional\n idTokenClaims,\n cacheRecord.idToken?.secret\n )\n : null;\n\n return {\n authority: authority.canonicalAuthority,\n uniqueId: uid,\n tenantId: tid,\n scopes: responseScopes,\n account: accountInfo,\n idToken: cacheRecord?.idToken?.secret || \"\",\n idTokenClaims: idTokenClaims || {},\n accessToken: accessToken,\n fromCache: fromTokenCache,\n expiresOn: expiresOn,\n extExpiresOn: extExpiresOn,\n refreshOn: refreshOn,\n correlationId: request.correlationId,\n requestId: requestId || Constants.EMPTY_STRING,\n familyId: familyId,\n tokenType:\n cacheRecord.accessToken?.tokenType || Constants.EMPTY_STRING,\n state: requestState\n ? requestState.userRequestState\n : Constants.EMPTY_STRING,\n cloudGraphHostName:\n cacheRecord.account?.cloudGraphHostName ||\n Constants.EMPTY_STRING,\n msGraphHost:\n cacheRecord.account?.msGraphHost || Constants.EMPTY_STRING,\n code: serverTokenResponse?.spa_code,\n fromNativeBroker: false,\n };\n }\n}\n\nexport function buildAccountToCache(\n cacheStorage: CacheManager,\n authority: Authority,\n homeAccountId: string,\n base64Decode: (input: string) => string,\n correlationId: string,\n idTokenClaims?: TokenClaims,\n clientInfo?: string,\n environment?: string,\n claimsTenantId?: string | null,\n authCodePayload?: AuthorizationCodePayload,\n nativeAccountId?: string,\n logger?: Logger\n): AccountEntity {\n logger?.verbose(\"setCachedAccount called\");\n\n // Check if base account is already cached\n const accountKeys = cacheStorage.getAccountKeys();\n const baseAccountKey = accountKeys.find((accountKey: string) => {\n return accountKey.startsWith(homeAccountId);\n });\n\n let cachedAccount: AccountEntity | null = null;\n if (baseAccountKey) {\n cachedAccount = cacheStorage.getAccount(baseAccountKey, correlationId);\n }\n\n const baseAccount =\n cachedAccount ||\n AccountEntity.createAccount(\n {\n homeAccountId,\n idTokenClaims,\n clientInfo,\n environment,\n cloudGraphHostName: authCodePayload?.cloud_graph_host_name,\n msGraphHost: authCodePayload?.msgraph_host,\n nativeAccountId: nativeAccountId,\n },\n authority,\n base64Decode\n );\n\n const tenantProfiles = baseAccount.tenantProfiles || [];\n const tenantId = claimsTenantId || baseAccount.realm;\n if (\n tenantId &&\n !tenantProfiles.find((tenantProfile) => {\n return tenantProfile.tenantId === tenantId;\n })\n ) {\n const newTenantProfile = buildTenantProfile(\n homeAccountId,\n baseAccount.localAccountId,\n tenantId,\n idTokenClaims\n );\n tenantProfiles.push(newTenantProfile);\n }\n baseAccount.tenantProfiles = tenantProfiles;\n\n return baseAccount;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientAssertionCallback,\n ClientAssertionConfig,\n} from \"../account/ClientCredentials.js\";\n\nexport async function getClientAssertion(\n clientAssertion: string | ClientAssertionCallback,\n clientId: string,\n tokenEndpoint?: string\n): Promise {\n if (typeof clientAssertion === \"string\") {\n return clientAssertion;\n } else {\n const config: ClientAssertionConfig = {\n clientId: clientId,\n tokenEndpoint: tokenEndpoint,\n };\n return clientAssertion(config);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BaseClient } from \"./BaseClient.js\";\nimport { CommonAuthorizationCodeRequest } from \"../request/CommonAuthorizationCodeRequest.js\";\nimport { Authority } from \"../authority/Authority.js\";\nimport * as RequestParameterBuilder from \"../request/RequestParameterBuilder.js\";\nimport * as UrlUtils from \"../utils/UrlUtils.js\";\nimport {\n GrantType,\n AuthenticationScheme,\n Separators,\n HeaderNames,\n} from \"../utils/Constants.js\";\nimport * as AADServerParamKeys from \"../constants/AADServerParamKeys.js\";\nimport {\n ClientConfiguration,\n isOidcProtocolMode,\n} from \"../config/ClientConfiguration.js\";\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse.js\";\nimport { NetworkResponse } from \"../network/NetworkResponse.js\";\nimport { ResponseHandler } from \"../response/ResponseHandler.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { StringUtils } from \"../utils/StringUtils.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { UrlString } from \"../url/UrlString.js\";\nimport { CommonEndSessionRequest } from \"../request/CommonEndSessionRequest.js\";\nimport { PopTokenGenerator } from \"../crypto/PopTokenGenerator.js\";\nimport { AuthorizationCodePayload } from \"../response/AuthorizationCodePayload.js\";\nimport * as TimeUtils from \"../utils/TimeUtils.js\";\nimport {\n buildClientInfoFromHomeAccountId,\n buildClientInfo,\n} from \"../account/ClientInfo.js\";\nimport { CcsCredentialType, CcsCredential } from \"../account/CcsCredential.js\";\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\nimport { ClientAssertion } from \"../account/ClientCredentials.js\";\nimport { getClientAssertion } from \"../utils/ClientAssertionUtils.js\";\nimport { getRequestThumbprint } from \"../network/RequestThumbprint.js\";\n\n/**\n * Oauth2.0 Authorization Code client\n * @internal\n */\nexport class AuthorizationCodeClient extends BaseClient {\n // Flag to indicate if client is for hybrid spa auth code redemption\n protected includeRedirectUri: boolean = true;\n private oidcDefaultScopes;\n\n constructor(\n configuration: ClientConfiguration,\n performanceClient?: IPerformanceClient\n ) {\n super(configuration, performanceClient);\n this.oidcDefaultScopes =\n this.config.authOptions.authority.options.OIDCOptions?.defaultScopes;\n }\n\n /**\n * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the\n * authorization_code_grant\n * @param request\n */\n async acquireToken(\n request: CommonAuthorizationCodeRequest,\n authCodePayload?: AuthorizationCodePayload\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthClientAcquireToken,\n request.correlationId\n );\n\n if (!request.code) {\n throw createClientAuthError(\n ClientAuthErrorCodes.requestCannotBeMade\n );\n }\n\n const reqTimestamp = TimeUtils.nowSeconds();\n const response = await invokeAsync(\n this.executeTokenRequest.bind(this),\n PerformanceEvents.AuthClientExecuteTokenRequest,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(this.authority, request);\n\n // Retrieve requestId from response headers\n const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\n\n const responseHandler = new ResponseHandler(\n this.config.authOptions.clientId,\n this.cacheManager,\n this.cryptoUtils,\n this.logger,\n this.config.serializableCache,\n this.config.persistencePlugin,\n this.performanceClient\n );\n\n // Validate response. This function throws a server error if an error is returned by the server.\n responseHandler.validateTokenResponse(response.body);\n\n return invokeAsync(\n responseHandler.handleServerTokenResponse.bind(responseHandler),\n PerformanceEvents.HandleServerTokenResponse,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n response.body,\n this.authority,\n reqTimestamp,\n request,\n authCodePayload,\n undefined,\n undefined,\n undefined,\n requestId\n );\n }\n\n /**\n * Used to log out the current user, and redirect the user to the postLogoutRedirectUri.\n * Default behaviour is to redirect the user to `window.location.href`.\n * @param authorityUri\n */\n getLogoutUri(logoutRequest: CommonEndSessionRequest): string {\n // Throw error if logoutRequest is null/undefined\n if (!logoutRequest) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.logoutRequestEmpty\n );\n }\n const queryString = this.createLogoutUrlQueryString(logoutRequest);\n\n // Construct logout URI\n return UrlString.appendQueryString(\n this.authority.endSessionEndpoint,\n queryString\n );\n }\n\n /**\n * Executes POST request to token endpoint\n * @param authority\n * @param request\n */\n private async executeTokenRequest(\n authority: Authority,\n request: CommonAuthorizationCodeRequest\n ): Promise> {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthClientExecuteTokenRequest,\n request.correlationId\n );\n\n const queryParametersString = this.createTokenQueryParameters(request);\n const endpoint = UrlString.appendQueryString(\n authority.tokenEndpoint,\n queryParametersString\n );\n\n const requestBody = await invokeAsync(\n this.createTokenRequestBody.bind(this),\n PerformanceEvents.AuthClientCreateTokenRequestBody,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request);\n\n let ccsCredential: CcsCredential | undefined = undefined;\n if (request.clientInfo) {\n try {\n const clientInfo = buildClientInfo(\n request.clientInfo,\n this.cryptoUtils.base64Decode\n );\n ccsCredential = {\n credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\n type: CcsCredentialType.HOME_ACCOUNT_ID,\n };\n } catch (e) {\n this.logger.verbose(\n \"Could not parse client info for CCS Header: \" + e\n );\n }\n }\n const headers: Record = this.createTokenRequestHeaders(\n ccsCredential || request.ccsCredential\n );\n\n const thumbprint = getRequestThumbprint(\n this.config.authOptions.clientId,\n request\n );\n\n return invokeAsync(\n this.executePostToTokenEndpoint.bind(this),\n PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n endpoint,\n requestBody,\n headers,\n thumbprint,\n request.correlationId,\n PerformanceEvents.AuthorizationCodeClientExecutePostToTokenEndpoint\n );\n }\n\n /**\n * Generates a map for all the params to be sent to the service\n * @param request\n */\n private async createTokenRequestBody(\n request: CommonAuthorizationCodeRequest\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.AuthClientCreateTokenRequestBody,\n request.correlationId\n );\n\n const parameters = new Map();\n\n RequestParameterBuilder.addClientId(\n parameters,\n request.embeddedClientId ||\n request.tokenBodyParameters?.[AADServerParamKeys.CLIENT_ID] ||\n this.config.authOptions.clientId\n );\n\n /*\n * For hybrid spa flow, there will be a code but no verifier\n * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI\n */\n if (!this.includeRedirectUri) {\n // Just validate\n if (!request.redirectUri) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.redirectUriEmpty\n );\n }\n } else {\n // Validate and include redirect uri\n RequestParameterBuilder.addRedirectUri(\n parameters,\n request.redirectUri\n );\n }\n\n // Add scope array, parameter builder will add default scopes and dedupe\n RequestParameterBuilder.addScopes(\n parameters,\n request.scopes,\n true,\n this.oidcDefaultScopes\n );\n\n // add code: user set, not validated\n RequestParameterBuilder.addAuthorizationCode(parameters, request.code);\n\n // Add library metadata\n RequestParameterBuilder.addLibraryInfo(\n parameters,\n this.config.libraryInfo\n );\n RequestParameterBuilder.addApplicationTelemetry(\n parameters,\n this.config.telemetry.application\n );\n RequestParameterBuilder.addThrottling(parameters);\n\n if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {\n RequestParameterBuilder.addServerTelemetry(\n parameters,\n this.serverTelemetryManager\n );\n }\n\n // add code_verifier if passed\n if (request.codeVerifier) {\n RequestParameterBuilder.addCodeVerifier(\n parameters,\n request.codeVerifier\n );\n }\n\n if (this.config.clientCredentials.clientSecret) {\n RequestParameterBuilder.addClientSecret(\n parameters,\n this.config.clientCredentials.clientSecret\n );\n }\n\n if (this.config.clientCredentials.clientAssertion) {\n const clientAssertion: ClientAssertion =\n this.config.clientCredentials.clientAssertion;\n\n RequestParameterBuilder.addClientAssertion(\n parameters,\n await getClientAssertion(\n clientAssertion.assertion,\n this.config.authOptions.clientId,\n request.resourceRequestUri\n )\n );\n RequestParameterBuilder.addClientAssertionType(\n parameters,\n clientAssertion.assertionType\n );\n }\n\n RequestParameterBuilder.addGrantType(\n parameters,\n GrantType.AUTHORIZATION_CODE_GRANT\n );\n RequestParameterBuilder.addClientInfo(parameters);\n\n if (request.authenticationScheme === AuthenticationScheme.POP) {\n const popTokenGenerator = new PopTokenGenerator(\n this.cryptoUtils,\n this.performanceClient\n );\n\n let reqCnfData;\n if (!request.popKid) {\n const generatedReqCnfData = await invokeAsync(\n popTokenGenerator.generateCnf.bind(popTokenGenerator),\n PerformanceEvents.PopTokenGenerateCnf,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, this.logger);\n reqCnfData = generatedReqCnfData.reqCnfString;\n } else {\n reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\n }\n\n // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\n RequestParameterBuilder.addPopToken(parameters, reqCnfData);\n } else if (request.authenticationScheme === AuthenticationScheme.SSH) {\n if (request.sshJwk) {\n RequestParameterBuilder.addSshJwk(parameters, request.sshJwk);\n } else {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.missingSshJwk\n );\n }\n }\n\n if (\n !StringUtils.isEmptyObj(request.claims) ||\n (this.config.authOptions.clientCapabilities &&\n this.config.authOptions.clientCapabilities.length > 0)\n ) {\n RequestParameterBuilder.addClaims(\n parameters,\n request.claims,\n this.config.authOptions.clientCapabilities\n );\n }\n\n let ccsCred: CcsCredential | undefined = undefined;\n if (request.clientInfo) {\n try {\n const clientInfo = buildClientInfo(\n request.clientInfo,\n this.cryptoUtils.base64Decode\n );\n ccsCred = {\n credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,\n type: CcsCredentialType.HOME_ACCOUNT_ID,\n };\n } catch (e) {\n this.logger.verbose(\n \"Could not parse client info for CCS Header: \" + e\n );\n }\n } else {\n ccsCred = request.ccsCredential;\n }\n\n // Adds these as parameters in the request instead of headers to prevent CORS preflight request\n if (this.config.systemOptions.preventCorsPreflight && ccsCred) {\n switch (ccsCred.type) {\n case CcsCredentialType.HOME_ACCOUNT_ID:\n try {\n const clientInfo = buildClientInfoFromHomeAccountId(\n ccsCred.credential\n );\n RequestParameterBuilder.addCcsOid(\n parameters,\n clientInfo\n );\n } catch (e) {\n this.logger.verbose(\n \"Could not parse home account ID for CCS Header: \" +\n e\n );\n }\n break;\n case CcsCredentialType.UPN:\n RequestParameterBuilder.addCcsUpn(\n parameters,\n ccsCred.credential\n );\n break;\n }\n }\n\n if (request.embeddedClientId) {\n RequestParameterBuilder.addBrokerParameters(\n parameters,\n this.config.authOptions.clientId,\n this.config.authOptions.redirectUri\n );\n }\n\n if (request.tokenBodyParameters) {\n RequestParameterBuilder.addExtraQueryParameters(\n parameters,\n request.tokenBodyParameters\n );\n }\n\n // Add hybrid spa parameters if not already provided\n if (\n request.enableSpaAuthorizationCode &&\n (!request.tokenBodyParameters ||\n !request.tokenBodyParameters[\n AADServerParamKeys.RETURN_SPA_CODE\n ])\n ) {\n RequestParameterBuilder.addExtraQueryParameters(parameters, {\n [AADServerParamKeys.RETURN_SPA_CODE]: \"1\",\n });\n }\n\n RequestParameterBuilder.instrumentBrokerParams(\n parameters,\n request.correlationId,\n this.performanceClient\n );\n return UrlUtils.mapToQueryString(parameters);\n }\n\n /**\n * This API validates the `EndSessionRequest` and creates a URL\n * @param request\n */\n private createLogoutUrlQueryString(\n request: CommonEndSessionRequest\n ): string {\n const parameters = new Map();\n\n if (request.postLogoutRedirectUri) {\n RequestParameterBuilder.addPostLogoutRedirectUri(\n parameters,\n request.postLogoutRedirectUri\n );\n }\n\n if (request.correlationId) {\n RequestParameterBuilder.addCorrelationId(\n parameters,\n request.correlationId\n );\n }\n\n if (request.idTokenHint) {\n RequestParameterBuilder.addIdTokenHint(\n parameters,\n request.idTokenHint\n );\n }\n\n if (request.state) {\n RequestParameterBuilder.addState(parameters, request.state);\n }\n\n if (request.logoutHint) {\n RequestParameterBuilder.addLogoutHint(\n parameters,\n request.logoutHint\n );\n }\n\n if (request.extraQueryParameters) {\n RequestParameterBuilder.addExtraQueryParameters(\n parameters,\n request.extraQueryParameters\n );\n }\n\n if (this.config.authOptions.instanceAware) {\n RequestParameterBuilder.addInstanceAware(parameters);\n }\n\n return UrlUtils.mapToQueryString(\n parameters,\n this.config.authOptions.encodeExtraQueryParams,\n request.extraQueryParameters\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientConfiguration,\n isOidcProtocolMode,\n} from \"../config/ClientConfiguration.js\";\nimport { BaseClient } from \"./BaseClient.js\";\nimport { CommonRefreshTokenRequest } from \"../request/CommonRefreshTokenRequest.js\";\nimport { Authority } from \"../authority/Authority.js\";\nimport { ServerAuthorizationTokenResponse } from \"../response/ServerAuthorizationTokenResponse.js\";\nimport * as RequestParameterBuilder from \"../request/RequestParameterBuilder.js\";\nimport * as UrlUtils from \"../utils/UrlUtils.js\";\nimport {\n GrantType,\n AuthenticationScheme,\n Errors,\n HeaderNames,\n} from \"../utils/Constants.js\";\nimport * as AADServerParamKeys from \"../constants/AADServerParamKeys.js\";\nimport { ResponseHandler } from \"../response/ResponseHandler.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { PopTokenGenerator } from \"../crypto/PopTokenGenerator.js\";\nimport { StringUtils } from \"../utils/StringUtils.js\";\nimport { NetworkResponse } from \"../network/NetworkResponse.js\";\nimport { CommonSilentFlowRequest } from \"../request/CommonSilentFlowRequest.js\";\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport {\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"../error/ClientAuthError.js\";\nimport { ServerError } from \"../error/ServerError.js\";\nimport * as TimeUtils from \"../utils/TimeUtils.js\";\nimport { UrlString } from \"../url/UrlString.js\";\nimport { CcsCredentialType } from \"../account/CcsCredential.js\";\nimport { buildClientInfoFromHomeAccountId } from \"../account/ClientInfo.js\";\nimport {\n InteractionRequiredAuthError,\n InteractionRequiredAuthErrorCodes,\n createInteractionRequiredAuthError,\n} from \"../error/InteractionRequiredAuthError.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { invoke, invokeAsync } from \"../utils/FunctionWrappers.js\";\nimport { ClientAssertion } from \"../account/ClientCredentials.js\";\nimport { getClientAssertion } from \"../utils/ClientAssertionUtils.js\";\nimport { getRequestThumbprint } from \"../network/RequestThumbprint.js\";\n\nconst DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS = 300; // 5 Minutes\n\n/**\n * OAuth2.0 refresh token client\n * @internal\n */\nexport class RefreshTokenClient extends BaseClient {\n constructor(\n configuration: ClientConfiguration,\n performanceClient?: IPerformanceClient\n ) {\n super(configuration, performanceClient);\n }\n public async acquireToken(\n request: CommonRefreshTokenRequest\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RefreshTokenClientAcquireToken,\n request.correlationId\n );\n\n const reqTimestamp = TimeUtils.nowSeconds();\n const response = await invokeAsync(\n this.executeTokenRequest.bind(this),\n PerformanceEvents.RefreshTokenClientExecuteTokenRequest,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, this.authority);\n\n // Retrieve requestId from response headers\n const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];\n const responseHandler = new ResponseHandler(\n this.config.authOptions.clientId,\n this.cacheManager,\n this.cryptoUtils,\n this.logger,\n this.config.serializableCache,\n this.config.persistencePlugin\n );\n responseHandler.validateTokenResponse(response.body);\n\n return invokeAsync(\n responseHandler.handleServerTokenResponse.bind(responseHandler),\n PerformanceEvents.HandleServerTokenResponse,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n response.body,\n this.authority,\n reqTimestamp,\n request,\n undefined,\n undefined,\n true,\n request.forceCache,\n requestId\n );\n }\n\n /**\n * Gets cached refresh token and attaches to request, then calls acquireToken API\n * @param request\n */\n public async acquireTokenByRefreshToken(\n request: CommonSilentFlowRequest\n ): Promise {\n // Cannot renew token if no request object is given.\n if (!request) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.tokenRequestEmpty\n );\n }\n\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken,\n request.correlationId\n );\n\n // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\n if (!request.account) {\n throw createClientAuthError(\n ClientAuthErrorCodes.noAccountInSilentRequest\n );\n }\n\n // try checking if FOCI is enabled for the given application\n const isFOCI = this.cacheManager.isAppMetadataFOCI(\n request.account.environment\n );\n\n // if the app is part of the family, retrive a Family refresh token if present and make a refreshTokenRequest\n if (isFOCI) {\n try {\n return await invokeAsync(\n this.acquireTokenWithCachedRefreshToken.bind(this),\n PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, true);\n } catch (e) {\n const noFamilyRTInCache =\n e instanceof InteractionRequiredAuthError &&\n e.errorCode ===\n InteractionRequiredAuthErrorCodes.noTokensFound;\n const clientMismatchErrorWithFamilyRT =\n e instanceof ServerError &&\n e.errorCode === Errors.INVALID_GRANT_ERROR &&\n e.subError === Errors.CLIENT_MISMATCH_ERROR;\n\n // if family Refresh Token (FRT) cache acquisition fails or if client_mismatch error is seen with FRT, reattempt with application Refresh Token (ART)\n if (noFamilyRTInCache || clientMismatchErrorWithFamilyRT) {\n return invokeAsync(\n this.acquireTokenWithCachedRefreshToken.bind(this),\n PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, false);\n // throw in all other cases\n } else {\n throw e;\n }\n }\n }\n // fall back to application refresh token acquisition\n return invokeAsync(\n this.acquireTokenWithCachedRefreshToken.bind(this),\n PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, false);\n }\n\n /**\n * makes a network call to acquire tokens by exchanging RefreshToken available in userCache; throws if refresh token is not cached\n * @param request\n */\n private async acquireTokenWithCachedRefreshToken(\n request: CommonSilentFlowRequest,\n foci: boolean\n ) {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RefreshTokenClientAcquireTokenWithCachedRefreshToken,\n request.correlationId\n );\n\n // fetches family RT or application RT based on FOCI value\n const refreshToken = invoke(\n this.cacheManager.getRefreshToken.bind(this.cacheManager),\n PerformanceEvents.CacheManagerGetRefreshToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n request.account,\n foci,\n request.correlationId,\n undefined,\n this.performanceClient\n );\n\n if (!refreshToken) {\n throw createInteractionRequiredAuthError(\n InteractionRequiredAuthErrorCodes.noTokensFound\n );\n }\n\n if (\n refreshToken.expiresOn &&\n TimeUtils.isTokenExpired(\n refreshToken.expiresOn,\n request.refreshTokenExpirationOffsetSeconds ||\n DEFAULT_REFRESH_TOKEN_EXPIRATION_OFFSET_SECONDS\n )\n ) {\n this.performanceClient?.addFields(\n { rtExpiresOnMs: Number(refreshToken.expiresOn) },\n request.correlationId\n );\n throw createInteractionRequiredAuthError(\n InteractionRequiredAuthErrorCodes.refreshTokenExpired\n );\n }\n // attach cached RT size to the current measurement\n\n const refreshTokenRequest: CommonRefreshTokenRequest = {\n ...request,\n refreshToken: refreshToken.secret,\n authenticationScheme:\n request.authenticationScheme || AuthenticationScheme.BEARER,\n ccsCredential: {\n credential: request.account.homeAccountId,\n type: CcsCredentialType.HOME_ACCOUNT_ID,\n },\n };\n\n try {\n return await invokeAsync(\n this.acquireToken.bind(this),\n PerformanceEvents.RefreshTokenClientAcquireToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(refreshTokenRequest);\n } catch (e) {\n if (e instanceof InteractionRequiredAuthError) {\n this.performanceClient?.addFields(\n { rtExpiresOnMs: Number(refreshToken.expiresOn) },\n request.correlationId\n );\n\n if (e.subError === InteractionRequiredAuthErrorCodes.badToken) {\n // Remove bad refresh token from cache\n this.logger.verbose(\n \"acquireTokenWithRefreshToken: bad refresh token, removing from cache\"\n );\n const badRefreshTokenKey =\n this.cacheManager.generateCredentialKey(refreshToken);\n this.cacheManager.removeRefreshToken(\n badRefreshTokenKey,\n request.correlationId\n );\n }\n }\n\n throw e;\n }\n }\n\n /**\n * Constructs the network message and makes a NW call to the underlying secure token service\n * @param request\n * @param authority\n */\n private async executeTokenRequest(\n request: CommonRefreshTokenRequest,\n authority: Authority\n ): Promise> {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RefreshTokenClientExecuteTokenRequest,\n request.correlationId\n );\n\n const queryParametersString = this.createTokenQueryParameters(request);\n const endpoint = UrlString.appendQueryString(\n authority.tokenEndpoint,\n queryParametersString\n );\n\n const requestBody = await invokeAsync(\n this.createTokenRequestBody.bind(this),\n PerformanceEvents.RefreshTokenClientCreateTokenRequestBody,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request);\n const headers: Record = this.createTokenRequestHeaders(\n request.ccsCredential\n );\n\n const thumbprint = getRequestThumbprint(\n this.config.authOptions.clientId,\n request\n );\n\n return invokeAsync(\n this.executePostToTokenEndpoint.bind(this),\n PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n endpoint,\n requestBody,\n headers,\n thumbprint,\n request.correlationId,\n PerformanceEvents.RefreshTokenClientExecutePostToTokenEndpoint\n );\n }\n\n /**\n * Helper function to create the token request body\n * @param request\n */\n private async createTokenRequestBody(\n request: CommonRefreshTokenRequest\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.RefreshTokenClientCreateTokenRequestBody,\n request.correlationId\n );\n\n const parameters = new Map();\n\n RequestParameterBuilder.addClientId(\n parameters,\n request.embeddedClientId ||\n request.tokenBodyParameters?.[AADServerParamKeys.CLIENT_ID] ||\n this.config.authOptions.clientId\n );\n\n if (request.redirectUri) {\n RequestParameterBuilder.addRedirectUri(\n parameters,\n request.redirectUri\n );\n }\n\n RequestParameterBuilder.addScopes(\n parameters,\n request.scopes,\n true,\n this.config.authOptions.authority.options.OIDCOptions?.defaultScopes\n );\n\n RequestParameterBuilder.addGrantType(\n parameters,\n GrantType.REFRESH_TOKEN_GRANT\n );\n\n RequestParameterBuilder.addClientInfo(parameters);\n\n RequestParameterBuilder.addLibraryInfo(\n parameters,\n this.config.libraryInfo\n );\n RequestParameterBuilder.addApplicationTelemetry(\n parameters,\n this.config.telemetry.application\n );\n RequestParameterBuilder.addThrottling(parameters);\n\n if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {\n RequestParameterBuilder.addServerTelemetry(\n parameters,\n this.serverTelemetryManager\n );\n }\n\n RequestParameterBuilder.addRefreshToken(\n parameters,\n request.refreshToken\n );\n\n if (this.config.clientCredentials.clientSecret) {\n RequestParameterBuilder.addClientSecret(\n parameters,\n this.config.clientCredentials.clientSecret\n );\n }\n\n if (this.config.clientCredentials.clientAssertion) {\n const clientAssertion: ClientAssertion =\n this.config.clientCredentials.clientAssertion;\n\n RequestParameterBuilder.addClientAssertion(\n parameters,\n await getClientAssertion(\n clientAssertion.assertion,\n this.config.authOptions.clientId,\n request.resourceRequestUri\n )\n );\n RequestParameterBuilder.addClientAssertionType(\n parameters,\n clientAssertion.assertionType\n );\n }\n\n if (request.authenticationScheme === AuthenticationScheme.POP) {\n const popTokenGenerator = new PopTokenGenerator(\n this.cryptoUtils,\n this.performanceClient\n );\n\n let reqCnfData;\n if (!request.popKid) {\n const generatedReqCnfData = await invokeAsync(\n popTokenGenerator.generateCnf.bind(popTokenGenerator),\n PerformanceEvents.PopTokenGenerateCnf,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, this.logger);\n\n reqCnfData = generatedReqCnfData.reqCnfString;\n } else {\n reqCnfData = this.cryptoUtils.encodeKid(request.popKid);\n }\n\n // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)\n RequestParameterBuilder.addPopToken(parameters, reqCnfData);\n } else if (request.authenticationScheme === AuthenticationScheme.SSH) {\n if (request.sshJwk) {\n RequestParameterBuilder.addSshJwk(parameters, request.sshJwk);\n } else {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.missingSshJwk\n );\n }\n }\n\n if (\n !StringUtils.isEmptyObj(request.claims) ||\n (this.config.authOptions.clientCapabilities &&\n this.config.authOptions.clientCapabilities.length > 0)\n ) {\n RequestParameterBuilder.addClaims(\n parameters,\n request.claims,\n this.config.authOptions.clientCapabilities\n );\n }\n\n if (\n this.config.systemOptions.preventCorsPreflight &&\n request.ccsCredential\n ) {\n switch (request.ccsCredential.type) {\n case CcsCredentialType.HOME_ACCOUNT_ID:\n try {\n const clientInfo = buildClientInfoFromHomeAccountId(\n request.ccsCredential.credential\n );\n RequestParameterBuilder.addCcsOid(\n parameters,\n clientInfo\n );\n } catch (e) {\n this.logger.verbose(\n \"Could not parse home account ID for CCS Header: \" +\n e\n );\n }\n break;\n case CcsCredentialType.UPN:\n RequestParameterBuilder.addCcsUpn(\n parameters,\n request.ccsCredential.credential\n );\n break;\n }\n }\n\n if (request.embeddedClientId) {\n RequestParameterBuilder.addBrokerParameters(\n parameters,\n this.config.authOptions.clientId,\n this.config.authOptions.redirectUri\n );\n }\n\n if (request.tokenBodyParameters) {\n RequestParameterBuilder.addExtraQueryParameters(\n parameters,\n request.tokenBodyParameters\n );\n }\n\n RequestParameterBuilder.instrumentBrokerParams(\n parameters,\n request.correlationId,\n this.performanceClient\n );\n return UrlUtils.mapToQueryString(parameters);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BaseClient } from \"./BaseClient.js\";\nimport { ClientConfiguration } from \"../config/ClientConfiguration.js\";\nimport { CommonSilentFlowRequest } from \"../request/CommonSilentFlowRequest.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport * as TimeUtils from \"../utils/TimeUtils.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { ResponseHandler } from \"../response/ResponseHandler.js\";\nimport { CacheRecord } from \"../cache/entities/CacheRecord.js\";\nimport { CacheOutcome } from \"../utils/Constants.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport { StringUtils } from \"../utils/StringUtils.js\";\nimport { checkMaxAge, extractTokenClaims } from \"../account/AuthToken.js\";\nimport { TokenClaims } from \"../account/TokenClaims.js\";\nimport { PerformanceEvents } from \"../telemetry/performance/PerformanceEvent.js\";\nimport { invokeAsync } from \"../utils/FunctionWrappers.js\";\nimport { getTenantFromAuthorityString } from \"../authority/Authority.js\";\n\n/** @internal */\nexport class SilentFlowClient extends BaseClient {\n constructor(\n configuration: ClientConfiguration,\n performanceClient?: IPerformanceClient\n ) {\n super(configuration, performanceClient);\n }\n\n /**\n * Retrieves token from cache or throws an error if it must be refreshed.\n * @param request\n */\n async acquireCachedToken(\n request: CommonSilentFlowRequest\n ): Promise<[AuthenticationResult, CacheOutcome]> {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.SilentFlowClientAcquireCachedToken,\n request.correlationId\n );\n let lastCacheOutcome: CacheOutcome = CacheOutcome.NOT_APPLICABLE;\n\n if (\n request.forceRefresh ||\n (!this.config.cacheOptions.claimsBasedCachingEnabled &&\n !StringUtils.isEmptyObj(request.claims))\n ) {\n // Must refresh due to present force_refresh flag.\n this.setCacheOutcome(\n CacheOutcome.FORCE_REFRESH_OR_CLAIMS,\n request.correlationId\n );\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenRefreshRequired\n );\n }\n\n // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\n if (!request.account) {\n throw createClientAuthError(\n ClientAuthErrorCodes.noAccountInSilentRequest\n );\n }\n\n const requestTenantId =\n request.account.tenantId ||\n getTenantFromAuthorityString(request.authority);\n const tokenKeys = this.cacheManager.getTokenKeys();\n const cachedAccessToken = this.cacheManager.getAccessToken(\n request.account,\n request,\n tokenKeys,\n requestTenantId\n );\n\n if (!cachedAccessToken) {\n // must refresh due to non-existent access_token\n this.setCacheOutcome(\n CacheOutcome.NO_CACHED_ACCESS_TOKEN,\n request.correlationId\n );\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenRefreshRequired\n );\n } else if (\n TimeUtils.wasClockTurnedBack(cachedAccessToken.cachedAt) ||\n TimeUtils.isTokenExpired(\n cachedAccessToken.expiresOn,\n this.config.systemOptions.tokenRenewalOffsetSeconds\n )\n ) {\n // must refresh due to the expires_in value\n this.setCacheOutcome(\n CacheOutcome.CACHED_ACCESS_TOKEN_EXPIRED,\n request.correlationId\n );\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenRefreshRequired\n );\n } else if (\n cachedAccessToken.refreshOn &&\n TimeUtils.isTokenExpired(cachedAccessToken.refreshOn, 0)\n ) {\n // must refresh (in the background) due to the refresh_in value\n lastCacheOutcome = CacheOutcome.PROACTIVELY_REFRESHED;\n\n // don't throw ClientAuthError.createRefreshRequiredError(), return cached token instead\n }\n\n const environment =\n request.authority || this.authority.getPreferredCache();\n const cacheRecord: CacheRecord = {\n account: this.cacheManager.getAccount(\n this.cacheManager.generateAccountKey(request.account),\n request.correlationId\n ),\n accessToken: cachedAccessToken,\n idToken: this.cacheManager.getIdToken(\n request.account,\n request.correlationId,\n tokenKeys,\n requestTenantId,\n this.performanceClient\n ),\n refreshToken: null,\n appMetadata:\n this.cacheManager.readAppMetadataFromCache(environment),\n };\n\n this.setCacheOutcome(lastCacheOutcome, request.correlationId);\n\n if (this.config.serverTelemetryManager) {\n this.config.serverTelemetryManager.incrementCacheHits();\n }\n\n return [\n await invokeAsync(\n this.generateResultFromCacheRecord.bind(this),\n PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(cacheRecord, request),\n lastCacheOutcome,\n ];\n }\n\n private setCacheOutcome(\n cacheOutcome: CacheOutcome,\n correlationId: string\n ): void {\n this.serverTelemetryManager?.setCacheOutcome(cacheOutcome);\n this.performanceClient?.addFields(\n {\n cacheOutcome: cacheOutcome,\n },\n correlationId\n );\n if (cacheOutcome !== CacheOutcome.NOT_APPLICABLE) {\n this.logger.info(\n `Token refresh is required due to cache outcome: ${cacheOutcome}`\n );\n }\n }\n\n /**\n * Helper function to build response object from the CacheRecord\n * @param cacheRecord\n */\n private async generateResultFromCacheRecord(\n cacheRecord: CacheRecord,\n request: CommonSilentFlowRequest\n ): Promise {\n this.performanceClient?.addQueueMeasurement(\n PerformanceEvents.SilentFlowClientGenerateResultFromCacheRecord,\n request.correlationId\n );\n let idTokenClaims: TokenClaims | undefined;\n if (cacheRecord.idToken) {\n idTokenClaims = extractTokenClaims(\n cacheRecord.idToken.secret,\n this.config.cryptoInterface.base64Decode\n );\n }\n\n // token max_age check\n if (request.maxAge || request.maxAge === 0) {\n const authTime = idTokenClaims?.auth_time;\n if (!authTime) {\n throw createClientAuthError(\n ClientAuthErrorCodes.authTimeNotFound\n );\n }\n\n checkMaxAge(authTime, request.maxAge);\n }\n\n return ResponseHandler.generateAuthenticationResult(\n this.cryptoUtils,\n this.authority,\n cacheRecord,\n true,\n request,\n idTokenClaims\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport { NetworkResponse } from \"./NetworkResponse.js\";\n\n/**\n * Options allowed by network request APIs.\n */\nexport type NetworkRequestOptions = {\n headers?: Record;\n body?: string;\n};\n\n/**\n * Client network interface to send backend requests.\n * @interface\n */\nexport interface INetworkModule {\n /**\n * Interface function for async network \"GET\" requests. Based on the Fetch standard: https://fetch.spec.whatwg.org/\n * @param url\n * @param requestParams\n * @param enableCaching\n */\n sendGetRequestAsync(\n url: string,\n options?: NetworkRequestOptions,\n timeout?: number\n ): Promise>;\n\n /**\n * Interface function for async network \"POST\" requests. Based on the Fetch standard: https://fetch.spec.whatwg.org/\n * @param url\n * @param requestParams\n * @param enableCaching\n */\n sendPostRequestAsync(\n url: string,\n options?: NetworkRequestOptions\n ): Promise>;\n}\n\nexport const StubbedNetworkModule: INetworkModule = {\n sendGetRequestAsync: () => {\n return Promise.reject(\n createClientAuthError(ClientAuthErrorCodes.methodNotImplemented)\n );\n },\n sendPostRequestAsync: () => {\n return Promise.reject(\n createClientAuthError(ClientAuthErrorCodes.methodNotImplemented)\n );\n },\n};\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { CommonAuthorizationUrlRequest } from \"../request/CommonAuthorizationUrlRequest.js\";\nimport * as RequestParameterBuilder from \"../request/RequestParameterBuilder.js\";\nimport { IPerformanceClient } from \"../telemetry/performance/IPerformanceClient.js\";\nimport * as AADServerParamKeys from \"../constants/AADServerParamKeys.js\";\nimport { AuthOptions } from \"../config/ClientConfiguration.js\";\nimport { PromptValue } from \"../utils/Constants.js\";\nimport { AccountInfo } from \"../account/AccountInfo.js\";\nimport { Logger } from \"../logger/Logger.js\";\nimport { buildClientInfoFromHomeAccountId } from \"../account/ClientInfo.js\";\nimport { Authority } from \"../authority/Authority.js\";\nimport { mapToQueryString } from \"../utils/UrlUtils.js\";\nimport { UrlString } from \"../url/UrlString.js\";\nimport { AuthorizationCodePayload } from \"../response/AuthorizationCodePayload.js\";\nimport { AuthorizeResponse } from \"../response/AuthorizeResponse.js\";\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"../error/ClientAuthError.js\";\nimport {\n InteractionRequiredAuthError,\n isInteractionRequiredError,\n} from \"../error/InteractionRequiredAuthError.js\";\nimport { ServerError } from \"../error/ServerError.js\";\nimport { StringDict } from \"../utils/MsalTypes.js\";\n\n/**\n * Returns map of parameters that are applicable to all calls to /authorize whether using PKCE or EAR\n * @param config\n * @param request\n * @param logger\n * @param performanceClient\n * @returns\n */\nexport function getStandardAuthorizeRequestParameters(\n authOptions: AuthOptions,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient?: IPerformanceClient\n): Map {\n // generate the correlationId if not set by the user and add\n const correlationId = request.correlationId;\n\n const parameters = new Map();\n\n RequestParameterBuilder.addClientId(\n parameters,\n request.embeddedClientId ||\n request.extraQueryParameters?.[AADServerParamKeys.CLIENT_ID] ||\n authOptions.clientId\n );\n\n const requestScopes = [\n ...(request.scopes || []),\n ...(request.extraScopesToConsent || []),\n ];\n RequestParameterBuilder.addScopes(\n parameters,\n requestScopes,\n true,\n authOptions.authority.options.OIDCOptions?.defaultScopes\n );\n\n RequestParameterBuilder.addRedirectUri(parameters, request.redirectUri);\n\n RequestParameterBuilder.addCorrelationId(parameters, correlationId);\n\n // add response_mode. If not passed in it defaults to query.\n RequestParameterBuilder.addResponseMode(parameters, request.responseMode);\n\n // add client_info=1\n RequestParameterBuilder.addClientInfo(parameters);\n\n if (request.prompt) {\n RequestParameterBuilder.addPrompt(parameters, request.prompt);\n performanceClient?.addFields({ prompt: request.prompt }, correlationId);\n }\n\n if (request.domainHint) {\n RequestParameterBuilder.addDomainHint(parameters, request.domainHint);\n performanceClient?.addFields(\n { domainHintFromRequest: true },\n correlationId\n );\n }\n\n // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object\n if (request.prompt !== PromptValue.SELECT_ACCOUNT) {\n // AAD will throw if prompt=select_account is passed with an account hint\n if (request.sid && request.prompt === PromptValue.NONE) {\n // SessionID is only used in silent calls\n logger.verbose(\n \"createAuthCodeUrlQueryString: Prompt is none, adding sid from request\"\n );\n RequestParameterBuilder.addSid(parameters, request.sid);\n performanceClient?.addFields(\n { sidFromRequest: true },\n correlationId\n );\n } else if (request.account) {\n const accountSid = extractAccountSid(request.account);\n let accountLoginHintClaim = extractLoginHint(request.account);\n\n if (accountLoginHintClaim && request.domainHint) {\n logger.warning(\n `AuthorizationCodeClient.createAuthCodeUrlQueryString: \"domainHint\" param is set, skipping opaque \"login_hint\" claim. Please consider not passing domainHint`\n );\n accountLoginHintClaim = null;\n }\n\n // If login_hint claim is present, use it over sid/username\n if (accountLoginHintClaim) {\n logger.verbose(\n \"createAuthCodeUrlQueryString: login_hint claim present on account\"\n );\n RequestParameterBuilder.addLoginHint(\n parameters,\n accountLoginHintClaim\n );\n performanceClient?.addFields(\n { loginHintFromClaim: true },\n correlationId\n );\n try {\n const clientInfo = buildClientInfoFromHomeAccountId(\n request.account.homeAccountId\n );\n RequestParameterBuilder.addCcsOid(parameters, clientInfo);\n } catch (e) {\n logger.verbose(\n \"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\"\n );\n }\n } else if (accountSid && request.prompt === PromptValue.NONE) {\n /*\n * If account and loginHint are provided, we will check account first for sid before adding loginHint\n * SessionId is only used in silent calls\n */\n logger.verbose(\n \"createAuthCodeUrlQueryString: Prompt is none, adding sid from account\"\n );\n RequestParameterBuilder.addSid(parameters, accountSid);\n performanceClient?.addFields(\n { sidFromClaim: true },\n correlationId\n );\n try {\n const clientInfo = buildClientInfoFromHomeAccountId(\n request.account.homeAccountId\n );\n RequestParameterBuilder.addCcsOid(parameters, clientInfo);\n } catch (e) {\n logger.verbose(\n \"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\"\n );\n }\n } else if (request.loginHint) {\n logger.verbose(\n \"createAuthCodeUrlQueryString: Adding login_hint from request\"\n );\n RequestParameterBuilder.addLoginHint(\n parameters,\n request.loginHint\n );\n RequestParameterBuilder.addCcsUpn(\n parameters,\n request.loginHint\n );\n performanceClient?.addFields(\n { loginHintFromRequest: true },\n correlationId\n );\n } else if (request.account.username) {\n // Fallback to account username if provided\n logger.verbose(\n \"createAuthCodeUrlQueryString: Adding login_hint from account\"\n );\n RequestParameterBuilder.addLoginHint(\n parameters,\n request.account.username\n );\n performanceClient?.addFields(\n { loginHintFromUpn: true },\n correlationId\n );\n try {\n const clientInfo = buildClientInfoFromHomeAccountId(\n request.account.homeAccountId\n );\n RequestParameterBuilder.addCcsOid(parameters, clientInfo);\n } catch (e) {\n logger.verbose(\n \"createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header\"\n );\n }\n }\n } else if (request.loginHint) {\n logger.verbose(\n \"createAuthCodeUrlQueryString: No account, adding login_hint from request\"\n );\n RequestParameterBuilder.addLoginHint(parameters, request.loginHint);\n RequestParameterBuilder.addCcsUpn(parameters, request.loginHint);\n performanceClient?.addFields(\n { loginHintFromRequest: true },\n correlationId\n );\n }\n } else {\n logger.verbose(\n \"createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints\"\n );\n }\n\n if (request.nonce) {\n RequestParameterBuilder.addNonce(parameters, request.nonce);\n }\n\n if (request.state) {\n RequestParameterBuilder.addState(parameters, request.state);\n }\n\n if (\n request.claims ||\n (authOptions.clientCapabilities &&\n authOptions.clientCapabilities.length > 0)\n ) {\n RequestParameterBuilder.addClaims(\n parameters,\n request.claims,\n authOptions.clientCapabilities\n );\n }\n\n if (request.embeddedClientId) {\n RequestParameterBuilder.addBrokerParameters(\n parameters,\n authOptions.clientId,\n authOptions.redirectUri\n );\n }\n\n // If extraQueryParameters includes instance_aware its value will be added when extraQueryParameters are added\n if (\n authOptions.instanceAware &&\n (!request.extraQueryParameters ||\n !Object.keys(request.extraQueryParameters).includes(\n AADServerParamKeys.INSTANCE_AWARE\n ))\n ) {\n RequestParameterBuilder.addInstanceAware(parameters);\n }\n\n return parameters;\n}\n\n/**\n * Returns authorize endpoint with given request parameters in the query string\n * @param authority\n * @param requestParameters\n * @returns\n */\nexport function getAuthorizeUrl(\n authority: Authority,\n requestParameters: Map,\n encodeParams?: boolean,\n extraQueryParameters?: StringDict | undefined\n): string {\n const queryString = mapToQueryString(\n requestParameters,\n encodeParams,\n extraQueryParameters\n );\n return UrlString.appendQueryString(\n authority.authorizationEndpoint,\n queryString\n );\n}\n\n/**\n * Handles the hash fragment response from public client code request. Returns a code response used by\n * the client to exchange for a token in acquireToken.\n * @param serverParams\n * @param cachedState\n */\nexport function getAuthorizationCodePayload(\n serverParams: AuthorizeResponse,\n cachedState: string\n): AuthorizationCodePayload {\n // Get code response\n validateAuthorizationResponse(serverParams, cachedState);\n\n // throw when there is no auth code in the response\n if (!serverParams.code) {\n throw createClientAuthError(\n ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse\n );\n }\n\n return serverParams as AuthorizationCodePayload;\n}\n\n/**\n * Function which validates server authorization code response.\n * @param serverResponseHash\n * @param requestState\n */\nexport function validateAuthorizationResponse(\n serverResponse: AuthorizeResponse,\n requestState: string\n): void {\n if (!serverResponse.state || !requestState) {\n throw serverResponse.state\n ? createClientAuthError(\n ClientAuthErrorCodes.stateNotFound,\n \"Cached State\"\n )\n : createClientAuthError(\n ClientAuthErrorCodes.stateNotFound,\n \"Server State\"\n );\n }\n\n let decodedServerResponseState: string;\n let decodedRequestState: string;\n\n try {\n decodedServerResponseState = decodeURIComponent(serverResponse.state);\n } catch (e) {\n throw createClientAuthError(\n ClientAuthErrorCodes.invalidState,\n serverResponse.state\n );\n }\n\n try {\n decodedRequestState = decodeURIComponent(requestState);\n } catch (e) {\n throw createClientAuthError(\n ClientAuthErrorCodes.invalidState,\n serverResponse.state\n );\n }\n\n if (decodedServerResponseState !== decodedRequestState) {\n throw createClientAuthError(ClientAuthErrorCodes.stateMismatch);\n }\n\n // Check for error\n if (\n serverResponse.error ||\n serverResponse.error_description ||\n serverResponse.suberror\n ) {\n const serverErrorNo = parseServerErrorNo(serverResponse);\n if (\n isInteractionRequiredError(\n serverResponse.error,\n serverResponse.error_description,\n serverResponse.suberror\n )\n ) {\n throw new InteractionRequiredAuthError(\n serverResponse.error || \"\",\n serverResponse.error_description,\n serverResponse.suberror,\n serverResponse.timestamp || \"\",\n serverResponse.trace_id || \"\",\n serverResponse.correlation_id || \"\",\n serverResponse.claims || \"\",\n serverErrorNo\n );\n }\n\n throw new ServerError(\n serverResponse.error || \"\",\n serverResponse.error_description,\n serverResponse.suberror,\n serverErrorNo\n );\n }\n}\n\n/**\n * Get server error No from the error_uri\n * @param serverResponse\n * @returns\n */\nfunction parseServerErrorNo(\n serverResponse: AuthorizeResponse\n): string | undefined {\n const errorCodePrefix = \"code=\";\n const errorCodePrefixIndex =\n serverResponse.error_uri?.lastIndexOf(errorCodePrefix);\n return errorCodePrefixIndex && errorCodePrefixIndex >= 0\n ? serverResponse.error_uri?.substring(\n errorCodePrefixIndex + errorCodePrefix.length\n )\n : undefined;\n}\n\n/**\n * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present.\n * @param account\n */\nfunction extractAccountSid(account: AccountInfo): string | null {\n return account.idTokenClaims?.sid || null;\n}\n\nfunction extractLoginHint(account: AccountInfo): string | null {\n return account.loginHint || account.idTokenClaims?.login_hint || null;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n} from \"../error/ClientConfigurationError.js\";\nimport { Constants, HeaderNames } from \"../utils/Constants.js\";\n\ntype WWWAuthenticateChallenges = {\n nonce?: string;\n};\n\ntype AuthenticationInfoChallenges = {\n nextnonce?: string;\n};\n\n/**\n * This is a helper class that parses supported HTTP response authentication headers to extract and return\n * header challenge values that can be used outside the basic authorization flows.\n */\nexport class AuthenticationHeaderParser {\n private headers: Record;\n\n constructor(headers: Record) {\n this.headers = headers;\n }\n\n /**\n * This method parses the SHR nonce value out of either the Authentication-Info or WWW-Authenticate authentication headers.\n * @returns\n */\n getShrNonce(): string {\n // Attempt to parse nonce from Authentiacation-Info\n const authenticationInfo = this.headers[HeaderNames.AuthenticationInfo];\n if (authenticationInfo) {\n const authenticationInfoChallenges =\n this.parseChallenges(\n authenticationInfo\n );\n if (authenticationInfoChallenges.nextnonce) {\n return authenticationInfoChallenges.nextnonce;\n }\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidAuthenticationHeader\n );\n }\n\n // Attempt to parse nonce from WWW-Authenticate\n const wwwAuthenticate = this.headers[HeaderNames.WWWAuthenticate];\n if (wwwAuthenticate) {\n const wwwAuthenticateChallenges =\n this.parseChallenges(\n wwwAuthenticate\n );\n if (wwwAuthenticateChallenges.nonce) {\n return wwwAuthenticateChallenges.nonce;\n }\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidAuthenticationHeader\n );\n }\n\n // If neither header is present, throw missing headers error\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.missingNonceAuthenticationHeader\n );\n }\n\n /**\n * Parses an HTTP header's challenge set into a key/value map.\n * @param header\n * @returns\n */\n private parseChallenges(header: string): T {\n const schemeSeparator = header.indexOf(\" \");\n const challenges = header.substr(schemeSeparator + 1).split(\",\");\n const challengeMap = {} as T;\n\n challenges.forEach((challenge: string) => {\n const [key, value] = challenge.split(\"=\");\n // Remove escaped quotation marks (', \") from challenge string to keep only the challenge value\n challengeMap[key] = unescape(\n value.replace(/['\"]+/g, Constants.EMPTY_STRING)\n );\n });\n\n return challengeMap;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n SERVER_TELEM_CONSTANTS,\n Separators,\n CacheOutcome,\n Constants,\n RegionDiscoverySources,\n RegionDiscoveryOutcomes,\n} from \"../../utils/Constants.js\";\nimport { CacheManager } from \"../../cache/CacheManager.js\";\nimport { AuthError } from \"../../error/AuthError.js\";\nimport { ServerTelemetryRequest } from \"./ServerTelemetryRequest.js\";\nimport { ServerTelemetryEntity } from \"../../cache/entities/ServerTelemetryEntity.js\";\nimport { RegionDiscoveryMetadata } from \"../../authority/RegionDiscoveryMetadata.js\";\n\nconst skuGroupSeparator = \",\";\nconst skuValueSeparator = \"|\";\n\ntype SkuParams = {\n libraryName?: string;\n libraryVersion?: string;\n extensionName?: string;\n extensionVersion?: string;\n skus?: string;\n};\n\nfunction makeExtraSkuString(params: SkuParams): string {\n const {\n skus,\n libraryName,\n libraryVersion,\n extensionName,\n extensionVersion,\n } = params;\n const skuMap: Map = new Map([\n [0, [libraryName, libraryVersion]],\n [2, [extensionName, extensionVersion]],\n ]);\n let skuArr: string[] = [];\n\n if (skus?.length) {\n skuArr = skus.split(skuGroupSeparator);\n\n // Ignore invalid input sku param\n if (skuArr.length < 4) {\n return skus;\n }\n } else {\n skuArr = Array.from({ length: 4 }, () => skuValueSeparator);\n }\n\n skuMap.forEach((value, key) => {\n if (value.length === 2 && value[0]?.length && value[1]?.length) {\n setSku({\n skuArr,\n index: key,\n skuName: value[0],\n skuVersion: value[1],\n });\n }\n });\n\n return skuArr.join(skuGroupSeparator);\n}\n\nfunction setSku(params: {\n skuArr: string[];\n index: number;\n skuName: string;\n skuVersion: string;\n}): void {\n const { skuArr, index, skuName, skuVersion } = params;\n if (index >= skuArr.length) {\n return;\n }\n skuArr[index] = [skuName, skuVersion].join(skuValueSeparator);\n}\n\n/** @internal */\nexport class ServerTelemetryManager {\n private cacheManager: CacheManager;\n private apiId: number;\n private correlationId: string;\n private telemetryCacheKey: string;\n private wrapperSKU: String;\n private wrapperVer: String;\n private regionUsed: string | undefined;\n private regionSource: RegionDiscoverySources | undefined;\n private regionOutcome: RegionDiscoveryOutcomes | undefined;\n private cacheOutcome: CacheOutcome = CacheOutcome.NOT_APPLICABLE;\n\n constructor(\n telemetryRequest: ServerTelemetryRequest,\n cacheManager: CacheManager\n ) {\n this.cacheManager = cacheManager;\n this.apiId = telemetryRequest.apiId;\n this.correlationId = telemetryRequest.correlationId;\n this.wrapperSKU = telemetryRequest.wrapperSKU || Constants.EMPTY_STRING;\n this.wrapperVer = telemetryRequest.wrapperVer || Constants.EMPTY_STRING;\n\n this.telemetryCacheKey =\n SERVER_TELEM_CONSTANTS.CACHE_KEY +\n Separators.CACHE_KEY_SEPARATOR +\n telemetryRequest.clientId;\n }\n\n /**\n * API to add MSER Telemetry to request\n */\n generateCurrentRequestHeaderValue(): string {\n const request = `${this.apiId}${SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR}${this.cacheOutcome}`;\n const platformFieldsArr = [this.wrapperSKU, this.wrapperVer];\n const nativeBrokerErrorCode = this.getNativeBrokerErrorCode();\n if (nativeBrokerErrorCode?.length) {\n platformFieldsArr.push(`broker_error=${nativeBrokerErrorCode}`);\n }\n const platformFields = platformFieldsArr.join(\n SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR\n );\n const regionDiscoveryFields = this.getRegionDiscoveryFields();\n const requestWithRegionDiscoveryFields = [\n request,\n regionDiscoveryFields,\n ].join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\n\n return [\n SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,\n requestWithRegionDiscoveryFields,\n platformFields,\n ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\n }\n\n /**\n * API to add MSER Telemetry for the last failed request\n */\n generateLastRequestHeaderValue(): string {\n const lastRequests = this.getLastRequests();\n\n const maxErrors = ServerTelemetryManager.maxErrorsToSend(lastRequests);\n const failedRequests = lastRequests.failedRequests\n .slice(0, 2 * maxErrors)\n .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\n const errors = lastRequests.errors\n .slice(0, maxErrors)\n .join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\n const errorCount = lastRequests.errors.length;\n\n // Indicate whether this header contains all data or partial data\n const overflow =\n maxErrors < errorCount\n ? SERVER_TELEM_CONSTANTS.OVERFLOW_TRUE\n : SERVER_TELEM_CONSTANTS.OVERFLOW_FALSE;\n const platformFields = [errorCount, overflow].join(\n SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR\n );\n\n return [\n SERVER_TELEM_CONSTANTS.SCHEMA_VERSION,\n lastRequests.cacheHits,\n failedRequests,\n errors,\n platformFields,\n ].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\n }\n\n /**\n * API to cache token failures for MSER data capture\n * @param error\n */\n cacheFailedRequest(error: unknown): void {\n const lastRequests = this.getLastRequests();\n if (\n lastRequests.errors.length >=\n SERVER_TELEM_CONSTANTS.MAX_CACHED_ERRORS\n ) {\n // Remove a cached error to make room, first in first out\n lastRequests.failedRequests.shift(); // apiId\n lastRequests.failedRequests.shift(); // correlationId\n lastRequests.errors.shift();\n }\n\n lastRequests.failedRequests.push(this.apiId, this.correlationId);\n\n if (error instanceof Error && !!error && error.toString()) {\n if (error instanceof AuthError) {\n if (error.subError) {\n lastRequests.errors.push(error.subError);\n } else if (error.errorCode) {\n lastRequests.errors.push(error.errorCode);\n } else {\n lastRequests.errors.push(error.toString());\n }\n } else {\n lastRequests.errors.push(error.toString());\n }\n } else {\n lastRequests.errors.push(SERVER_TELEM_CONSTANTS.UNKNOWN_ERROR);\n }\n\n this.cacheManager.setServerTelemetry(\n this.telemetryCacheKey,\n lastRequests,\n this.correlationId\n );\n\n return;\n }\n\n /**\n * Update server telemetry cache entry by incrementing cache hit counter\n */\n incrementCacheHits(): number {\n const lastRequests = this.getLastRequests();\n lastRequests.cacheHits += 1;\n\n this.cacheManager.setServerTelemetry(\n this.telemetryCacheKey,\n lastRequests,\n this.correlationId\n );\n return lastRequests.cacheHits;\n }\n\n /**\n * Get the server telemetry entity from cache or initialize a new one\n */\n getLastRequests(): ServerTelemetryEntity {\n const initialValue: ServerTelemetryEntity = {\n failedRequests: [],\n errors: [],\n cacheHits: 0,\n };\n const lastRequests = this.cacheManager.getServerTelemetry(\n this.telemetryCacheKey\n ) as ServerTelemetryEntity;\n\n return lastRequests || initialValue;\n }\n\n /**\n * Remove server telemetry cache entry\n */\n clearTelemetryCache(): void {\n const lastRequests = this.getLastRequests();\n const numErrorsFlushed =\n ServerTelemetryManager.maxErrorsToSend(lastRequests);\n const errorCount = lastRequests.errors.length;\n if (numErrorsFlushed === errorCount) {\n // All errors were sent on last request, clear Telemetry cache\n this.cacheManager.removeItem(\n this.telemetryCacheKey,\n this.correlationId\n );\n } else {\n // Partial data was flushed to server, construct a new telemetry cache item with errors that were not flushed\n const serverTelemEntity: ServerTelemetryEntity = {\n failedRequests: lastRequests.failedRequests.slice(\n numErrorsFlushed * 2\n ), // failedRequests contains 2 items for each error\n errors: lastRequests.errors.slice(numErrorsFlushed),\n cacheHits: 0,\n };\n\n this.cacheManager.setServerTelemetry(\n this.telemetryCacheKey,\n serverTelemEntity,\n this.correlationId\n );\n }\n }\n\n /**\n * Returns the maximum number of errors that can be flushed to the server in the next network request\n * @param serverTelemetryEntity\n */\n static maxErrorsToSend(\n serverTelemetryEntity: ServerTelemetryEntity\n ): number {\n let i;\n let maxErrors = 0;\n let dataSize = 0;\n const errorCount = serverTelemetryEntity.errors.length;\n for (i = 0; i < errorCount; i++) {\n // failedRequests parameter contains pairs of apiId and correlationId, multiply index by 2 to preserve pairs\n const apiId =\n serverTelemetryEntity.failedRequests[2 * i] ||\n Constants.EMPTY_STRING;\n const correlationId =\n serverTelemetryEntity.failedRequests[2 * i + 1] ||\n Constants.EMPTY_STRING;\n const errorCode =\n serverTelemetryEntity.errors[i] || Constants.EMPTY_STRING;\n\n // Count number of characters that would be added to header, each character is 1 byte. Add 3 at the end to account for separators\n dataSize +=\n apiId.toString().length +\n correlationId.toString().length +\n errorCode.length +\n 3;\n\n if (dataSize < SERVER_TELEM_CONSTANTS.MAX_LAST_HEADER_BYTES) {\n // Adding this entry to the header would still keep header size below the limit\n maxErrors += 1;\n } else {\n break;\n }\n }\n\n return maxErrors;\n }\n\n /**\n * Get the region discovery fields\n *\n * @returns string\n */\n getRegionDiscoveryFields(): string {\n const regionDiscoveryFields: string[] = [];\n\n regionDiscoveryFields.push(this.regionUsed || Constants.EMPTY_STRING);\n regionDiscoveryFields.push(this.regionSource || Constants.EMPTY_STRING);\n regionDiscoveryFields.push(\n this.regionOutcome || Constants.EMPTY_STRING\n );\n\n return regionDiscoveryFields.join(\",\");\n }\n\n /**\n * Update the region discovery metadata\n *\n * @param regionDiscoveryMetadata\n * @returns void\n */\n updateRegionDiscoveryMetadata(\n regionDiscoveryMetadata: RegionDiscoveryMetadata\n ): void {\n this.regionUsed = regionDiscoveryMetadata.region_used;\n this.regionSource = regionDiscoveryMetadata.region_source;\n this.regionOutcome = regionDiscoveryMetadata.region_outcome;\n }\n\n /**\n * Set cache outcome\n */\n setCacheOutcome(cacheOutcome: CacheOutcome): void {\n this.cacheOutcome = cacheOutcome;\n }\n\n setNativeBrokerErrorCode(errorCode: string): void {\n const lastRequests = this.getLastRequests();\n lastRequests.nativeBrokerErrorCode = errorCode;\n this.cacheManager.setServerTelemetry(\n this.telemetryCacheKey,\n lastRequests,\n this.correlationId\n );\n }\n\n getNativeBrokerErrorCode(): string | undefined {\n return this.getLastRequests().nativeBrokerErrorCode;\n }\n\n clearNativeBrokerErrorCode(): void {\n const lastRequests = this.getLastRequests();\n delete lastRequests.nativeBrokerErrorCode;\n this.cacheManager.setServerTelemetry(\n this.telemetryCacheKey,\n lastRequests,\n this.correlationId\n );\n }\n\n static makeExtraSkuString(params: SkuParams): string {\n return makeExtraSkuString(params);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const missingKidError = \"missing_kid_error\";\nexport const missingAlgError = \"missing_alg_error\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"./AuthError.js\";\nimport * as JoseHeaderErrorCodes from \"./JoseHeaderErrorCodes.js\";\nexport { JoseHeaderErrorCodes };\n\nexport const JoseHeaderErrorMessages = {\n [JoseHeaderErrorCodes.missingKidError]:\n \"The JOSE Header for the requested JWT, JWS or JWK object requires a keyId to be configured as the 'kid' header claim. No 'kid' value was provided.\",\n [JoseHeaderErrorCodes.missingAlgError]:\n \"The JOSE Header for the requested JWT, JWS or JWK object requires an algorithm to be specified as the 'alg' header claim. No 'alg' value was provided.\",\n};\n\n/**\n * Error thrown when there is an error in the client code running on the browser.\n */\nexport class JoseHeaderError extends AuthError {\n constructor(errorCode: string, errorMessage?: string) {\n super(errorCode, errorMessage);\n this.name = \"JoseHeaderError\";\n\n Object.setPrototypeOf(this, JoseHeaderError.prototype);\n }\n}\n\n/** Returns JoseHeaderError object */\nexport function createJoseHeaderError(code: string): JoseHeaderError {\n return new JoseHeaderError(code, JoseHeaderErrorMessages[code]);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n JoseHeaderErrorCodes,\n createJoseHeaderError,\n} from \"../error/JoseHeaderError.js\";\nimport { JsonWebTokenTypes } from \"../utils/Constants.js\";\n\nexport type JoseHeaderOptions = {\n typ?: JsonWebTokenTypes;\n alg?: string;\n kid?: string;\n};\n\n/** @internal */\nexport class JoseHeader {\n public typ?: JsonWebTokenTypes;\n public alg?: string;\n public kid?: string;\n\n constructor(options: JoseHeaderOptions) {\n this.typ = options.typ;\n this.alg = options.alg;\n this.kid = options.kid;\n }\n\n /**\n * Builds SignedHttpRequest formatted JOSE Header from the\n * JOSE Header options provided or previously set on the object and returns\n * the stringified header object.\n * Throws if keyId or algorithm aren't provided since they are required for Access Token Binding.\n * @param shrHeaderOptions\n * @returns\n */\n static getShrHeaderString(shrHeaderOptions: JoseHeaderOptions): string {\n // KeyID is required on the SHR header\n if (!shrHeaderOptions.kid) {\n throw createJoseHeaderError(JoseHeaderErrorCodes.missingKidError);\n }\n\n // Alg is required on the SHR header\n if (!shrHeaderOptions.alg) {\n throw createJoseHeaderError(JoseHeaderErrorCodes.missingAlgError);\n }\n\n const shrHeader = new JoseHeader({\n // Access Token PoP headers must have type pop, but the type header can be overriden for special cases\n typ: shrHeaderOptions.typ || JsonWebTokenTypes.Pop,\n kid: shrHeaderOptions.kid,\n alg: shrHeaderOptions.alg,\n });\n\n return JSON.stringify(shrHeader);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ApplicationTelemetry } from \"../../config/ClientConfiguration.js\";\nimport { Logger } from \"../../logger/Logger.js\";\nimport {\n InProgressPerformanceEvent,\n IPerformanceClient,\n PerformanceCallbackFunction,\n QueueMeasurement,\n} from \"./IPerformanceClient.js\";\nimport {\n IntFields,\n PerformanceEvent,\n PerformanceEventAbbreviations,\n PerformanceEventContext,\n PerformanceEvents,\n PerformanceEventStackedContext,\n PerformanceEventStatus,\n} from \"./PerformanceEvent.js\";\nimport { IPerformanceMeasurement } from \"./IPerformanceMeasurement.js\";\nimport { StubPerformanceMeasurement } from \"./StubPerformanceClient.js\";\nimport { AuthError } from \"../../error/AuthError.js\";\nimport { CacheError } from \"../../error/CacheError.js\";\nimport { ServerError } from \"../../error/ServerError.js\";\nimport { InteractionRequiredAuthError } from \"../../error/InteractionRequiredAuthError.js\";\n\nexport interface PreQueueEvent {\n name: PerformanceEvents;\n time: number;\n}\n\n/**\n * Starts context by adding payload to the stack\n * @param event {PerformanceEvent}\n * @param abbreviations {Map} event name abbreviations\n * @param stack {?PerformanceEventStackedContext[]} stack\n */\nexport function startContext(\n event: PerformanceEvent,\n abbreviations: Map,\n stack?: PerformanceEventStackedContext[]\n): void {\n if (!stack) {\n return;\n }\n\n stack.push({\n name: abbreviations.get(event.name) || event.name,\n });\n}\n\n/**\n * Ends context by removing payload from the stack and returning parent or self, if stack is empty, payload\n *\n * @param event {PerformanceEvent}\n * @param abbreviations {Map} event name abbreviations\n * @param stack {?PerformanceEventStackedContext[]} stack\n * @param error {?unknown} error\n */\nexport function endContext(\n event: PerformanceEvent,\n abbreviations: Map,\n stack?: PerformanceEventStackedContext[],\n error?: unknown\n): PerformanceEventContext | undefined {\n if (!stack?.length) {\n return;\n }\n\n const peek = (stack: PerformanceEventStackedContext[]) => {\n return stack.length ? stack[stack.length - 1] : undefined;\n };\n\n const abbrEventName = abbreviations.get(event.name) || event.name;\n const top = peek(stack);\n if (top?.name !== abbrEventName) {\n return;\n }\n\n const current = stack?.pop();\n if (!current) {\n return;\n }\n\n const errorCode =\n error instanceof AuthError\n ? error.errorCode\n : error instanceof Error\n ? error.name\n : undefined;\n const subErr = error instanceof AuthError ? error.subError : undefined;\n\n if (errorCode && current.childErr !== errorCode) {\n current.err = errorCode;\n if (subErr) {\n current.subErr = subErr;\n }\n }\n\n delete current.name;\n delete current.childErr;\n\n const context: PerformanceEventContext = {\n ...current,\n dur: event.durationMs,\n };\n\n if (!event.success) {\n context.fail = 1;\n }\n\n const parent = peek(stack);\n if (!parent) {\n return { [abbrEventName]: context };\n }\n\n if (errorCode) {\n parent.childErr = errorCode;\n }\n\n let childName: string;\n if (!parent[abbrEventName]) {\n childName = abbrEventName;\n } else {\n const siblings = Object.keys(parent).filter((key) =>\n key.startsWith(abbrEventName)\n ).length;\n childName = `${abbrEventName}_${siblings + 1}`;\n }\n parent[childName] = context;\n return parent;\n}\n\n/**\n * Adds error name and stack trace to the telemetry event\n * @param error {Error}\n * @param logger {Logger}\n * @param event {PerformanceEvent}\n * @param stackMaxSize {number} max error stack size to capture\n */\nexport function addError(\n error: unknown,\n logger: Logger,\n event: PerformanceEvent,\n stackMaxSize: number = 5\n): void {\n if (!(error instanceof Error)) {\n logger.trace(\n \"PerformanceClient.addErrorStack: Input error is not instance of Error\",\n event.correlationId\n );\n return;\n } else if (error instanceof AuthError) {\n event.errorCode = error.errorCode;\n event.subErrorCode = error.subError;\n if (\n error instanceof ServerError ||\n error instanceof InteractionRequiredAuthError\n ) {\n event.serverErrorNo = error.errorNo;\n }\n return;\n } else if (error instanceof CacheError) {\n event.errorCode = error.errorCode;\n return;\n } else if (event.errorStack?.length) {\n logger.trace(\n \"PerformanceClient.addErrorStack: Stack already exist\",\n event.correlationId\n );\n return;\n } else if (!error.stack?.length) {\n logger.trace(\n \"PerformanceClient.addErrorStack: Input stack is empty\",\n event.correlationId\n );\n return;\n }\n\n if (error.stack) {\n event.errorStack = compactStack(error.stack, stackMaxSize);\n }\n event.errorName = error.name;\n}\n\n/**\n * Compacts error stack into array by fetching N first entries\n * @param stack {string} error stack\n * @param stackMaxSize {number} max error stack size to capture\n * @returns {string[]}\n */\nexport function compactStack(stack: string, stackMaxSize: number): string[] {\n if (stackMaxSize < 0) {\n return [];\n }\n\n const stackArr = stack.split(\"\\n\") || [];\n\n const res = [];\n\n // Check for a handful of known, common runtime errors and log them (with redaction where applicable).\n const firstLine = stackArr[0];\n if (\n firstLine.startsWith(\"TypeError: Cannot read property\") ||\n firstLine.startsWith(\"TypeError: Cannot read properties of\") ||\n firstLine.startsWith(\"TypeError: Cannot set property\") ||\n firstLine.startsWith(\"TypeError: Cannot set properties of\") ||\n firstLine.endsWith(\"is not a function\")\n ) {\n // These types of errors are not at risk of leaking PII. They will indicate unavailable APIs\n res.push(compactStackLine(firstLine));\n } else if (\n firstLine.startsWith(\"SyntaxError\") ||\n firstLine.startsWith(\"TypeError\")\n ) {\n // Prevent unintentional leaking of arbitrary info by redacting contents between both single and double quotes\n res.push(\n compactStackLine(\n // Example: SyntaxError: Unexpected token 'e', \"test\" is not valid JSON -> SyntaxError: Unexpected token , is not valid JSON\n firstLine.replace(/['].*[']|[\"].*[\"]/g, \"\")\n )\n );\n }\n\n // Get top N stack lines\n for (let ix = 1; ix < stackArr.length; ix++) {\n if (res.length >= stackMaxSize) {\n break;\n }\n const line = stackArr[ix];\n res.push(compactStackLine(line));\n }\n return res;\n}\n\n/**\n * Compacts error stack line by shortening file path\n * Example: https://localhost/msal-common/src/authority/Authority.js:100:1 -> Authority.js:100:1\n * @param line {string} stack line\n * @returns {string}\n */\nexport function compactStackLine(line: string): string {\n const filePathIx = line.lastIndexOf(\" \") + 1;\n if (filePathIx < 1) {\n return line;\n }\n const filePath = line.substring(filePathIx);\n\n let fileNameIx = filePath.lastIndexOf(\"/\");\n fileNameIx = fileNameIx < 0 ? filePath.lastIndexOf(\"\\\\\") : fileNameIx;\n\n if (fileNameIx >= 0) {\n return (\n line.substring(0, filePathIx) +\n \"(\" +\n filePath.substring(fileNameIx + 1) +\n (filePath.charAt(filePath.length - 1) === \")\" ? \"\" : \")\")\n ).trimStart();\n }\n\n return line.trimStart();\n}\n\nexport abstract class PerformanceClient implements IPerformanceClient {\n protected authority: string;\n protected libraryName: string;\n protected libraryVersion: string;\n protected applicationTelemetry: ApplicationTelemetry;\n protected clientId: string;\n protected logger: Logger;\n protected callbacks: Map;\n\n /**\n * Multiple events with the same correlation id.\n * @protected\n * @type {Map}\n */\n protected eventsByCorrelationId: Map;\n\n /**\n * Map of pre-queue times by correlation Id\n *\n * @protected\n * @type {Map}\n */\n protected preQueueTimeByCorrelationId: Map;\n\n /**\n * Map of queue measurements by correlation Id\n *\n * @protected\n * @type {Map>}\n */\n protected queueMeasurements: Map>;\n\n protected intFields: Set;\n\n /**\n * Map of stacked events by correlation id.\n *\n * @protected\n */\n protected eventStack: Map;\n\n /**\n * Event name abbreviations\n *\n * @protected\n */\n protected abbreviations: Map;\n\n /**\n * Creates an instance of PerformanceClient,\n * an abstract class containing core performance telemetry logic.\n *\n * @constructor\n * @param {string} clientId Client ID of the application\n * @param {string} authority Authority used by the application\n * @param {Logger} logger Logger used by the application\n * @param {string} libraryName Name of the library\n * @param {string} libraryVersion Version of the library\n * @param {ApplicationTelemetry} applicationTelemetry application name and version\n * @param {Set} intFields integer fields to be truncated\n * @param {Map} abbreviations event name abbreviations\n */\n constructor(\n clientId: string,\n authority: string,\n logger: Logger,\n libraryName: string,\n libraryVersion: string,\n applicationTelemetry: ApplicationTelemetry,\n intFields?: Set,\n abbreviations?: Map\n ) {\n this.authority = authority;\n this.libraryName = libraryName;\n this.libraryVersion = libraryVersion;\n this.applicationTelemetry = applicationTelemetry;\n this.clientId = clientId;\n this.logger = logger;\n this.callbacks = new Map();\n this.eventsByCorrelationId = new Map();\n this.eventStack = new Map();\n this.queueMeasurements = new Map();\n this.preQueueTimeByCorrelationId = new Map();\n this.intFields = intFields || new Set();\n for (const item of IntFields) {\n this.intFields.add(item);\n }\n this.abbreviations = abbreviations || new Map();\n for (const [key, value] of PerformanceEventAbbreviations) {\n this.abbreviations.set(key, value);\n }\n }\n\n /**\n * Generates and returns a unique id, typically a guid.\n *\n * @abstract\n * @returns {string}\n */\n abstract generateId(): string;\n\n /**\n * Starts and returns an platform-specific implementation of IPerformanceMeasurement.\n * Note: this function can be changed to abstract at the next major version bump.\n *\n * @param {string} measureName\n * @param {string} correlationId\n * @returns {IPerformanceMeasurement}\n * @deprecated This method will be removed in the next major version\n */\n startPerformanceMeasurement(\n measureName: string, // eslint-disable-line @typescript-eslint/no-unused-vars\n correlationId: string // eslint-disable-line @typescript-eslint/no-unused-vars\n ): IPerformanceMeasurement {\n return {} as IPerformanceMeasurement;\n }\n\n /**\n * Sets pre-queue time by correlation Id\n *\n * @abstract\n * @param {PerformanceEvents} eventName\n * @param {string} correlationId\n * @returns\n */\n abstract setPreQueueTime(\n eventName: PerformanceEvents,\n correlationId?: string\n ): void;\n\n /**\n * Gets map of pre-queue times by correlation Id\n *\n * @param {PerformanceEvents} eventName\n * @param {string} correlationId\n * @returns {number}\n */\n getPreQueueTime(eventName: string, correlationId: string): number | void {\n const preQueueEvent: PreQueueEvent | undefined =\n this.preQueueTimeByCorrelationId.get(correlationId);\n\n if (!preQueueEvent) {\n this.logger.trace(\n `PerformanceClient.getPreQueueTime: no pre-queue times found for correlationId: ${correlationId}, unable to add queue measurement`\n );\n return;\n } else if (preQueueEvent.name !== eventName) {\n this.logger.trace(\n `PerformanceClient.getPreQueueTime: no pre-queue time found for ${eventName}, unable to add queue measurement`\n );\n return;\n }\n\n return preQueueEvent.time;\n }\n\n /**\n * Calculates the difference between current time and time when function was queued.\n * Note: It is possible to have 0 as the queue time if the current time and the queued time was the same.\n *\n * @param {number} preQueueTime\n * @param {number} currentTime\n * @returns {number}\n */\n calculateQueuedTime(preQueueTime: number, currentTime: number): number {\n if (preQueueTime < 1) {\n this.logger.trace(\n `PerformanceClient: preQueueTime should be a positive integer and not ${preQueueTime}`\n );\n return 0;\n }\n\n if (currentTime < 1) {\n this.logger.trace(\n `PerformanceClient: currentTime should be a positive integer and not ${currentTime}`\n );\n return 0;\n }\n\n if (currentTime < preQueueTime) {\n this.logger.trace(\n \"PerformanceClient: currentTime is less than preQueueTime, check how time is being retrieved\"\n );\n return 0;\n }\n\n return currentTime - preQueueTime;\n }\n\n /**\n * Adds queue measurement time to QueueMeasurements array for given correlation ID.\n *\n * @param {PerformanceEvents} eventName\n * @param {?string} correlationId\n * @param {?number} queueTime\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\n * @returns\n */\n addQueueMeasurement(\n eventName: string,\n correlationId?: string,\n queueTime?: number,\n manuallyCompleted?: boolean\n ): void {\n if (!correlationId) {\n this.logger.trace(\n `PerformanceClient.addQueueMeasurement: correlationId not provided for ${eventName}, cannot add queue measurement`\n );\n return;\n }\n\n if (queueTime === 0) {\n // Possible for there to be no queue time after calculation\n this.logger.trace(\n `PerformanceClient.addQueueMeasurement: queue time provided for ${eventName} is ${queueTime}`\n );\n } else if (!queueTime) {\n this.logger.trace(\n `PerformanceClient.addQueueMeasurement: no queue time provided for ${eventName}`\n );\n return;\n }\n\n const queueMeasurement: QueueMeasurement = {\n eventName,\n // Always default queue time to 0 for manually completed (improperly instrumented)\n queueTime: manuallyCompleted ? 0 : queueTime,\n manuallyCompleted,\n };\n\n // Adds to existing correlation Id if present in queueMeasurements\n const existingMeasurements = this.queueMeasurements.get(correlationId);\n if (existingMeasurements) {\n existingMeasurements.push(queueMeasurement);\n this.queueMeasurements.set(correlationId, existingMeasurements);\n } else {\n // Sets new correlation Id if not present in queueMeasurements\n this.logger.trace(\n `PerformanceClient.addQueueMeasurement: adding correlationId ${correlationId} to queue measurements`\n );\n const measurementArray = [queueMeasurement];\n this.queueMeasurements.set(correlationId, measurementArray);\n }\n // Delete processed pre-queue event.\n this.preQueueTimeByCorrelationId.delete(correlationId);\n }\n\n /**\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\n *\n * @param {PerformanceEvents} measureName\n * @param {?string} [correlationId]\n * @returns {InProgressPerformanceEvent}\n */\n startMeasurement(\n measureName: string,\n correlationId?: string\n ): InProgressPerformanceEvent {\n // Generate a placeholder correlation if the request does not provide one\n const eventCorrelationId = correlationId || this.generateId();\n if (!correlationId) {\n this.logger.info(\n `PerformanceClient: No correlation id provided for ${measureName}, generating`,\n eventCorrelationId\n );\n }\n\n this.logger.trace(\n `PerformanceClient: Performance measurement started for ${measureName}`,\n eventCorrelationId\n );\n\n const inProgressEvent: PerformanceEvent = {\n eventId: this.generateId(),\n status: PerformanceEventStatus.InProgress,\n authority: this.authority,\n libraryName: this.libraryName,\n libraryVersion: this.libraryVersion,\n clientId: this.clientId,\n name: measureName,\n startTimeMs: Date.now(),\n correlationId: eventCorrelationId,\n appName: this.applicationTelemetry?.appName,\n appVersion: this.applicationTelemetry?.appVersion,\n };\n\n // Store in progress events so they can be discarded if not ended properly\n this.cacheEventByCorrelationId(inProgressEvent);\n startContext(\n inProgressEvent,\n this.abbreviations,\n this.eventStack.get(eventCorrelationId)\n );\n\n // Return the event and functions the caller can use to properly end/flush the measurement\n return {\n end: (\n event?: Partial,\n error?: unknown\n ): PerformanceEvent | null => {\n return this.endMeasurement(\n {\n // Initial set of event properties\n ...inProgressEvent,\n // Properties set when event ends\n ...event,\n },\n error\n );\n },\n discard: () => {\n return this.discardMeasurements(inProgressEvent.correlationId);\n },\n add: (fields: { [key: string]: {} | undefined }) => {\n return this.addFields(fields, inProgressEvent.correlationId);\n },\n increment: (fields: { [key: string]: number | undefined }) => {\n return this.incrementFields(\n fields,\n inProgressEvent.correlationId\n );\n },\n event: inProgressEvent,\n measurement: new StubPerformanceMeasurement(),\n };\n }\n\n /**\n * Stops measuring the performance for an operation. Should only be called directly by PerformanceClient classes,\n * as consumers should instead use the function returned by startMeasurement.\n * Adds a new field named as \"[event name]DurationMs\" for sub-measurements, completes and emits an event\n * otherwise.\n *\n * @param {PerformanceEvent} event\n * @param {unknown} error\n * @returns {(PerformanceEvent | null)}\n */\n endMeasurement(\n event: PerformanceEvent,\n error?: unknown\n ): PerformanceEvent | null {\n const rootEvent: PerformanceEvent | undefined =\n this.eventsByCorrelationId.get(event.correlationId);\n if (!rootEvent) {\n this.logger.trace(\n `PerformanceClient: Measurement not found for ${event.eventId}`,\n event.correlationId\n );\n return null;\n }\n\n const isRoot = event.eventId === rootEvent.eventId;\n let queueInfo = {\n totalQueueTime: 0,\n totalQueueCount: 0,\n manuallyCompletedCount: 0,\n };\n\n event.durationMs = Math.round(\n event.durationMs || this.getDurationMs(event.startTimeMs)\n );\n\n const context = JSON.stringify(\n endContext(\n event,\n this.abbreviations,\n this.eventStack.get(rootEvent.correlationId),\n error\n )\n );\n\n if (isRoot) {\n queueInfo = this.getQueueInfo(event.correlationId);\n this.discardMeasurements(rootEvent.correlationId);\n } else {\n rootEvent.incompleteSubMeasurements?.delete(event.eventId);\n }\n\n this.logger.trace(\n `PerformanceClient: Performance measurement ended for ${event.name}: ${event.durationMs} ms`,\n event.correlationId\n );\n\n if (error) {\n addError(error, this.logger, rootEvent);\n }\n\n // Add sub-measurement attribute to root event.\n if (!isRoot) {\n rootEvent[event.name + \"DurationMs\"] = Math.floor(event.durationMs);\n return { ...rootEvent };\n }\n\n if (\n isRoot &&\n !error &&\n (rootEvent.errorCode || rootEvent.subErrorCode)\n ) {\n this.logger.trace(\n `PerformanceClient: Remove error and sub-error codes for root event ${event.name} as intermediate error was successfully handled`,\n event.correlationId\n );\n rootEvent.errorCode = undefined;\n rootEvent.subErrorCode = undefined;\n }\n\n let finalEvent: PerformanceEvent = { ...rootEvent, ...event };\n let incompleteSubsCount: number = 0;\n // Incomplete sub-measurements are discarded. They are likely an instrumentation bug that should be fixed.\n finalEvent.incompleteSubMeasurements?.forEach((subMeasurement) => {\n this.logger.trace(\n `PerformanceClient: Incomplete submeasurement ${subMeasurement.name} found for ${event.name}`,\n finalEvent.correlationId\n );\n incompleteSubsCount++;\n });\n finalEvent.incompleteSubMeasurements = undefined;\n\n finalEvent = {\n ...finalEvent,\n queuedTimeMs: queueInfo.totalQueueTime,\n queuedCount: queueInfo.totalQueueCount,\n queuedManuallyCompletedCount: queueInfo.manuallyCompletedCount,\n status: PerformanceEventStatus.Completed,\n incompleteSubsCount,\n context,\n };\n this.truncateIntegralFields(finalEvent);\n this.emitEvents([finalEvent], event.correlationId);\n\n return finalEvent;\n }\n\n /**\n * Saves extra information to be emitted when the measurements are flushed\n * @param fields\n * @param correlationId\n */\n addFields(\n fields: { [key: string]: {} | undefined },\n correlationId: string\n ): void {\n this.logger.trace(\"PerformanceClient: Updating static fields\");\n const event = this.eventsByCorrelationId.get(correlationId);\n if (event) {\n this.eventsByCorrelationId.set(correlationId, {\n ...event,\n ...fields,\n });\n } else {\n this.logger.trace(\n \"PerformanceClient: Event not found for\",\n correlationId\n );\n }\n }\n\n /**\n * Increment counters to be emitted when the measurements are flushed\n * @param fields {string[]}\n * @param correlationId {string} correlation identifier\n */\n incrementFields(\n fields: { [key: string]: number | undefined },\n correlationId: string\n ): void {\n this.logger.trace(\"PerformanceClient: Updating counters\");\n const event = this.eventsByCorrelationId.get(correlationId);\n if (event) {\n for (const counter in fields) {\n if (!event.hasOwnProperty(counter)) {\n event[counter] = 0;\n } else if (isNaN(Number(event[counter]))) {\n return;\n }\n event[counter] += fields[counter];\n }\n } else {\n this.logger.trace(\n \"PerformanceClient: Event not found for\",\n correlationId\n );\n }\n }\n\n /**\n * Upserts event into event cache.\n * First key is the correlation id, second key is the event id.\n * Allows for events to be grouped by correlation id,\n * and to easily allow for properties on them to be updated.\n *\n * @private\n * @param {PerformanceEvent} event\n */\n protected cacheEventByCorrelationId(event: PerformanceEvent): void {\n const rootEvent = this.eventsByCorrelationId.get(event.correlationId);\n if (rootEvent) {\n this.logger.trace(\n `PerformanceClient: Performance measurement for ${event.name} added/updated`,\n event.correlationId\n );\n rootEvent.incompleteSubMeasurements =\n rootEvent.incompleteSubMeasurements || new Map();\n rootEvent.incompleteSubMeasurements.set(event.eventId, {\n name: event.name,\n startTimeMs: event.startTimeMs,\n });\n } else {\n this.logger.trace(\n `PerformanceClient: Performance measurement for ${event.name} started`,\n event.correlationId\n );\n this.eventsByCorrelationId.set(event.correlationId, { ...event });\n this.eventStack.set(event.correlationId, []);\n }\n }\n\n private getQueueInfo(correlationId: string): {\n totalQueueTime: number;\n totalQueueCount: number;\n manuallyCompletedCount: number;\n } {\n const queueMeasurementForCorrelationId =\n this.queueMeasurements.get(correlationId);\n if (!queueMeasurementForCorrelationId) {\n this.logger.trace(\n `PerformanceClient: no queue measurements found for for correlationId: ${correlationId}`\n );\n }\n\n let totalQueueTime = 0;\n let totalQueueCount = 0;\n let manuallyCompletedCount = 0;\n queueMeasurementForCorrelationId?.forEach((measurement) => {\n totalQueueTime += measurement.queueTime;\n totalQueueCount++;\n manuallyCompletedCount += measurement.manuallyCompleted ? 1 : 0;\n });\n\n return {\n totalQueueTime,\n totalQueueCount,\n manuallyCompletedCount,\n };\n }\n\n /**\n * Removes measurements and aux data for a given correlation id.\n *\n * @param {string} correlationId\n */\n discardMeasurements(correlationId: string): void {\n this.logger.trace(\n \"PerformanceClient: Performance measurements discarded\",\n correlationId\n );\n this.eventsByCorrelationId.delete(correlationId);\n\n this.logger.trace(\n \"PerformanceClient: QueueMeasurements discarded\",\n correlationId\n );\n this.queueMeasurements.delete(correlationId);\n\n this.logger.trace(\n \"PerformanceClient: Pre-queue times discarded\",\n correlationId\n );\n this.preQueueTimeByCorrelationId.delete(correlationId);\n\n this.logger.trace(\n \"PerformanceClient: Event stack discarded\",\n correlationId\n );\n this.eventStack.delete(correlationId);\n }\n\n /**\n * Registers a callback function to receive performance events.\n *\n * @param {PerformanceCallbackFunction} callback\n * @returns {string}\n */\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\n for (const [id, cb] of this.callbacks) {\n if (cb.toString() === callback.toString()) {\n this.logger.warning(\n `PerformanceClient: Performance callback is already registered with id: ${id}`\n );\n return id;\n }\n }\n\n const callbackId = this.generateId();\n this.callbacks.set(callbackId, callback);\n this.logger.verbose(\n `PerformanceClient: Performance callback registered with id: ${callbackId}`\n );\n\n return callbackId;\n }\n\n /**\n * Removes a callback registered with addPerformanceCallback.\n *\n * @param {string} callbackId\n * @returns {boolean}\n */\n removePerformanceCallback(callbackId: string): boolean {\n const result = this.callbacks.delete(callbackId);\n\n if (result) {\n this.logger.verbose(\n `PerformanceClient: Performance callback ${callbackId} removed.`\n );\n } else {\n this.logger.verbose(\n `PerformanceClient: Performance callback ${callbackId} not removed.`\n );\n }\n\n return result;\n }\n\n /**\n * Emits events to all registered callbacks.\n *\n * @param {PerformanceEvent[]} events\n * @param {?string} [correlationId]\n */\n emitEvents(events: PerformanceEvent[], correlationId: string): void {\n this.logger.verbose(\n \"PerformanceClient: Emitting performance events\",\n correlationId\n );\n\n this.callbacks.forEach(\n (callback: PerformanceCallbackFunction, callbackId: string) => {\n this.logger.trace(\n `PerformanceClient: Emitting event to callback ${callbackId}`,\n correlationId\n );\n callback.apply(null, [events]);\n }\n );\n }\n\n /**\n * Enforce truncation of integral fields in performance event.\n * @param {PerformanceEvent} event performance event to update.\n */\n private truncateIntegralFields(event: PerformanceEvent): void {\n this.intFields.forEach((key) => {\n if (key in event && typeof event[key] === \"number\") {\n event[key] = Math.floor(event[key]);\n }\n });\n }\n\n /**\n * Returns event duration in milliseconds\n * @param startTimeMs {number}\n * @returns {number}\n */\n private getDurationMs(startTimeMs: number): number {\n const durationMs = Date.now() - startTimeMs;\n // Handle clock skew\n return durationMs < 0 ? durationMs : 0;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const pkceNotCreated = \"pkce_not_created\";\nexport const earJwkEmpty = \"ear_jwk_empty\";\nexport const earJweEmpty = \"ear_jwe_empty\";\nexport const cryptoNonExistent = \"crypto_nonexistent\";\nexport const emptyNavigateUri = \"empty_navigate_uri\";\nexport const hashEmptyError = \"hash_empty_error\";\nexport const noStateInHash = \"no_state_in_hash\";\nexport const hashDoesNotContainKnownProperties =\n \"hash_does_not_contain_known_properties\";\nexport const unableToParseState = \"unable_to_parse_state\";\nexport const stateInteractionTypeMismatch = \"state_interaction_type_mismatch\";\nexport const interactionInProgress = \"interaction_in_progress\";\nexport const popupWindowError = \"popup_window_error\";\nexport const emptyWindowError = \"empty_window_error\";\nexport const userCancelled = \"user_cancelled\";\nexport const monitorPopupTimeout = \"monitor_popup_timeout\";\nexport const monitorWindowTimeout = \"monitor_window_timeout\";\nexport const redirectInIframe = \"redirect_in_iframe\";\nexport const blockIframeReload = \"block_iframe_reload\";\nexport const blockNestedPopups = \"block_nested_popups\";\nexport const iframeClosedPrematurely = \"iframe_closed_prematurely\";\nexport const silentLogoutUnsupported = \"silent_logout_unsupported\";\nexport const noAccountError = \"no_account_error\";\nexport const silentPromptValueError = \"silent_prompt_value_error\";\nexport const noTokenRequestCacheError = \"no_token_request_cache_error\";\nexport const unableToParseTokenRequestCacheError =\n \"unable_to_parse_token_request_cache_error\";\nexport const authRequestNotSetError = \"auth_request_not_set_error\";\nexport const invalidCacheType = \"invalid_cache_type\";\nexport const nonBrowserEnvironment = \"non_browser_environment\";\nexport const databaseNotOpen = \"database_not_open\";\nexport const noNetworkConnectivity = \"no_network_connectivity\";\nexport const postRequestFailed = \"post_request_failed\";\nexport const getRequestFailed = \"get_request_failed\";\nexport const failedToParseResponse = \"failed_to_parse_response\";\nexport const unableToLoadToken = \"unable_to_load_token\";\nexport const cryptoKeyNotFound = \"crypto_key_not_found\";\nexport const authCodeRequired = \"auth_code_required\";\nexport const authCodeOrNativeAccountIdRequired =\n \"auth_code_or_nativeAccountId_required\";\nexport const spaCodeAndNativeAccountIdPresent =\n \"spa_code_and_nativeAccountId_present\";\nexport const databaseUnavailable = \"database_unavailable\";\nexport const unableToAcquireTokenFromNativePlatform =\n \"unable_to_acquire_token_from_native_platform\";\nexport const nativeHandshakeTimeout = \"native_handshake_timeout\";\nexport const nativeExtensionNotInstalled = \"native_extension_not_installed\";\nexport const nativeConnectionNotEstablished =\n \"native_connection_not_established\";\nexport const uninitializedPublicClientApplication =\n \"uninitialized_public_client_application\";\nexport const nativePromptNotSupported = \"native_prompt_not_supported\";\nexport const invalidBase64String = \"invalid_base64_string\";\nexport const invalidPopTokenRequest = \"invalid_pop_token_request\";\nexport const failedToBuildHeaders = \"failed_to_build_headers\";\nexport const failedToParseHeaders = \"failed_to_parse_headers\";\nexport const failedToDecryptEarResponse = \"failed_to_decrypt_ear_response\";\nexport const timedOut = \"timed_out\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"@azure/msal-common/browser\";\nimport * as BrowserAuthErrorCodes from \"./BrowserAuthErrorCodes.js\";\nexport { BrowserAuthErrorCodes }; // Allow importing as \"BrowserAuthErrorCodes\"\n\nconst ErrorLink = \"For more visit: aka.ms/msaljs/browser-errors\";\n\n/**\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\n */\nexport const BrowserAuthErrorMessages = {\n [BrowserAuthErrorCodes.pkceNotCreated]:\n \"The PKCE code challenge and verifier could not be generated.\",\n [BrowserAuthErrorCodes.earJwkEmpty]:\n \"No EAR encryption key provided. This is unexpected.\",\n [BrowserAuthErrorCodes.earJweEmpty]:\n \"Server response does not contain ear_jwe property. This is unexpected.\",\n [BrowserAuthErrorCodes.cryptoNonExistent]:\n \"The crypto object or function is not available.\",\n [BrowserAuthErrorCodes.emptyNavigateUri]:\n \"Navigation URI is empty. Please check stack trace for more info.\",\n [BrowserAuthErrorCodes.hashEmptyError]: `Hash value cannot be processed because it is empty. Please verify that your redirectUri is not clearing the hash. ${ErrorLink}`,\n [BrowserAuthErrorCodes.noStateInHash]:\n \"Hash does not contain state. Please verify that the request originated from msal.\",\n [BrowserAuthErrorCodes.hashDoesNotContainKnownProperties]: `Hash does not contain known properites. Please verify that your redirectUri is not changing the hash. ${ErrorLink}`,\n [BrowserAuthErrorCodes.unableToParseState]:\n \"Unable to parse state. Please verify that the request originated from msal.\",\n [BrowserAuthErrorCodes.stateInteractionTypeMismatch]:\n \"Hash contains state but the interaction type does not match the caller.\",\n [BrowserAuthErrorCodes.interactionInProgress]: `Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API. ${ErrorLink}`,\n [BrowserAuthErrorCodes.popupWindowError]:\n \"Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.\",\n [BrowserAuthErrorCodes.emptyWindowError]:\n \"window.open returned null or undefined window object.\",\n [BrowserAuthErrorCodes.userCancelled]: \"User cancelled the flow.\",\n [BrowserAuthErrorCodes.monitorPopupTimeout]: `Token acquisition in popup failed due to timeout. ${ErrorLink}`,\n [BrowserAuthErrorCodes.monitorWindowTimeout]: `Token acquisition in iframe failed due to timeout. ${ErrorLink}`,\n [BrowserAuthErrorCodes.redirectInIframe]:\n \"Redirects are not supported for iframed or brokered applications. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.\",\n [BrowserAuthErrorCodes.blockIframeReload]: `Request was blocked inside an iframe because MSAL detected an authentication response. ${ErrorLink}`,\n [BrowserAuthErrorCodes.blockNestedPopups]:\n \"Request was blocked inside a popup because MSAL detected it was running in a popup.\",\n [BrowserAuthErrorCodes.iframeClosedPrematurely]:\n \"The iframe being monitored was closed prematurely.\",\n [BrowserAuthErrorCodes.silentLogoutUnsupported]:\n \"Silent logout not supported. Please call logoutRedirect or logoutPopup instead.\",\n [BrowserAuthErrorCodes.noAccountError]:\n \"No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.\",\n [BrowserAuthErrorCodes.silentPromptValueError]:\n \"The value given for the prompt value is not valid for silent requests - must be set to 'none' or 'no_session'.\",\n [BrowserAuthErrorCodes.noTokenRequestCacheError]:\n \"No token request found in cache.\",\n [BrowserAuthErrorCodes.unableToParseTokenRequestCacheError]:\n \"The cached token request could not be parsed.\",\n [BrowserAuthErrorCodes.authRequestNotSetError]:\n \"Auth Request not set. Please ensure initiateAuthRequest was called from the InteractionHandler\",\n [BrowserAuthErrorCodes.invalidCacheType]: \"Invalid cache type\",\n [BrowserAuthErrorCodes.nonBrowserEnvironment]:\n \"Login and token requests are not supported in non-browser environments.\",\n [BrowserAuthErrorCodes.databaseNotOpen]: \"Database is not open!\",\n [BrowserAuthErrorCodes.noNetworkConnectivity]:\n \"No network connectivity. Check your internet connection.\",\n [BrowserAuthErrorCodes.postRequestFailed]:\n \"Network request failed: If the browser threw a CORS error, check that the redirectUri is registered in the Azure App Portal as type 'SPA'\",\n [BrowserAuthErrorCodes.getRequestFailed]:\n \"Network request failed. Please check the network trace to determine root cause.\",\n [BrowserAuthErrorCodes.failedToParseResponse]:\n \"Failed to parse network response. Check network trace.\",\n [BrowserAuthErrorCodes.unableToLoadToken]: \"Error loading token to cache.\",\n [BrowserAuthErrorCodes.cryptoKeyNotFound]:\n \"Cryptographic Key or Keypair not found in browser storage.\",\n [BrowserAuthErrorCodes.authCodeRequired]:\n \"An authorization code must be provided (as the `code` property on the request) to this flow.\",\n [BrowserAuthErrorCodes.authCodeOrNativeAccountIdRequired]:\n \"An authorization code or nativeAccountId must be provided to this flow.\",\n [BrowserAuthErrorCodes.spaCodeAndNativeAccountIdPresent]:\n \"Request cannot contain both spa code and native account id.\",\n [BrowserAuthErrorCodes.databaseUnavailable]:\n \"IndexedDB, which is required for persistent cryptographic key storage, is unavailable. This may be caused by browser privacy features which block persistent storage in third-party contexts.\",\n [BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform]: `Unable to acquire token from native platform. ${ErrorLink}`,\n [BrowserAuthErrorCodes.nativeHandshakeTimeout]:\n \"Timed out while attempting to establish connection to browser extension\",\n [BrowserAuthErrorCodes.nativeExtensionNotInstalled]:\n \"Native extension is not installed. If you think this is a mistake call the initialize function.\",\n [BrowserAuthErrorCodes.nativeConnectionNotEstablished]: `Connection to native platform has not been established. Please install a compatible browser extension and run initialize(). ${ErrorLink}`,\n [BrowserAuthErrorCodes.uninitializedPublicClientApplication]: `You must call and await the initialize function before attempting to call any other MSAL API. ${ErrorLink}`,\n [BrowserAuthErrorCodes.nativePromptNotSupported]:\n \"The provided prompt is not supported by the native platform. This request should be routed to the web based flow.\",\n [BrowserAuthErrorCodes.invalidBase64String]:\n \"Invalid base64 encoded string.\",\n [BrowserAuthErrorCodes.invalidPopTokenRequest]:\n \"Invalid PoP token request. The request should not have both a popKid value and signPopToken set to true.\",\n [BrowserAuthErrorCodes.failedToBuildHeaders]:\n \"Failed to build request headers object.\",\n [BrowserAuthErrorCodes.failedToParseHeaders]:\n \"Failed to parse response headers\",\n [BrowserAuthErrorCodes.failedToDecryptEarResponse]:\n \"Failed to decrypt ear response\",\n [BrowserAuthErrorCodes.timedOut]: \"The request timed out.\",\n};\n\n/**\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\n * @deprecated Use exported BrowserAuthErrorCodes instead.\n * In your app you can do :\n * ```\n * import { BrowserAuthErrorCodes } from \"@azure/msal-browser\";\n * ```\n */\nexport const BrowserAuthErrorMessage = {\n pkceNotGenerated: {\n code: BrowserAuthErrorCodes.pkceNotCreated,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.pkceNotCreated],\n },\n cryptoDoesNotExist: {\n code: BrowserAuthErrorCodes.cryptoNonExistent,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.cryptoNonExistent],\n },\n emptyNavigateUriError: {\n code: BrowserAuthErrorCodes.emptyNavigateUri,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.emptyNavigateUri],\n },\n hashEmptyError: {\n code: BrowserAuthErrorCodes.hashEmptyError,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.hashEmptyError],\n },\n hashDoesNotContainStateError: {\n code: BrowserAuthErrorCodes.noStateInHash,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.noStateInHash],\n },\n hashDoesNotContainKnownPropertiesError: {\n code: BrowserAuthErrorCodes.hashDoesNotContainKnownProperties,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.hashDoesNotContainKnownProperties\n ],\n },\n unableToParseStateError: {\n code: BrowserAuthErrorCodes.unableToParseState,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.unableToParseState\n ],\n },\n stateInteractionTypeMismatchError: {\n code: BrowserAuthErrorCodes.stateInteractionTypeMismatch,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.stateInteractionTypeMismatch\n ],\n },\n interactionInProgress: {\n code: BrowserAuthErrorCodes.interactionInProgress,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.interactionInProgress\n ],\n },\n popupWindowError: {\n code: BrowserAuthErrorCodes.popupWindowError,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.popupWindowError],\n },\n emptyWindowError: {\n code: BrowserAuthErrorCodes.emptyWindowError,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.emptyWindowError],\n },\n userCancelledError: {\n code: BrowserAuthErrorCodes.userCancelled,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.userCancelled],\n },\n monitorPopupTimeoutError: {\n code: BrowserAuthErrorCodes.monitorPopupTimeout,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.monitorPopupTimeout\n ],\n },\n monitorIframeTimeoutError: {\n code: BrowserAuthErrorCodes.monitorWindowTimeout,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.monitorWindowTimeout\n ],\n },\n redirectInIframeError: {\n code: BrowserAuthErrorCodes.redirectInIframe,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.redirectInIframe],\n },\n blockTokenRequestsInHiddenIframeError: {\n code: BrowserAuthErrorCodes.blockIframeReload,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.blockIframeReload],\n },\n blockAcquireTokenInPopupsError: {\n code: BrowserAuthErrorCodes.blockNestedPopups,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.blockNestedPopups],\n },\n iframeClosedPrematurelyError: {\n code: BrowserAuthErrorCodes.iframeClosedPrematurely,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.iframeClosedPrematurely\n ],\n },\n silentLogoutUnsupportedError: {\n code: BrowserAuthErrorCodes.silentLogoutUnsupported,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.silentLogoutUnsupported\n ],\n },\n noAccountError: {\n code: BrowserAuthErrorCodes.noAccountError,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.noAccountError],\n },\n silentPromptValueError: {\n code: BrowserAuthErrorCodes.silentPromptValueError,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.silentPromptValueError\n ],\n },\n noTokenRequestCacheError: {\n code: BrowserAuthErrorCodes.noTokenRequestCacheError,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.noTokenRequestCacheError\n ],\n },\n unableToParseTokenRequestCacheError: {\n code: BrowserAuthErrorCodes.unableToParseTokenRequestCacheError,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.unableToParseTokenRequestCacheError\n ],\n },\n authRequestNotSet: {\n code: BrowserAuthErrorCodes.authRequestNotSetError,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.authRequestNotSetError\n ],\n },\n invalidCacheType: {\n code: BrowserAuthErrorCodes.invalidCacheType,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.invalidCacheType],\n },\n notInBrowserEnvironment: {\n code: BrowserAuthErrorCodes.nonBrowserEnvironment,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.nonBrowserEnvironment\n ],\n },\n databaseNotOpen: {\n code: BrowserAuthErrorCodes.databaseNotOpen,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.databaseNotOpen],\n },\n noNetworkConnectivity: {\n code: BrowserAuthErrorCodes.noNetworkConnectivity,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.noNetworkConnectivity\n ],\n },\n postRequestFailed: {\n code: BrowserAuthErrorCodes.postRequestFailed,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.postRequestFailed],\n },\n getRequestFailed: {\n code: BrowserAuthErrorCodes.getRequestFailed,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.getRequestFailed],\n },\n failedToParseNetworkResponse: {\n code: BrowserAuthErrorCodes.failedToParseResponse,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.failedToParseResponse\n ],\n },\n unableToLoadTokenError: {\n code: BrowserAuthErrorCodes.unableToLoadToken,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.unableToLoadToken],\n },\n signingKeyNotFoundInStorage: {\n code: BrowserAuthErrorCodes.cryptoKeyNotFound,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.cryptoKeyNotFound],\n },\n authCodeRequired: {\n code: BrowserAuthErrorCodes.authCodeRequired,\n desc: BrowserAuthErrorMessages[BrowserAuthErrorCodes.authCodeRequired],\n },\n authCodeOrNativeAccountRequired: {\n code: BrowserAuthErrorCodes.authCodeOrNativeAccountIdRequired,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.authCodeOrNativeAccountIdRequired\n ],\n },\n spaCodeAndNativeAccountPresent: {\n code: BrowserAuthErrorCodes.spaCodeAndNativeAccountIdPresent,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.spaCodeAndNativeAccountIdPresent\n ],\n },\n databaseUnavailable: {\n code: BrowserAuthErrorCodes.databaseUnavailable,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.databaseUnavailable\n ],\n },\n unableToAcquireTokenFromNativePlatform: {\n code: BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform\n ],\n },\n nativeHandshakeTimeout: {\n code: BrowserAuthErrorCodes.nativeHandshakeTimeout,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.nativeHandshakeTimeout\n ],\n },\n nativeExtensionNotInstalled: {\n code: BrowserAuthErrorCodes.nativeExtensionNotInstalled,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.nativeExtensionNotInstalled\n ],\n },\n nativeConnectionNotEstablished: {\n code: BrowserAuthErrorCodes.nativeConnectionNotEstablished,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.nativeConnectionNotEstablished\n ],\n },\n uninitializedPublicClientApplication: {\n code: BrowserAuthErrorCodes.uninitializedPublicClientApplication,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.uninitializedPublicClientApplication\n ],\n },\n nativePromptNotSupported: {\n code: BrowserAuthErrorCodes.nativePromptNotSupported,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.nativePromptNotSupported\n ],\n },\n invalidBase64StringError: {\n code: BrowserAuthErrorCodes.invalidBase64String,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.invalidBase64String\n ],\n },\n invalidPopTokenRequest: {\n code: BrowserAuthErrorCodes.invalidPopTokenRequest,\n desc: BrowserAuthErrorMessages[\n BrowserAuthErrorCodes.invalidPopTokenRequest\n ],\n },\n};\n\n/**\n * Browser library error class thrown by the MSAL.js library for SPAs\n */\nexport class BrowserAuthError extends AuthError {\n constructor(errorCode: string, subError?: string) {\n super(errorCode, BrowserAuthErrorMessages[errorCode], subError);\n\n Object.setPrototypeOf(this, BrowserAuthError.prototype);\n this.name = \"BrowserAuthError\";\n }\n}\n\nexport function createBrowserAuthError(\n errorCode: string,\n subError?: string\n): BrowserAuthError {\n return new BrowserAuthError(errorCode, subError);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { OIDC_DEFAULT_SCOPES } from \"@azure/msal-common/browser\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\n\n/**\n * Constants\n */\nexport const BrowserConstants = {\n /**\n * Interaction in progress cache value\n */\n INTERACTION_IN_PROGRESS_VALUE: \"interaction_in_progress\",\n /**\n * Invalid grant error code\n */\n INVALID_GRANT_ERROR: \"invalid_grant\",\n /**\n * Default popup window width\n */\n POPUP_WIDTH: 483,\n /**\n * Default popup window height\n */\n POPUP_HEIGHT: 600,\n /**\n * Name of the popup window starts with\n */\n POPUP_NAME_PREFIX: \"msal\",\n /**\n * Default popup monitor poll interval in milliseconds\n */\n DEFAULT_POLL_INTERVAL_MS: 30,\n /**\n * Msal-browser SKU\n */\n MSAL_SKU: \"msal.js.browser\",\n};\n\nexport const PlatformAuthConstants = {\n CHANNEL_ID: \"53ee284d-920a-4b59-9d30-a60315b26836\",\n PREFERRED_EXTENSION_ID: \"ppnbnpeolgkicgegkbkbjmhlideopiji\",\n MATS_TELEMETRY: \"MATS\",\n MICROSOFT_ENTRA_BROKERID: \"MicrosoftEntra\",\n DOM_API_NAME: \"DOM API\",\n PLATFORM_DOM_APIS: \"get-token-and-sign-out\",\n PLATFORM_DOM_PROVIDER: \"PlatformAuthDOMHandler\",\n PLATFORM_EXTENSION_PROVIDER: \"PlatformAuthExtensionHandler\",\n};\n\nexport const NativeExtensionMethod = {\n HandshakeRequest: \"Handshake\",\n HandshakeResponse: \"HandshakeResponse\",\n GetToken: \"GetToken\",\n Response: \"Response\",\n} as const;\nexport type NativeExtensionMethod =\n (typeof NativeExtensionMethod)[keyof typeof NativeExtensionMethod];\n\nexport const BrowserCacheLocation = {\n LocalStorage: \"localStorage\",\n SessionStorage: \"sessionStorage\",\n MemoryStorage: \"memoryStorage\",\n} as const;\nexport type BrowserCacheLocation =\n (typeof BrowserCacheLocation)[keyof typeof BrowserCacheLocation];\n\n/**\n * HTTP Request types supported by MSAL.\n */\nexport const HTTP_REQUEST_TYPE = {\n GET: \"GET\",\n POST: \"POST\",\n} as const;\nexport type HTTP_REQUEST_TYPE =\n (typeof HTTP_REQUEST_TYPE)[keyof typeof HTTP_REQUEST_TYPE];\n\nexport const INTERACTION_TYPE = {\n SIGNIN: \"signin\",\n SIGNOUT: \"signout\",\n} as const;\nexport type INTERACTION_TYPE =\n (typeof INTERACTION_TYPE)[keyof typeof INTERACTION_TYPE];\n\n/**\n * Temporary cache keys for MSAL, deleted after any request.\n */\nexport const TemporaryCacheKeys = {\n ORIGIN_URI: \"request.origin\",\n URL_HASH: \"urlHash\",\n REQUEST_PARAMS: \"request.params\",\n VERIFIER: \"code.verifier\",\n INTERACTION_STATUS_KEY: \"interaction.status\",\n NATIVE_REQUEST: \"request.native\",\n} as const;\nexport type TemporaryCacheKeys =\n (typeof TemporaryCacheKeys)[keyof typeof TemporaryCacheKeys];\n\n/**\n * Cache keys stored in-memory\n */\nexport const InMemoryCacheKeys = {\n WRAPPER_SKU: \"wrapper.sku\",\n WRAPPER_VER: \"wrapper.version\",\n} as const;\nexport type InMemoryCacheKeys =\n (typeof InMemoryCacheKeys)[keyof typeof InMemoryCacheKeys];\n\n/**\n * API Codes for Telemetry purposes.\n * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs\n * 0-99 Silent Flow\n * 800-899 Auth Code Flow\n */\nexport const ApiId = {\n acquireTokenRedirect: 861,\n acquireTokenPopup: 862,\n ssoSilent: 863,\n acquireTokenSilent_authCode: 864,\n handleRedirectPromise: 865,\n acquireTokenByCode: 866,\n acquireTokenSilent_silentFlow: 61,\n logout: 961,\n logoutPopup: 962,\n} as const;\nexport type ApiId = (typeof ApiId)[keyof typeof ApiId];\n\n/*\n * Interaction type of the API - used for state and telemetry\n */\nexport enum InteractionType {\n Redirect = \"redirect\",\n Popup = \"popup\",\n Silent = \"silent\",\n None = \"none\",\n}\n\n/**\n * Types of interaction currently in progress.\n * Used in events in wrapper libraries to invoke functions when certain interaction is in progress or all interactions are complete.\n */\nexport const InteractionStatus = {\n /**\n * Initial status before interaction occurs\n */\n Startup: \"startup\",\n /**\n * Status set when all login calls occuring\n */\n Login: \"login\",\n /**\n * Status set when logout call occuring\n */\n Logout: \"logout\",\n /**\n * Status set for acquireToken calls\n */\n AcquireToken: \"acquireToken\",\n /**\n * Status set for ssoSilent calls\n */\n SsoSilent: \"ssoSilent\",\n /**\n * Status set when handleRedirect in progress\n */\n HandleRedirect: \"handleRedirect\",\n /**\n * Status set when interaction is complete\n */\n None: \"none\",\n} as const;\nexport type InteractionStatus =\n (typeof InteractionStatus)[keyof typeof InteractionStatus];\n\nexport const DEFAULT_REQUEST: RedirectRequest | PopupRequest = {\n scopes: OIDC_DEFAULT_SCOPES,\n};\n\n/**\n * JWK Key Format string (Type MUST be defined for window crypto APIs)\n */\nexport const KEY_FORMAT_JWK = \"jwk\";\n\n// Supported wrapper SKUs\nexport const WrapperSKU = {\n React: \"@azure/msal-react\",\n Angular: \"@azure/msal-angular\",\n} as const;\nexport type WrapperSKU = (typeof WrapperSKU)[keyof typeof WrapperSKU];\n\n// DatabaseStorage Constants\nexport const DB_NAME = \"msal.db\";\nexport const DB_VERSION = 1;\nexport const DB_TABLE_NAME = `${DB_NAME}.keys`;\n\nexport const CacheLookupPolicy = {\n /*\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired\n * or cannot be found the refresh token will be used to acquire a new one. Finally, if the refresh token\n * is expired acquireTokenSilent will attempt to acquire new access and refresh tokens.\n */\n Default: 0, // 0 is falsy, is equivalent to not passing in a CacheLookupPolicy\n /*\n * acquireTokenSilent will only look for access tokens in the cache. It will not attempt to renew access or\n * refresh tokens.\n */\n AccessToken: 1,\n /*\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired or\n * cannot be found, the refresh token will be used to acquire a new one. If the refresh token is expired, it\n * will not be renewed and acquireTokenSilent will fail.\n */\n AccessTokenAndRefreshToken: 2,\n /*\n * acquireTokenSilent will not attempt to retrieve access tokens from the cache and will instead attempt to\n * exchange the cached refresh token for a new access token. If the refresh token is expired, it will not be\n * renewed and acquireTokenSilent will fail.\n */\n RefreshToken: 3,\n /*\n * acquireTokenSilent will not look in the cache for the access token. It will go directly to network with the\n * cached refresh token. If the refresh token is expired an attempt will be made to renew it. This is equivalent to\n * setting \"forceRefresh: true\".\n */\n RefreshTokenAndNetwork: 4,\n /*\n * acquireTokenSilent will attempt to renew both access and refresh tokens. It will not look in the cache. This will\n * always fail if 3rd party cookies are blocked by the browser.\n */\n Skip: 5,\n} as const;\nexport type CacheLookupPolicy =\n (typeof CacheLookupPolicy)[keyof typeof CacheLookupPolicy];\n\nexport const iFrameRenewalPolicies: CacheLookupPolicy[] = [\n CacheLookupPolicy.Default,\n CacheLookupPolicy.Skip,\n CacheLookupPolicy.RefreshTokenAndNetwork,\n];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\n */\n\n/**\n * Returns URL Safe b64 encoded string from a plaintext string.\n * @param input\n */\nexport function urlEncode(input: string): string {\n return encodeURIComponent(\n base64Encode(input)\n .replace(/=/g, \"\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n );\n}\n\n/**\n * Returns URL Safe b64 encoded string from an int8Array.\n * @param inputArr\n */\nexport function urlEncodeArr(inputArr: Uint8Array): string {\n return base64EncArr(inputArr)\n .replace(/=/g, \"\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\");\n}\n\n/**\n * Returns b64 encoded string from plaintext string.\n * @param input\n */\nexport function base64Encode(input: string): string {\n return base64EncArr(new TextEncoder().encode(input));\n}\n\n/**\n * Base64 encode byte array\n * @param aBytes\n */\nfunction base64EncArr(aBytes: Uint8Array): string {\n const binString = Array.from(aBytes, (x) => String.fromCodePoint(x)).join(\n \"\"\n );\n return btoa(binString);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n BrowserAuthErrorCodes,\n createBrowserAuthError,\n} from \"../error/BrowserAuthError.js\";\n\n/**\n * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:\n * https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n */\n\n/**\n * Returns a URL-safe plaintext decoded string from b64 encoded input.\n * @param input\n */\nexport function base64Decode(input: string): string {\n return new TextDecoder().decode(base64DecToArr(input));\n}\n\n/**\n * Decodes base64 into Uint8Array\n * @param base64String\n */\nexport function base64DecToArr(base64String: string): Uint8Array {\n let encodedString = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (encodedString.length % 4) {\n case 0:\n break;\n case 2:\n encodedString += \"==\";\n break;\n case 3:\n encodedString += \"=\";\n break;\n default:\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.invalidBase64String\n );\n }\n const binString = atob(encodedString);\n return Uint8Array.from(binString, (m) => m.codePointAt(0) || 0);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport {\n IPerformanceClient,\n PerformanceEvents,\n} from \"@azure/msal-common/browser\";\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants.js\";\nimport { base64Encode, urlEncodeArr } from \"../encode/Base64Encode.js\";\nimport { base64Decode, base64DecToArr } from \"../encode/Base64Decode.js\";\n\n/**\n * This file defines functions used by the browser library to perform cryptography operations such as\n * hashing and encoding. It also has helper functions to validate the availability of specific APIs.\n */\n\n/**\n * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams\n */\n// Algorithms\nconst PKCS1_V15_KEYGEN_ALG = \"RSASSA-PKCS1-v1_5\";\nconst AES_GCM = \"AES-GCM\";\nconst HKDF = \"HKDF\";\n// SHA-256 hashing algorithm\nconst S256_HASH_ALG = \"SHA-256\";\n// MOD length for PoP tokens\nconst MODULUS_LENGTH = 2048;\n// Public Exponent\nconst PUBLIC_EXPONENT: Uint8Array = new Uint8Array([0x01, 0x00, 0x01]);\n// UUID hex digits\nconst UUID_CHARS = \"0123456789abcdef\";\n// Array to store UINT32 random value\nconst UINT32_ARR = new Uint32Array(1);\n\n// Key Format\nconst RAW = \"raw\";\n// Key Usages\nconst ENCRYPT = \"encrypt\";\nconst DECRYPT = \"decrypt\";\nconst DERIVE_KEY = \"deriveKey\";\n\n// Suberror\nconst SUBTLE_SUBERROR = \"crypto_subtle_undefined\";\n\nconst keygenAlgorithmOptions: RsaHashedKeyGenParams = {\n name: PKCS1_V15_KEYGEN_ALG,\n hash: S256_HASH_ALG,\n modulusLength: MODULUS_LENGTH,\n publicExponent: PUBLIC_EXPONENT,\n};\n\n/**\n * Check whether browser crypto is available.\n */\nexport function validateCryptoAvailable(\n skipValidateSubtleCrypto: boolean\n): void {\n if (!window) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.nonBrowserEnvironment\n );\n }\n if (!window.crypto) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.cryptoNonExistent);\n }\n if (!skipValidateSubtleCrypto && !window.crypto.subtle) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.cryptoNonExistent,\n SUBTLE_SUBERROR\n );\n }\n}\n\n/**\n * Returns a sha-256 hash of the given dataString as an ArrayBuffer.\n * @param dataString {string} data string\n * @param performanceClient {?IPerformanceClient}\n * @param correlationId {?string} correlation id\n */\nexport async function sha256Digest(\n dataString: string,\n performanceClient?: IPerformanceClient,\n correlationId?: string\n): Promise {\n performanceClient?.addQueueMeasurement(\n PerformanceEvents.Sha256Digest,\n correlationId\n );\n const encoder = new TextEncoder();\n const data = encoder.encode(dataString);\n return window.crypto.subtle.digest(\n S256_HASH_ALG,\n data\n ) as Promise;\n}\n\n/**\n * Populates buffer with cryptographically random values.\n * @param dataBuffer\n */\nexport function getRandomValues(dataBuffer: Uint8Array): Uint8Array {\n return window.crypto.getRandomValues(dataBuffer);\n}\n\n/**\n * Returns random Uint32 value.\n * @returns {number}\n */\nfunction getRandomUint32(): number {\n window.crypto.getRandomValues(UINT32_ARR);\n return UINT32_ARR[0];\n}\n\n/**\n * Creates a UUID v7 from the current timestamp.\n * Implementation relies on the system clock to guarantee increasing order of generated identifiers.\n * @returns {number}\n */\nexport function createNewGuid(): string {\n const currentTimestamp = Date.now();\n const baseRand = getRandomUint32() * 0x400 + (getRandomUint32() & 0x3ff);\n\n // Result byte array\n const bytes = new Uint8Array(16);\n // A 12-bit `rand_a` field value\n const randA = Math.trunc(baseRand / 2 ** 30);\n // The higher 30 bits of 62-bit `rand_b` field value\n const randBHi = baseRand & (2 ** 30 - 1);\n // The lower 32 bits of 62-bit `rand_b` field value\n const randBLo = getRandomUint32();\n\n bytes[0] = currentTimestamp / 2 ** 40;\n bytes[1] = currentTimestamp / 2 ** 32;\n bytes[2] = currentTimestamp / 2 ** 24;\n bytes[3] = currentTimestamp / 2 ** 16;\n bytes[4] = currentTimestamp / 2 ** 8;\n bytes[5] = currentTimestamp;\n bytes[6] = 0x70 | (randA >>> 8);\n bytes[7] = randA;\n bytes[8] = 0x80 | (randBHi >>> 24);\n bytes[9] = randBHi >>> 16;\n bytes[10] = randBHi >>> 8;\n bytes[11] = randBHi;\n bytes[12] = randBLo >>> 24;\n bytes[13] = randBLo >>> 16;\n bytes[14] = randBLo >>> 8;\n bytes[15] = randBLo;\n\n let text = \"\";\n for (let i = 0; i < bytes.length; i++) {\n text += UUID_CHARS.charAt(bytes[i] >>> 4);\n text += UUID_CHARS.charAt(bytes[i] & 0xf);\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n text += \"-\";\n }\n }\n return text;\n}\n\n/**\n * Generates a keypair based on current keygen algorithm config.\n * @param extractable\n * @param usages\n */\nexport async function generateKeyPair(\n extractable: boolean,\n usages: Array\n): Promise {\n return window.crypto.subtle.generateKey(\n keygenAlgorithmOptions,\n extractable,\n usages\n ) as Promise;\n}\n\n/**\n * Export key as Json Web Key (JWK)\n * @param key\n */\nexport async function exportJwk(key: CryptoKey): Promise {\n return window.crypto.subtle.exportKey(\n KEY_FORMAT_JWK,\n key\n ) as Promise;\n}\n\n/**\n * Imports key as Json Web Key (JWK), can set extractable and usages.\n * @param key\n * @param extractable\n * @param usages\n */\nexport async function importJwk(\n key: JsonWebKey,\n extractable: boolean,\n usages: Array\n): Promise {\n return window.crypto.subtle.importKey(\n KEY_FORMAT_JWK,\n key,\n keygenAlgorithmOptions,\n extractable,\n usages\n ) as Promise;\n}\n\n/**\n * Signs given data with given key\n * @param key\n * @param data\n */\nexport async function sign(\n key: CryptoKey,\n data: ArrayBuffer\n): Promise {\n return window.crypto.subtle.sign(\n keygenAlgorithmOptions,\n key,\n data\n ) as Promise;\n}\n\n/**\n * Generates Base64 encoded jwk used in the Encrypted Authorize Response (EAR) flow\n */\nexport async function generateEarKey(): Promise {\n const key = await generateBaseKey();\n const keyStr = urlEncodeArr(new Uint8Array(key));\n\n const jwk = {\n alg: \"dir\",\n kty: \"oct\",\n k: keyStr,\n };\n\n return base64Encode(JSON.stringify(jwk));\n}\n\n/**\n * Parses earJwk for encryption key and returns CryptoKey object\n * @param earJwk\n * @returns\n */\nexport async function importEarKey(earJwk: string): Promise {\n const b64DecodedJwk = base64Decode(earJwk);\n const jwkJson = JSON.parse(b64DecodedJwk);\n const rawKey = jwkJson.k;\n const keyBuffer = base64DecToArr(rawKey);\n\n return window.crypto.subtle.importKey(RAW, keyBuffer, AES_GCM, false, [\n DECRYPT,\n ]);\n}\n\n/**\n * Decrypt ear_jwe response returned in the Encrypted Authorize Response (EAR) flow\n * @param earJwk\n * @param earJwe\n * @returns\n */\nexport async function decryptEarResponse(\n earJwk: string,\n earJwe: string\n): Promise {\n const earJweParts = earJwe.split(\".\");\n if (earJweParts.length !== 5) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.failedToDecryptEarResponse,\n \"jwe_length\"\n );\n }\n\n const key = await importEarKey(earJwk).catch(() => {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.failedToDecryptEarResponse,\n \"import_key\"\n );\n });\n\n try {\n const header = new TextEncoder().encode(earJweParts[0]);\n const iv = base64DecToArr(earJweParts[2]);\n const ciphertext = base64DecToArr(earJweParts[3]);\n const tag = base64DecToArr(earJweParts[4]);\n const tagLengthBits = tag.byteLength * 8;\n\n // Concat ciphertext and tag\n const encryptedData = new Uint8Array(ciphertext.length + tag.length);\n encryptedData.set(ciphertext);\n encryptedData.set(tag, ciphertext.length);\n\n const decryptedData = await window.crypto.subtle.decrypt(\n {\n name: AES_GCM,\n iv: iv,\n tagLength: tagLengthBits,\n additionalData: header,\n },\n key,\n encryptedData\n );\n\n return new TextDecoder().decode(decryptedData);\n } catch (e) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.failedToDecryptEarResponse,\n \"decrypt\"\n );\n }\n}\n\n/**\n * Generates symmetric base encryption key. This may be stored as all encryption/decryption keys will be derived from this one.\n */\nexport async function generateBaseKey(): Promise {\n const key = await window.crypto.subtle.generateKey(\n {\n name: AES_GCM,\n length: 256,\n },\n true,\n [ENCRYPT, DECRYPT]\n );\n return window.crypto.subtle.exportKey(RAW, key);\n}\n\n/**\n * Returns the raw key to be passed into the key derivation function\n * @param baseKey\n * @returns\n */\nexport async function generateHKDF(baseKey: ArrayBuffer): Promise {\n return window.crypto.subtle.importKey(RAW, baseKey, HKDF, false, [\n DERIVE_KEY,\n ]);\n}\n\n/**\n * Given a base key and a nonce generates a derived key to be used in encryption and decryption.\n * Note: every time we encrypt a new key is derived\n * @param baseKey\n * @param nonce\n * @returns\n */\nasync function deriveKey(\n baseKey: CryptoKey,\n nonce: ArrayBuffer,\n context: string\n): Promise {\n return window.crypto.subtle.deriveKey(\n {\n name: HKDF,\n salt: nonce,\n hash: S256_HASH_ALG,\n info: new TextEncoder().encode(context),\n },\n baseKey,\n { name: AES_GCM, length: 256 },\n false,\n [ENCRYPT, DECRYPT]\n );\n}\n\n/**\n * Encrypt the given data given a base key. Returns encrypted data and a nonce that must be provided during decryption\n * @param key\n * @param rawData\n */\nexport async function encrypt(\n baseKey: CryptoKey,\n rawData: string,\n context: string\n): Promise<{ data: string; nonce: string }> {\n const encodedData = new TextEncoder().encode(rawData);\n // The nonce must never be reused with a given key.\n const nonce = window.crypto.getRandomValues(new Uint8Array(16));\n const derivedKey = await deriveKey(baseKey, nonce, context);\n const encryptedData = await window.crypto.subtle.encrypt(\n {\n name: AES_GCM,\n iv: new Uint8Array(12), // New key is derived for every encrypt so we don't need a new nonce\n },\n derivedKey,\n encodedData\n );\n\n return {\n data: urlEncodeArr(new Uint8Array(encryptedData)),\n nonce: urlEncodeArr(nonce),\n };\n}\n\n/**\n * Decrypt data with the given key and nonce\n * @param key\n * @param nonce\n * @param encryptedData\n * @returns\n */\nexport async function decrypt(\n baseKey: CryptoKey,\n nonce: string,\n context: string,\n encryptedData: string\n): Promise {\n const encodedData = base64DecToArr(encryptedData);\n const derivedKey = await deriveKey(baseKey, base64DecToArr(nonce), context);\n const decryptedData = await window.crypto.subtle.decrypt(\n {\n name: AES_GCM,\n iv: new Uint8Array(12), // New key is derived for every encrypt so we don't need a new nonce\n },\n derivedKey,\n encodedData\n );\n\n return new TextDecoder().decode(decryptedData);\n}\n\n/**\n * Returns the SHA-256 hash of an input string\n * @param plainText\n */\nexport async function hashString(plainText: string): Promise {\n const hashBuffer: ArrayBuffer = await sha256Digest(plainText);\n const hashBytes = new Uint8Array(hashBuffer);\n return urlEncodeArr(hashBytes);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const storageNotSupported = \"storage_not_supported\";\nexport const stubbedPublicClientApplicationCalled =\n \"stubbed_public_client_application_called\";\nexport const inMemRedirectUnavailable = \"in_mem_redirect_unavailable\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"@azure/msal-common/browser\";\nimport * as BrowserConfigurationAuthErrorCodes from \"./BrowserConfigurationAuthErrorCodes.js\";\nexport { BrowserConfigurationAuthErrorCodes };\n\nexport const BrowserConfigurationAuthErrorMessages = {\n [BrowserConfigurationAuthErrorCodes.storageNotSupported]:\n \"Given storage configuration option was not supported.\",\n [BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled]:\n \"Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors\",\n [BrowserConfigurationAuthErrorCodes.inMemRedirectUnavailable]:\n \"Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true.\",\n};\n\n/**\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\n * @deprecated Use BrowserAuthErrorCodes instead\n */\nexport const BrowserConfigurationAuthErrorMessage = {\n storageNotSupportedError: {\n code: BrowserConfigurationAuthErrorCodes.storageNotSupported,\n desc: BrowserConfigurationAuthErrorMessages[\n BrowserConfigurationAuthErrorCodes.storageNotSupported\n ],\n },\n stubPcaInstanceCalled: {\n code: BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled,\n desc: BrowserConfigurationAuthErrorMessages[\n BrowserConfigurationAuthErrorCodes\n .stubbedPublicClientApplicationCalled\n ],\n },\n inMemRedirectUnavailable: {\n code: BrowserConfigurationAuthErrorCodes.inMemRedirectUnavailable,\n desc: BrowserConfigurationAuthErrorMessages[\n BrowserConfigurationAuthErrorCodes.inMemRedirectUnavailable\n ],\n },\n};\n\n/**\n * Browser library error class thrown by the MSAL.js library for SPAs\n */\nexport class BrowserConfigurationAuthError extends AuthError {\n constructor(errorCode: string, errorMessage?: string) {\n super(errorCode, errorMessage);\n this.name = \"BrowserConfigurationAuthError\";\n\n Object.setPrototypeOf(this, BrowserConfigurationAuthError.prototype);\n }\n}\n\nexport function createBrowserConfigurationAuthError(\n errorCode: string\n): BrowserConfigurationAuthError {\n return new BrowserConfigurationAuthError(\n errorCode,\n BrowserConfigurationAuthErrorMessages[errorCode]\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UrlString, invoke, invokeAsync } from \"@azure/msal-common/browser\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { BrowserConstants, BrowserCacheLocation } from \"./BrowserConstants.js\";\nimport * as BrowserCrypto from \"../crypto/BrowserCrypto.js\";\nimport {\n BrowserConfigurationAuthErrorCodes,\n createBrowserConfigurationAuthError,\n} from \"../error/BrowserConfigurationAuthError.js\";\nimport type { BrowserConfiguration } from \"../config/Configuration.js\";\n\n/**\n * Clears hash from window url.\n */\nexport function clearHash(contentWindow: Window): void {\n // Office.js sets history.replaceState to null\n contentWindow.location.hash = \"\";\n if (typeof contentWindow.history.replaceState === \"function\") {\n // Full removes \"#\" from url\n contentWindow.history.replaceState(\n null,\n \"\",\n `${contentWindow.location.origin}${contentWindow.location.pathname}${contentWindow.location.search}`\n );\n }\n}\n\n/**\n * Replaces current hash with hash from provided url\n */\nexport function replaceHash(url: string): void {\n const urlParts = url.split(\"#\");\n urlParts.shift(); // Remove part before the hash\n window.location.hash = urlParts.length > 0 ? urlParts.join(\"#\") : \"\";\n}\n\n/**\n * Returns boolean of whether the current window is in an iframe or not.\n */\nexport function isInIframe(): boolean {\n return window.parent !== window;\n}\n\n/**\n * Returns boolean of whether or not the current window is a popup opened by msal\n */\nexport function isInPopup(): boolean {\n return (\n typeof window !== \"undefined\" &&\n !!window.opener &&\n window.opener !== window &&\n typeof window.name === \"string\" &&\n window.name.indexOf(`${BrowserConstants.POPUP_NAME_PREFIX}.`) === 0\n );\n}\n\n// #endregion\n\n/**\n * Returns current window URL as redirect uri\n */\nexport function getCurrentUri(): string {\n return typeof window !== \"undefined\" && window.location\n ? window.location.href.split(\"?\")[0].split(\"#\")[0]\n : \"\";\n}\n\n/**\n * Gets the homepage url for the current window location.\n */\nexport function getHomepage(): string {\n const currentUrl = new UrlString(window.location.href);\n const urlComponents = currentUrl.getUrlComponents();\n return `${urlComponents.Protocol}//${urlComponents.HostNameAndPort}/`;\n}\n\n/**\n * Throws error if we have completed an auth and are\n * attempting another auth request inside an iframe.\n */\nexport function blockReloadInHiddenIframes(): void {\n const isResponseHash = UrlString.hashContainsKnownProperties(\n window.location.hash\n );\n // return an error if called from the hidden iframe created by the msal js silent calls\n if (isResponseHash && isInIframe()) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.blockIframeReload);\n }\n}\n\n/**\n * Block redirect operations in iframes unless explicitly allowed\n * @param interactionType Interaction type for the request\n * @param allowRedirectInIframe Config value to allow redirects when app is inside an iframe\n */\nexport function blockRedirectInIframe(allowRedirectInIframe: boolean): void {\n if (isInIframe() && !allowRedirectInIframe) {\n // If we are not in top frame, we shouldn't redirect. This is also handled by the service.\n throw createBrowserAuthError(BrowserAuthErrorCodes.redirectInIframe);\n }\n}\n\n/**\n * Block redirectUri loaded in popup from calling AcquireToken APIs\n */\nexport function blockAcquireTokenInPopups(): void {\n // Popups opened by msal popup APIs are given a name that starts with \"msal.\"\n if (isInPopup()) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.blockNestedPopups);\n }\n}\n\n/**\n * Throws error if token requests are made in non-browser environment\n * @param isBrowserEnvironment Flag indicating if environment is a browser.\n */\nexport function blockNonBrowserEnvironment(): void {\n if (typeof window === \"undefined\") {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.nonBrowserEnvironment\n );\n }\n}\n\n/**\n * Throws error if initialize hasn't been called\n * @param initialized\n */\nexport function blockAPICallsBeforeInitialize(initialized: boolean): void {\n if (!initialized) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.uninitializedPublicClientApplication\n );\n }\n}\n\n/**\n * Helper to validate app environment before making an auth request\n * @param initialized\n */\nexport function preflightCheck(initialized: boolean): void {\n // Block request if not in browser environment\n blockNonBrowserEnvironment();\n\n // Block auth requests inside a hidden iframe\n blockReloadInHiddenIframes();\n\n // Block redirectUri opened in a popup from calling MSAL APIs\n blockAcquireTokenInPopups();\n\n // Block token acquisition before initialize has been called\n blockAPICallsBeforeInitialize(initialized);\n}\n\n/**\n * Helper to validate app enviornment before making redirect request\n * @param initialized\n * @param config\n */\nexport function redirectPreflightCheck(\n initialized: boolean,\n config: BrowserConfiguration\n): void {\n preflightCheck(initialized);\n blockRedirectInIframe(config.system.allowRedirectInIframe);\n // Block redirects if memory storage is enabled but storeAuthStateInCookie is not\n if (\n config.cache.cacheLocation === BrowserCacheLocation.MemoryStorage &&\n !config.cache.storeAuthStateInCookie\n ) {\n throw createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.inMemRedirectUnavailable\n );\n }\n}\n\n/**\n * Adds a preconnect link element to the header which begins DNS resolution and SSL connection in anticipation of the /token request\n * @param loginDomain Authority domain, including https protocol e.g. https://login.microsoftonline.com\n * @returns\n */\nexport function preconnect(authority: string): void {\n const link = document.createElement(\"link\");\n link.rel = \"preconnect\";\n link.href = new URL(authority).origin;\n link.crossOrigin = \"anonymous\";\n document.head.appendChild(link);\n\n // The browser will close connection if not used within a few seconds, remove element from the header after 10s\n window.setTimeout(() => {\n try {\n document.head.removeChild(link);\n } catch {}\n }, 10000); // 10s Timeout\n}\n\n/**\n * Wrapper function that creates a UUID v7 from the current timestamp.\n * @returns {string}\n */\nexport function createGuid(): string {\n return BrowserCrypto.createNewGuid();\n}\n\nexport { invoke };\nexport { invokeAsync };\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n BrowserAuthErrorCodes,\n createBrowserAuthError,\n} from \"../error/BrowserAuthError.js\";\nimport { INavigationClient } from \"./INavigationClient.js\";\nimport { NavigationOptions } from \"./NavigationOptions.js\";\n\nexport class NavigationClient implements INavigationClient {\n /**\n * Navigates to other pages within the same web application\n * @param url\n * @param options\n */\n navigateInternal(\n url: string,\n options: NavigationOptions\n ): Promise {\n return NavigationClient.defaultNavigateWindow(url, options);\n }\n\n /**\n * Navigates to other pages outside the web application i.e. the Identity Provider\n * @param url\n * @param options\n */\n navigateExternal(\n url: string,\n options: NavigationOptions\n ): Promise {\n return NavigationClient.defaultNavigateWindow(url, options);\n }\n\n /**\n * Default navigation implementation invoked by the internal and external functions\n * @param url\n * @param options\n */\n private static defaultNavigateWindow(\n url: string,\n options: NavigationOptions\n ): Promise {\n if (options.noHistory) {\n window.location.replace(url); // CodeQL [SM03712] Application owner controls the URL. User can't change it.\n } else {\n window.location.assign(url); // CodeQL [SM03712] Application owner controls the URL. User can't change it.\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.timedOut,\n \"failed_to_redirect\"\n )\n );\n }, options.timeout);\n });\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n INetworkModule,\n NetworkRequestOptions,\n NetworkResponse,\n createNetworkError,\n} from \"@azure/msal-common/browser\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { HTTP_REQUEST_TYPE } from \"../utils/BrowserConstants.js\";\n\n/**\n * This class implements the Fetch API for GET and POST requests. See more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\n */\nexport class FetchClient implements INetworkModule {\n /**\n * Fetch Client for REST endpoints - Get request\n * @param url\n * @param headers\n * @param body\n */\n async sendGetRequestAsync(\n url: string,\n options?: NetworkRequestOptions\n ): Promise> {\n let response: Response;\n let responseHeaders: Record = {};\n let responseStatus = 0;\n const reqHeaders = getFetchHeaders(options);\n try {\n response = await fetch(url, {\n method: HTTP_REQUEST_TYPE.GET,\n headers: reqHeaders,\n });\n } catch (e) {\n throw createNetworkError(\n createBrowserAuthError(\n window.navigator.onLine\n ? BrowserAuthErrorCodes.getRequestFailed\n : BrowserAuthErrorCodes.noNetworkConnectivity\n ),\n undefined,\n undefined,\n e as Error\n );\n }\n\n responseHeaders = getHeaderDict(response.headers);\n try {\n responseStatus = response.status;\n return {\n headers: responseHeaders,\n body: (await response.json()) as T,\n status: responseStatus,\n };\n } catch (e) {\n throw createNetworkError(\n createBrowserAuthError(\n BrowserAuthErrorCodes.failedToParseResponse\n ),\n responseStatus,\n responseHeaders,\n e as Error\n );\n }\n }\n\n /**\n * Fetch Client for REST endpoints - Post request\n * @param url\n * @param headers\n * @param body\n */\n async sendPostRequestAsync(\n url: string,\n options?: NetworkRequestOptions\n ): Promise> {\n const reqBody = (options && options.body) || \"\";\n const reqHeaders = getFetchHeaders(options);\n\n let response: Response;\n let responseStatus = 0;\n let responseHeaders: Record = {};\n try {\n response = await fetch(url, {\n method: HTTP_REQUEST_TYPE.POST,\n headers: reqHeaders,\n body: reqBody,\n });\n } catch (e) {\n throw createNetworkError(\n createBrowserAuthError(\n window.navigator.onLine\n ? BrowserAuthErrorCodes.postRequestFailed\n : BrowserAuthErrorCodes.noNetworkConnectivity\n ),\n undefined,\n undefined,\n e as Error\n );\n }\n\n responseHeaders = getHeaderDict(response.headers);\n try {\n responseStatus = response.status;\n return {\n headers: responseHeaders,\n body: (await response.json()) as T,\n status: responseStatus,\n };\n } catch (e) {\n throw createNetworkError(\n createBrowserAuthError(\n BrowserAuthErrorCodes.failedToParseResponse\n ),\n responseStatus,\n responseHeaders,\n e as Error\n );\n }\n }\n}\n\n/**\n * Get Fetch API Headers object from string map\n * @param inputHeaders\n */\nfunction getFetchHeaders(options?: NetworkRequestOptions): Headers {\n try {\n const headers = new Headers();\n if (!(options && options.headers)) {\n return headers;\n }\n const optionsHeaders = options.headers;\n Object.entries(optionsHeaders).forEach(([key, value]) => {\n headers.append(key, value);\n });\n return headers;\n } catch (e) {\n throw createNetworkError(\n createBrowserAuthError(BrowserAuthErrorCodes.failedToBuildHeaders),\n undefined,\n undefined,\n e as Error\n );\n }\n}\n\n/**\n * Returns object representing response headers\n * @param headers\n * @returns\n */\nfunction getHeaderDict(headers: Headers): Record {\n try {\n const headerDict: Record = {};\n headers.forEach((value: string, key: string) => {\n headerDict[key] = value;\n });\n return headerDict;\n } catch (e) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.failedToParseHeaders\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n SystemOptions,\n LoggerOptions,\n INetworkModule,\n DEFAULT_SYSTEM_OPTIONS,\n Constants,\n ProtocolMode,\n OIDCOptions,\n ServerResponseType,\n LogLevel,\n StubbedNetworkModule,\n AzureCloudInstance,\n AzureCloudOptions,\n ApplicationTelemetry,\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n IPerformanceClient,\n StubPerformanceClient,\n Logger,\n} from \"@azure/msal-common/browser\";\nimport {\n BrowserCacheLocation,\n BrowserConstants,\n} from \"../utils/BrowserConstants.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { NavigationClient } from \"../navigation/NavigationClient.js\";\nimport { FetchClient } from \"../network/FetchClient.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\n\n// Default timeout for popup windows and iframes in milliseconds\nexport const DEFAULT_POPUP_TIMEOUT_MS = 60000;\nexport const DEFAULT_IFRAME_TIMEOUT_MS = 10000;\nexport const DEFAULT_REDIRECT_TIMEOUT_MS = 30000;\nexport const DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS = 2000;\n\n/**\n * Use this to configure the auth options in the Configuration object\n */\nexport type BrowserAuthOptions = {\n /**\n * Client ID of your app registered with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview in Microsoft Identity Platform\n */\n clientId: string;\n /**\n * You can configure a specific authority, defaults to \" \" or \"https://login.microsoftonline.com/common\"\n */\n authority?: string;\n /**\n * An array of URIs that are known to be valid. Used in B2C scenarios.\n */\n knownAuthorities?: Array;\n /**\n * A string containing the cloud discovery response. Used in AAD scenarios.\n */\n cloudDiscoveryMetadata?: string;\n /**\n * A string containing the .well-known/openid-configuration endpoint response\n */\n authorityMetadata?: string;\n /**\n * The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.\n */\n redirectUri?: string;\n /**\n * The redirect URI where the window navigates after a successful logout.\n */\n postLogoutRedirectUri?: string | null;\n /**\n * Boolean indicating whether to navigate to the original request URL after the auth server navigates to the redirect URL.\n */\n navigateToLoginRequestUrl?: boolean;\n /**\n * Array of capabilities which will be added to the claims.access_token.xms_cc request property on every network request.\n */\n clientCapabilities?: Array;\n /**\n * Enum that represents the protocol that msal follows. Used for configuring proper endpoints.\n */\n protocolMode?: ProtocolMode;\n /**\n * Enum that configures options for the OIDC protocol mode.\n */\n OIDCOptions?: OIDCOptions;\n /**\n * Enum that represents the Azure Cloud to use.\n */\n azureCloudOptions?: AzureCloudOptions;\n /**\n * Flag of whether to use the local metadata cache\n */\n skipAuthorityMetadataCache?: boolean;\n /**\n * App supports nested app auth or not; defaults to\n *\n * @deprecated This flag is deprecated and will be removed in the next major version. createNestablePublicClientApplication should be used instead.\n */\n supportsNestedAppAuth?: boolean;\n /**\n * Callback that will be passed the url that MSAL will navigate to in redirect flows. Returning false in the callback will stop navigation.\n */\n onRedirectNavigate?: (url: string) => boolean | void;\n /**\n * Flag of whether the STS will send back additional parameters to specify where the tokens should be retrieved from.\n */\n instanceAware?: boolean;\n /**\n * Flag of whether to encode query parameters\n * @deprecated This flag is deprecated and will be removed in the next major version where all extra query params will be encoded by default.\n */\n encodeExtraQueryParams?: boolean;\n};\n\n/** @internal */\nexport type InternalAuthOptions = Omit<\n Required,\n \"onRedirectNavigate\"\n> & {\n OIDCOptions: Required;\n onRedirectNavigate?: (url: string) => boolean | void;\n};\n\n/**\n * Use this to configure the below cache configuration options:\n */\nexport type CacheOptions = {\n /**\n * Used to specify the cacheLocation user wants to set. Valid values are \"localStorage\", \"sessionStorage\" and \"memoryStorage\".\n */\n cacheLocation?: BrowserCacheLocation | string;\n /**\n * Used to specify the number of days cache entries written by previous versions of MSAL.js should be retained in the browser. Defaults to 5 days.\n */\n cacheRetentionDays?: number;\n /**\n * Used to specify the temporaryCacheLocation user wants to set. Valid values are \"localStorage\", \"sessionStorage\" and \"memoryStorage\".\n * @deprecated This option is deprecated and will be removed in the next major version.\n */\n temporaryCacheLocation?: BrowserCacheLocation | string;\n /**\n * If set, MSAL stores the auth request state required for validation of the auth flows in the browser cookies. By default this flag is set to false.\n * @deprecated This option is deprecated and will be removed in the next major version.\n */\n storeAuthStateInCookie?: boolean;\n /**\n * If set, MSAL sets the \"Secure\" flag on cookies so they can only be sent over HTTPS. By default this flag is set to true.\n * @deprecated This option will be removed in the next major version and all cookies set will include the Secure attribute.\n */\n secureCookies?: boolean;\n /**\n * If set, MSAL will attempt to migrate cache entries from older versions on initialization. By default this flag is set to true if cacheLocation is localStorage, otherwise false.\n * @deprecated This option is deprecated and will be removed in the next major version.\n */\n cacheMigrationEnabled?: boolean;\n /**\n * Flag that determines whether access tokens are stored based on requested claims\n * @deprecated This option is deprecated and will be removed in the next major version.\n */\n claimsBasedCachingEnabled?: boolean;\n};\n\nexport type BrowserSystemOptions = SystemOptions & {\n /**\n * Used to initialize the Logger object (See ClientConfiguration.ts)\n */\n loggerOptions?: LoggerOptions;\n /**\n * Network interface implementation\n */\n networkClient?: INetworkModule;\n /**\n * Override the methods used to navigate to other webpages. Particularly useful if you are using a client-side router\n */\n navigationClient?: INavigationClient;\n /**\n * Sets the timeout for waiting for a response hash in a popup. Will take precedence over loadFrameTimeout if both are set.\n */\n windowHashTimeout?: number;\n /**\n * Sets the timeout for waiting for a response hash in an iframe. Will take precedence over loadFrameTimeout if both are set.\n */\n iframeHashTimeout?: number;\n /**\n * Sets the timeout for waiting for a response hash in an iframe or popup\n */\n loadFrameTimeout?: number;\n /**\n * Maximum time the library should wait for a frame to load\n * @deprecated This was previously needed for older browsers which are no longer supported by MSAL.js. This option will be removed in the next major version\n */\n navigateFrameWait?: number;\n /**\n * Time to wait for redirection to occur before resolving promise\n */\n redirectNavigationTimeout?: number;\n /**\n * Sets whether popups are opened asynchronously. By default, this flag is set to false. When set to false, blank popups are opened before anything else happens. When set to true, popups are opened when making the network request.\n */\n asyncPopups?: boolean;\n /**\n * Flag to enable redirect opertaions when the app is rendered in an iframe (to support scenarios such as embedded B2C login).\n */\n allowRedirectInIframe?: boolean;\n /**\n * Flag to enable native broker support (e.g. acquiring tokens from WAM on Windows, MacBroker on Mac)\n */\n allowPlatformBroker?: boolean;\n /**\n * Sets the timeout for waiting for the native broker handshake to resolve\n */\n nativeBrokerHandshakeTimeout?: number;\n /**\n * Sets the interval length in milliseconds for polling the location attribute in popup windows (default is 30ms)\n */\n pollIntervalMilliseconds?: number;\n};\n\n/**\n * Telemetry Options\n */\nexport type BrowserTelemetryOptions = {\n /**\n * Telemetry information sent on request\n * - appName: Unique string name of an application\n * - appVersion: Version of the application using MSAL\n */\n application?: ApplicationTelemetry;\n\n client?: IPerformanceClient;\n};\n\n/**\n * This object allows you to configure important elements of MSAL functionality and is passed into the constructor of PublicClientApplication\n */\nexport type Configuration = {\n /**\n * This is where you configure auth elements like clientID, authority used for authenticating against the Microsoft Identity Platform\n */\n auth: BrowserAuthOptions;\n /**\n * This is where you configure cache location and whether to store cache in cookies\n */\n cache?: CacheOptions;\n /**\n * This is where you can configure the network client, logger, token renewal offset\n */\n system?: BrowserSystemOptions;\n /**\n * This is where you can configure telemetry data and options\n */\n telemetry?: BrowserTelemetryOptions;\n};\n\n/** @internal */\nexport type BrowserConfiguration = {\n auth: InternalAuthOptions;\n cache: Required;\n system: Required;\n telemetry: Required;\n};\n\n/**\n * MSAL function that sets the default options when not explicitly configured from app developer\n *\n * @param auth\n * @param cache\n * @param system\n *\n * @returns Configuration object\n */\nexport function buildConfiguration(\n {\n auth: userInputAuth,\n cache: userInputCache,\n system: userInputSystem,\n telemetry: userInputTelemetry,\n }: Configuration,\n isBrowserEnvironment: boolean\n): BrowserConfiguration {\n // Default auth options for browser\n const DEFAULT_AUTH_OPTIONS: InternalAuthOptions = {\n clientId: Constants.EMPTY_STRING,\n authority: `${Constants.DEFAULT_AUTHORITY}`,\n knownAuthorities: [],\n cloudDiscoveryMetadata: Constants.EMPTY_STRING,\n authorityMetadata: Constants.EMPTY_STRING,\n redirectUri:\n typeof window !== \"undefined\" ? BrowserUtils.getCurrentUri() : \"\",\n postLogoutRedirectUri: Constants.EMPTY_STRING,\n navigateToLoginRequestUrl: true,\n clientCapabilities: [],\n protocolMode: ProtocolMode.AAD,\n OIDCOptions: {\n serverResponseType: ServerResponseType.FRAGMENT,\n defaultScopes: [\n Constants.OPENID_SCOPE,\n Constants.PROFILE_SCOPE,\n Constants.OFFLINE_ACCESS_SCOPE,\n ],\n },\n azureCloudOptions: {\n azureCloudInstance: AzureCloudInstance.None,\n tenant: Constants.EMPTY_STRING,\n },\n skipAuthorityMetadataCache: false,\n supportsNestedAppAuth: false,\n instanceAware: false,\n encodeExtraQueryParams: false,\n };\n\n // Default cache options for browser\n const DEFAULT_CACHE_OPTIONS: Required = {\n cacheLocation: BrowserCacheLocation.SessionStorage,\n cacheRetentionDays: 5,\n temporaryCacheLocation: BrowserCacheLocation.SessionStorage,\n storeAuthStateInCookie: false,\n secureCookies: false,\n // Default cache migration to true if cache location is localStorage since entries are preserved across tabs/windows. Migration has little to no benefit in sessionStorage and memoryStorage\n cacheMigrationEnabled:\n userInputCache &&\n userInputCache.cacheLocation === BrowserCacheLocation.LocalStorage\n ? true\n : false,\n claimsBasedCachingEnabled: false,\n };\n\n // Default logger options for browser\n const DEFAULT_LOGGER_OPTIONS: LoggerOptions = {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n loggerCallback: (): void => {\n // allow users to not set logger call back\n },\n logLevel: LogLevel.Info,\n piiLoggingEnabled: false,\n };\n\n // Default system options for browser\n const DEFAULT_BROWSER_SYSTEM_OPTIONS: Required = {\n ...DEFAULT_SYSTEM_OPTIONS,\n loggerOptions: DEFAULT_LOGGER_OPTIONS,\n networkClient: isBrowserEnvironment\n ? new FetchClient()\n : StubbedNetworkModule,\n navigationClient: new NavigationClient(),\n loadFrameTimeout: 0,\n // If loadFrameTimeout is provided, use that as default.\n windowHashTimeout:\n userInputSystem?.loadFrameTimeout || DEFAULT_POPUP_TIMEOUT_MS,\n iframeHashTimeout:\n userInputSystem?.loadFrameTimeout || DEFAULT_IFRAME_TIMEOUT_MS,\n navigateFrameWait: 0,\n redirectNavigationTimeout: DEFAULT_REDIRECT_TIMEOUT_MS,\n asyncPopups: false,\n allowRedirectInIframe: false,\n allowPlatformBroker: false,\n nativeBrokerHandshakeTimeout:\n userInputSystem?.nativeBrokerHandshakeTimeout ||\n DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS,\n pollIntervalMilliseconds: BrowserConstants.DEFAULT_POLL_INTERVAL_MS,\n };\n\n const providedSystemOptions: Required = {\n ...DEFAULT_BROWSER_SYSTEM_OPTIONS,\n ...userInputSystem,\n loggerOptions: userInputSystem?.loggerOptions || DEFAULT_LOGGER_OPTIONS,\n };\n\n const DEFAULT_TELEMETRY_OPTIONS: Required = {\n application: {\n appName: Constants.EMPTY_STRING,\n appVersion: Constants.EMPTY_STRING,\n },\n client: new StubPerformanceClient(),\n };\n\n // Throw an error if user has set OIDCOptions without being in OIDC protocol mode\n if (\n userInputAuth?.protocolMode !== ProtocolMode.OIDC &&\n userInputAuth?.OIDCOptions\n ) {\n const logger = new Logger(providedSystemOptions.loggerOptions);\n logger.warning(\n JSON.stringify(\n createClientConfigurationError(\n ClientConfigurationErrorCodes.cannotSetOIDCOptions\n )\n )\n );\n }\n\n // Throw an error if user has set allowPlatformBroker to true with OIDC protocol mode\n if (\n userInputAuth?.protocolMode &&\n userInputAuth.protocolMode === ProtocolMode.OIDC &&\n providedSystemOptions?.allowPlatformBroker\n ) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.cannotAllowPlatformBroker\n );\n }\n\n const overlayedConfig: BrowserConfiguration = {\n auth: {\n ...DEFAULT_AUTH_OPTIONS,\n ...userInputAuth,\n OIDCOptions: {\n ...DEFAULT_AUTH_OPTIONS.OIDCOptions,\n ...userInputAuth?.OIDCOptions,\n },\n },\n cache: { ...DEFAULT_CACHE_OPTIONS, ...userInputCache },\n system: providedSystemOptions,\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...userInputTelemetry },\n };\n\n return overlayedConfig;\n}\n", "/* eslint-disable header/header */\nexport const name = \"@azure/msal-browser\";\nexport const version = \"4.19.0\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const PREFIX = \"msal\";\nconst BROWSER_PREFIX = \"browser\";\nexport const CACHE_KEY_SEPARATOR = \"-\";\nexport const CREDENTIAL_SCHEMA_VERSION = 1;\nexport const ACCOUNT_SCHEMA_VERSION = 1;\n\nexport const LOG_LEVEL_CACHE_KEY = `${PREFIX}.${BROWSER_PREFIX}.log.level`;\nexport const LOG_PII_CACHE_KEY = `${PREFIX}.${BROWSER_PREFIX}.log.pii`;\nexport const BROWSER_PERF_ENABLED_KEY = `${PREFIX}.${BROWSER_PREFIX}.performance.enabled`;\nexport const PLATFORM_AUTH_DOM_SUPPORT = `${PREFIX}.${BROWSER_PREFIX}.platform.auth.dom`;\nexport const VERSION_CACHE_KEY = `${PREFIX}.version`;\nexport const ACCOUNT_KEYS = \"account.keys\";\nexport const TOKEN_KEYS = \"token.keys\";\n\nexport function getAccountKeysCacheKey(\n schema: number = ACCOUNT_SCHEMA_VERSION\n): string {\n if (schema < 1) {\n return `${PREFIX}.${ACCOUNT_KEYS}`;\n }\n\n return `${PREFIX}.${schema}.${ACCOUNT_KEYS}`;\n}\n\nexport function getTokenKeysCacheKey(\n clientId: string,\n schema: number = CREDENTIAL_SCHEMA_VERSION\n): string {\n if (schema < 1) {\n return `${PREFIX}.${TOKEN_KEYS}.${clientId}`;\n }\n\n return `${PREFIX}.${schema}.${TOKEN_KEYS}.${clientId}`;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Logger, LogLevel } from \"@azure/msal-common/browser\";\nimport {\n BrowserConfiguration,\n buildConfiguration,\n Configuration,\n} from \"../config/Configuration.js\";\nimport { version, name } from \"../packageMetadata.js\";\nimport { BrowserCacheLocation } from \"../utils/BrowserConstants.js\";\nimport { LOG_LEVEL_CACHE_KEY, LOG_PII_CACHE_KEY } from \"../cache/CacheKeys.js\";\n\n/**\n * Base class for operating context\n * Operating contexts are contexts in which MSAL.js is being run\n * More than one operating context may be available at a time\n * It's important from a logging and telemetry point of view for us to be able to identify the operating context.\n * For example: Some operating contexts will pre-cache tokens impacting performance telemetry\n */\nexport abstract class BaseOperatingContext {\n protected logger: Logger;\n protected config: BrowserConfiguration;\n protected available: boolean;\n protected browserEnvironment: boolean;\n\n protected static loggerCallback(level: LogLevel, message: string): void {\n switch (level) {\n case LogLevel.Error:\n // eslint-disable-next-line no-console\n console.error(message);\n return;\n case LogLevel.Info:\n // eslint-disable-next-line no-console\n console.info(message);\n return;\n case LogLevel.Verbose:\n // eslint-disable-next-line no-console\n console.debug(message);\n return;\n case LogLevel.Warning:\n // eslint-disable-next-line no-console\n console.warn(message);\n return;\n default:\n // eslint-disable-next-line no-console\n console.log(message);\n return;\n }\n }\n\n constructor(config: Configuration) {\n /*\n * If loaded in an environment where window is not available,\n * set internal flag to false so that further requests fail.\n * This is to support server-side rendering environments.\n */\n this.browserEnvironment = typeof window !== \"undefined\";\n this.config = buildConfiguration(config, this.browserEnvironment);\n\n let sessionStorage: Storage | undefined;\n try {\n sessionStorage = window[BrowserCacheLocation.SessionStorage];\n // Mute errors if it's a non-browser environment or cookies are blocked.\n } catch (e) {}\n\n const logLevelKey = sessionStorage?.getItem(LOG_LEVEL_CACHE_KEY);\n const piiLoggingKey = sessionStorage\n ?.getItem(LOG_PII_CACHE_KEY)\n ?.toLowerCase();\n\n const piiLoggingEnabled =\n piiLoggingKey === \"true\"\n ? true\n : piiLoggingKey === \"false\"\n ? false\n : undefined;\n const loggerOptions = { ...this.config.system.loggerOptions };\n\n const logLevel =\n logLevelKey && Object.keys(LogLevel).includes(logLevelKey)\n ? LogLevel[logLevelKey]\n : undefined;\n if (logLevel) {\n loggerOptions.loggerCallback = BaseOperatingContext.loggerCallback;\n loggerOptions.logLevel = logLevel;\n }\n if (piiLoggingEnabled !== undefined) {\n loggerOptions.piiLoggingEnabled = piiLoggingEnabled;\n }\n\n this.logger = new Logger(loggerOptions, name, version);\n this.available = false;\n }\n\n /**\n * returns the name of the module containing the API controller associated with this operating context\n */\n abstract getModuleName(): string;\n\n /**\n * returns the string identifier of this operating context\n */\n abstract getId(): string;\n\n /**\n * returns a boolean indicating whether this operating context is present\n */\n abstract initialize(): Promise;\n\n /**\n * Return the MSAL config\n * @returns BrowserConfiguration\n */\n getConfig(): BrowserConfiguration {\n return this.config;\n }\n\n /**\n * Returns the MSAL Logger\n * @returns Logger\n */\n getLogger(): Logger {\n return this.logger;\n }\n\n isAvailable(): boolean {\n return this.available;\n }\n\n isBrowserEnvironment(): boolean {\n return this.browserEnvironment;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const BridgeStatusCode = {\n UserInteractionRequired: \"USER_INTERACTION_REQUIRED\",\n UserCancel: \"USER_CANCEL\",\n NoNetwork: \"NO_NETWORK\",\n TransientError: \"TRANSIENT_ERROR\",\n PersistentError: \"PERSISTENT_ERROR\",\n Disabled: \"DISABLED\",\n AccountUnavailable: \"ACCOUNT_UNAVAILABLE\",\n NestedAppAuthUnavailable: \"NESTED_APP_AUTH_UNAVAILABLE\", // NAA is unavailable in the current context, can retry with standard browser based auth\n} as const;\nexport type BridgeStatusCode =\n (typeof BridgeStatusCode)[keyof typeof BridgeStatusCode];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthBridge, AuthBridgeResponse } from \"./AuthBridge.js\";\nimport { AuthResult } from \"./AuthResult.js\";\nimport { BridgeCapabilities } from \"./BridgeCapabilities.js\";\nimport { AccountContext } from \"./BridgeAccountContext.js\";\nimport { BridgeError } from \"./BridgeError.js\";\nimport { BridgeRequest } from \"./BridgeRequest.js\";\nimport {\n BridgeRequestEnvelope,\n BridgeMethods,\n} from \"./BridgeRequestEnvelope.js\";\nimport { BridgeResponseEnvelope } from \"./BridgeResponseEnvelope.js\";\nimport { BridgeStatusCode } from \"./BridgeStatusCode.js\";\nimport { IBridgeProxy } from \"./IBridgeProxy.js\";\nimport { InitContext } from \"./InitContext.js\";\nimport { TokenRequest } from \"./TokenRequest.js\";\nimport * as BrowserCrypto from \"../crypto/BrowserCrypto.js\";\nimport { BrowserConstants } from \"../utils/BrowserConstants.js\";\nimport { version } from \"../packageMetadata.js\";\n\ndeclare global {\n interface Window {\n nestedAppAuthBridge: AuthBridge;\n }\n}\n\n/**\n * BridgeProxy\n * Provides a proxy for accessing a bridge to a host app and/or\n * platform broker\n */\nexport class BridgeProxy implements IBridgeProxy {\n static bridgeRequests: BridgeRequest[] = [];\n sdkName: string;\n sdkVersion: string;\n capabilities?: BridgeCapabilities;\n accountContext?: AccountContext;\n\n /**\n * initializeNestedAppAuthBridge - Initializes the bridge to the host app\n * @returns a promise that resolves to an InitializeBridgeResponse or rejects with an Error\n * @remarks This method will be called by the create factory method\n * @remarks If the bridge is not available, this method will throw an error\n */\n protected static async initializeNestedAppAuthBridge(): Promise {\n if (window === undefined) {\n throw new Error(\"window is undefined\");\n }\n if (window.nestedAppAuthBridge === undefined) {\n throw new Error(\"window.nestedAppAuthBridge is undefined\");\n }\n\n try {\n window.nestedAppAuthBridge.addEventListener(\n \"message\",\n (response: AuthBridgeResponse) => {\n const responsePayload =\n typeof response === \"string\" ? response : response.data;\n const responseEnvelope: BridgeResponseEnvelope =\n JSON.parse(responsePayload);\n const request = BridgeProxy.bridgeRequests.find(\n (element) =>\n element.requestId === responseEnvelope.requestId\n );\n if (request !== undefined) {\n BridgeProxy.bridgeRequests.splice(\n BridgeProxy.bridgeRequests.indexOf(request),\n 1\n );\n if (responseEnvelope.success) {\n request.resolve(responseEnvelope);\n } else {\n request.reject(responseEnvelope.error);\n }\n }\n }\n );\n\n const bridgeResponse = await new Promise(\n (resolve, reject) => {\n const message = BridgeProxy.buildRequest(\"GetInitContext\");\n\n const request: BridgeRequest = {\n requestId: message.requestId,\n method: message.method,\n resolve: resolve,\n reject: reject,\n };\n BridgeProxy.bridgeRequests.push(request);\n window.nestedAppAuthBridge.postMessage(\n JSON.stringify(message)\n );\n }\n );\n\n return BridgeProxy.validateBridgeResultOrThrow(\n bridgeResponse.initContext\n );\n } catch (error) {\n window.console.log(error);\n throw error;\n }\n }\n\n /**\n * getTokenInteractive - Attempts to get a token interactively from the bridge\n * @param request A token request\n * @returns a promise that resolves to an auth result or rejects with a BridgeError\n */\n public getTokenInteractive(request: TokenRequest): Promise {\n return this.getToken(\"GetTokenPopup\", request);\n }\n\n /**\n * getTokenSilent Attempts to get a token silently from the bridge\n * @param request A token request\n * @returns a promise that resolves to an auth result or rejects with a BridgeError\n */\n public getTokenSilent(request: TokenRequest): Promise {\n return this.getToken(\"GetToken\", request);\n }\n\n private async getToken(\n requestType: BridgeMethods,\n request: TokenRequest\n ): Promise {\n const result = await this.sendRequest(requestType, {\n tokenParams: request,\n });\n return {\n token: BridgeProxy.validateBridgeResultOrThrow(result.token),\n account: BridgeProxy.validateBridgeResultOrThrow(result.account),\n };\n }\n\n public getHostCapabilities(): BridgeCapabilities | null {\n return this.capabilities ?? null;\n }\n\n public getAccountContext(): AccountContext | null {\n return this.accountContext ? this.accountContext : null;\n }\n\n private static buildRequest(\n method: BridgeMethods,\n requestParams?: Partial\n ): BridgeRequestEnvelope {\n return {\n messageType: \"NestedAppAuthRequest\",\n method: method,\n requestId: BrowserCrypto.createNewGuid(),\n sendTime: Date.now(),\n clientLibrary: BrowserConstants.MSAL_SKU,\n clientLibraryVersion: version,\n ...requestParams,\n };\n }\n\n /**\n * A method used to send a request to the bridge\n * @param request A token request\n * @returns a promise that resolves to a response of provided type or rejects with a BridgeError\n */\n private sendRequest(\n method: BridgeMethods,\n requestParams?: Partial\n ): Promise {\n const message = BridgeProxy.buildRequest(method, requestParams);\n\n const promise = new Promise(\n (resolve, reject) => {\n const request: BridgeRequest = {\n requestId: message.requestId,\n method: message.method,\n resolve: resolve,\n reject: reject,\n };\n BridgeProxy.bridgeRequests.push(request);\n window.nestedAppAuthBridge.postMessage(JSON.stringify(message));\n }\n );\n\n return promise;\n }\n\n private static validateBridgeResultOrThrow(input: T | undefined): T {\n if (input === undefined) {\n const bridgeError: BridgeError = {\n status: BridgeStatusCode.NestedAppAuthUnavailable,\n };\n throw bridgeError;\n }\n return input;\n }\n\n /**\n * Private constructor for BridgeProxy\n * @param sdkName The name of the SDK being used to make requests on behalf of the app\n * @param sdkVersion The version of the SDK being used to make requests on behalf of the app\n * @param capabilities The capabilities of the bridge / SDK / platform broker\n */\n private constructor(\n sdkName: string,\n sdkVersion: string,\n accountContext?: AccountContext,\n capabilities?: BridgeCapabilities\n ) {\n this.sdkName = sdkName;\n this.sdkVersion = sdkVersion;\n this.accountContext = accountContext;\n this.capabilities = capabilities;\n }\n\n /**\n * Factory method for creating an implementation of IBridgeProxy\n * @returns A promise that resolves to a BridgeProxy implementation\n */\n public static async create(): Promise {\n const response = await BridgeProxy.initializeNestedAppAuthBridge();\n return new BridgeProxy(\n response.sdkName,\n response.sdkVersion,\n response.accountContext,\n response.capabilities\n );\n }\n}\n\nexport default BridgeProxy;\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BaseOperatingContext } from \"./BaseOperatingContext.js\";\nimport { IBridgeProxy } from \"../naa/IBridgeProxy.js\";\nimport { BridgeProxy } from \"../naa/BridgeProxy.js\";\nimport { AccountContext } from \"../naa/BridgeAccountContext.js\";\n\ndeclare global {\n interface Window {\n __initializeNestedAppAuth?(): Promise;\n }\n}\n\nexport class NestedAppOperatingContext extends BaseOperatingContext {\n protected bridgeProxy: IBridgeProxy | undefined = undefined;\n protected accountContext: AccountContext | null = null;\n\n /*\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\n * containing the implementation for this operating context\n */\n static readonly MODULE_NAME: string = \"\";\n\n /**\n * Unique identifier for the operating context\n */\n static readonly ID: string = \"NestedAppOperatingContext\";\n\n /**\n * Return the module name. Intended for use with import() to enable dynamic import\n * of the implementation associated with this operating context\n * @returns\n */\n getModuleName(): string {\n return NestedAppOperatingContext.MODULE_NAME;\n }\n\n /**\n * Returns the unique identifier for this operating context\n * @returns string\n */\n getId(): string {\n return NestedAppOperatingContext.ID;\n }\n\n /**\n * Returns the current BridgeProxy\n * @returns IBridgeProxy | undefined\n */\n getBridgeProxy(): IBridgeProxy | undefined {\n return this.bridgeProxy;\n }\n\n /**\n * Checks whether the operating context is available.\n * Confirms that the code is running a browser rather. This is required.\n * @returns Promise indicating whether this operating context is currently available.\n */\n async initialize(): Promise {\n try {\n if (typeof window !== \"undefined\") {\n if (typeof window.__initializeNestedAppAuth === \"function\") {\n await window.__initializeNestedAppAuth();\n }\n\n const bridgeProxy: IBridgeProxy = await BridgeProxy.create();\n /*\n * Because we want single sign on we expect the host app to provide the account context\n * with a min set of params that can be used to identify the account\n * this.account = nestedApp.getAccountByFilter(bridgeProxy.getAccountContext());\n */\n this.accountContext = bridgeProxy.getAccountContext();\n this.bridgeProxy = bridgeProxy;\n this.available = bridgeProxy !== undefined;\n }\n } catch (ex) {\n this.logger.infoPii(\n `Could not initialize Nested App Auth bridge (${ex})`\n );\n }\n\n this.logger.info(`Nested App Auth Bridge available: ${this.available}`);\n return this.available;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BaseOperatingContext } from \"./BaseOperatingContext.js\";\n\nexport class StandardOperatingContext extends BaseOperatingContext {\n /*\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\n * containing the implementation for this operating context\n */\n static readonly MODULE_NAME: string = \"\";\n\n /**\n * Unique identifier for the operating context\n */\n static readonly ID: string = \"StandardOperatingContext\";\n\n /**\n * Return the module name. Intended for use with import() to enable dynamic import\n * of the implementation associated with this operating context\n * @returns\n */\n getModuleName(): string {\n return StandardOperatingContext.MODULE_NAME;\n }\n\n /**\n * Returns the unique identifier for this operating context\n * @returns string\n */\n getId(): string {\n return StandardOperatingContext.ID;\n }\n\n /**\n * Checks whether the operating context is available.\n * Confirms that the code is running a browser rather. This is required.\n * @returns Promise indicating whether this operating context is currently available.\n */\n async initialize(): Promise {\n this.available = typeof window !== \"undefined\";\n return this.available;\n /*\n * NOTE: The standard context is available as long as there is a window. If/when we split out WAM from Browser\n * We can move the current contents of the initialize method to here and verify that the WAM extension is available\n */\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport {\n DB_NAME,\n DB_TABLE_NAME,\n DB_VERSION,\n} from \"../utils/BrowserConstants.js\";\nimport { IAsyncStorage } from \"./IAsyncStorage.js\";\n\ninterface IDBOpenDBRequestEvent extends Event {\n target: IDBOpenDBRequest & EventTarget;\n}\n\ninterface IDBOpenOnUpgradeNeededEvent extends IDBVersionChangeEvent {\n target: IDBOpenDBRequest & EventTarget;\n}\n\ninterface IDBRequestEvent extends Event {\n target: IDBRequest & EventTarget;\n}\n\n/**\n * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API\n */\nexport class DatabaseStorage implements IAsyncStorage {\n private db: IDBDatabase | undefined;\n private dbName: string;\n private tableName: string;\n private version: number;\n private dbOpen: boolean;\n\n constructor() {\n this.dbName = DB_NAME;\n this.version = DB_VERSION;\n this.tableName = DB_TABLE_NAME;\n this.dbOpen = false;\n }\n\n /**\n * Opens IndexedDB instance.\n */\n async open(): Promise {\n return new Promise((resolve, reject) => {\n const openDB = window.indexedDB.open(this.dbName, this.version);\n openDB.addEventListener(\n \"upgradeneeded\",\n (e: IDBVersionChangeEvent) => {\n const event = e as IDBOpenOnUpgradeNeededEvent;\n event.target.result.createObjectStore(this.tableName);\n }\n );\n openDB.addEventListener(\"success\", (e: Event) => {\n const event = e as IDBOpenDBRequestEvent;\n this.db = event.target.result;\n this.dbOpen = true;\n resolve();\n });\n openDB.addEventListener(\"error\", () =>\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.databaseUnavailable\n )\n )\n );\n });\n }\n\n /**\n * Closes the connection to IndexedDB database when all pending transactions\n * complete.\n */\n closeConnection(): void {\n const db = this.db;\n if (db && this.dbOpen) {\n db.close();\n this.dbOpen = false;\n }\n }\n\n /**\n * Opens database if it's not already open\n */\n private async validateDbIsOpen(): Promise {\n if (!this.dbOpen) {\n return this.open();\n }\n }\n\n /**\n * Retrieves item from IndexedDB instance.\n * @param key\n */\n async getItem(key: string): Promise {\n await this.validateDbIsOpen();\n return new Promise((resolve, reject) => {\n // TODO: Add timeouts?\n if (!this.db) {\n return reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.databaseNotOpen\n )\n );\n }\n const transaction = this.db.transaction(\n [this.tableName],\n \"readonly\"\n );\n const objectStore = transaction.objectStore(this.tableName);\n const dbGet = objectStore.get(key);\n\n dbGet.addEventListener(\"success\", (e: Event) => {\n const event = e as IDBRequestEvent;\n this.closeConnection();\n resolve(event.target.result);\n });\n\n dbGet.addEventListener(\"error\", (e: Event) => {\n this.closeConnection();\n reject(e);\n });\n });\n }\n\n /**\n * Adds item to IndexedDB under given key\n * @param key\n * @param payload\n */\n async setItem(key: string, payload: T): Promise {\n await this.validateDbIsOpen();\n return new Promise((resolve: Function, reject: Function) => {\n // TODO: Add timeouts?\n if (!this.db) {\n return reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.databaseNotOpen\n )\n );\n }\n const transaction = this.db.transaction(\n [this.tableName],\n \"readwrite\"\n );\n\n const objectStore = transaction.objectStore(this.tableName);\n\n const dbPut = objectStore.put(payload, key);\n\n dbPut.addEventListener(\"success\", () => {\n this.closeConnection();\n resolve();\n });\n\n dbPut.addEventListener(\"error\", (e) => {\n this.closeConnection();\n reject(e);\n });\n });\n }\n\n /**\n * Removes item from IndexedDB under given key\n * @param key\n */\n async removeItem(key: string): Promise {\n await this.validateDbIsOpen();\n return new Promise((resolve: Function, reject: Function) => {\n if (!this.db) {\n return reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.databaseNotOpen\n )\n );\n }\n\n const transaction = this.db.transaction(\n [this.tableName],\n \"readwrite\"\n );\n const objectStore = transaction.objectStore(this.tableName);\n const dbDelete = objectStore.delete(key);\n\n dbDelete.addEventListener(\"success\", () => {\n this.closeConnection();\n resolve();\n });\n\n dbDelete.addEventListener(\"error\", (e) => {\n this.closeConnection();\n reject(e);\n });\n });\n }\n\n /**\n * Get all the keys from the storage object as an iterable array of strings.\n */\n async getKeys(): Promise {\n await this.validateDbIsOpen();\n return new Promise((resolve: Function, reject: Function) => {\n if (!this.db) {\n return reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.databaseNotOpen\n )\n );\n }\n\n const transaction = this.db.transaction(\n [this.tableName],\n \"readonly\"\n );\n const objectStore = transaction.objectStore(this.tableName);\n const dbGetKeys = objectStore.getAllKeys();\n\n dbGetKeys.addEventListener(\"success\", (e: Event) => {\n const event = e as IDBRequestEvent;\n this.closeConnection();\n resolve(event.target.result);\n });\n\n dbGetKeys.addEventListener(\"error\", (e: Event) => {\n this.closeConnection();\n reject(e);\n });\n });\n }\n\n /**\n *\n * Checks whether there is an object under the search key in the object store\n */\n async containsKey(key: string): Promise {\n await this.validateDbIsOpen();\n\n return new Promise((resolve: Function, reject: Function) => {\n if (!this.db) {\n return reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.databaseNotOpen\n )\n );\n }\n\n const transaction = this.db.transaction(\n [this.tableName],\n \"readonly\"\n );\n const objectStore = transaction.objectStore(this.tableName);\n const dbContainsKey = objectStore.count(key);\n\n dbContainsKey.addEventListener(\"success\", (e: Event) => {\n const event = e as IDBRequestEvent;\n this.closeConnection();\n resolve(event.target.result === 1);\n });\n\n dbContainsKey.addEventListener(\"error\", (e: Event) => {\n this.closeConnection();\n reject(e);\n });\n });\n }\n\n /**\n * Deletes the MSAL database. The database is deleted rather than cleared to make it possible\n * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues\n * with IndexedDB database versions.\n */\n async deleteDatabase(): Promise {\n // Check if database being deleted exists\n\n if (this.db && this.dbOpen) {\n this.closeConnection();\n }\n\n return new Promise((resolve: Function, reject: Function) => {\n const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);\n const id = setTimeout(() => reject(false), 200); // Reject if events aren't raised within 200ms\n deleteDbRequest.addEventListener(\"success\", () => {\n clearTimeout(id);\n return resolve(true);\n });\n deleteDbRequest.addEventListener(\"blocked\", () => {\n clearTimeout(id);\n return resolve(true);\n });\n deleteDbRequest.addEventListener(\"error\", () => {\n clearTimeout(id);\n return reject(false);\n });\n });\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IWindowStorage } from \"./IWindowStorage.js\";\n\nexport class MemoryStorage implements IWindowStorage {\n private cache: Map;\n\n constructor() {\n this.cache = new Map();\n }\n\n async initialize(): Promise {\n // Memory storage does not require initialization\n }\n\n getItem(key: string): T | null {\n return this.cache.get(key) || null;\n }\n\n getUserData(key: string): T | null {\n return this.getItem(key);\n }\n\n setItem(key: string, value: T): void {\n this.cache.set(key, value);\n }\n\n async setUserData(key: string, value: T): Promise {\n this.setItem(key, value);\n }\n\n removeItem(key: string): void {\n this.cache.delete(key);\n }\n\n getKeys(): string[] {\n const cacheKeys: string[] = [];\n this.cache.forEach((value: T, key: string) => {\n cacheKeys.push(key);\n });\n return cacheKeys;\n }\n\n containsKey(key: string): boolean {\n return this.cache.has(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n decryptData(): Promise {\n // Memory storage does not support encryption, so this method is a no-op\n return Promise.resolve(null);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Logger } from \"@azure/msal-common/browser\";\nimport {\n BrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { DatabaseStorage } from \"./DatabaseStorage.js\";\nimport { IAsyncStorage } from \"./IAsyncStorage.js\";\nimport { MemoryStorage } from \"./MemoryStorage.js\";\n\n/**\n * This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,\n * backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.\n */\nexport class AsyncMemoryStorage implements IAsyncStorage {\n private inMemoryCache: MemoryStorage;\n private indexedDBCache: DatabaseStorage;\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.inMemoryCache = new MemoryStorage();\n this.indexedDBCache = new DatabaseStorage();\n this.logger = logger;\n }\n\n private handleDatabaseAccessError(error: unknown): void {\n if (\n error instanceof BrowserAuthError &&\n error.errorCode === BrowserAuthErrorCodes.databaseUnavailable\n ) {\n this.logger.error(\n \"Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.\"\n );\n } else {\n throw error;\n }\n }\n /**\n * Get the item matching the given key. Tries in-memory cache first, then in the asynchronous\n * storage object if item isn't found in-memory.\n * @param key\n */\n async getItem(key: string): Promise {\n const item = this.inMemoryCache.getItem(key);\n if (!item) {\n try {\n this.logger.verbose(\n \"Queried item not found in in-memory cache, now querying persistent storage.\"\n );\n return await this.indexedDBCache.getItem(key);\n } catch (e) {\n this.handleDatabaseAccessError(e);\n }\n }\n return item;\n }\n\n /**\n * Sets the item in the in-memory cache and then tries to set it in the asynchronous\n * storage object with the given key.\n * @param key\n * @param value\n */\n async setItem(key: string, value: T): Promise {\n this.inMemoryCache.setItem(key, value);\n try {\n await this.indexedDBCache.setItem(key, value);\n } catch (e) {\n this.handleDatabaseAccessError(e);\n }\n }\n\n /**\n * Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.\n * @param key\n */\n async removeItem(key: string): Promise {\n this.inMemoryCache.removeItem(key);\n try {\n await this.indexedDBCache.removeItem(key);\n } catch (e) {\n this.handleDatabaseAccessError(e);\n }\n }\n\n /**\n * Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the\n * asynchronous storage object.\n */\n async getKeys(): Promise {\n const cacheKeys = this.inMemoryCache.getKeys();\n if (cacheKeys.length === 0) {\n try {\n this.logger.verbose(\n \"In-memory cache is empty, now querying persistent storage.\"\n );\n return await this.indexedDBCache.getKeys();\n } catch (e) {\n this.handleDatabaseAccessError(e);\n }\n }\n return cacheKeys;\n }\n\n /**\n * Returns true or false if the given key is present in the cache.\n * @param key\n */\n async containsKey(key: string): Promise {\n const containsKey = this.inMemoryCache.containsKey(key);\n if (!containsKey) {\n try {\n this.logger.verbose(\n \"Key not found in in-memory cache, now querying persistent storage.\"\n );\n return await this.indexedDBCache.containsKey(key);\n } catch (e) {\n this.handleDatabaseAccessError(e);\n }\n }\n return containsKey;\n }\n\n /**\n * Clears in-memory Map\n */\n clearInMemory(): void {\n // InMemory cache is a Map instance, clear is straightforward\n this.logger.verbose(`Deleting in-memory keystore`);\n this.inMemoryCache.clear();\n this.logger.verbose(`In-memory keystore deleted`);\n }\n\n /**\n * Tries to delete the IndexedDB database\n * @returns\n */\n async clearPersistent(): Promise {\n try {\n this.logger.verbose(\"Deleting persistent keystore\");\n const dbDeleted = await this.indexedDBCache.deleteDatabase();\n if (dbDeleted) {\n this.logger.verbose(\"Persistent keystore deleted\");\n }\n\n return dbDeleted;\n } catch (e) {\n this.handleDatabaseAccessError(e);\n return false;\n }\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n ICrypto,\n IPerformanceClient,\n JoseHeader,\n Logger,\n PerformanceEvents,\n ShrOptions,\n SignedHttpRequest,\n SignedHttpRequestParameters,\n} from \"@azure/msal-common/browser\";\nimport {\n base64Encode,\n urlEncode,\n urlEncodeArr,\n} from \"../encode/Base64Encode.js\";\nimport { base64Decode } from \"../encode/Base64Decode.js\";\nimport * as BrowserCrypto from \"./BrowserCrypto.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { AsyncMemoryStorage } from \"../cache/AsyncMemoryStorage.js\";\n\nexport type CachedKeyPair = {\n publicKey: CryptoKey;\n privateKey: CryptoKey;\n requestMethod?: string;\n requestUri?: string;\n};\n\n/**\n * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and\n * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).\n */\nexport class CryptoOps implements ICrypto {\n private logger: Logger;\n\n /**\n * CryptoOps can be used in contexts outside a PCA instance,\n * meaning there won't be a performance manager available.\n */\n private performanceClient: IPerformanceClient | undefined;\n\n private static POP_KEY_USAGES: Array = [\"sign\", \"verify\"];\n private static EXTRACTABLE: boolean = true;\n private cache: AsyncMemoryStorage;\n\n constructor(\n logger: Logger,\n performanceClient?: IPerformanceClient,\n skipValidateSubtleCrypto?: boolean\n ) {\n this.logger = logger;\n // Browser crypto needs to be validated first before any other classes can be set.\n BrowserCrypto.validateCryptoAvailable(\n skipValidateSubtleCrypto ?? false\n );\n this.cache = new AsyncMemoryStorage(this.logger);\n this.performanceClient = performanceClient;\n }\n\n /**\n * Creates a new random GUID - used to populate state and nonce.\n * @returns string (GUID)\n */\n createNewGuid(): string {\n return BrowserCrypto.createNewGuid();\n }\n\n /**\n * Encodes input string to base64.\n * @param input\n */\n base64Encode(input: string): string {\n return base64Encode(input);\n }\n\n /**\n * Decodes input string from base64.\n * @param input\n */\n base64Decode(input: string): string {\n return base64Decode(input);\n }\n\n /**\n * Encodes input string to base64 URL safe string.\n * @param input\n */\n base64UrlEncode(input: string): string {\n return urlEncode(input);\n }\n\n /**\n * Stringifies and base64Url encodes input public key\n * @param inputKid\n * @returns Base64Url encoded public key\n */\n encodeKid(inputKid: string): string {\n return this.base64UrlEncode(JSON.stringify({ kid: inputKid }));\n }\n\n /**\n * Generates a keypair, stores it and returns a thumbprint\n * @param request\n */\n async getPublicKeyThumbprint(\n request: SignedHttpRequestParameters\n ): Promise {\n const publicKeyThumbMeasurement =\n this.performanceClient?.startMeasurement(\n PerformanceEvents.CryptoOptsGetPublicKeyThumbprint,\n request.correlationId\n );\n\n // Generate Keypair\n const keyPair: CryptoKeyPair = await BrowserCrypto.generateKeyPair(\n CryptoOps.EXTRACTABLE,\n CryptoOps.POP_KEY_USAGES\n );\n\n // Generate Thumbprint for Public Key\n const publicKeyJwk: JsonWebKey = await BrowserCrypto.exportJwk(\n keyPair.publicKey\n );\n\n const pubKeyThumprintObj: JsonWebKey = {\n e: publicKeyJwk.e,\n kty: publicKeyJwk.kty,\n n: publicKeyJwk.n,\n };\n\n const publicJwkString: string =\n getSortedObjectString(pubKeyThumprintObj);\n const publicJwkHash = await this.hashString(publicJwkString);\n\n // Generate Thumbprint for Private Key\n const privateKeyJwk: JsonWebKey = await BrowserCrypto.exportJwk(\n keyPair.privateKey\n );\n // Re-import private key to make it unextractable\n const unextractablePrivateKey: CryptoKey =\n await BrowserCrypto.importJwk(privateKeyJwk, false, [\"sign\"]);\n\n // Store Keypair data in keystore\n await this.cache.setItem(publicJwkHash, {\n privateKey: unextractablePrivateKey,\n publicKey: keyPair.publicKey,\n requestMethod: request.resourceRequestMethod,\n requestUri: request.resourceRequestUri,\n });\n\n if (publicKeyThumbMeasurement) {\n publicKeyThumbMeasurement.end({\n success: true,\n });\n }\n\n return publicJwkHash;\n }\n\n /**\n * Removes cryptographic keypair from key store matching the keyId passed in\n * @param kid\n */\n async removeTokenBindingKey(kid: string): Promise {\n await this.cache.removeItem(kid);\n const keyFound = await this.cache.containsKey(kid);\n if (keyFound) {\n throw createClientAuthError(\n ClientAuthErrorCodes.bindingKeyNotRemoved\n );\n }\n }\n\n /**\n * Removes all cryptographic keys from IndexedDB storage\n */\n async clearKeystore(): Promise {\n // Delete in-memory keystores\n this.cache.clearInMemory();\n\n /**\n * There is only one database, so calling clearPersistent on asymmetric keystore takes care of\n * every persistent keystore\n */\n try {\n await this.cache.clearPersistent();\n return true;\n } catch (e) {\n if (e instanceof Error) {\n this.logger.error(\n `Clearing keystore failed with error: ${e.message}`\n );\n } else {\n this.logger.error(\n \"Clearing keystore failed with unknown error\"\n );\n }\n\n return false;\n }\n }\n\n /**\n * Signs the given object as a jwt payload with private key retrieved by given kid.\n * @param payload\n * @param kid\n */\n async signJwt(\n payload: SignedHttpRequest,\n kid: string,\n shrOptions?: ShrOptions,\n correlationId?: string\n ): Promise {\n const signJwtMeasurement = this.performanceClient?.startMeasurement(\n PerformanceEvents.CryptoOptsSignJwt,\n correlationId\n );\n const cachedKeyPair = await this.cache.getItem(kid);\n\n if (!cachedKeyPair) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.cryptoKeyNotFound\n );\n }\n\n // Get public key as JWK\n const publicKeyJwk = await BrowserCrypto.exportJwk(\n cachedKeyPair.publicKey\n );\n const publicKeyJwkString = getSortedObjectString(publicKeyJwk);\n // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: \"FULL_PUBLIC_KEY_HASH\" })\n const encodedKeyIdThumbprint = urlEncode(JSON.stringify({ kid: kid }));\n // Generate header\n const shrHeader = JoseHeader.getShrHeaderString({\n ...shrOptions?.header,\n alg: publicKeyJwk.alg,\n kid: encodedKeyIdThumbprint,\n });\n\n const encodedShrHeader = urlEncode(shrHeader);\n\n // Generate payload\n payload.cnf = {\n jwk: JSON.parse(publicKeyJwkString),\n };\n const encodedPayload = urlEncode(JSON.stringify(payload));\n\n // Form token string\n const tokenString = `${encodedShrHeader}.${encodedPayload}`;\n\n // Sign token\n const encoder = new TextEncoder();\n const tokenBuffer = encoder.encode(tokenString);\n const signatureBuffer = await BrowserCrypto.sign(\n cachedKeyPair.privateKey,\n tokenBuffer\n );\n const encodedSignature = urlEncodeArr(new Uint8Array(signatureBuffer));\n\n const signedJwt = `${tokenString}.${encodedSignature}`;\n\n if (signJwtMeasurement) {\n signJwtMeasurement.end({\n success: true,\n });\n }\n\n return signedJwt;\n }\n\n /**\n * Returns the SHA-256 hash of an input string\n * @param plainText\n */\n async hashString(plainText: string): Promise {\n return BrowserCrypto.hashString(plainText);\n }\n}\n\nfunction getSortedObjectString(obj: object): string {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ClientAuthErrorCodes,\n createClientAuthError,\n} from \"@azure/msal-common/browser\";\nimport { IWindowStorage } from \"./IWindowStorage.js\";\n\n// Cookie life calculation (hours * minutes * seconds * ms)\nconst COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1000;\n\nexport const SameSiteOptions = {\n Lax: \"Lax\",\n None: \"None\",\n} as const;\nexport type SameSiteOptions =\n (typeof SameSiteOptions)[keyof typeof SameSiteOptions];\n\nexport class CookieStorage implements IWindowStorage {\n initialize(): Promise {\n return Promise.resolve();\n }\n\n getItem(key: string): string | null {\n const name = `${encodeURIComponent(key)}`;\n const cookieList = document.cookie.split(\";\");\n for (let i = 0; i < cookieList.length; i++) {\n const cookie = cookieList[i];\n const [key, ...rest] = decodeURIComponent(cookie).trim().split(\"=\");\n const value = rest.join(\"=\");\n\n if (key === name) {\n return value;\n }\n }\n return \"\";\n }\n\n getUserData(): string | null {\n throw createClientAuthError(ClientAuthErrorCodes.methodNotImplemented);\n }\n\n setItem(\n key: string,\n value: string,\n cookieLifeDays?: number,\n secure: boolean = true,\n sameSite: SameSiteOptions = SameSiteOptions.Lax\n ): void {\n let cookieStr = `${encodeURIComponent(key)}=${encodeURIComponent(\n value\n )};path=/;SameSite=${sameSite};`;\n\n if (cookieLifeDays) {\n const expireTime = getCookieExpirationTime(cookieLifeDays);\n cookieStr += `expires=${expireTime};`;\n }\n\n if (secure || sameSite === SameSiteOptions.None) {\n // SameSite None requires Secure flag\n cookieStr += \"Secure;\";\n }\n\n document.cookie = cookieStr;\n }\n\n async setUserData(): Promise {\n return Promise.reject(\n createClientAuthError(ClientAuthErrorCodes.methodNotImplemented)\n );\n }\n\n removeItem(key: string): void {\n // Setting expiration to -1 removes it\n this.setItem(key, \"\", -1);\n }\n\n getKeys(): string[] {\n const cookieList = document.cookie.split(\";\");\n const keys: Array = [];\n cookieList.forEach((cookie) => {\n const cookieParts = decodeURIComponent(cookie).trim().split(\"=\");\n keys.push(cookieParts[0]);\n });\n\n return keys;\n }\n\n containsKey(key: string): boolean {\n return this.getKeys().includes(key);\n }\n\n decryptData(): Promise {\n // Cookie storage does not support encryption, so this method is a no-op\n return Promise.resolve(null);\n }\n}\n\n/**\n * Get cookie expiration time\n * @param cookieLifeDays\n */\nexport function getCookieExpirationTime(cookieLifeDays: number): string {\n const today = new Date();\n const expr = new Date(\n today.getTime() + cookieLifeDays * COOKIE_LIFE_MULTIPLIER\n );\n return expr.toUTCString();\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { TokenKeys } from \"@azure/msal-common/browser\";\nimport { IWindowStorage } from \"./IWindowStorage.js\";\nimport * as CacheKeys from \"./CacheKeys.js\";\n\n/**\n * Returns a list of cache keys for all known accounts\n * @param storage\n * @returns\n */\nexport function getAccountKeys(\n storage: IWindowStorage,\n schemaVersion?: number\n): Array {\n const accountKeys = storage.getItem(\n CacheKeys.getAccountKeysCacheKey(schemaVersion)\n );\n if (accountKeys) {\n return JSON.parse(accountKeys);\n }\n\n return [];\n}\n\n/**\n * Returns a list of cache keys for all known tokens\n * @param clientId\n * @param storage\n * @returns\n */\nexport function getTokenKeys(\n clientId: string,\n storage: IWindowStorage,\n schemaVersion?: number\n): TokenKeys {\n const item = storage.getItem(\n CacheKeys.getTokenKeysCacheKey(clientId, schemaVersion)\n );\n if (item) {\n const tokenKeys = JSON.parse(item);\n if (\n tokenKeys &&\n tokenKeys.hasOwnProperty(\"idToken\") &&\n tokenKeys.hasOwnProperty(\"accessToken\") &&\n tokenKeys.hasOwnProperty(\"refreshToken\")\n ) {\n return tokenKeys as TokenKeys;\n }\n }\n\n return {\n idToken: [],\n accessToken: [],\n refreshToken: [],\n };\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type EncryptedData = {\n id: string;\n nonce: string;\n data: string;\n lastUpdatedAt: string;\n};\n\nexport function isEncrypted(data: object): data is EncryptedData {\n return (\n data.hasOwnProperty(\"id\") &&\n data.hasOwnProperty(\"nonce\") &&\n data.hasOwnProperty(\"data\")\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n TokenKeys,\n IPerformanceClient,\n invokeAsync,\n PerformanceEvents,\n Logger,\n invoke,\n} from \"@azure/msal-common/browser\";\nimport {\n createNewGuid,\n decrypt,\n encrypt,\n generateBaseKey,\n generateHKDF,\n} from \"../crypto/BrowserCrypto.js\";\nimport { base64DecToArr } from \"../encode/Base64Decode.js\";\nimport { urlEncodeArr } from \"../encode/Base64Encode.js\";\nimport {\n BrowserAuthErrorCodes,\n createBrowserAuthError,\n} from \"../error/BrowserAuthError.js\";\nimport {\n BrowserConfigurationAuthErrorCodes,\n createBrowserConfigurationAuthError,\n} from \"../error/BrowserConfigurationAuthError.js\";\nimport { CookieStorage, SameSiteOptions } from \"./CookieStorage.js\";\nimport { IWindowStorage } from \"./IWindowStorage.js\";\nimport { MemoryStorage } from \"./MemoryStorage.js\";\nimport { getAccountKeys, getTokenKeys } from \"./CacheHelpers.js\";\nimport * as CacheKeys from \"./CacheKeys.js\";\nimport { EncryptedData, isEncrypted } from \"./EncryptedData.js\";\n\nconst ENCRYPTION_KEY = \"msal.cache.encryption\";\nconst BROADCAST_CHANNEL_NAME = \"msal.broadcast.cache\";\n\ntype EncryptionCookie = {\n id: string;\n key: CryptoKey;\n};\n\nexport class LocalStorage implements IWindowStorage {\n private clientId: string;\n private initialized: boolean;\n private memoryStorage: MemoryStorage;\n private performanceClient: IPerformanceClient;\n private logger: Logger;\n private encryptionCookie?: EncryptionCookie;\n private broadcast: BroadcastChannel;\n\n constructor(\n clientId: string,\n logger: Logger,\n performanceClient: IPerformanceClient\n ) {\n if (!window.localStorage) {\n throw createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.storageNotSupported\n );\n }\n this.memoryStorage = new MemoryStorage();\n this.initialized = false;\n this.clientId = clientId;\n this.logger = logger;\n this.performanceClient = performanceClient;\n this.broadcast = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\n }\n\n async initialize(correlationId: string): Promise {\n const cookies = new CookieStorage();\n const cookieString = cookies.getItem(ENCRYPTION_KEY);\n let parsedCookie = { key: \"\", id: \"\" };\n if (cookieString) {\n try {\n parsedCookie = JSON.parse(cookieString);\n } catch (e) {}\n }\n if (parsedCookie.key && parsedCookie.id) {\n // Encryption key already exists, import\n const baseKey = invoke(\n base64DecToArr,\n PerformanceEvents.Base64Decode,\n this.logger,\n this.performanceClient,\n correlationId\n )(parsedCookie.key);\n this.encryptionCookie = {\n id: parsedCookie.id,\n key: await invokeAsync(\n generateHKDF,\n PerformanceEvents.GenerateHKDF,\n this.logger,\n this.performanceClient,\n correlationId\n )(baseKey),\n };\n } else {\n // Encryption key doesn't exist or is invalid, generate a new one\n const id = createNewGuid();\n const baseKey = await invokeAsync(\n generateBaseKey,\n PerformanceEvents.GenerateBaseKey,\n this.logger,\n this.performanceClient,\n correlationId\n )();\n const keyStr = invoke(\n urlEncodeArr,\n PerformanceEvents.UrlEncodeArr,\n this.logger,\n this.performanceClient,\n correlationId\n )(new Uint8Array(baseKey));\n this.encryptionCookie = {\n id: id,\n key: await invokeAsync(\n generateHKDF,\n PerformanceEvents.GenerateHKDF,\n this.logger,\n this.performanceClient,\n correlationId\n )(baseKey),\n };\n\n const cookieData = {\n id: id,\n key: keyStr,\n };\n\n cookies.setItem(\n ENCRYPTION_KEY,\n JSON.stringify(cookieData),\n 0, // Expiration - 0 means cookie will be cleared at the end of the browser session\n true, // Secure flag\n SameSiteOptions.None // SameSite must be None to support iframed apps\n );\n }\n\n await invokeAsync(\n this.importExistingCache.bind(this),\n PerformanceEvents.ImportExistingCache,\n this.logger,\n this.performanceClient,\n correlationId\n )(correlationId);\n\n // Register listener for cache updates in other tabs\n this.broadcast.addEventListener(\"message\", this.updateCache.bind(this));\n\n this.initialized = true;\n }\n\n getItem(key: string): string | null {\n return window.localStorage.getItem(key);\n }\n\n getUserData(key: string): string | null {\n if (!this.initialized) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.uninitializedPublicClientApplication\n );\n }\n return this.memoryStorage.getItem(key);\n }\n\n async decryptData(\n key: string,\n data: EncryptedData,\n correlationId: string\n ): Promise {\n if (!this.initialized || !this.encryptionCookie) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.uninitializedPublicClientApplication\n );\n }\n\n if (data.id !== this.encryptionCookie.id) {\n // Data was encrypted with a different key. It must be removed because it is from a previous session.\n this.performanceClient.incrementFields(\n { encryptedCacheExpiredCount: 1 },\n correlationId\n );\n return null;\n }\n\n const decryptedData = await invokeAsync(\n decrypt,\n PerformanceEvents.Decrypt,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n this.encryptionCookie.key,\n data.nonce,\n this.getContext(key),\n data.data\n );\n\n if (!decryptedData) {\n return null;\n }\n\n try {\n return JSON.parse(decryptedData);\n } catch (e) {\n this.performanceClient.incrementFields(\n { encryptedCacheCorruptionCount: 1 },\n correlationId\n );\n return null;\n }\n }\n\n setItem(key: string, value: string): void {\n window.localStorage.setItem(key, value);\n }\n\n async setUserData(\n key: string,\n value: string,\n correlationId: string,\n timestamp: string\n ): Promise {\n if (!this.initialized || !this.encryptionCookie) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.uninitializedPublicClientApplication\n );\n }\n\n const { data, nonce } = await invokeAsync(\n encrypt,\n PerformanceEvents.Encrypt,\n this.logger,\n this.performanceClient,\n correlationId\n )(this.encryptionCookie.key, value, this.getContext(key));\n const encryptedData: EncryptedData = {\n id: this.encryptionCookie.id,\n nonce: nonce,\n data: data,\n lastUpdatedAt: timestamp,\n };\n\n this.memoryStorage.setItem(key, value);\n this.setItem(key, JSON.stringify(encryptedData));\n\n // Notify other frames to update their in-memory cache\n this.broadcast.postMessage({\n key: key,\n value: value,\n context: this.getContext(key),\n });\n }\n\n removeItem(key: string): void {\n if (this.memoryStorage.containsKey(key)) {\n this.memoryStorage.removeItem(key);\n this.broadcast.postMessage({\n key: key,\n value: null,\n context: this.getContext(key),\n });\n }\n window.localStorage.removeItem(key);\n }\n\n getKeys(): string[] {\n return Object.keys(window.localStorage);\n }\n\n containsKey(key: string): boolean {\n return window.localStorage.hasOwnProperty(key);\n }\n\n /**\n * Removes all known MSAL keys from the cache\n */\n clear(): void {\n // Removes all remaining MSAL cache items\n this.memoryStorage.clear();\n\n const accountKeys = getAccountKeys(this);\n accountKeys.forEach((key) => this.removeItem(key));\n const tokenKeys = getTokenKeys(this.clientId, this);\n tokenKeys.idToken.forEach((key) => this.removeItem(key));\n tokenKeys.accessToken.forEach((key) => this.removeItem(key));\n tokenKeys.refreshToken.forEach((key) => this.removeItem(key));\n\n // Clean up anything left\n this.getKeys().forEach((cacheKey: string) => {\n if (\n cacheKey.startsWith(CacheKeys.PREFIX) ||\n cacheKey.indexOf(this.clientId) !== -1\n ) {\n this.removeItem(cacheKey);\n }\n });\n }\n\n /**\n * Helper to decrypt all known MSAL keys in localStorage and save them to inMemory storage\n * @returns\n */\n private async importExistingCache(correlationId: string): Promise {\n if (!this.encryptionCookie) {\n return;\n }\n\n let accountKeys = getAccountKeys(this);\n accountKeys = await this.importArray(accountKeys, correlationId);\n // Write valid account keys back to map\n if (accountKeys.length) {\n this.setItem(\n CacheKeys.getAccountKeysCacheKey(),\n JSON.stringify(accountKeys)\n );\n } else {\n this.removeItem(CacheKeys.getAccountKeysCacheKey());\n }\n\n const tokenKeys: TokenKeys = getTokenKeys(this.clientId, this);\n tokenKeys.idToken = await this.importArray(\n tokenKeys.idToken,\n correlationId\n );\n tokenKeys.accessToken = await this.importArray(\n tokenKeys.accessToken,\n correlationId\n );\n tokenKeys.refreshToken = await this.importArray(\n tokenKeys.refreshToken,\n correlationId\n );\n // Write valid token keys back to map\n if (\n tokenKeys.idToken.length ||\n tokenKeys.accessToken.length ||\n tokenKeys.refreshToken.length\n ) {\n this.setItem(\n CacheKeys.getTokenKeysCacheKey(this.clientId),\n JSON.stringify(tokenKeys)\n );\n } else {\n this.removeItem(CacheKeys.getTokenKeysCacheKey(this.clientId));\n }\n }\n\n /**\n * Helper to decrypt and save cache entries\n * @param key\n * @returns\n */\n private async getItemFromEncryptedCache(\n key: string,\n correlationId: string\n ): Promise {\n if (!this.encryptionCookie) {\n return null;\n }\n\n const rawCache = this.getItem(key);\n if (!rawCache) {\n return null;\n }\n\n let encObj: EncryptedData;\n try {\n encObj = JSON.parse(rawCache);\n } catch (e) {\n // Not a valid encrypted object, remove\n return null;\n }\n\n if (!isEncrypted(encObj)) {\n // Data is not encrypted\n this.performanceClient.incrementFields(\n { unencryptedCacheCount: 1 },\n correlationId\n );\n return encObj;\n }\n\n if (encObj.id !== this.encryptionCookie.id) {\n // Data was encrypted with a different key. It must be removed because it is from a previous session.\n this.performanceClient.incrementFields(\n { encryptedCacheExpiredCount: 1 },\n correlationId\n );\n return null;\n }\n\n return invokeAsync(\n decrypt,\n PerformanceEvents.Decrypt,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n this.encryptionCookie.key,\n encObj.nonce,\n this.getContext(key),\n encObj.data\n );\n }\n\n /**\n * Helper to decrypt and save an array of cache keys\n * @param arr\n * @returns Array of keys successfully imported\n */\n private async importArray(\n arr: Array,\n correlationId: string\n ): Promise> {\n const importedArr: Array = [];\n const promiseArr: Array> = [];\n arr.forEach((key) => {\n const promise = this.getItemFromEncryptedCache(\n key,\n correlationId\n ).then((value) => {\n if (value) {\n this.memoryStorage.setItem(key, value);\n importedArr.push(key);\n } else {\n // If value is empty, unencrypted or expired remove\n this.removeItem(key);\n }\n });\n promiseArr.push(promise);\n });\n\n await Promise.all(promiseArr);\n return importedArr;\n }\n\n /**\n * Gets encryption context for a given cache entry. This is clientId for app specific entries, empty string for shared entries\n * @param key\n * @returns\n */\n private getContext(key: string): string {\n let context = \"\";\n if (key.includes(this.clientId)) {\n context = this.clientId; // Used to bind encryption key to this appId\n }\n\n return context;\n }\n\n private updateCache(event: MessageEvent): void {\n this.logger.trace(\"Updating internal cache from broadcast event\");\n const perfMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.LocalStorageUpdated\n );\n perfMeasurement.add({ isBackground: true });\n\n const { key, value, context } = event.data;\n if (!key) {\n this.logger.error(\"Broadcast event missing key\");\n perfMeasurement.end({ success: false, errorCode: \"noKey\" });\n return;\n }\n\n if (context && context !== this.clientId) {\n this.logger.trace(\n `Ignoring broadcast event from clientId: ${context}`\n );\n perfMeasurement.end({\n success: false,\n errorCode: \"contextMismatch\",\n });\n return;\n }\n\n if (!value) {\n this.memoryStorage.removeItem(key);\n this.logger.verbose(\"Removed item from internal cache\");\n } else {\n this.memoryStorage.setItem(key, value);\n this.logger.verbose(\"Updated item in internal cache\");\n }\n perfMeasurement.end({ success: true });\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n BrowserConfigurationAuthErrorCodes,\n createBrowserConfigurationAuthError,\n} from \"../error/BrowserConfigurationAuthError.js\";\nimport { IWindowStorage } from \"./IWindowStorage.js\";\n\nexport class SessionStorage implements IWindowStorage {\n constructor() {\n if (!window.sessionStorage) {\n throw createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.storageNotSupported\n );\n }\n }\n\n async initialize(): Promise {\n // Session storage does not require initialization\n }\n\n getItem(key: string): string | null {\n return window.sessionStorage.getItem(key);\n }\n\n getUserData(key: string): string | null {\n return this.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n window.sessionStorage.setItem(key, value);\n }\n\n async setUserData(key: string, value: string): Promise {\n this.setItem(key, value);\n }\n\n removeItem(key: string): void {\n window.sessionStorage.removeItem(key);\n }\n\n getKeys(): string[] {\n return Object.keys(window.sessionStorage);\n }\n\n containsKey(key: string): boolean {\n return window.sessionStorage.hasOwnProperty(key);\n }\n\n decryptData(): Promise {\n // Session storage does not support encryption, so this method is a no-op\n return Promise.resolve(null);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const EventType = {\n INITIALIZE_START: \"msal:initializeStart\",\n INITIALIZE_END: \"msal:initializeEnd\",\n ACCOUNT_ADDED: \"msal:accountAdded\",\n ACCOUNT_REMOVED: \"msal:accountRemoved\",\n ACTIVE_ACCOUNT_CHANGED: \"msal:activeAccountChanged\",\n LOGIN_START: \"msal:loginStart\",\n LOGIN_SUCCESS: \"msal:loginSuccess\",\n LOGIN_FAILURE: \"msal:loginFailure\",\n ACQUIRE_TOKEN_START: \"msal:acquireTokenStart\",\n ACQUIRE_TOKEN_SUCCESS: \"msal:acquireTokenSuccess\",\n ACQUIRE_TOKEN_FAILURE: \"msal:acquireTokenFailure\",\n ACQUIRE_TOKEN_NETWORK_START: \"msal:acquireTokenFromNetworkStart\",\n SSO_SILENT_START: \"msal:ssoSilentStart\",\n SSO_SILENT_SUCCESS: \"msal:ssoSilentSuccess\",\n SSO_SILENT_FAILURE: \"msal:ssoSilentFailure\",\n ACQUIRE_TOKEN_BY_CODE_START: \"msal:acquireTokenByCodeStart\",\n ACQUIRE_TOKEN_BY_CODE_SUCCESS: \"msal:acquireTokenByCodeSuccess\",\n ACQUIRE_TOKEN_BY_CODE_FAILURE: \"msal:acquireTokenByCodeFailure\",\n HANDLE_REDIRECT_START: \"msal:handleRedirectStart\",\n HANDLE_REDIRECT_END: \"msal:handleRedirectEnd\",\n POPUP_OPENED: \"msal:popupOpened\",\n LOGOUT_START: \"msal:logoutStart\",\n LOGOUT_SUCCESS: \"msal:logoutSuccess\",\n LOGOUT_FAILURE: \"msal:logoutFailure\",\n LOGOUT_END: \"msal:logoutEnd\",\n RESTORE_FROM_BFCACHE: \"msal:restoreFromBFCache\",\n BROKER_CONNECTION_ESTABLISHED: \"msal:brokerConnectionEstablished\",\n} as const;\nexport type EventType = (typeof EventType)[keyof typeof EventType];\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Utility function to remove an element from an array in place.\n * @param array - The array from which to remove the element.\n * @param element - The element to remove from the array.\n */\nexport function removeElementFromArray(\n array: Array,\n element: string\n): void {\n const index = array.indexOf(element);\n if (index > -1) {\n array.splice(index, 1);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AccessTokenEntity,\n AccountEntity,\n AccountInfo,\n ActiveAccountFilters,\n AppMetadataEntity,\n AuthenticationScheme,\n AuthorityMetadataEntity,\n CacheError,\n CacheErrorCodes,\n CacheHelpers,\n CacheManager,\n CacheRecord,\n CommonAuthorizationUrlRequest,\n Constants,\n createCacheError,\n DEFAULT_CRYPTO_IMPLEMENTATION,\n ICrypto,\n IdTokenEntity,\n invokeAsync,\n IPerformanceClient,\n Logger,\n PerformanceEvents,\n PersistentCacheKeys,\n RefreshTokenEntity,\n ServerTelemetryEntity,\n StaticAuthorityOptions,\n StoreInCache,\n StringUtils,\n ThrottlingEntity,\n TimeUtils,\n TokenKeys,\n CredentialEntity,\n CredentialType,\n DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\n} from \"@azure/msal-common/browser\";\nimport { CacheOptions } from \"../config/Configuration.js\";\nimport {\n BrowserAuthErrorCodes,\n createBrowserAuthError,\n} from \"../error/BrowserAuthError.js\";\nimport {\n BrowserCacheLocation,\n InMemoryCacheKeys,\n INTERACTION_TYPE,\n TemporaryCacheKeys,\n} from \"../utils/BrowserConstants.js\";\nimport * as CacheKeys from \"./CacheKeys.js\";\nimport { LocalStorage } from \"./LocalStorage.js\";\nimport { SessionStorage } from \"./SessionStorage.js\";\nimport { MemoryStorage } from \"./MemoryStorage.js\";\nimport { IWindowStorage } from \"./IWindowStorage.js\";\nimport { PlatformAuthRequest } from \"../broker/nativeBroker/PlatformAuthRequest.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { base64Decode } from \"../encode/Base64Decode.js\";\nimport { base64Encode } from \"../encode/Base64Encode.js\";\nimport { CookieStorage } from \"./CookieStorage.js\";\nimport { getAccountKeys, getTokenKeys } from \"./CacheHelpers.js\";\nimport { EventType } from \"../event/EventType.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { clearHash } from \"../utils/BrowserUtils.js\";\nimport { version } from \"../packageMetadata.js\";\nimport { removeElementFromArray } from \"../utils/Helpers.js\";\nimport { EncryptedData, isEncrypted } from \"./EncryptedData.js\";\n\n/**\n * This class implements the cache storage interface for MSAL through browser local or session storage.\n * Cookies are only used if storeAuthStateInCookie is true, and are only used for\n * parameters such as state and nonce, generally.\n */\nexport class BrowserCacheManager extends CacheManager {\n // Cache configuration, either set by user or default values.\n protected cacheConfig: Required;\n // Window storage object (either local or sessionStorage)\n protected browserStorage: IWindowStorage;\n // Internal in-memory storage object used for data used by msal that does not need to persist across page loads\n protected internalStorage: MemoryStorage;\n // Temporary cache\n protected temporaryCacheStorage: IWindowStorage;\n // Cookie storage\n protected cookieStorage: CookieStorage;\n // Logger instance\n protected logger: Logger;\n // Event Handler\n private eventHandler: EventHandler;\n\n constructor(\n clientId: string,\n cacheConfig: Required,\n cryptoImpl: ICrypto,\n logger: Logger,\n performanceClient: IPerformanceClient,\n eventHandler: EventHandler,\n staticAuthorityOptions?: StaticAuthorityOptions\n ) {\n super(\n clientId,\n cryptoImpl,\n logger,\n performanceClient,\n staticAuthorityOptions\n );\n this.cacheConfig = cacheConfig;\n this.logger = logger;\n this.internalStorage = new MemoryStorage();\n this.browserStorage = getStorageImplementation(\n clientId,\n cacheConfig.cacheLocation,\n logger,\n performanceClient\n );\n this.temporaryCacheStorage = getStorageImplementation(\n clientId,\n cacheConfig.temporaryCacheLocation,\n logger,\n performanceClient\n );\n this.cookieStorage = new CookieStorage();\n this.eventHandler = eventHandler;\n }\n\n async initialize(correlationId: string): Promise {\n this.performanceClient.addFields(\n {\n cacheLocation: this.cacheConfig.cacheLocation,\n cacheRetentionDays: this.cacheConfig.cacheRetentionDays,\n },\n correlationId\n );\n await this.browserStorage.initialize(correlationId);\n await this.migrateExistingCache(correlationId);\n this.trackVersionChanges(correlationId);\n }\n\n /**\n * Migrates any existing cache data from previous versions of MSAL.js into the current cache structure.\n */\n async migrateExistingCache(correlationId: string): Promise {\n const accountKeys0 = getAccountKeys(this.browserStorage, 0);\n const tokenKeys0 = getTokenKeys(this.clientId, this.browserStorage, 0);\n this.performanceClient.addFields(\n {\n oldAccountCount: accountKeys0.length,\n oldAccessCount: tokenKeys0.accessToken.length,\n oldIdCount: tokenKeys0.idToken.length,\n oldRefreshCount: tokenKeys0.refreshToken.length,\n },\n correlationId\n );\n\n const accountKeys1 = getAccountKeys(this.browserStorage, 1);\n const tokenKeys1 = getTokenKeys(this.clientId, this.browserStorage, 1);\n this.performanceClient.addFields(\n {\n currAccountCount: accountKeys1.length,\n currAccessCount: tokenKeys1.accessToken.length,\n currIdCount: tokenKeys1.idToken.length,\n currRefreshCount: tokenKeys1.refreshToken.length,\n },\n correlationId\n );\n\n await Promise.all([\n this.updateV0ToCurrent(\n CacheKeys.ACCOUNT_SCHEMA_VERSION,\n accountKeys0,\n accountKeys1,\n correlationId\n ),\n this.updateV0ToCurrent(\n CacheKeys.CREDENTIAL_SCHEMA_VERSION,\n tokenKeys0.idToken,\n tokenKeys1.idToken,\n correlationId\n ),\n this.updateV0ToCurrent(\n CacheKeys.CREDENTIAL_SCHEMA_VERSION,\n tokenKeys0.accessToken,\n tokenKeys1.accessToken,\n correlationId\n ),\n this.updateV0ToCurrent(\n CacheKeys.CREDENTIAL_SCHEMA_VERSION,\n tokenKeys0.refreshToken,\n tokenKeys1.refreshToken,\n correlationId\n ),\n ]);\n\n if (accountKeys0.length > 0) {\n this.browserStorage.setItem(\n CacheKeys.getAccountKeysCacheKey(0),\n JSON.stringify(accountKeys0)\n );\n } else {\n this.browserStorage.removeItem(CacheKeys.getAccountKeysCacheKey(0));\n }\n\n if (accountKeys1.length > 0) {\n this.browserStorage.setItem(\n CacheKeys.getAccountKeysCacheKey(1),\n JSON.stringify(accountKeys1)\n );\n } else {\n this.browserStorage.removeItem(CacheKeys.getAccountKeysCacheKey(1));\n }\n\n this.setTokenKeys(tokenKeys0, correlationId, 0);\n this.setTokenKeys(tokenKeys1, correlationId, 1);\n }\n\n async updateV0ToCurrent(\n currentSchema: number,\n v0Keys: Array,\n v1Keys: Array,\n correlationId: string\n ): Promise {\n const upgradePromises: Array> = [];\n\n for (const v0Key of [...v0Keys]) {\n const rawV0Value = this.browserStorage.getItem(v0Key);\n const parsedV0Value = this.validateAndParseJson(\n rawV0Value || \"\"\n ) as CredentialEntity | AccountEntity | EncryptedData | null;\n\n if (!parsedV0Value) {\n removeElementFromArray(v0Keys, v0Key);\n continue;\n }\n\n if (!parsedV0Value.lastUpdatedAt) {\n // Add lastUpdatedAt to the existing v0 entry if it doesnt exist so we know when it's safe to remove it\n parsedV0Value.lastUpdatedAt = Date.now().toString();\n this.setItem(\n v0Key,\n JSON.stringify(parsedV0Value),\n correlationId\n );\n }\n\n const decryptedData = isEncrypted(parsedV0Value)\n ? await this.browserStorage.decryptData(\n v0Key,\n parsedV0Value,\n correlationId\n )\n : parsedV0Value;\n let expirationTime;\n if (decryptedData) {\n if (CacheHelpers.isAccessTokenEntity(decryptedData)) {\n expirationTime = decryptedData.expiresOn;\n } else if (CacheHelpers.isRefreshTokenEntity(decryptedData)) {\n expirationTime = decryptedData.expiresOn;\n }\n }\n if (\n !decryptedData ||\n TimeUtils.isCacheExpired(\n parsedV0Value.lastUpdatedAt,\n this.cacheConfig.cacheRetentionDays\n ) ||\n (expirationTime &&\n TimeUtils.isTokenExpired(\n expirationTime,\n DEFAULT_TOKEN_RENEWAL_OFFSET_SEC\n ))\n ) {\n this.browserStorage.removeItem(v0Key);\n removeElementFromArray(v0Keys, v0Key);\n this.performanceClient.incrementFields(\n { expiredCacheRemovedCount: 1 },\n correlationId\n );\n continue;\n }\n\n if (\n this.cacheConfig.cacheLocation !==\n BrowserCacheLocation.LocalStorage ||\n isEncrypted(parsedV0Value)\n ) {\n const v1Key = `${CacheKeys.PREFIX}.${currentSchema}${CacheKeys.CACHE_KEY_SEPARATOR}${v0Key}`;\n const rawV1Entry = this.browserStorage.getItem(v1Key);\n if (!rawV1Entry) {\n upgradePromises.push(\n this.setUserData(\n v1Key,\n JSON.stringify(decryptedData),\n correlationId,\n parsedV0Value.lastUpdatedAt\n ).then(() => {\n v1Keys.push(v1Key);\n this.performanceClient.incrementFields(\n { upgradedCacheCount: 1 },\n correlationId\n );\n })\n );\n continue;\n } else {\n const parsedV1Entry = this.validateAndParseJson(\n rawV1Entry\n ) as CredentialEntity | AccountEntity | EncryptedData;\n // If the entry already exists but is older than the v0 entry, replace it\n if (\n Number(parsedV0Value.lastUpdatedAt) >\n Number(parsedV1Entry.lastUpdatedAt)\n ) {\n upgradePromises.push(\n this.setUserData(\n v1Key,\n JSON.stringify(decryptedData),\n correlationId,\n parsedV0Value.lastUpdatedAt\n ).then(() => {\n this.performanceClient.incrementFields(\n { updatedCacheFromV0Count: 1 },\n correlationId\n );\n })\n );\n continue;\n }\n }\n }\n /*\n * Note: If we reach here for unencrypted localStorage data, we continue without migrating\n * as we can't migrate unencrypted localStorage data right now since we can't guarantee KMSI=no\n */\n }\n\n return Promise.all(upgradePromises);\n }\n\n /**\n * Tracks upgrades and downgrades for telemetry and debugging purposes\n */\n private trackVersionChanges(correlationId: string): void {\n const previousVersion = this.browserStorage.getItem(\n CacheKeys.VERSION_CACHE_KEY\n );\n if (previousVersion) {\n this.logger.info(\n `MSAL.js was last initialized by version: ${previousVersion}`\n );\n this.performanceClient.addFields(\n { previousLibraryVersion: previousVersion },\n correlationId\n );\n }\n\n if (previousVersion !== version) {\n this.setItem(CacheKeys.VERSION_CACHE_KEY, version, correlationId);\n }\n }\n\n /**\n * Parses passed value as JSON object, JSON.parse() will throw an error.\n * @param input\n */\n protected validateAndParseJson(jsonValue: string): object | null {\n if (!jsonValue) {\n return null;\n }\n try {\n const parsedJson = JSON.parse(jsonValue);\n /**\n * There are edge cases in which JSON.parse will successfully parse a non-valid JSON object\n * (e.g. JSON.parse will parse an escaped string into an unescaped string), so adding a type check\n * of the parsed value is necessary in order to be certain that the string represents a valid JSON object.\n *\n */\n return parsedJson && typeof parsedJson === \"object\"\n ? parsedJson\n : null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Helper to setItem in browser storage, with cleanup in case of quota errors\n * @param key\n * @param value\n */\n setItem(key: string, value: string, correlationId: string): void {\n let tokenKeysV0Count = 0;\n let accessTokenKeys: Array = [];\n const maxRetries = 20;\n for (let i = 0; i <= maxRetries; i++) {\n try {\n this.browserStorage.setItem(key, value);\n if (i > 0) {\n // Finally update the token keys array with the tokens removed\n if (i <= tokenKeysV0Count) {\n this.removeAccessTokenKeys(\n accessTokenKeys.slice(0, i),\n correlationId,\n 0\n );\n } else {\n this.removeAccessTokenKeys(\n accessTokenKeys.slice(0, tokenKeysV0Count),\n correlationId,\n 0\n );\n this.removeAccessTokenKeys(\n accessTokenKeys.slice(tokenKeysV0Count, i),\n correlationId\n );\n }\n }\n break; // If setItem succeeds, exit the loop\n } catch (e) {\n const cacheError = createCacheError(e);\n if (\n cacheError.errorCode ===\n CacheErrorCodes.cacheQuotaExceeded &&\n i < maxRetries\n ) {\n if (!accessTokenKeys.length) {\n // If we are currently trying to set the token keys, use the value we're trying to set\n const tokenKeys0 =\n key ===\n CacheKeys.getTokenKeysCacheKey(this.clientId, 0)\n ? (JSON.parse(value) as TokenKeys).accessToken\n : this.getTokenKeys(0).accessToken;\n const tokenKeys1 =\n key ===\n CacheKeys.getTokenKeysCacheKey(this.clientId)\n ? (JSON.parse(value) as TokenKeys).accessToken\n : this.getTokenKeys().accessToken;\n accessTokenKeys = [...tokenKeys0, ...tokenKeys1];\n tokenKeysV0Count = tokenKeys0.length;\n }\n if (accessTokenKeys.length <= i) {\n // Nothing to remove, rethrow the error\n throw cacheError;\n }\n // When cache quota is exceeded, start removing access tokens until we can successfully set the item\n this.removeAccessToken(\n accessTokenKeys[i],\n correlationId,\n false // Don't save token keys yet, do it at the end\n );\n } else {\n // If the error is not a quota exceeded error, rethrow it\n throw cacheError;\n }\n }\n }\n }\n\n /**\n * Helper to setUserData in browser storage, with cleanup in case of quota errors\n * @param key\n * @param value\n * @param correlationId\n */\n async setUserData(\n key: string,\n value: string,\n correlationId: string,\n timestamp: string\n ): Promise {\n let tokenKeysV0Count = 0;\n let accessTokenKeys: Array = [];\n const maxRetries = 20;\n for (let i = 0; i <= maxRetries; i++) {\n try {\n await invokeAsync(\n this.browserStorage.setUserData.bind(this.browserStorage),\n PerformanceEvents.SetUserData,\n this.logger,\n this.performanceClient\n )(key, value, correlationId, timestamp);\n if (i > 0) {\n // Finally update the token keys array with the tokens removed\n if (i <= tokenKeysV0Count) {\n this.removeAccessTokenKeys(\n accessTokenKeys.slice(0, i),\n correlationId,\n 0\n );\n } else {\n this.removeAccessTokenKeys(\n accessTokenKeys.slice(0, tokenKeysV0Count),\n correlationId,\n 0\n );\n this.removeAccessTokenKeys(\n accessTokenKeys.slice(tokenKeysV0Count, i),\n correlationId\n );\n }\n }\n break; // If setItem succeeds, exit the loop\n } catch (e) {\n const cacheError = createCacheError(e);\n if (\n cacheError.errorCode ===\n CacheErrorCodes.cacheQuotaExceeded &&\n i < maxRetries\n ) {\n if (!accessTokenKeys.length) {\n const tokenKeys0 = this.getTokenKeys(0).accessToken;\n const tokenKeys1 = this.getTokenKeys().accessToken;\n accessTokenKeys = [...tokenKeys0, ...tokenKeys1];\n tokenKeysV0Count = tokenKeys0.length;\n }\n if (accessTokenKeys.length <= i) {\n // Nothing left to remove, rethrow the error\n throw cacheError;\n }\n // When cache quota is exceeded, start removing access tokens until we can successfully set the item\n this.removeAccessToken(\n accessTokenKeys[i],\n correlationId,\n false // Don't save token keys yet, do it at the end\n );\n } else {\n // If the error is not a quota exceeded error, rethrow it\n throw cacheError;\n }\n }\n }\n }\n\n /**\n * Reads account from cache, deserializes it into an account entity and returns it.\n * If account is not found from the key, returns null and removes key from map.\n * @param accountKey\n * @returns\n */\n getAccount(\n accountKey: string,\n correlationId: string\n ): AccountEntity | null {\n this.logger.trace(\"BrowserCacheManager.getAccount called\");\n const serializedAccount = this.browserStorage.getUserData(accountKey);\n if (!serializedAccount) {\n this.removeAccountKeyFromMap(accountKey, correlationId);\n return null;\n }\n\n const parsedAccount = this.validateAndParseJson(serializedAccount);\n if (!parsedAccount || !AccountEntity.isAccountEntity(parsedAccount)) {\n return null;\n }\n\n return CacheManager.toObject(\n new AccountEntity(),\n parsedAccount\n );\n }\n\n /**\n * set account entity in the platform cache\n * @param account\n */\n async setAccount(\n account: AccountEntity,\n correlationId: string\n ): Promise {\n this.logger.trace(\"BrowserCacheManager.setAccount called\");\n const key = this.generateAccountKey(account.getAccountInfo());\n const timestamp = Date.now().toString();\n account.lastUpdatedAt = timestamp;\n await this.setUserData(\n key,\n JSON.stringify(account),\n correlationId,\n timestamp\n );\n const wasAdded = this.addAccountKeyToMap(key, correlationId);\n\n /**\n * @deprecated - Remove this in next major version in favor of more consistent LOGIN event\n */\n if (\n this.cacheConfig.cacheLocation ===\n BrowserCacheLocation.LocalStorage &&\n wasAdded\n ) {\n this.eventHandler.emitEvent(\n EventType.ACCOUNT_ADDED,\n undefined,\n account.getAccountInfo()\n );\n }\n }\n\n /**\n * Returns the array of account keys currently cached\n * @returns\n */\n getAccountKeys(): Array {\n return getAccountKeys(this.browserStorage);\n }\n\n /**\n * Add a new account to the key map\n * @param key\n */\n addAccountKeyToMap(key: string, correlationId: string): boolean {\n this.logger.trace(\"BrowserCacheManager.addAccountKeyToMap called\");\n this.logger.tracePii(\n `BrowserCacheManager.addAccountKeyToMap called with key: ${key}`\n );\n const accountKeys = this.getAccountKeys();\n if (accountKeys.indexOf(key) === -1) {\n // Only add key if it does not already exist in the map\n accountKeys.push(key);\n this.setItem(\n CacheKeys.getAccountKeysCacheKey(),\n JSON.stringify(accountKeys),\n correlationId\n );\n this.logger.verbose(\n \"BrowserCacheManager.addAccountKeyToMap account key added\"\n );\n return true;\n } else {\n this.logger.verbose(\n \"BrowserCacheManager.addAccountKeyToMap account key already exists in map\"\n );\n return false;\n }\n }\n\n /**\n * Remove an account from the key map\n * @param key\n */\n removeAccountKeyFromMap(key: string, correlationId: string): void {\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap called\");\n this.logger.tracePii(\n `BrowserCacheManager.removeAccountKeyFromMap called with key: ${key}`\n );\n const accountKeys = this.getAccountKeys();\n const removalIndex = accountKeys.indexOf(key);\n if (removalIndex > -1) {\n accountKeys.splice(removalIndex, 1);\n if (accountKeys.length === 0) {\n // If no keys left, remove the map\n this.removeItem(CacheKeys.getAccountKeysCacheKey());\n return;\n } else {\n this.setItem(\n CacheKeys.getAccountKeysCacheKey(),\n JSON.stringify(accountKeys),\n correlationId\n );\n }\n this.logger.trace(\n \"BrowserCacheManager.removeAccountKeyFromMap account key removed\"\n );\n } else {\n this.logger.trace(\n \"BrowserCacheManager.removeAccountKeyFromMap key not found in existing map\"\n );\n }\n }\n\n /**\n * Extends inherited removeAccount function to include removal of the account key from the map\n * @param key\n */\n removeAccount(account: AccountInfo, correlationId: string): void {\n const activeAccount = this.getActiveAccount(correlationId);\n if (\n activeAccount?.homeAccountId === account.homeAccountId &&\n activeAccount?.environment === account.environment\n ) {\n this.setActiveAccount(null, correlationId);\n }\n\n super.removeAccount(account, correlationId);\n this.removeAccountKeyFromMap(\n this.generateAccountKey(account),\n correlationId\n );\n\n // Remove all other associated cache items\n this.browserStorage.getKeys().forEach((key) => {\n if (\n key.includes(account.homeAccountId) &&\n key.includes(account.environment)\n ) {\n this.browserStorage.removeItem(key);\n }\n });\n\n /**\n * @deprecated - Remove this in next major version in favor of more consistent LOGOUT event\n */\n if (\n this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage\n ) {\n this.eventHandler.emitEvent(\n EventType.ACCOUNT_REMOVED,\n undefined,\n account\n );\n }\n }\n\n /**\n * Removes given idToken from the cache and from the key map\n * @param key\n */\n removeIdToken(key: string, correlationId: string): void {\n super.removeIdToken(key, correlationId);\n const tokenKeys = this.getTokenKeys();\n const idRemoval = tokenKeys.idToken.indexOf(key);\n if (idRemoval > -1) {\n this.logger.info(\"idToken removed from tokenKeys map\");\n tokenKeys.idToken.splice(idRemoval, 1);\n this.setTokenKeys(tokenKeys, correlationId);\n }\n }\n\n /**\n * Removes given accessToken from the cache and from the key map\n * @param key\n */\n removeAccessToken(\n key: string,\n correlationId: string,\n updateTokenKeys: boolean = true\n ): void {\n super.removeAccessToken(key, correlationId);\n updateTokenKeys && this.removeAccessTokenKeys([key], correlationId);\n }\n\n /**\n * Remove access token key from the key map\n * @param key\n * @param correlationId\n * @param tokenKeys\n */\n removeAccessTokenKeys(\n keys: Array,\n correlationId: string,\n schemaVersion: number = CacheKeys.CREDENTIAL_SCHEMA_VERSION\n ): void {\n this.logger.trace(\"removeAccessTokenKey called\");\n const tokenKeys = this.getTokenKeys(schemaVersion);\n let keysRemoved = 0;\n keys.forEach((key) => {\n const accessRemoval = tokenKeys.accessToken.indexOf(key);\n if (accessRemoval > -1) {\n tokenKeys.accessToken.splice(accessRemoval, 1);\n keysRemoved++;\n }\n });\n\n if (keysRemoved > 0) {\n this.logger.info(\n `removed ${keysRemoved} accessToken keys from tokenKeys map`\n );\n this.setTokenKeys(tokenKeys, correlationId, schemaVersion);\n return;\n }\n }\n\n /**\n * Removes given refreshToken from the cache and from the key map\n * @param key\n */\n removeRefreshToken(key: string, correlationId: string): void {\n super.removeRefreshToken(key, correlationId);\n const tokenKeys = this.getTokenKeys();\n const refreshRemoval = tokenKeys.refreshToken.indexOf(key);\n if (refreshRemoval > -1) {\n this.logger.info(\"refreshToken removed from tokenKeys map\");\n tokenKeys.refreshToken.splice(refreshRemoval, 1);\n this.setTokenKeys(tokenKeys, correlationId);\n }\n }\n\n /**\n * Gets the keys for the cached tokens associated with this clientId\n * @returns\n */\n getTokenKeys(\n schemaVersion: number = CacheKeys.CREDENTIAL_SCHEMA_VERSION\n ): TokenKeys {\n return getTokenKeys(this.clientId, this.browserStorage, schemaVersion);\n }\n\n /**\n * Stores the token keys in the cache\n * @param tokenKeys\n * @param correlationId\n * @returns\n */\n setTokenKeys(\n tokenKeys: TokenKeys,\n correlationId: string,\n schemaVersion: number = CacheKeys.CREDENTIAL_SCHEMA_VERSION\n ): void {\n if (\n tokenKeys.idToken.length === 0 &&\n tokenKeys.accessToken.length === 0 &&\n tokenKeys.refreshToken.length === 0\n ) {\n // If no keys left, remove the map\n this.removeItem(\n CacheKeys.getTokenKeysCacheKey(this.clientId, schemaVersion)\n );\n return;\n } else {\n this.setItem(\n CacheKeys.getTokenKeysCacheKey(this.clientId, schemaVersion),\n JSON.stringify(tokenKeys),\n correlationId\n );\n }\n }\n\n /**\n * generates idToken entity from a string\n * @param idTokenKey\n */\n getIdTokenCredential(\n idTokenKey: string,\n correlationId: string\n ): IdTokenEntity | null {\n const value = this.browserStorage.getUserData(idTokenKey);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getIdTokenCredential: called, no cache hit\"\n );\n this.removeIdToken(idTokenKey, correlationId);\n return null;\n }\n\n const parsedIdToken = this.validateAndParseJson(value);\n if (!parsedIdToken || !CacheHelpers.isIdTokenEntity(parsedIdToken)) {\n this.logger.trace(\n \"BrowserCacheManager.getIdTokenCredential: called, no cache hit\"\n );\n return null;\n }\n\n this.logger.trace(\n \"BrowserCacheManager.getIdTokenCredential: cache hit\"\n );\n return parsedIdToken as IdTokenEntity;\n }\n\n /**\n * set IdToken credential to the platform cache\n * @param idToken\n */\n async setIdTokenCredential(\n idToken: IdTokenEntity,\n correlationId: string\n ): Promise {\n this.logger.trace(\"BrowserCacheManager.setIdTokenCredential called\");\n const idTokenKey = this.generateCredentialKey(idToken);\n const timestamp = Date.now().toString();\n idToken.lastUpdatedAt = timestamp;\n\n await this.setUserData(\n idTokenKey,\n JSON.stringify(idToken),\n correlationId,\n timestamp\n );\n\n const tokenKeys = this.getTokenKeys();\n if (tokenKeys.idToken.indexOf(idTokenKey) === -1) {\n this.logger.info(\n \"BrowserCacheManager: addTokenKey - idToken added to map\"\n );\n tokenKeys.idToken.push(idTokenKey);\n this.setTokenKeys(tokenKeys, correlationId);\n }\n }\n\n /**\n * generates accessToken entity from a string\n * @param key\n */\n getAccessTokenCredential(\n accessTokenKey: string,\n correlationId: string\n ): AccessTokenEntity | null {\n const value = this.browserStorage.getUserData(accessTokenKey);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\"\n );\n this.removeAccessTokenKeys([accessTokenKey], correlationId);\n return null;\n }\n const parsedAccessToken = this.validateAndParseJson(value);\n if (\n !parsedAccessToken ||\n !CacheHelpers.isAccessTokenEntity(parsedAccessToken)\n ) {\n this.logger.trace(\n \"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\"\n );\n return null;\n }\n\n this.logger.trace(\n \"BrowserCacheManager.getAccessTokenCredential: cache hit\"\n );\n return parsedAccessToken as AccessTokenEntity;\n }\n\n /**\n * set accessToken credential to the platform cache\n * @param accessToken\n */\n async setAccessTokenCredential(\n accessToken: AccessTokenEntity,\n correlationId: string\n ): Promise {\n this.logger.trace(\n \"BrowserCacheManager.setAccessTokenCredential called\"\n );\n const accessTokenKey = this.generateCredentialKey(accessToken);\n const timestamp = Date.now().toString();\n accessToken.lastUpdatedAt = timestamp;\n\n await this.setUserData(\n accessTokenKey,\n JSON.stringify(accessToken),\n correlationId,\n timestamp\n );\n\n const tokenKeys = this.getTokenKeys();\n const index = tokenKeys.accessToken.indexOf(accessTokenKey);\n if (index !== -1) {\n tokenKeys.accessToken.splice(index, 1); // Remove existing key before pushing to the end\n }\n this.logger.trace(\n `access token ${index === -1 ? \"added to\" : \"updated in\"} map`\n );\n tokenKeys.accessToken.push(accessTokenKey);\n this.setTokenKeys(tokenKeys, correlationId);\n }\n\n /**\n * generates refreshToken entity from a string\n * @param refreshTokenKey\n */\n getRefreshTokenCredential(\n refreshTokenKey: string,\n correlationId: string\n ): RefreshTokenEntity | null {\n const value = this.browserStorage.getUserData(refreshTokenKey);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\"\n );\n this.removeRefreshToken(refreshTokenKey, correlationId);\n return null;\n }\n const parsedRefreshToken = this.validateAndParseJson(value);\n if (\n !parsedRefreshToken ||\n !CacheHelpers.isRefreshTokenEntity(parsedRefreshToken)\n ) {\n this.logger.trace(\n \"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\"\n );\n return null;\n }\n\n this.logger.trace(\n \"BrowserCacheManager.getRefreshTokenCredential: cache hit\"\n );\n return parsedRefreshToken as RefreshTokenEntity;\n }\n\n /**\n * set refreshToken credential to the platform cache\n * @param refreshToken\n */\n async setRefreshTokenCredential(\n refreshToken: RefreshTokenEntity,\n correlationId: string\n ): Promise {\n this.logger.trace(\n \"BrowserCacheManager.setRefreshTokenCredential called\"\n );\n const refreshTokenKey = this.generateCredentialKey(refreshToken);\n const timestamp = Date.now().toString();\n refreshToken.lastUpdatedAt = timestamp;\n\n await this.setUserData(\n refreshTokenKey,\n JSON.stringify(refreshToken),\n correlationId,\n timestamp\n );\n\n const tokenKeys = this.getTokenKeys();\n if (tokenKeys.refreshToken.indexOf(refreshTokenKey) === -1) {\n this.logger.info(\n \"BrowserCacheManager: addTokenKey - refreshToken added to map\"\n );\n tokenKeys.refreshToken.push(refreshTokenKey);\n this.setTokenKeys(tokenKeys, correlationId);\n }\n }\n\n /**\n * fetch appMetadata entity from the platform cache\n * @param appMetadataKey\n */\n getAppMetadata(appMetadataKey: string): AppMetadataEntity | null {\n const value = this.browserStorage.getItem(appMetadataKey);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getAppMetadata: called, no cache hit\"\n );\n return null;\n }\n\n const parsedMetadata = this.validateAndParseJson(value);\n if (\n !parsedMetadata ||\n !CacheHelpers.isAppMetadataEntity(appMetadataKey, parsedMetadata)\n ) {\n this.logger.trace(\n \"BrowserCacheManager.getAppMetadata: called, no cache hit\"\n );\n return null;\n }\n\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: cache hit\");\n return parsedMetadata as AppMetadataEntity;\n }\n\n /**\n * set appMetadata entity to the platform cache\n * @param appMetadata\n */\n setAppMetadata(\n appMetadata: AppMetadataEntity,\n correlationId: string\n ): void {\n this.logger.trace(\"BrowserCacheManager.setAppMetadata called\");\n const appMetadataKey = CacheHelpers.generateAppMetadataKey(appMetadata);\n this.setItem(\n appMetadataKey,\n JSON.stringify(appMetadata),\n correlationId\n );\n }\n\n /**\n * fetch server telemetry entity from the platform cache\n * @param serverTelemetryKey\n */\n getServerTelemetry(\n serverTelemetryKey: string\n ): ServerTelemetryEntity | null {\n const value = this.browserStorage.getItem(serverTelemetryKey);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getServerTelemetry: called, no cache hit\"\n );\n return null;\n }\n const parsedEntity = this.validateAndParseJson(value);\n if (\n !parsedEntity ||\n !CacheHelpers.isServerTelemetryEntity(\n serverTelemetryKey,\n parsedEntity\n )\n ) {\n this.logger.trace(\n \"BrowserCacheManager.getServerTelemetry: called, no cache hit\"\n );\n return null;\n }\n\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: cache hit\");\n return parsedEntity as ServerTelemetryEntity;\n }\n\n /**\n * set server telemetry entity to the platform cache\n * @param serverTelemetryKey\n * @param serverTelemetry\n */\n setServerTelemetry(\n serverTelemetryKey: string,\n serverTelemetry: ServerTelemetryEntity,\n correlationId: string\n ): void {\n this.logger.trace(\"BrowserCacheManager.setServerTelemetry called\");\n this.setItem(\n serverTelemetryKey,\n JSON.stringify(serverTelemetry),\n correlationId\n );\n }\n\n /**\n *\n */\n getAuthorityMetadata(key: string): AuthorityMetadataEntity | null {\n const value = this.internalStorage.getItem(key);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getAuthorityMetadata: called, no cache hit\"\n );\n return null;\n }\n const parsedMetadata = this.validateAndParseJson(value);\n if (\n parsedMetadata &&\n CacheHelpers.isAuthorityMetadataEntity(key, parsedMetadata)\n ) {\n this.logger.trace(\n \"BrowserCacheManager.getAuthorityMetadata: cache hit\"\n );\n return parsedMetadata as AuthorityMetadataEntity;\n }\n return null;\n }\n\n /**\n *\n */\n getAuthorityMetadataKeys(): Array {\n const allKeys = this.internalStorage.getKeys();\n return allKeys.filter((key) => {\n return this.isAuthorityMetadata(key);\n });\n }\n\n /**\n * Sets wrapper metadata in memory\n * @param wrapperSKU\n * @param wrapperVersion\n */\n setWrapperMetadata(wrapperSKU: string, wrapperVersion: string): void {\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_SKU, wrapperSKU);\n this.internalStorage.setItem(\n InMemoryCacheKeys.WRAPPER_VER,\n wrapperVersion\n );\n }\n\n /**\n * Returns wrapper metadata from in-memory storage\n */\n getWrapperMetadata(): [string, string] {\n const sku =\n this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_SKU) ||\n Constants.EMPTY_STRING;\n const version =\n this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_VER) ||\n Constants.EMPTY_STRING;\n return [sku, version];\n }\n\n /**\n *\n * @param entity\n */\n setAuthorityMetadata(key: string, entity: AuthorityMetadataEntity): void {\n this.logger.trace(\"BrowserCacheManager.setAuthorityMetadata called\");\n this.internalStorage.setItem(key, JSON.stringify(entity));\n }\n\n /**\n * Gets the active account\n */\n getActiveAccount(correlationId: string): AccountInfo | null {\n const activeAccountKeyFilters = this.generateCacheKey(\n PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS\n );\n const activeAccountValueFilters = this.browserStorage.getItem(\n activeAccountKeyFilters\n );\n if (!activeAccountValueFilters) {\n this.logger.trace(\n \"BrowserCacheManager.getActiveAccount: No active account filters found\"\n );\n return null;\n }\n const activeAccountValueObj = this.validateAndParseJson(\n activeAccountValueFilters\n ) as AccountInfo;\n if (activeAccountValueObj) {\n this.logger.trace(\n \"BrowserCacheManager.getActiveAccount: Active account filters schema found\"\n );\n return this.getAccountInfoFilteredBy(\n {\n homeAccountId: activeAccountValueObj.homeAccountId,\n localAccountId: activeAccountValueObj.localAccountId,\n tenantId: activeAccountValueObj.tenantId,\n },\n correlationId\n );\n }\n this.logger.trace(\n \"BrowserCacheManager.getActiveAccount: No active account found\"\n );\n return null;\n }\n\n /**\n * Sets the active account's localAccountId in cache\n * @param account\n */\n setActiveAccount(account: AccountInfo | null, correlationId: string): void {\n const activeAccountKey = this.generateCacheKey(\n PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS\n );\n if (account) {\n this.logger.verbose(\"setActiveAccount: Active account set\");\n const activeAccountValue: ActiveAccountFilters = {\n homeAccountId: account.homeAccountId,\n localAccountId: account.localAccountId,\n tenantId: account.tenantId,\n lastUpdatedAt: TimeUtils.nowSeconds().toString(),\n };\n this.setItem(\n activeAccountKey,\n JSON.stringify(activeAccountValue),\n correlationId\n );\n } else {\n this.logger.verbose(\n \"setActiveAccount: No account passed, active account not set\"\n );\n this.browserStorage.removeItem(activeAccountKey);\n }\n this.eventHandler.emitEvent(EventType.ACTIVE_ACCOUNT_CHANGED);\n }\n\n /**\n * fetch throttling entity from the platform cache\n * @param throttlingCacheKey\n */\n getThrottlingCache(throttlingCacheKey: string): ThrottlingEntity | null {\n const value = this.browserStorage.getItem(throttlingCacheKey);\n if (!value) {\n this.logger.trace(\n \"BrowserCacheManager.getThrottlingCache: called, no cache hit\"\n );\n return null;\n }\n\n const parsedThrottlingCache = this.validateAndParseJson(value);\n if (\n !parsedThrottlingCache ||\n !CacheHelpers.isThrottlingEntity(\n throttlingCacheKey,\n parsedThrottlingCache\n )\n ) {\n this.logger.trace(\n \"BrowserCacheManager.getThrottlingCache: called, no cache hit\"\n );\n return null;\n }\n\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: cache hit\");\n return parsedThrottlingCache as ThrottlingEntity;\n }\n\n /**\n * set throttling entity to the platform cache\n * @param throttlingCacheKey\n * @param throttlingCache\n */\n setThrottlingCache(\n throttlingCacheKey: string,\n throttlingCache: ThrottlingEntity,\n correlationId: string\n ): void {\n this.logger.trace(\"BrowserCacheManager.setThrottlingCache called\");\n this.setItem(\n throttlingCacheKey,\n JSON.stringify(throttlingCache),\n correlationId\n );\n }\n\n /**\n * Gets cache item with given key.\n * Will retrieve from cookies if storeAuthStateInCookie is set to true.\n * @param key\n */\n getTemporaryCache(cacheKey: string, generateKey?: boolean): string | null {\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\n if (this.cacheConfig.storeAuthStateInCookie) {\n const itemCookie = this.cookieStorage.getItem(key);\n if (itemCookie) {\n this.logger.trace(\n \"BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies\"\n );\n return itemCookie;\n }\n }\n\n const value = this.temporaryCacheStorage.getItem(key);\n if (!value) {\n // If temp cache item not found in session/memory, check local storage for items set by old versions\n if (\n this.cacheConfig.cacheLocation ===\n BrowserCacheLocation.LocalStorage\n ) {\n const item = this.browserStorage.getItem(key);\n if (item) {\n this.logger.trace(\n \"BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage\"\n );\n return item;\n }\n }\n this.logger.trace(\n \"BrowserCacheManager.getTemporaryCache: No cache item found in local storage\"\n );\n return null;\n }\n this.logger.trace(\n \"BrowserCacheManager.getTemporaryCache: Temporary cache item returned\"\n );\n return value;\n }\n\n /**\n * Sets the cache item with the key and value given.\n * Stores in cookie if storeAuthStateInCookie is set to true.\n * This can cause cookie overflow if used incorrectly.\n * @param key\n * @param value\n */\n setTemporaryCache(\n cacheKey: string,\n value: string,\n generateKey?: boolean\n ): void {\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\n\n this.temporaryCacheStorage.setItem(key, value);\n if (this.cacheConfig.storeAuthStateInCookie) {\n this.logger.trace(\n \"BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie\"\n );\n this.cookieStorage.setItem(\n key,\n value,\n undefined,\n this.cacheConfig.secureCookies\n );\n }\n }\n\n /**\n * Removes the cache item with the given key.\n * @param key\n */\n removeItem(key: string): void {\n this.browserStorage.removeItem(key);\n }\n\n /**\n * Removes the temporary cache item with the given key.\n * Will also clear the cookie item if storeAuthStateInCookie is set to true.\n * @param key\n */\n removeTemporaryItem(key: string): void {\n this.temporaryCacheStorage.removeItem(key);\n if (this.cacheConfig.storeAuthStateInCookie) {\n this.logger.trace(\n \"BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie\"\n );\n this.cookieStorage.removeItem(key);\n }\n }\n\n /**\n * Gets all keys in window.\n */\n getKeys(): string[] {\n return this.browserStorage.getKeys();\n }\n\n /**\n * Clears all cache entries created by MSAL.\n */\n clear(correlationId: string): void {\n // Removes all accounts and their credentials\n this.removeAllAccounts(correlationId);\n this.removeAppMetadata(correlationId);\n\n // Remove temp storage first to make sure any cookies are cleared\n this.temporaryCacheStorage.getKeys().forEach((cacheKey: string) => {\n if (\n cacheKey.indexOf(CacheKeys.PREFIX) !== -1 ||\n cacheKey.indexOf(this.clientId) !== -1\n ) {\n this.removeTemporaryItem(cacheKey);\n }\n });\n\n // Removes all remaining MSAL cache items\n this.browserStorage.getKeys().forEach((cacheKey: string) => {\n if (\n cacheKey.indexOf(CacheKeys.PREFIX) !== -1 ||\n cacheKey.indexOf(this.clientId) !== -1\n ) {\n this.browserStorage.removeItem(cacheKey);\n }\n });\n\n this.internalStorage.clear();\n }\n\n /**\n * Clears all access tokes that have claims prior to saving the current one\n * @param performanceClient {IPerformanceClient}\n * @param correlationId {string} correlation id\n * @returns\n */\n clearTokensAndKeysWithClaims(correlationId: string): void {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.ClearTokensAndKeysWithClaims,\n correlationId\n );\n\n const tokenKeys = this.getTokenKeys();\n let removedAccessTokens = 0;\n tokenKeys.accessToken.forEach((key: string) => {\n // if the access token has claims in its key, remove the token key and the token\n const credential = this.getAccessTokenCredential(\n key,\n correlationId\n );\n if (\n credential?.requestedClaimsHash &&\n key.includes(credential.requestedClaimsHash.toLowerCase())\n ) {\n this.removeAccessToken(key, correlationId);\n removedAccessTokens++;\n }\n });\n\n // warn if any access tokens are removed\n if (removedAccessTokens > 0) {\n this.logger.warning(\n `${removedAccessTokens} access tokens with claims in the cache keys have been removed from the cache.`\n );\n }\n }\n\n /**\n * Prepend msal. to each key\n * @param key\n * @param addInstanceId\n */\n generateCacheKey(key: string): string {\n if (StringUtils.startsWith(key, CacheKeys.PREFIX)) {\n return key;\n }\n return `${CacheKeys.PREFIX}.${this.clientId}.${key}`;\n }\n\n /**\n * Cache Key: msal.--------\n * IdToken Example: uid.utid-login.microsoftonline.com-idtoken-app_client_id-contoso.com\n * AccessToken Example: uid.utid-login.microsoftonline.com-accesstoken-app_client_id-contoso.com-scope1 scope2--pop\n * RefreshToken Example: uid.utid-login.microsoftonline.com-refreshtoken-1-contoso.com\n * @param credentialEntity\n * @returns\n */\n generateCredentialKey(credential: CredentialEntity): string {\n const familyId =\n (credential.credentialType === CredentialType.REFRESH_TOKEN &&\n credential.familyId) ||\n credential.clientId;\n const scheme =\n credential.tokenType &&\n credential.tokenType.toLowerCase() !==\n AuthenticationScheme.BEARER.toLowerCase()\n ? credential.tokenType.toLowerCase()\n : \"\";\n const credentialKey = [\n `${CacheKeys.PREFIX}.${CacheKeys.CREDENTIAL_SCHEMA_VERSION}`,\n credential.homeAccountId,\n credential.environment,\n credential.credentialType,\n familyId,\n credential.realm || \"\",\n credential.target || \"\",\n credential.requestedClaimsHash || \"\",\n scheme,\n ];\n\n return credentialKey.join(CacheKeys.CACHE_KEY_SEPARATOR).toLowerCase();\n }\n\n /**\n * Cache Key: msal....\n * @param account\n * @returns\n */\n generateAccountKey(account: AccountInfo): string {\n const homeTenantId = account.homeAccountId.split(\".\")[1];\n const accountKey = [\n `${CacheKeys.PREFIX}.${CacheKeys.ACCOUNT_SCHEMA_VERSION}`,\n account.homeAccountId,\n account.environment,\n homeTenantId || account.tenantId || \"\",\n ];\n\n return accountKey.join(CacheKeys.CACHE_KEY_SEPARATOR).toLowerCase();\n }\n\n /**\n * Reset all temporary cache items\n * @param state\n */\n resetRequestCache(): void {\n this.logger.trace(\"BrowserCacheManager.resetRequestCache called\");\n\n this.removeTemporaryItem(\n this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS)\n );\n this.removeTemporaryItem(\n this.generateCacheKey(TemporaryCacheKeys.VERIFIER)\n );\n this.removeTemporaryItem(\n this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI)\n );\n this.removeTemporaryItem(\n this.generateCacheKey(TemporaryCacheKeys.URL_HASH)\n );\n this.removeTemporaryItem(\n this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST)\n );\n this.setInteractionInProgress(false);\n }\n\n cacheAuthorizeRequest(\n authCodeRequest: CommonAuthorizationUrlRequest,\n codeVerifier?: string\n ): void {\n this.logger.trace(\"BrowserCacheManager.cacheAuthorizeRequest called\");\n\n const encodedValue = base64Encode(JSON.stringify(authCodeRequest));\n this.setTemporaryCache(\n TemporaryCacheKeys.REQUEST_PARAMS,\n encodedValue,\n true\n );\n\n if (codeVerifier) {\n const encodedVerifier = base64Encode(codeVerifier);\n this.setTemporaryCache(\n TemporaryCacheKeys.VERIFIER,\n encodedVerifier,\n true\n );\n }\n }\n\n /**\n * Gets the token exchange parameters from the cache. Throws an error if nothing is found.\n */\n getCachedRequest(): [CommonAuthorizationUrlRequest, string] {\n this.logger.trace(\"BrowserCacheManager.getCachedRequest called\");\n // Get token request from cache and parse as TokenExchangeParameters.\n const encodedTokenRequest = this.getTemporaryCache(\n TemporaryCacheKeys.REQUEST_PARAMS,\n true\n );\n if (!encodedTokenRequest) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.noTokenRequestCacheError\n );\n }\n const encodedVerifier = this.getTemporaryCache(\n TemporaryCacheKeys.VERIFIER,\n true\n );\n\n let parsedRequest: CommonAuthorizationUrlRequest;\n let verifier = \"\";\n try {\n parsedRequest = JSON.parse(base64Decode(encodedTokenRequest));\n if (encodedVerifier) {\n verifier = base64Decode(encodedVerifier);\n }\n } catch (e) {\n this.logger.errorPii(`Attempted to parse: ${encodedTokenRequest}`);\n this.logger.error(\n `Parsing cached token request threw with error: ${e}`\n );\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.unableToParseTokenRequestCacheError\n );\n }\n\n return [parsedRequest, verifier];\n }\n\n /**\n * Gets cached native request for redirect flows\n */\n getCachedNativeRequest(): PlatformAuthRequest | null {\n this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest called\");\n const cachedRequest = this.getTemporaryCache(\n TemporaryCacheKeys.NATIVE_REQUEST,\n true\n );\n if (!cachedRequest) {\n this.logger.trace(\n \"BrowserCacheManager.getCachedNativeRequest: No cached native request found\"\n );\n return null;\n }\n\n const parsedRequest = this.validateAndParseJson(\n cachedRequest\n ) as PlatformAuthRequest;\n if (!parsedRequest) {\n this.logger.error(\n \"BrowserCacheManager.getCachedNativeRequest: Unable to parse native request\"\n );\n return null;\n }\n\n return parsedRequest;\n }\n\n isInteractionInProgress(matchClientId?: boolean): boolean {\n const clientId = this.getInteractionInProgress()?.clientId;\n\n if (matchClientId) {\n return clientId === this.clientId;\n } else {\n return !!clientId;\n }\n }\n\n getInteractionInProgress(): {\n clientId: string;\n type: INTERACTION_TYPE;\n } | null {\n const key = `${CacheKeys.PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\n const value = this.getTemporaryCache(key, false);\n try {\n return value ? JSON.parse(value) : null;\n } catch (e) {\n // Remove interaction and other temp keys if interaction status can't be parsed\n this.logger.error(\n `Cannot parse interaction status. Removing temporary cache items and clearing url hash. Retrying interaction should fix the error`\n );\n this.removeTemporaryItem(key);\n this.resetRequestCache();\n clearHash(window);\n return null;\n }\n }\n\n setInteractionInProgress(\n inProgress: boolean,\n type: INTERACTION_TYPE = INTERACTION_TYPE.SIGNIN\n ): void {\n // Ensure we don't overwrite interaction in progress for a different clientId\n const key = `${CacheKeys.PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\n if (inProgress) {\n if (this.getInteractionInProgress()) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.interactionInProgress\n );\n } else {\n // No interaction is in progress\n this.setTemporaryCache(\n key,\n JSON.stringify({ clientId: this.clientId, type }),\n false\n );\n }\n } else if (\n !inProgress &&\n this.getInteractionInProgress()?.clientId === this.clientId\n ) {\n this.removeTemporaryItem(key);\n }\n }\n\n /**\n * Builds credential entities from AuthenticationResult object and saves the resulting credentials to the cache\n * @param result\n * @param request\n */\n async hydrateCache(\n result: AuthenticationResult,\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise {\n const idTokenEntity = CacheHelpers.createIdTokenEntity(\n result.account?.homeAccountId,\n result.account?.environment,\n result.idToken,\n this.clientId,\n result.tenantId\n );\n\n let claimsHash;\n if (request.claims) {\n claimsHash = await this.cryptoImpl.hashString(request.claims);\n }\n\n /**\n * meta data for cache stores time in seconds from epoch\n * AuthenticationResult returns expiresOn and extExpiresOn in milliseconds (as a Date object which is in ms)\n * We need to map these for the cache when building tokens from AuthenticationResult\n *\n * The next MSAL VFuture should map these both to same value if possible\n */\n\n const accessTokenEntity = CacheHelpers.createAccessTokenEntity(\n result.account?.homeAccountId,\n result.account.environment,\n result.accessToken,\n this.clientId,\n result.tenantId,\n result.scopes.join(\" \"),\n // Access token expiresOn stored in seconds, converting from AuthenticationResult expiresOn stored as Date\n result.expiresOn\n ? TimeUtils.toSecondsFromDate(result.expiresOn)\n : 0,\n result.extExpiresOn\n ? TimeUtils.toSecondsFromDate(result.extExpiresOn)\n : 0,\n base64Decode,\n undefined, // refreshOn\n result.tokenType as AuthenticationScheme,\n undefined, // userAssertionHash\n request.sshKid,\n request.claims,\n claimsHash\n );\n\n const cacheRecord = {\n idToken: idTokenEntity,\n accessToken: accessTokenEntity,\n };\n return this.saveCacheRecord(cacheRecord, result.correlationId);\n }\n\n /**\n * saves a cache record\n * @param cacheRecord {CacheRecord}\n * @param storeInCache {?StoreInCache}\n * @param correlationId {?string} correlation id\n */\n async saveCacheRecord(\n cacheRecord: CacheRecord,\n correlationId: string,\n storeInCache?: StoreInCache\n ): Promise {\n try {\n await super.saveCacheRecord(\n cacheRecord,\n correlationId,\n storeInCache\n );\n } catch (e) {\n if (\n e instanceof CacheError &&\n this.performanceClient &&\n correlationId\n ) {\n try {\n const tokenKeys = this.getTokenKeys();\n\n this.performanceClient.addFields(\n {\n cacheRtCount: tokenKeys.refreshToken.length,\n cacheIdCount: tokenKeys.idToken.length,\n cacheAtCount: tokenKeys.accessToken.length,\n },\n correlationId\n );\n } catch (e) {}\n }\n\n throw e;\n }\n }\n}\n\n/**\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured cacheLocation.\n * @param cacheLocation\n */\nfunction getStorageImplementation(\n clientId: string,\n cacheLocation: BrowserCacheLocation | string,\n logger: Logger,\n performanceClient: IPerformanceClient\n): IWindowStorage {\n try {\n switch (cacheLocation) {\n case BrowserCacheLocation.LocalStorage:\n return new LocalStorage(clientId, logger, performanceClient);\n case BrowserCacheLocation.SessionStorage:\n return new SessionStorage();\n case BrowserCacheLocation.MemoryStorage:\n default:\n break;\n }\n } catch (e) {\n logger.error(e as string);\n }\n\n return new MemoryStorage();\n}\n\nexport const DEFAULT_BROWSER_CACHE_MANAGER = (\n clientId: string,\n logger: Logger,\n performanceClient: IPerformanceClient,\n eventHandler: EventHandler\n): BrowserCacheManager => {\n const cacheOptions: Required = {\n cacheLocation: BrowserCacheLocation.MemoryStorage,\n cacheRetentionDays: 5,\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\n storeAuthStateInCookie: false,\n secureCookies: false,\n cacheMigrationEnabled: false,\n claimsBasedCachingEnabled: false,\n };\n return new BrowserCacheManager(\n clientId,\n cacheOptions,\n DEFAULT_CRYPTO_IMPLEMENTATION,\n logger,\n performanceClient,\n eventHandler\n );\n};\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AccountInfo, AccountFilter, Logger } from \"@azure/msal-common/browser\";\nimport { BrowserCacheManager } from \"./BrowserCacheManager.js\";\n\n/**\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\n * @returns Array of AccountInfo objects in cache\n */\nexport function getAllAccounts(\n logger: Logger,\n browserStorage: BrowserCacheManager,\n isInBrowser: boolean,\n correlationId: string,\n accountFilter?: AccountFilter\n): AccountInfo[] {\n logger.verbose(\"getAllAccounts called\");\n return isInBrowser\n ? browserStorage.getAllAccounts(accountFilter || {}, correlationId)\n : [];\n}\n\n/**\n * Returns the first account found in the cache that matches the account filter passed in.\n * @param accountFilter\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\n */\nexport function getAccount(\n accountFilter: AccountFilter,\n logger: Logger,\n browserStorage: BrowserCacheManager,\n correlationId: string\n): AccountInfo | null {\n logger.trace(\"getAccount called\");\n if (Object.keys(accountFilter).length === 0) {\n logger.warning(\"getAccount: No accountFilter provided\");\n return null;\n }\n\n const account: AccountInfo | null = browserStorage.getAccountInfoFilteredBy(\n accountFilter,\n correlationId\n );\n\n if (account) {\n logger.verbose(\n \"getAccount: Account matching provided filter found, returning\"\n );\n return account;\n } else {\n logger.verbose(\"getAccount: No matching account found, returning null\");\n return null;\n }\n}\n\n/**\n * Returns the signed in account matching username.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found.\n * This API is provided for convenience but getAccountById should be used for best reliability\n * @param username\n * @returns The account object stored in MSAL\n */\nexport function getAccountByUsername(\n username: string,\n logger: Logger,\n browserStorage: BrowserCacheManager,\n correlationId: string\n): AccountInfo | null {\n logger.trace(\"getAccountByUsername called\");\n if (!username) {\n logger.warning(\"getAccountByUsername: No username provided\");\n return null;\n }\n\n const account = browserStorage.getAccountInfoFilteredBy(\n {\n username,\n },\n correlationId\n );\n if (account) {\n logger.verbose(\n \"getAccountByUsername: Account matching username found, returning\"\n );\n logger.verbosePii(\n `getAccountByUsername: Returning signed-in accounts matching username: ${username}`\n );\n return account;\n } else {\n logger.verbose(\n \"getAccountByUsername: No matching account found, returning null\"\n );\n return null;\n }\n}\n\n/**\n * Returns the signed in account matching homeAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param homeAccountId\n * @returns The account object stored in MSAL\n */\nexport function getAccountByHomeId(\n homeAccountId: string,\n logger: Logger,\n browserStorage: BrowserCacheManager,\n correlationId: string\n): AccountInfo | null {\n logger.trace(\"getAccountByHomeId called\");\n if (!homeAccountId) {\n logger.warning(\"getAccountByHomeId: No homeAccountId provided\");\n return null;\n }\n\n const account = browserStorage.getAccountInfoFilteredBy(\n {\n homeAccountId,\n },\n correlationId\n );\n if (account) {\n logger.verbose(\n \"getAccountByHomeId: Account matching homeAccountId found, returning\"\n );\n logger.verbosePii(\n `getAccountByHomeId: Returning signed-in accounts matching homeAccountId: ${homeAccountId}`\n );\n return account;\n } else {\n logger.verbose(\n \"getAccountByHomeId: No matching account found, returning null\"\n );\n return null;\n }\n}\n\n/**\n * Returns the signed in account matching localAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param localAccountId\n * @returns The account object stored in MSAL\n */\nexport function getAccountByLocalId(\n localAccountId: string,\n logger: Logger,\n browserStorage: BrowserCacheManager,\n correlationId: string\n): AccountInfo | null {\n logger.trace(\"getAccountByLocalId called\");\n if (!localAccountId) {\n logger.warning(\"getAccountByLocalId: No localAccountId provided\");\n return null;\n }\n\n const account = browserStorage.getAccountInfoFilteredBy(\n {\n localAccountId,\n },\n correlationId\n );\n if (account) {\n logger.verbose(\n \"getAccountByLocalId: Account matching localAccountId found, returning\"\n );\n logger.verbosePii(\n `getAccountByLocalId: Returning signed-in accounts matching localAccountId: ${localAccountId}`\n );\n return account;\n } else {\n logger.verbose(\n \"getAccountByLocalId: No matching account found, returning null\"\n );\n return null;\n }\n}\n\n/**\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\n * @param account\n */\nexport function setActiveAccount(\n account: AccountInfo | null,\n browserStorage: BrowserCacheManager,\n correlationId: string\n): void {\n browserStorage.setActiveAccount(account, correlationId);\n}\n\n/**\n * Gets the currently active account\n */\nexport function getActiveAccount(\n browserStorage: BrowserCacheManager,\n correlationId: string\n): AccountInfo | null {\n return browserStorage.getActiveAccount(correlationId);\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Logger } from \"@azure/msal-common/browser\";\nimport { InteractionType } from \"../utils/BrowserConstants.js\";\nimport {\n EventCallbackFunction,\n EventError,\n EventMessage,\n EventPayload,\n} from \"./EventMessage.js\";\nimport { EventType } from \"./EventType.js\";\nimport { createGuid } from \"../utils/BrowserUtils.js\";\n\nconst BROADCAST_CHANNEL_NAME = \"msal.broadcast.event\";\n\nexport class EventHandler {\n // Callback for subscribing to events\n private eventCallbacks: Map<\n string,\n [EventCallbackFunction, Array]\n >;\n private logger: Logger;\n private broadcastChannel?: BroadcastChannel;\n\n constructor(logger?: Logger) {\n this.eventCallbacks = new Map();\n this.logger = logger || new Logger({});\n if (typeof BroadcastChannel !== \"undefined\") {\n this.broadcastChannel = new BroadcastChannel(\n BROADCAST_CHANNEL_NAME\n );\n }\n this.invokeCrossTabCallbacks = this.invokeCrossTabCallbacks.bind(this);\n }\n\n /**\n * Adds event callbacks to array\n * @param callback - callback to be invoked when an event is raised\n * @param eventTypes - list of events that this callback will be invoked for, if not provided callback will be invoked for all events\n * @param callbackId - Identifier for the callback, used to locate and remove the callback when no longer required\n */\n addEventCallback(\n callback: EventCallbackFunction,\n eventTypes?: Array,\n callbackId?: string\n ): string | null {\n if (typeof window !== \"undefined\") {\n const id = callbackId || createGuid();\n if (this.eventCallbacks.has(id)) {\n this.logger.error(\n `Event callback with id: ${id} is already registered. Please provide a unique id or remove the existing callback and try again.`\n );\n return null;\n }\n this.eventCallbacks.set(id, [callback, eventTypes || []]);\n this.logger.verbose(`Event callback registered with id: ${id}`);\n\n return id;\n }\n\n return null;\n }\n\n /**\n * Removes callback with provided id from callback array\n * @param callbackId\n */\n removeEventCallback(callbackId: string): void {\n this.eventCallbacks.delete(callbackId);\n this.logger.verbose(`Event callback ${callbackId} removed.`);\n }\n\n /**\n * Emits events by calling callback with event message\n * @param eventType\n * @param interactionType\n * @param payload\n * @param error\n */\n emitEvent(\n eventType: EventType,\n interactionType?: InteractionType,\n payload?: EventPayload,\n error?: EventError\n ): void {\n const message: EventMessage = {\n eventType: eventType,\n interactionType: interactionType || null,\n payload: payload || null,\n error: error || null,\n timestamp: Date.now(),\n };\n\n switch (eventType) {\n case EventType.ACCOUNT_ADDED:\n case EventType.ACCOUNT_REMOVED:\n case EventType.ACTIVE_ACCOUNT_CHANGED:\n // Send event to other open tabs / MSAL instances on same domain\n this.broadcastChannel?.postMessage(message);\n break;\n default:\n // Emit event to callbacks registered in this instance\n this.invokeCallbacks(message);\n break;\n }\n }\n\n /**\n * Invoke registered callbacks\n * @param message\n */\n private invokeCallbacks(message: EventMessage): void {\n this.eventCallbacks.forEach(\n (\n [callback, eventTypes]: [\n EventCallbackFunction,\n Array\n ],\n callbackId: string\n ) => {\n if (\n eventTypes.length === 0 ||\n eventTypes.includes(message.eventType)\n ) {\n this.logger.verbose(\n `Emitting event to callback ${callbackId}: ${message.eventType}`\n );\n callback.apply(null, [message]);\n }\n }\n );\n }\n\n /**\n * Wrapper around invokeCallbacks to handle broadcast events received from other tabs/instances\n * @param event\n */\n private invokeCrossTabCallbacks(event: MessageEvent): void {\n const message = event.data as EventMessage;\n this.invokeCallbacks(message);\n }\n\n /**\n * Listen for events broadcasted from other tabs/instances\n */\n subscribeCrossTab(): void {\n this.broadcastChannel?.addEventListener(\n \"message\",\n this.invokeCrossTabCallbacks\n );\n }\n\n /**\n * Unsubscribe from broadcast events\n */\n unsubscribeCrossTab(): void {\n this.broadcastChannel?.removeEventListener(\n \"message\",\n this.invokeCrossTabCallbacks\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ICrypto,\n INetworkModule,\n Logger,\n AccountInfo,\n UrlString,\n ServerTelemetryManager,\n ServerTelemetryRequest,\n createClientConfigurationError,\n ClientConfigurationErrorCodes,\n Authority,\n AuthorityOptions,\n AuthorityFactory,\n IPerformanceClient,\n PerformanceEvents,\n AzureCloudOptions,\n invokeAsync,\n StringDict,\n} from \"@azure/msal-common/browser\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { version } from \"../packageMetadata.js\";\nimport { BrowserConstants } from \"../utils/BrowserConstants.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport { createNewGuid } from \"../crypto/BrowserCrypto.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\n\nexport abstract class BaseInteractionClient {\n protected config: BrowserConfiguration;\n protected browserStorage: BrowserCacheManager;\n protected browserCrypto: ICrypto;\n protected networkClient: INetworkModule;\n protected logger: Logger;\n protected eventHandler: EventHandler;\n protected navigationClient: INavigationClient;\n protected platformAuthProvider: IPlatformAuthHandler | undefined;\n protected correlationId: string;\n protected performanceClient: IPerformanceClient;\n\n constructor(\n config: BrowserConfiguration,\n storageImpl: BrowserCacheManager,\n browserCrypto: ICrypto,\n logger: Logger,\n eventHandler: EventHandler,\n navigationClient: INavigationClient,\n performanceClient: IPerformanceClient,\n platformAuthProvider?: IPlatformAuthHandler,\n correlationId?: string\n ) {\n this.config = config;\n this.browserStorage = storageImpl;\n this.browserCrypto = browserCrypto;\n this.networkClient = this.config.system.networkClient;\n this.eventHandler = eventHandler;\n this.navigationClient = navigationClient;\n this.platformAuthProvider = platformAuthProvider;\n this.correlationId = correlationId || createNewGuid();\n this.logger = logger.clone(\n BrowserConstants.MSAL_SKU,\n version,\n this.correlationId\n );\n this.performanceClient = performanceClient;\n }\n\n abstract acquireToken(\n request: RedirectRequest | PopupRequest | SsoSilentRequest\n ): Promise;\n\n abstract logout(\n request: EndSessionRequest | ClearCacheRequest | undefined\n ): Promise;\n\n protected async clearCacheOnLogout(\n correlationId: string,\n account?: AccountInfo | null\n ): Promise {\n if (account) {\n // Clear given account.\n try {\n this.browserStorage.removeAccount(account, correlationId);\n this.logger.verbose(\n \"Cleared cache items belonging to the account provided in the logout request.\"\n );\n } catch (error) {\n this.logger.error(\n \"Account provided in logout request was not found. Local cache unchanged.\"\n );\n }\n } else {\n try {\n this.logger.verbose(\n \"No account provided in logout request, clearing all cache items.\",\n this.correlationId\n );\n // Clear all accounts and tokens\n this.browserStorage.clear(correlationId);\n // Clear any stray keys from IndexedDB\n await this.browserCrypto.clearKeystore();\n } catch (e) {\n this.logger.error(\n \"Attempted to clear all MSAL cache items and failed. Local cache unchanged.\"\n );\n }\n }\n }\n\n /**\n *\n * Use to get the redirect uri configured in MSAL or null.\n * @param requestRedirectUri\n * @returns Redirect URL\n *\n */\n getRedirectUri(requestRedirectUri?: string): string {\n this.logger.verbose(\"getRedirectUri called\");\n const redirectUri = requestRedirectUri || this.config.auth.redirectUri;\n return UrlString.getAbsoluteUrl(\n redirectUri,\n BrowserUtils.getCurrentUri()\n );\n }\n\n /**\n *\n * @param apiId\n * @param correlationId\n * @param forceRefresh\n */\n protected initializeServerTelemetryManager(\n apiId: number,\n forceRefresh?: boolean\n ): ServerTelemetryManager {\n this.logger.verbose(\"initializeServerTelemetryManager called\");\n const telemetryPayload: ServerTelemetryRequest = {\n clientId: this.config.auth.clientId,\n correlationId: this.correlationId,\n apiId: apiId,\n forceRefresh: forceRefresh || false,\n wrapperSKU: this.browserStorage.getWrapperMetadata()[0],\n wrapperVer: this.browserStorage.getWrapperMetadata()[1],\n };\n\n return new ServerTelemetryManager(\n telemetryPayload,\n this.browserStorage\n );\n }\n\n /**\n * Used to get a discovered version of the default authority.\n * @param params {\n * requestAuthority?: string;\n * requestAzureCloudOptions?: AzureCloudOptions;\n * requestExtraQueryParameters?: StringDict;\n * account?: AccountInfo;\n * }\n */\n protected async getDiscoveredAuthority(params: {\n requestAuthority?: string;\n requestAzureCloudOptions?: AzureCloudOptions;\n requestExtraQueryParameters?: StringDict;\n account?: AccountInfo;\n }): Promise {\n const { account } = params;\n const instanceAwareEQ =\n params.requestExtraQueryParameters &&\n params.requestExtraQueryParameters.hasOwnProperty(\"instance_aware\")\n ? params.requestExtraQueryParameters[\"instance_aware\"]\n : undefined;\n\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.correlationId\n );\n const authorityOptions: AuthorityOptions = {\n protocolMode: this.config.auth.protocolMode,\n OIDCOptions: this.config.auth.OIDCOptions,\n knownAuthorities: this.config.auth.knownAuthorities,\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\n authorityMetadata: this.config.auth.authorityMetadata,\n skipAuthorityMetadataCache:\n this.config.auth.skipAuthorityMetadataCache,\n };\n\n // build authority string based on auth params, precedence - azureCloudInstance + tenant >> authority\n const resolvedAuthority =\n params.requestAuthority || this.config.auth.authority;\n const resolvedInstanceAware = instanceAwareEQ?.length\n ? instanceAwareEQ === \"true\"\n : this.config.auth.instanceAware;\n\n const userAuthority =\n account && resolvedInstanceAware\n ? this.config.auth.authority.replace(\n UrlString.getDomainFromUrl(resolvedAuthority),\n account.environment\n )\n : resolvedAuthority;\n\n // fall back to the authority from config\n const builtAuthority = Authority.generateAuthority(\n userAuthority,\n params.requestAzureCloudOptions ||\n this.config.auth.azureCloudOptions\n );\n const discoveredAuthority = await invokeAsync(\n AuthorityFactory.createDiscoveredInstance,\n PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(\n builtAuthority,\n this.config.system.networkClient,\n this.browserStorage,\n authorityOptions,\n this.logger,\n this.correlationId,\n this.performanceClient\n );\n\n if (account && !discoveredAuthority.isAlias(account.environment)) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.authorityMismatch\n );\n }\n\n return discoveredAuthority;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AccountInfo,\n AuthenticationScheme,\n BaseAuthRequest,\n ClientConfigurationErrorCodes,\n CommonSilentFlowRequest,\n HttpMethod,\n IPerformanceClient,\n Logger,\n PerformanceEvents,\n ProtocolMode,\n StringUtils,\n createClientConfigurationError,\n invokeAsync,\n} from \"@azure/msal-common/browser\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { SilentRequest } from \"./SilentRequest.js\";\nimport { hashString } from \"../crypto/BrowserCrypto.js\";\nimport { PopupRequest } from \"./PopupRequest.js\";\nimport { RedirectRequest } from \"./RedirectRequest.js\";\n\n/**\n * Initializer function for all request APIs\n * @param request\n */\nexport async function initializeBaseRequest(\n request: Partial & { correlationId: string },\n config: BrowserConfiguration,\n performanceClient: IPerformanceClient,\n logger: Logger\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.InitializeBaseRequest,\n request.correlationId\n );\n const authority = request.authority || config.auth.authority;\n\n const scopes = [...((request && request.scopes) || [])];\n\n const validatedRequest: BaseAuthRequest = {\n ...request,\n correlationId: request.correlationId,\n authority,\n scopes,\n };\n\n // Set authenticationScheme to BEARER if not explicitly set in the request\n if (!validatedRequest.authenticationScheme) {\n validatedRequest.authenticationScheme = AuthenticationScheme.BEARER;\n logger.verbose(\n 'Authentication Scheme wasn\\'t explicitly set in request, defaulting to \"Bearer\" request'\n );\n } else {\n if (\n validatedRequest.authenticationScheme === AuthenticationScheme.SSH\n ) {\n if (!request.sshJwk) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.missingSshJwk\n );\n }\n if (!request.sshKid) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.missingSshKid\n );\n }\n }\n logger.verbose(\n `Authentication Scheme set to \"${validatedRequest.authenticationScheme}\" as configured in Auth request`\n );\n }\n\n // Set requested claims hash if claims-based caching is enabled and claims were requested\n if (\n config.cache.claimsBasedCachingEnabled &&\n request.claims &&\n // Checks for empty stringified object \"{}\" which doesn't qualify as requested claims\n !StringUtils.isEmptyObj(request.claims)\n ) {\n validatedRequest.requestedClaimsHash = await hashString(request.claims);\n }\n\n return validatedRequest;\n}\n\nexport async function initializeSilentRequest(\n request: SilentRequest & { correlationId: string },\n account: AccountInfo,\n config: BrowserConfiguration,\n performanceClient: IPerformanceClient,\n logger: Logger\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.InitializeSilentRequest,\n request.correlationId\n );\n\n const baseRequest = await invokeAsync(\n initializeBaseRequest,\n PerformanceEvents.InitializeBaseRequest,\n logger,\n performanceClient,\n request.correlationId\n )(request, config, performanceClient, logger);\n return {\n ...request,\n ...baseRequest,\n account: account,\n forceRefresh: request.forceRefresh || false,\n };\n}\n\n/**\n * Validates that the combination of request method, protocol mode and authorize body parameters is correct.\n * Returns the validated or defaulted HTTP method or throws if the configured combination is invalid.\n * @param interactionRequest\n * @param protocolMode\n * @returns\n */\nexport function validateRequestMethod(\n interactionRequest: BaseAuthRequest | PopupRequest | RedirectRequest,\n protocolMode: ProtocolMode\n): HttpMethod {\n let httpMethod: HttpMethod | undefined;\n const requestMethod = interactionRequest.httpMethod;\n\n if (protocolMode === ProtocolMode.EAR) {\n // Don't override httpMethod if it is already set, default to POST if not set\n httpMethod = requestMethod || HttpMethod.POST;\n // Validate that method is not GET if protocol mode is EAR\n if (httpMethod !== HttpMethod.POST) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidRequestMethodForEAR\n );\n }\n } else {\n // For non-EAR protocol modes, default to GET if httpMethod is not set\n httpMethod = requestMethod || HttpMethod.GET;\n }\n\n // Regardless of protocolMode, if there are authorizePostBodyParameters, validate the request method is POST\n if (\n interactionRequest.authorizePostBodyParameters &&\n httpMethod !== HttpMethod.POST\n ) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters\n );\n }\n\n return httpMethod;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ServerTelemetryManager,\n Constants,\n AuthorizationCodeClient,\n ClientConfiguration,\n UrlString,\n CommonEndSessionRequest,\n ProtocolUtils,\n ResponseMode,\n IdTokenClaims,\n AccountInfo,\n AzureCloudOptions,\n PerformanceEvents,\n invokeAsync,\n BaseAuthRequest,\n StringDict,\n CommonAuthorizationUrlRequest,\n} from \"@azure/msal-common/browser\";\nimport { BaseInteractionClient } from \"./BaseInteractionClient.js\";\nimport {\n BrowserConstants,\n InteractionType,\n} from \"../utils/BrowserConstants.js\";\nimport { version } from \"../packageMetadata.js\";\nimport { BrowserStateObject } from \"../utils/BrowserProtocolUtils.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { createNewGuid } from \"../crypto/BrowserCrypto.js\";\nimport {\n initializeBaseRequest,\n validateRequestMethod,\n} from \"../request/RequestHelpers.js\";\n\n/**\n * Defines the class structure and helper functions used by the \"standard\", non-brokered auth flows (popup, redirect, silent (RT), silent (iframe))\n */\nexport abstract class StandardInteractionClient extends BaseInteractionClient {\n /**\n * Initializer for the logout request.\n * @param logoutRequest\n */\n protected initializeLogoutRequest(\n logoutRequest?: EndSessionRequest\n ): CommonEndSessionRequest {\n this.logger.verbose(\n \"initializeLogoutRequest called\",\n logoutRequest?.correlationId\n );\n\n const validLogoutRequest: CommonEndSessionRequest = {\n correlationId: this.correlationId || createNewGuid(),\n ...logoutRequest,\n };\n\n /**\n * Set logout_hint to be login_hint from ID Token Claims if present\n * and logoutHint attribute wasn't manually set in logout request\n */\n if (logoutRequest) {\n // If logoutHint isn't set and an account was passed in, try to extract logoutHint from ID Token Claims\n if (!logoutRequest.logoutHint) {\n if (logoutRequest.account) {\n const logoutHint = this.getLogoutHintFromIdTokenClaims(\n logoutRequest.account\n );\n if (logoutHint) {\n this.logger.verbose(\n \"Setting logoutHint to login_hint ID Token Claim value for the account provided\"\n );\n validLogoutRequest.logoutHint = logoutHint;\n }\n } else {\n this.logger.verbose(\n \"logoutHint was not set and account was not passed into logout request, logoutHint will not be set\"\n );\n }\n } else {\n this.logger.verbose(\n \"logoutHint has already been set in logoutRequest\"\n );\n }\n } else {\n this.logger.verbose(\n \"logoutHint will not be set since no logout request was configured\"\n );\n }\n\n /*\n * Only set redirect uri if logout request isn't provided or the set uri isn't null.\n * Otherwise, use passed uri, config, or current page.\n */\n if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) {\n if (logoutRequest && logoutRequest.postLogoutRedirectUri) {\n this.logger.verbose(\n \"Setting postLogoutRedirectUri to uri set on logout request\",\n validLogoutRequest.correlationId\n );\n validLogoutRequest.postLogoutRedirectUri =\n UrlString.getAbsoluteUrl(\n logoutRequest.postLogoutRedirectUri,\n BrowserUtils.getCurrentUri()\n );\n } else if (this.config.auth.postLogoutRedirectUri === null) {\n this.logger.verbose(\n \"postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect\",\n validLogoutRequest.correlationId\n );\n } else if (this.config.auth.postLogoutRedirectUri) {\n this.logger.verbose(\n \"Setting postLogoutRedirectUri to configured uri\",\n validLogoutRequest.correlationId\n );\n validLogoutRequest.postLogoutRedirectUri =\n UrlString.getAbsoluteUrl(\n this.config.auth.postLogoutRedirectUri,\n BrowserUtils.getCurrentUri()\n );\n } else {\n this.logger.verbose(\n \"Setting postLogoutRedirectUri to current page\",\n validLogoutRequest.correlationId\n );\n validLogoutRequest.postLogoutRedirectUri =\n UrlString.getAbsoluteUrl(\n BrowserUtils.getCurrentUri(),\n BrowserUtils.getCurrentUri()\n );\n }\n } else {\n this.logger.verbose(\n \"postLogoutRedirectUri passed as null, not setting post logout redirect uri\",\n validLogoutRequest.correlationId\n );\n }\n\n return validLogoutRequest;\n }\n\n /**\n * Parses login_hint ID Token Claim out of AccountInfo object to be used as\n * logout_hint in end session request.\n * @param account\n */\n protected getLogoutHintFromIdTokenClaims(\n account: AccountInfo\n ): string | null {\n const idTokenClaims: IdTokenClaims | undefined = account.idTokenClaims;\n if (idTokenClaims) {\n if (idTokenClaims.login_hint) {\n return idTokenClaims.login_hint;\n } else {\n this.logger.verbose(\n \"The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request\"\n );\n }\n } else {\n this.logger.verbose(\n \"The provided account does not contain ID Token Claims, logoutHint will not be added to logout request\"\n );\n }\n\n return null;\n }\n\n /**\n * Creates an Authorization Code Client with the given authority, or the default authority.\n * @param params {\n * serverTelemetryManager: ServerTelemetryManager;\n * authorityUrl?: string;\n * requestAzureCloudOptions?: AzureCloudOptions;\n * requestExtraQueryParameters?: StringDict;\n * account?: AccountInfo;\n * }\n */\n protected async createAuthCodeClient(params: {\n serverTelemetryManager: ServerTelemetryManager;\n requestAuthority?: string;\n requestAzureCloudOptions?: AzureCloudOptions;\n requestExtraQueryParameters?: StringDict;\n account?: AccountInfo;\n }): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.correlationId\n );\n // Create auth module.\n const clientConfig = await invokeAsync(\n this.getClientConfiguration.bind(this),\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(params);\n\n return new AuthorizationCodeClient(\n clientConfig,\n this.performanceClient\n );\n }\n\n /**\n * Creates a Client Configuration object with the given request authority, or the default authority.\n * @param params {\n * serverTelemetryManager: ServerTelemetryManager;\n * requestAuthority?: string;\n * requestAzureCloudOptions?: AzureCloudOptions;\n * requestExtraQueryParameters?: boolean;\n * account?: AccountInfo;\n * }\n */\n protected async getClientConfiguration(params: {\n serverTelemetryManager: ServerTelemetryManager;\n requestAuthority?: string;\n requestAzureCloudOptions?: AzureCloudOptions;\n requestExtraQueryParameters?: StringDict;\n account?: AccountInfo;\n }): Promise {\n const {\n serverTelemetryManager,\n requestAuthority,\n requestAzureCloudOptions,\n requestExtraQueryParameters,\n account,\n } = params;\n\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\n this.correlationId\n );\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({\n requestAuthority,\n requestAzureCloudOptions,\n requestExtraQueryParameters,\n account,\n });\n const logger = this.config.system.loggerOptions;\n\n return {\n authOptions: {\n clientId: this.config.auth.clientId,\n authority: discoveredAuthority,\n clientCapabilities: this.config.auth.clientCapabilities,\n redirectUri: this.config.auth.redirectUri,\n },\n systemOptions: {\n tokenRenewalOffsetSeconds:\n this.config.system.tokenRenewalOffsetSeconds,\n preventCorsPreflight: true,\n },\n loggerOptions: {\n loggerCallback: logger.loggerCallback,\n piiLoggingEnabled: logger.piiLoggingEnabled,\n logLevel: logger.logLevel,\n correlationId: this.correlationId,\n },\n cacheOptions: {\n claimsBasedCachingEnabled:\n this.config.cache.claimsBasedCachingEnabled,\n },\n cryptoInterface: this.browserCrypto,\n networkInterface: this.networkClient,\n storageInterface: this.browserStorage,\n serverTelemetryManager: serverTelemetryManager,\n libraryInfo: {\n sku: BrowserConstants.MSAL_SKU,\n version: version,\n cpu: Constants.EMPTY_STRING,\n os: Constants.EMPTY_STRING,\n },\n telemetry: this.config.telemetry,\n };\n }\n\n /**\n * Helper to initialize required request parameters for interactive APIs and ssoSilent()\n * @param request\n * @param interactionType\n */\n protected async initializeAuthorizationRequest(\n request: RedirectRequest | PopupRequest | SsoSilentRequest,\n interactionType: InteractionType\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\n this.correlationId\n );\n\n const redirectUri = this.getRedirectUri(request.redirectUri);\n const browserState: BrowserStateObject = {\n interactionType: interactionType,\n };\n const state = ProtocolUtils.setRequestState(\n this.browserCrypto,\n (request && request.state) || Constants.EMPTY_STRING,\n browserState\n );\n\n const baseRequest: BaseAuthRequest = await invokeAsync(\n initializeBaseRequest,\n PerformanceEvents.InitializeBaseRequest,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(\n { ...request, correlationId: this.correlationId },\n this.config,\n this.performanceClient,\n this.logger\n );\n\n const interactionRequest: CommonAuthorizationUrlRequest = {\n ...baseRequest,\n redirectUri: redirectUri,\n state: state,\n nonce: request.nonce || createNewGuid(),\n responseMode: this.config.auth.OIDCOptions\n .serverResponseType as ResponseMode,\n };\n\n const validatedRequest = {\n ...interactionRequest,\n httpMethod: validateRequestMethod(\n interactionRequest,\n this.config.auth.protocolMode\n ),\n };\n\n // Skip active account lookup if either login hint or session id is set\n if (request.loginHint || request.sid) {\n return validatedRequest;\n }\n\n const account =\n request.account ||\n this.browserStorage.getActiveAccount(this.correlationId);\n if (account) {\n this.logger.verbose(\n \"Setting validated request account\",\n this.correlationId\n );\n this.logger.verbosePii(\n `Setting validated request account: ${account.homeAccountId}`,\n this.correlationId\n );\n validatedRequest.account = account;\n }\n\n return validatedRequest;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { InteractionType } from \"./BrowserConstants.js\";\nimport {\n ICrypto,\n RequestStateObject,\n ProtocolUtils,\n createClientAuthError,\n ClientAuthErrorCodes,\n} from \"@azure/msal-common/browser\";\n\nexport type BrowserStateObject = {\n interactionType: InteractionType;\n};\n\n/**\n * Extracts the BrowserStateObject from the state string.\n * @param browserCrypto\n * @param state\n */\nexport function extractBrowserRequestState(\n browserCrypto: ICrypto,\n state: string\n): BrowserStateObject | null {\n if (!state) {\n return null;\n }\n\n try {\n const requestStateObj: RequestStateObject =\n ProtocolUtils.parseRequestState(browserCrypto, state);\n return requestStateObj.libraryState.meta as BrowserStateObject;\n } catch (e) {\n throw createClientAuthError(ClientAuthErrorCodes.invalidState);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ICrypto,\n Logger,\n AuthorizeResponse,\n UrlUtils,\n} from \"@azure/msal-common/browser\";\nimport {\n BrowserAuthErrorCodes,\n createBrowserAuthError,\n} from \"../error/BrowserAuthError.js\";\nimport { extractBrowserRequestState } from \"../utils/BrowserProtocolUtils.js\";\nimport { InteractionType } from \"../utils/BrowserConstants.js\";\n\nexport function deserializeResponse(\n responseString: string,\n responseLocation: string,\n logger: Logger\n): AuthorizeResponse {\n // Deserialize hash fragment response parameters.\n const serverParams = UrlUtils.getDeserializedResponse(responseString);\n if (!serverParams) {\n if (!UrlUtils.stripLeadingHashOrQuery(responseString)) {\n // Hash or Query string is empty\n logger.error(\n `The request has returned to the redirectUri but a ${responseLocation} is not present. It's likely that the ${responseLocation} has been removed or the page has been redirected by code running on the redirectUri page.`\n );\n throw createBrowserAuthError(BrowserAuthErrorCodes.hashEmptyError);\n } else {\n logger.error(\n `A ${responseLocation} is present in the iframe but it does not contain known properties. It's likely that the ${responseLocation} has been replaced by code running on the redirectUri page.`\n );\n logger.errorPii(\n `The ${responseLocation} detected is: ${responseString}`\n );\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.hashDoesNotContainKnownProperties\n );\n }\n }\n return serverParams;\n}\n\n/**\n * Returns the interaction type that the response object belongs to\n */\nexport function validateInteractionType(\n response: AuthorizeResponse,\n browserCrypto: ICrypto,\n interactionType: InteractionType\n): void {\n if (!response.state) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.noStateInHash);\n }\n\n const platformStateObj = extractBrowserRequestState(\n browserCrypto,\n response.state\n );\n if (!platformStateObj) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.unableToParseState);\n }\n\n if (platformStateObj.interactionType !== interactionType) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.stateInteractionTypeMismatch\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AuthorizationCodePayload,\n CommonAuthorizationCodeRequest,\n AuthorizationCodeClient,\n CcsCredential,\n Logger,\n ServerError,\n IPerformanceClient,\n PerformanceEvents,\n invokeAsync,\n CcsCredentialType,\n AuthorizeResponse,\n AuthorizeProtocol,\n CommonAuthorizationUrlRequest,\n} from \"@azure/msal-common/browser\";\n\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\n\n/**\n * Abstract class which defines operations for a browser interaction handling class.\n */\nexport class InteractionHandler {\n protected authModule: AuthorizationCodeClient;\n protected browserStorage: BrowserCacheManager;\n protected authCodeRequest: CommonAuthorizationCodeRequest;\n protected logger: Logger;\n protected performanceClient: IPerformanceClient;\n\n constructor(\n authCodeModule: AuthorizationCodeClient,\n storageImpl: BrowserCacheManager,\n authCodeRequest: CommonAuthorizationCodeRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n ) {\n this.authModule = authCodeModule;\n this.browserStorage = storageImpl;\n this.authCodeRequest = authCodeRequest;\n this.logger = logger;\n this.performanceClient = performanceClient;\n }\n\n /**\n * Function to handle response parameters from hash.\n * @param locationHash\n */\n async handleCodeResponse(\n response: AuthorizeResponse,\n request: CommonAuthorizationUrlRequest\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.HandleCodeResponse,\n request.correlationId\n );\n\n let authCodeResponse;\n try {\n authCodeResponse = AuthorizeProtocol.getAuthorizationCodePayload(\n response,\n request.state\n );\n } catch (e) {\n if (\n e instanceof ServerError &&\n e.subError === BrowserAuthErrorCodes.userCancelled\n ) {\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.userCancelled\n );\n } else {\n throw e;\n }\n }\n\n return invokeAsync(\n this.handleCodeResponseFromServer.bind(this),\n PerformanceEvents.HandleCodeResponseFromServer,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(authCodeResponse, request);\n }\n\n /**\n * Process auth code response from AAD\n * @param authCodeResponse\n * @param state\n * @param authority\n * @param networkModule\n * @returns\n */\n async handleCodeResponseFromServer(\n authCodeResponse: AuthorizationCodePayload,\n request: CommonAuthorizationUrlRequest,\n validateNonce: boolean = true\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.HandleCodeResponseFromServer,\n request.correlationId\n );\n this.logger.trace(\n \"InteractionHandler.handleCodeResponseFromServer called\"\n );\n\n // Assign code to request\n this.authCodeRequest.code = authCodeResponse.code;\n\n // Check for new cloud instance\n if (authCodeResponse.cloud_instance_host_name) {\n await invokeAsync(\n this.authModule.updateAuthority.bind(this.authModule),\n PerformanceEvents.UpdateTokenEndpointAuthority,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(authCodeResponse.cloud_instance_host_name, request.correlationId);\n }\n\n // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)\n if (validateNonce) {\n // TODO: Assigning \"response nonce\" to \"request nonce\" is confusing. Refactor the function doing validation to accept request nonce directly\n authCodeResponse.nonce = request.nonce || undefined;\n }\n\n authCodeResponse.state = request.state;\n\n // Add CCS parameters if available\n if (authCodeResponse.client_info) {\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\n } else {\n const ccsCred = this.createCcsCredentials(request);\n if (ccsCred) {\n this.authCodeRequest.ccsCredential = ccsCred;\n }\n }\n\n // Acquire token with retrieved code.\n const tokenResponse = (await invokeAsync(\n this.authModule.acquireToken.bind(this.authModule),\n PerformanceEvents.AuthClientAcquireToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(this.authCodeRequest, authCodeResponse)) as AuthenticationResult;\n return tokenResponse;\n }\n\n /**\n * Build ccs creds if available\n */\n protected createCcsCredentials(\n request: CommonAuthorizationUrlRequest\n ): CcsCredential | null {\n if (request.account) {\n return {\n credential: request.account.homeAccountId,\n type: CcsCredentialType.HOME_ACCOUNT_ID,\n };\n } else if (request.loginHint) {\n return {\n credential: request.loginHint,\n type: CcsCredentialType.UPN,\n };\n }\n\n return null;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport const contentError = \"ContentError\";\nexport const userSwitch = \"user_switch\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// Status Codes that can be thrown by WAM\nexport const USER_INTERACTION_REQUIRED = \"USER_INTERACTION_REQUIRED\";\nexport const USER_CANCEL = \"USER_CANCEL\";\nexport const NO_NETWORK = \"NO_NETWORK\";\nexport const TRANSIENT_ERROR = \"TRANSIENT_ERROR\";\nexport const PERSISTENT_ERROR = \"PERSISTENT_ERROR\";\nexport const DISABLED = \"DISABLED\";\nexport const ACCOUNT_UNAVAILABLE = \"ACCOUNT_UNAVAILABLE\";\nexport const UX_NOT_ALLOWED = \"UX_NOT_ALLOWED\";\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AuthError,\n InteractionRequiredAuthError,\n InteractionRequiredAuthErrorCodes,\n createInteractionRequiredAuthError,\n} from \"@azure/msal-common/browser\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"./BrowserAuthError.js\";\n\nimport * as NativeAuthErrorCodes from \"./NativeAuthErrorCodes.js\";\nimport * as NativeStatusCodes from \"../broker/nativeBroker/NativeStatusCodes.js\";\nexport { NativeAuthErrorCodes };\n\nexport type OSError = {\n error?: number;\n protocol_error?: string;\n properties?: object;\n status?: string;\n retryable?: boolean;\n};\n\nconst INVALID_METHOD_ERROR = -2147186943;\n\nexport const NativeAuthErrorMessages = {\n [NativeAuthErrorCodes.userSwitch]:\n \"User attempted to switch accounts in the native broker, which is not allowed. All new accounts must sign-in through the standard web flow first, please try again.\",\n};\n\nexport class NativeAuthError extends AuthError {\n ext: OSError | undefined;\n\n constructor(errorCode: string, description?: string, ext?: OSError) {\n super(errorCode, description);\n\n Object.setPrototypeOf(this, NativeAuthError.prototype);\n this.name = \"NativeAuthError\";\n this.ext = ext;\n }\n}\n\n/**\n * These errors should result in a fallback to the 'standard' browser based auth flow.\n */\nexport function isFatalNativeAuthError(error: NativeAuthError): boolean {\n if (\n error.ext &&\n error.ext.status &&\n (error.ext.status === NativeStatusCodes.PERSISTENT_ERROR ||\n error.ext.status === NativeStatusCodes.DISABLED)\n ) {\n return true;\n }\n\n if (\n error.ext &&\n error.ext.error &&\n error.ext.error === INVALID_METHOD_ERROR\n ) {\n return true;\n }\n\n switch (error.errorCode) {\n case NativeAuthErrorCodes.contentError:\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Create the appropriate error object based on the WAM status code.\n * @param code\n * @param description\n * @param ext\n * @returns\n */\nexport function createNativeAuthError(\n code: string,\n description?: string,\n ext?: OSError\n): AuthError {\n if (ext && ext.status) {\n switch (ext.status) {\n case NativeStatusCodes.ACCOUNT_UNAVAILABLE:\n return createInteractionRequiredAuthError(\n InteractionRequiredAuthErrorCodes.nativeAccountUnavailable\n );\n case NativeStatusCodes.USER_INTERACTION_REQUIRED:\n return new InteractionRequiredAuthError(code, description);\n case NativeStatusCodes.USER_CANCEL:\n return createBrowserAuthError(\n BrowserAuthErrorCodes.userCancelled\n );\n case NativeStatusCodes.NO_NETWORK:\n return createBrowserAuthError(\n BrowserAuthErrorCodes.noNetworkConnectivity\n );\n case NativeStatusCodes.UX_NOT_ALLOWED:\n return createInteractionRequiredAuthError(\n InteractionRequiredAuthErrorCodes.uxNotAllowed\n );\n }\n }\n\n return new NativeAuthError(\n code,\n NativeAuthErrorMessages[code] || description,\n ext\n );\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { StandardInteractionClient } from \"./StandardInteractionClient.js\";\nimport {\n CommonSilentFlowRequest,\n SilentFlowClient,\n PerformanceEvents,\n invokeAsync,\n} from \"@azure/msal-common/browser\";\nimport { ApiId } from \"../utils/BrowserConstants.js\";\nimport {\n BrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\n\nexport class SilentCacheClient extends StandardInteractionClient {\n /**\n * Returns unexpired tokens from the cache, if available\n * @param silentRequest\n */\n async acquireToken(\n silentRequest: CommonSilentFlowRequest\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentCacheClientAcquireToken,\n silentRequest.correlationId\n );\n // Telemetry manager only used to increment cacheHits here\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.acquireTokenSilent_silentFlow\n );\n\n const clientConfig = await invokeAsync(\n this.getClientConfiguration.bind(this),\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({\n serverTelemetryManager,\n requestAuthority: silentRequest.authority,\n requestAzureCloudOptions: silentRequest.azureCloudOptions,\n account: silentRequest.account,\n });\n const silentAuthClient = new SilentFlowClient(\n clientConfig,\n this.performanceClient\n );\n this.logger.verbose(\"Silent auth client created\");\n\n try {\n const response = await invokeAsync(\n silentAuthClient.acquireCachedToken.bind(silentAuthClient),\n PerformanceEvents.SilentFlowClientAcquireCachedToken,\n this.logger,\n this.performanceClient,\n silentRequest.correlationId\n )(silentRequest);\n const authResponse = response[0] as AuthenticationResult;\n\n this.performanceClient.addFields(\n {\n fromCache: true,\n },\n silentRequest.correlationId\n );\n return authResponse;\n } catch (error) {\n if (\n error instanceof BrowserAuthError &&\n error.errorCode === BrowserAuthErrorCodes.cryptoKeyNotFound\n ) {\n this.logger.verbose(\n \"Signing keypair for bound access token not found. Refreshing bound access token and generating a new crypto keypair.\"\n );\n }\n throw error;\n }\n }\n\n /**\n * API to silenty clear the browser cache.\n * @param logoutRequest\n */\n logout(logoutRequest?: ClearCacheRequest): Promise {\n this.logger.verbose(\"logoutRedirect called\");\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\n return this.clearCacheOnLogout(\n validLogoutRequest.correlationId,\n validLogoutRequest?.account\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n Logger,\n ICrypto,\n PromptValue,\n AuthToken,\n Constants,\n AccountEntity,\n AuthorityType,\n ScopeSet,\n TimeUtils,\n AuthenticationScheme,\n UrlString,\n OIDC_DEFAULT_SCOPES,\n PopTokenGenerator,\n SignedHttpRequestParameters,\n IPerformanceClient,\n PerformanceEvents,\n IdTokenEntity,\n AccessTokenEntity,\n AuthError,\n CommonSilentFlowRequest,\n AccountInfo,\n AADServerParamKeys,\n TokenClaims,\n createClientAuthError,\n ClientAuthErrorCodes,\n invokeAsync,\n updateAccountTenantProfileData,\n CacheHelpers,\n buildAccountToCache,\n InProgressPerformanceEvent,\n ServerTelemetryManager,\n} from \"@azure/msal-common/browser\";\nimport { BaseInteractionClient } from \"./BaseInteractionClient.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport {\n ApiId,\n TemporaryCacheKeys,\n PlatformAuthConstants,\n BrowserConstants,\n CacheLookupPolicy,\n} from \"../utils/BrowserConstants.js\";\nimport { PlatformAuthRequest } from \"../broker/nativeBroker/PlatformAuthRequest.js\";\nimport {\n MATS,\n PlatformAuthResponse,\n} from \"../broker/nativeBroker/PlatformAuthResponse.js\";\nimport {\n NativeAuthError,\n NativeAuthErrorCodes,\n createNativeAuthError,\n isFatalNativeAuthError,\n} from \"../error/NativeAuthError.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { NavigationOptions } from \"../navigation/NavigationOptions.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { SilentCacheClient } from \"./SilentCacheClient.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { base64Decode } from \"../encode/Base64Decode.js\";\nimport { version } from \"../packageMetadata.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\n\nexport class PlatformAuthInteractionClient extends BaseInteractionClient {\n protected apiId: ApiId;\n protected accountId: string;\n protected platformAuthProvider: IPlatformAuthHandler;\n protected silentCacheClient: SilentCacheClient;\n protected nativeStorageManager: BrowserCacheManager;\n protected skus: string;\n\n constructor(\n config: BrowserConfiguration,\n browserStorage: BrowserCacheManager,\n browserCrypto: ICrypto,\n logger: Logger,\n eventHandler: EventHandler,\n navigationClient: INavigationClient,\n apiId: ApiId,\n performanceClient: IPerformanceClient,\n provider: IPlatformAuthHandler,\n accountId: string,\n nativeStorageImpl: BrowserCacheManager,\n correlationId?: string\n ) {\n super(\n config,\n browserStorage,\n browserCrypto,\n logger,\n eventHandler,\n navigationClient,\n performanceClient,\n provider,\n correlationId\n );\n this.apiId = apiId;\n this.accountId = accountId;\n this.platformAuthProvider = provider;\n this.nativeStorageManager = nativeStorageImpl;\n this.silentCacheClient = new SilentCacheClient(\n config,\n this.nativeStorageManager,\n browserCrypto,\n logger,\n eventHandler,\n navigationClient,\n performanceClient,\n provider,\n correlationId\n );\n\n const extensionName = this.platformAuthProvider.getExtensionName();\n\n this.skus = ServerTelemetryManager.makeExtraSkuString({\n libraryName: BrowserConstants.MSAL_SKU,\n libraryVersion: version,\n extensionName: extensionName,\n extensionVersion: this.platformAuthProvider.getExtensionVersion(),\n });\n }\n\n /**\n * Adds SKUs to request extra query parameters\n * @param request {PlatformAuthRequest}\n * @private\n */\n private addRequestSKUs(request: PlatformAuthRequest): void {\n request.extraParameters = {\n ...request.extraParameters,\n [AADServerParamKeys.X_CLIENT_EXTRA_SKU]: this.skus,\n };\n }\n\n /**\n * Acquire token from native platform via browser extension\n * @param request\n */\n async acquireToken(\n request: PopupRequest | SilentRequest | SsoSilentRequest,\n cacheLookupPolicy?: CacheLookupPolicy\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.NativeInteractionClientAcquireToken,\n request.correlationId\n );\n this.logger.trace(\"NativeInteractionClient - acquireToken called.\");\n\n // start the perf measurement\n const nativeATMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.NativeInteractionClientAcquireToken,\n request.correlationId\n );\n const reqTimestamp = TimeUtils.nowSeconds();\n\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n this.apiId\n );\n\n try {\n // initialize native request\n const nativeRequest = await this.initializeNativeRequest(request);\n\n // check if the tokens can be retrieved from internal cache\n try {\n const result = await this.acquireTokensFromCache(\n this.accountId,\n nativeRequest\n );\n nativeATMeasurement.end({\n success: true,\n isNativeBroker: false, // Should be true only when the result is coming directly from the broker\n fromCache: true,\n });\n return result;\n } catch (e) {\n if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\n this.logger.info(\n \"MSAL internal Cache does not contain tokens, return error as per cache policy\"\n );\n throw e;\n }\n // continue with a native call for any and all errors\n this.logger.info(\n \"MSAL internal Cache does not contain tokens, proceed to make a native call\"\n );\n }\n\n const validatedResponse: PlatformAuthResponse =\n await this.platformAuthProvider.sendMessage(nativeRequest);\n\n return await this.handleNativeResponse(\n validatedResponse,\n nativeRequest,\n reqTimestamp\n )\n .then((result: AuthenticationResult) => {\n nativeATMeasurement.end({\n success: true,\n isNativeBroker: true,\n requestId: result.requestId,\n });\n serverTelemetryManager.clearNativeBrokerErrorCode();\n return result;\n })\n .catch((error: AuthError) => {\n nativeATMeasurement.end({\n success: false,\n errorCode: error.errorCode,\n subErrorCode: error.subError,\n isNativeBroker: true,\n });\n throw error;\n });\n } catch (e) {\n if (e instanceof NativeAuthError) {\n serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode);\n }\n throw e;\n }\n }\n\n /**\n * Creates silent flow request\n * @param request\n * @param cachedAccount\n * @returns CommonSilentFlowRequest\n */\n private createSilentCacheRequest(\n request: PlatformAuthRequest,\n cachedAccount: AccountInfo\n ): CommonSilentFlowRequest {\n return {\n authority: request.authority,\n correlationId: this.correlationId,\n scopes: ScopeSet.fromString(request.scope).asArray(),\n account: cachedAccount,\n forceRefresh: false,\n };\n }\n\n /**\n * Fetches the tokens from the cache if un-expired\n * @param nativeAccountId\n * @param request\n * @returns authenticationResult\n */\n protected async acquireTokensFromCache(\n nativeAccountId: string,\n request: PlatformAuthRequest\n ): Promise {\n if (!nativeAccountId) {\n this.logger.warning(\n \"NativeInteractionClient:acquireTokensFromCache - No nativeAccountId provided\"\n );\n throw createClientAuthError(ClientAuthErrorCodes.noAccountFound);\n }\n // fetch the account from browser cache\n const account = this.browserStorage.getBaseAccountInfo(\n {\n nativeAccountId,\n },\n this.correlationId\n );\n\n if (!account) {\n throw createClientAuthError(ClientAuthErrorCodes.noAccountFound);\n }\n\n // leverage silent flow for cached tokens retrieval\n try {\n const silentRequest = this.createSilentCacheRequest(\n request,\n account\n );\n const result = await this.silentCacheClient.acquireToken(\n silentRequest\n );\n\n const fullAccount = {\n ...account,\n idTokenClaims: result?.idTokenClaims as TokenClaims,\n idToken: result?.idToken,\n };\n\n return {\n ...result,\n account: fullAccount,\n };\n } catch (e) {\n throw e;\n }\n }\n\n /**\n * Acquires a token from native platform then redirects to the redirectUri instead of returning the response\n * @param {RedirectRequest} request\n * @param {InProgressPerformanceEvent} rootMeasurement\n */\n async acquireTokenRedirect(\n request: RedirectRequest,\n rootMeasurement: InProgressPerformanceEvent\n ): Promise {\n this.logger.trace(\n \"NativeInteractionClient - acquireTokenRedirect called.\"\n );\n\n const { ...remainingParameters } = request;\n delete remainingParameters.onRedirectNavigate;\n\n const nativeRequest = await this.initializeNativeRequest(\n remainingParameters\n );\n\n try {\n await this.platformAuthProvider.sendMessage(nativeRequest);\n } catch (e) {\n // Only throw fatal errors here to allow application to fallback to regular redirect. Otherwise proceed and the error will be thrown in handleRedirectPromise\n if (e instanceof NativeAuthError) {\n const serverTelemetryManager =\n this.initializeServerTelemetryManager(this.apiId);\n serverTelemetryManager.setNativeBrokerErrorCode(e.errorCode);\n if (isFatalNativeAuthError(e)) {\n throw e;\n }\n }\n }\n this.browserStorage.setTemporaryCache(\n TemporaryCacheKeys.NATIVE_REQUEST,\n JSON.stringify(nativeRequest),\n true\n );\n\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.acquireTokenRedirect,\n timeout: this.config.system.redirectNavigationTimeout,\n noHistory: false,\n };\n const redirectUri = this.config.auth.navigateToLoginRequestUrl\n ? window.location.href\n : this.getRedirectUri(request.redirectUri);\n rootMeasurement.end({ success: true });\n await this.navigationClient.navigateExternal(\n redirectUri,\n navigationOptions\n ); // Need to treat this as external to ensure handleRedirectPromise is run again\n }\n\n /**\n * If the previous page called native platform for a token using redirect APIs, send the same request again and return the response\n * @param performanceClient {IPerformanceClient?}\n * @param correlationId {string?} correlation identifier\n */\n async handleRedirectPromise(\n performanceClient?: IPerformanceClient,\n correlationId?: string\n ): Promise {\n this.logger.trace(\n \"NativeInteractionClient - handleRedirectPromise called.\"\n );\n if (!this.browserStorage.isInteractionInProgress(true)) {\n this.logger.info(\n \"handleRedirectPromise called but there is no interaction in progress, returning null.\"\n );\n return null;\n }\n\n // remove prompt from the request to prevent WAM from prompting twice\n const cachedRequest = this.browserStorage.getCachedNativeRequest();\n if (!cachedRequest) {\n this.logger.verbose(\n \"NativeInteractionClient - handleRedirectPromise called but there is no cached request, returning null.\"\n );\n if (performanceClient && correlationId) {\n performanceClient?.addFields(\n { errorCode: \"no_cached_request\" },\n correlationId\n );\n }\n return null;\n }\n\n const { prompt, ...request } = cachedRequest;\n if (prompt) {\n this.logger.verbose(\n \"NativeInteractionClient - handleRedirectPromise called and prompt was included in the original request, removing prompt from cached request to prevent second interaction with native broker window.\"\n );\n }\n\n this.browserStorage.removeItem(\n this.browserStorage.generateCacheKey(\n TemporaryCacheKeys.NATIVE_REQUEST\n )\n );\n\n const reqTimestamp = TimeUtils.nowSeconds();\n\n try {\n this.logger.verbose(\n \"NativeInteractionClient - handleRedirectPromise sending message to native broker.\"\n );\n const response: PlatformAuthResponse =\n await this.platformAuthProvider.sendMessage(request);\n const authResult = await this.handleNativeResponse(\n response,\n request,\n reqTimestamp\n );\n\n const serverTelemetryManager =\n this.initializeServerTelemetryManager(this.apiId);\n serverTelemetryManager.clearNativeBrokerErrorCode();\n return authResult;\n } catch (e) {\n throw e;\n }\n }\n\n /**\n * Logout from native platform via browser extension\n * @param request\n */\n logout(): Promise {\n this.logger.trace(\"NativeInteractionClient - logout called.\");\n return Promise.reject(\"Logout not implemented yet\");\n }\n\n /**\n * Transform response from native platform into AuthenticationResult object which will be returned to the end user\n * @param response\n * @param request\n * @param reqTimestamp\n */\n protected async handleNativeResponse(\n response: PlatformAuthResponse,\n request: PlatformAuthRequest,\n reqTimestamp: number\n ): Promise {\n this.logger.trace(\n \"NativeInteractionClient - handleNativeResponse called.\"\n );\n\n // generate identifiers\n const idTokenClaims = AuthToken.extractTokenClaims(\n response.id_token,\n base64Decode\n );\n\n const homeAccountIdentifier = this.createHomeAccountIdentifier(\n response,\n idTokenClaims\n );\n\n const cachedhomeAccountId =\n this.browserStorage.getAccountInfoFilteredBy(\n {\n nativeAccountId: request.accountId,\n },\n this.correlationId\n )?.homeAccountId;\n\n // add exception for double brokering, please note this is temporary and will be fortified in future\n if (\n request.extraParameters?.child_client_id &&\n response.account.id !== request.accountId\n ) {\n this.logger.info(\n \"handleNativeServerResponse: Double broker flow detected, ignoring accountId mismatch\"\n );\n } else if (\n homeAccountIdentifier !== cachedhomeAccountId &&\n response.account.id !== request.accountId\n ) {\n // User switch in native broker prompt is not supported. All users must first sign in through web flow to ensure server state is in sync\n throw createNativeAuthError(NativeAuthErrorCodes.userSwitch);\n }\n\n // Get the preferred_cache domain for the given authority\n const authority = await this.getDiscoveredAuthority({\n requestAuthority: request.authority,\n });\n\n const baseAccount = buildAccountToCache(\n this.browserStorage,\n authority,\n homeAccountIdentifier,\n base64Decode,\n this.correlationId,\n idTokenClaims,\n response.client_info,\n undefined, // environment\n idTokenClaims.tid,\n undefined, // auth code payload\n response.account.id,\n this.logger\n );\n\n // Ensure expires_in is in number format\n response.expires_in = Number(response.expires_in);\n\n // generate authenticationResult\n const result = await this.generateAuthenticationResult(\n response,\n request,\n idTokenClaims,\n baseAccount,\n authority.canonicalAuthority,\n reqTimestamp\n );\n\n // cache accounts and tokens in the appropriate storage\n await this.cacheAccount(baseAccount, this.correlationId);\n await this.cacheNativeTokens(\n response,\n request,\n homeAccountIdentifier,\n idTokenClaims,\n response.access_token,\n result.tenantId,\n reqTimestamp\n );\n\n return result;\n }\n\n /**\n * creates an homeAccountIdentifier for the account\n * @param response\n * @param idTokenObj\n * @returns\n */\n protected createHomeAccountIdentifier(\n response: PlatformAuthResponse,\n idTokenClaims: TokenClaims\n ): string {\n // Save account in browser storage\n const homeAccountIdentifier = AccountEntity.generateHomeAccountId(\n response.client_info || Constants.EMPTY_STRING,\n AuthorityType.Default,\n this.logger,\n this.browserCrypto,\n idTokenClaims\n );\n\n return homeAccountIdentifier;\n }\n\n /**\n * Helper to generate scopes\n * @param response\n * @param request\n * @returns\n */\n generateScopes(requestScopes: string, responseScopes?: string): ScopeSet {\n return responseScopes\n ? ScopeSet.fromString(responseScopes)\n : ScopeSet.fromString(requestScopes);\n }\n\n /**\n * If PoP token is requesred, records the PoP token if returned from the WAM, else generates one in the browser\n * @param request\n * @param response\n */\n async generatePopAccessToken(\n response: PlatformAuthResponse,\n request: PlatformAuthRequest\n ): Promise {\n if (\n request.tokenType === AuthenticationScheme.POP &&\n request.signPopToken\n ) {\n /**\n * This code prioritizes SHR returned from the native layer. In case of error/SHR not calculated from WAM and the AT\n * is still received, SHR is calculated locally\n */\n\n // Check if native layer returned an SHR token\n if (response.shr) {\n this.logger.trace(\n \"handleNativeServerResponse: SHR is enabled in native layer\"\n );\n return response.shr;\n }\n\n // Generate SHR in msal js if WAM does not compute it when POP is enabled\n const popTokenGenerator: PopTokenGenerator = new PopTokenGenerator(\n this.browserCrypto\n );\n const shrParameters: SignedHttpRequestParameters = {\n resourceRequestMethod: request.resourceRequestMethod,\n resourceRequestUri: request.resourceRequestUri,\n shrClaims: request.shrClaims,\n shrNonce: request.shrNonce,\n };\n\n /**\n * KeyID must be present in the native request from when the PoP key was generated in order for\n * PopTokenGenerator to query the full key for signing\n */\n if (!request.keyId) {\n throw createClientAuthError(ClientAuthErrorCodes.keyIdMissing);\n }\n return popTokenGenerator.signPopToken(\n response.access_token,\n request.keyId,\n shrParameters\n );\n } else {\n return response.access_token;\n }\n }\n\n /**\n * Generates authentication result\n * @param response\n * @param request\n * @param idTokenObj\n * @param accountEntity\n * @param authority\n * @param reqTimestamp\n * @returns\n */\n protected async generateAuthenticationResult(\n response: PlatformAuthResponse,\n request: PlatformAuthRequest,\n idTokenClaims: TokenClaims,\n accountEntity: AccountEntity,\n authority: string,\n reqTimestamp: number\n ): Promise {\n // Add Native Broker fields to Telemetry\n const mats = this.addTelemetryFromNativeResponse(\n response.properties.MATS\n );\n\n // If scopes not returned in server response, use request scopes\n const responseScopes = this.generateScopes(\n request.scope,\n response.scope\n );\n\n const accountProperties = response.account.properties || {};\n const uid =\n accountProperties[\"UID\"] ||\n idTokenClaims.oid ||\n idTokenClaims.sub ||\n Constants.EMPTY_STRING;\n const tid =\n accountProperties[\"TenantId\"] ||\n idTokenClaims.tid ||\n Constants.EMPTY_STRING;\n\n const accountInfo: AccountInfo | null = updateAccountTenantProfileData(\n accountEntity.getAccountInfo(),\n undefined, // tenantProfile optional\n idTokenClaims,\n response.id_token\n );\n\n /**\n * In pairwise broker flows, this check prevents the broker's native account id\n * from being returned over the embedded app's account id.\n */\n if (accountInfo.nativeAccountId !== response.account.id) {\n accountInfo.nativeAccountId = response.account.id;\n }\n\n // generate PoP token as needed\n const responseAccessToken = await this.generatePopAccessToken(\n response,\n request\n );\n const tokenType =\n request.tokenType === AuthenticationScheme.POP\n ? AuthenticationScheme.POP\n : AuthenticationScheme.BEARER;\n\n const result: AuthenticationResult = {\n authority: authority,\n uniqueId: uid,\n tenantId: tid,\n scopes: responseScopes.asArray(),\n account: accountInfo,\n idToken: response.id_token,\n idTokenClaims: idTokenClaims,\n accessToken: responseAccessToken,\n fromCache: mats ? this.isResponseFromCache(mats) : false,\n // Request timestamp and NativeResponse expires_in are in seconds, converting to Date for AuthenticationResult\n expiresOn: TimeUtils.toDateFromSeconds(\n reqTimestamp + response.expires_in\n ),\n tokenType: tokenType,\n correlationId: this.correlationId,\n state: response.state,\n fromNativeBroker: true,\n };\n\n return result;\n }\n\n /**\n * cache the account entity in browser storage\n * @param accountEntity\n */\n async cacheAccount(\n accountEntity: AccountEntity,\n correlationId: string\n ): Promise {\n // Store the account info and hence `nativeAccountId` in browser cache\n await this.browserStorage.setAccount(accountEntity, this.correlationId);\n // Remove any existing cached tokens for this account in browser storage\n this.browserStorage.removeAccountContext(\n accountEntity.getAccountInfo(),\n correlationId\n );\n }\n\n /**\n * Stores the access_token and id_token in inmemory storage\n * @param response\n * @param request\n * @param homeAccountIdentifier\n * @param idTokenObj\n * @param responseAccessToken\n * @param tenantId\n * @param reqTimestamp\n */\n cacheNativeTokens(\n response: PlatformAuthResponse,\n request: PlatformAuthRequest,\n homeAccountIdentifier: string,\n idTokenClaims: TokenClaims,\n responseAccessToken: string,\n tenantId: string,\n reqTimestamp: number\n ): Promise {\n const cachedIdToken: IdTokenEntity | null =\n CacheHelpers.createIdTokenEntity(\n homeAccountIdentifier,\n request.authority,\n response.id_token || \"\",\n request.clientId,\n idTokenClaims.tid || \"\"\n );\n\n // cache accessToken in inmemory storage\n const expiresIn: number =\n request.tokenType === AuthenticationScheme.POP\n ? Constants.SHR_NONCE_VALIDITY\n : (typeof response.expires_in === \"string\"\n ? parseInt(response.expires_in, 10)\n : response.expires_in) || 0;\n const tokenExpirationSeconds = reqTimestamp + expiresIn;\n const responseScopes = this.generateScopes(\n response.scope,\n request.scope\n );\n\n const cachedAccessToken: AccessTokenEntity | null =\n CacheHelpers.createAccessTokenEntity(\n homeAccountIdentifier,\n request.authority,\n responseAccessToken,\n request.clientId,\n idTokenClaims.tid || tenantId,\n responseScopes.printScopes(),\n tokenExpirationSeconds,\n 0,\n base64Decode,\n undefined,\n request.tokenType as AuthenticationScheme,\n undefined,\n request.keyId\n );\n\n const nativeCacheRecord = {\n idToken: cachedIdToken,\n accessToken: cachedAccessToken,\n };\n\n return this.nativeStorageManager.saveCacheRecord(\n nativeCacheRecord,\n this.correlationId,\n request.storeInCache\n );\n }\n\n getExpiresInValue(\n tokenType: string,\n expiresIn: string | number | undefined\n ): number {\n return tokenType === AuthenticationScheme.POP\n ? Constants.SHR_NONCE_VALIDITY\n : (typeof expiresIn === \"string\"\n ? parseInt(expiresIn, 10)\n : expiresIn) || 0;\n }\n\n protected addTelemetryFromNativeResponse(\n matsResponse?: string\n ): MATS | null {\n const mats = this.getMATSFromResponse(matsResponse);\n\n if (!mats) {\n return null;\n }\n\n this.performanceClient.addFields(\n {\n extensionId: this.platformAuthProvider.getExtensionId(),\n extensionVersion:\n this.platformAuthProvider.getExtensionVersion(),\n matsBrokerVersion: mats.broker_version,\n matsAccountJoinOnStart: mats.account_join_on_start,\n matsAccountJoinOnEnd: mats.account_join_on_end,\n matsDeviceJoin: mats.device_join,\n matsPromptBehavior: mats.prompt_behavior,\n matsApiErrorCode: mats.api_error_code,\n matsUiVisible: mats.ui_visible,\n matsSilentCode: mats.silent_code,\n matsSilentBiSubCode: mats.silent_bi_sub_code,\n matsSilentMessage: mats.silent_message,\n matsSilentStatus: mats.silent_status,\n matsHttpStatus: mats.http_status,\n matsHttpEventCount: mats.http_event_count,\n },\n this.correlationId\n );\n\n return mats;\n }\n\n /**\n * Gets MATS telemetry from native response\n * @param response\n * @returns\n */\n private getMATSFromResponse(matsResponse: string | undefined): MATS | null {\n if (matsResponse) {\n try {\n return JSON.parse(matsResponse);\n } catch (e) {\n this.logger.error(\n \"NativeInteractionClient - Error parsing MATS telemetry, returning null instead\"\n );\n }\n }\n\n return null;\n }\n\n /**\n * Returns whether or not response came from native cache\n * @param response\n * @returns\n */\n protected isResponseFromCache(mats: MATS): boolean {\n if (typeof mats.is_cached === \"undefined\") {\n this.logger.verbose(\n \"NativeInteractionClient - MATS telemetry does not contain field indicating if response was served from cache. Returning false.\"\n );\n return false;\n }\n\n return !!mats.is_cached;\n }\n\n /**\n * Translates developer provided request object into NativeRequest object\n * @param request\n */\n protected async initializeNativeRequest(\n request: PopupRequest | SsoSilentRequest\n ): Promise {\n this.logger.trace(\n \"NativeInteractionClient - initializeNativeRequest called\"\n );\n\n const canonicalAuthority = await this.getCanonicalAuthority(request);\n\n // scopes are expected to be received by the native broker as \"scope\" and will be added to the request below. Other properties that should be dropped from the request to the native broker can be included in the object destructuring here.\n const { scopes, ...remainingProperties } = request;\n const scopeSet = new ScopeSet(scopes || []);\n scopeSet.appendScopes(OIDC_DEFAULT_SCOPES);\n\n const validatedRequest: PlatformAuthRequest = {\n ...remainingProperties,\n accountId: this.accountId,\n clientId: this.config.auth.clientId,\n authority: canonicalAuthority.urlString,\n scope: scopeSet.printScopes(),\n redirectUri: this.getRedirectUri(request.redirectUri),\n prompt: this.getPrompt(request.prompt),\n correlationId: this.correlationId,\n tokenType: request.authenticationScheme,\n windowTitleSubstring: document.title,\n extraParameters: {\n ...request.extraQueryParameters,\n ...request.tokenQueryParameters,\n },\n extendedExpiryToken: false, // Make this configurable?\n keyId: request.popKid,\n };\n\n // Check for PoP token requests: signPopToken should only be set to true if popKid is not set\n if (validatedRequest.signPopToken && !!request.popKid) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.invalidPopTokenRequest\n );\n }\n\n this.handleExtraBrokerParams(validatedRequest);\n validatedRequest.extraParameters =\n validatedRequest.extraParameters || {};\n validatedRequest.extraParameters.telemetry =\n PlatformAuthConstants.MATS_TELEMETRY;\n\n if (request.authenticationScheme === AuthenticationScheme.POP) {\n // add POP request type\n const shrParameters: SignedHttpRequestParameters = {\n resourceRequestUri: request.resourceRequestUri,\n resourceRequestMethod: request.resourceRequestMethod,\n shrClaims: request.shrClaims,\n shrNonce: request.shrNonce,\n };\n\n const popTokenGenerator = new PopTokenGenerator(this.browserCrypto);\n\n // generate reqCnf if not provided in the request\n let reqCnfData;\n if (!validatedRequest.keyId) {\n const generatedReqCnfData = await invokeAsync(\n popTokenGenerator.generateCnf.bind(popTokenGenerator),\n PerformanceEvents.PopTokenGenerateCnf,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(shrParameters, this.logger);\n reqCnfData = generatedReqCnfData.reqCnfString;\n validatedRequest.keyId = generatedReqCnfData.kid;\n validatedRequest.signPopToken = true;\n } else {\n reqCnfData = this.browserCrypto.base64UrlEncode(\n JSON.stringify({ kid: validatedRequest.keyId })\n );\n validatedRequest.signPopToken = false;\n }\n\n // SPAs require whole string to be passed to broker\n validatedRequest.reqCnf = reqCnfData;\n }\n this.addRequestSKUs(validatedRequest);\n\n return validatedRequest;\n }\n\n private async getCanonicalAuthority(\n request: PopupRequest | SsoSilentRequest\n ): Promise {\n const requestAuthority =\n request.authority || this.config.auth.authority;\n\n if (request.account) {\n // validate authority\n await this.getDiscoveredAuthority({\n requestAuthority,\n requestAzureCloudOptions: request.azureCloudOptions,\n account: request.account,\n });\n }\n\n const canonicalAuthority = new UrlString(requestAuthority);\n canonicalAuthority.validateAsUri();\n return canonicalAuthority;\n }\n\n private getPrompt(prompt?: string): string | undefined {\n // If request is silent, prompt is always none\n switch (this.apiId) {\n case ApiId.ssoSilent:\n case ApiId.acquireTokenSilent_silentFlow:\n this.logger.trace(\n \"initializeNativeRequest: silent request sets prompt to none\"\n );\n return PromptValue.NONE;\n default:\n break;\n }\n\n // Prompt not provided, request may proceed and native broker decides if it needs to prompt\n if (!prompt) {\n this.logger.trace(\n \"initializeNativeRequest: prompt was not provided\"\n );\n return undefined;\n }\n\n // If request is interactive, check if prompt provided is allowed to go directly to native broker\n switch (prompt) {\n case PromptValue.NONE:\n case PromptValue.CONSENT:\n case PromptValue.LOGIN:\n this.logger.trace(\n \"initializeNativeRequest: prompt is compatible with native flow\"\n );\n return prompt;\n default:\n this.logger.trace(\n `initializeNativeRequest: prompt = ${prompt} is not compatible with native flow`\n );\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.nativePromptNotSupported\n );\n }\n }\n\n /**\n * Handles extra broker request parameters\n * @param request {PlatformAuthRequest}\n * @private\n */\n private handleExtraBrokerParams(request: PlatformAuthRequest): void {\n const hasExtraBrokerParams =\n request.extraParameters &&\n request.extraParameters.hasOwnProperty(\n AADServerParamKeys.BROKER_CLIENT_ID\n ) &&\n request.extraParameters.hasOwnProperty(\n AADServerParamKeys.BROKER_REDIRECT_URI\n ) &&\n request.extraParameters.hasOwnProperty(\n AADServerParamKeys.CLIENT_ID\n );\n\n if (!request.embeddedClientId && !hasExtraBrokerParams) {\n return;\n }\n\n let child_client_id: string = \"\";\n const child_redirect_uri = request.redirectUri;\n\n if (request.embeddedClientId) {\n request.redirectUri = this.config.auth.redirectUri;\n child_client_id = request.embeddedClientId;\n } else if (request.extraParameters) {\n request.redirectUri =\n request.extraParameters[AADServerParamKeys.BROKER_REDIRECT_URI];\n child_client_id =\n request.extraParameters[AADServerParamKeys.CLIENT_ID];\n }\n\n request.extraParameters = {\n child_client_id,\n child_redirect_uri,\n };\n\n this.performanceClient?.addFields(\n {\n embeddedClientId: child_client_id,\n embeddedRedirectUri: child_redirect_uri,\n },\n request.correlationId\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AuthenticationScheme,\n Authority,\n AuthorizeProtocol,\n ClientConfigurationErrorCodes,\n CommonAuthorizationUrlRequest,\n createClientConfigurationError,\n invokeAsync,\n IPerformanceClient,\n Logger,\n PerformanceEvents,\n PopTokenGenerator,\n ProtocolMode,\n RequestParameterBuilder,\n OAuthResponseType,\n Constants,\n CommonAuthorizationCodeRequest,\n AuthorizationCodeClient,\n ProtocolUtils,\n ThrottlingUtils,\n AuthorizeResponse,\n ResponseHandler,\n TimeUtils,\n AuthorizationCodePayload,\n ServerAuthorizationTokenResponse,\n} from \"@azure/msal-common/browser\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { ApiId, BrowserConstants } from \"../utils/BrowserConstants.js\";\nimport { version } from \"../packageMetadata.js\";\nimport { CryptoOps } from \"../crypto/CryptoOps.js\";\nimport {\n BrowserAuthErrorCodes,\n createBrowserAuthError,\n} from \"../error/BrowserAuthError.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { InteractionHandler } from \"../interaction_handler/InteractionHandler.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { PlatformAuthInteractionClient } from \"../interaction_client/PlatformAuthInteractionClient.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { decryptEarResponse } from \"../crypto/BrowserCrypto.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\n\n/**\n * Returns map of parameters that are applicable to all calls to /authorize whether using PKCE or EAR\n * @param config\n * @param authority\n * @param request\n * @param logger\n * @param performanceClient\n * @returns\n */\nasync function getStandardParameters(\n config: BrowserConfiguration,\n authority: Authority,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n): Promise> {\n const parameters = AuthorizeProtocol.getStandardAuthorizeRequestParameters(\n { ...config.auth, authority: authority },\n request,\n logger,\n performanceClient\n );\n RequestParameterBuilder.addLibraryInfo(parameters, {\n sku: BrowserConstants.MSAL_SKU,\n version: version,\n os: \"\",\n cpu: \"\",\n });\n if (config.auth.protocolMode !== ProtocolMode.OIDC) {\n RequestParameterBuilder.addApplicationTelemetry(\n parameters,\n config.telemetry.application\n );\n }\n\n if (request.platformBroker) {\n // signal ests that this is a WAM call\n RequestParameterBuilder.addNativeBroker(parameters);\n\n // pass the req_cnf for POP\n if (request.authenticationScheme === AuthenticationScheme.POP) {\n const cryptoOps = new CryptoOps(logger, performanceClient);\n const popTokenGenerator = new PopTokenGenerator(cryptoOps);\n\n // req_cnf is always sent as a string for SPAs\n let reqCnfData;\n if (!request.popKid) {\n const generatedReqCnfData = await invokeAsync(\n popTokenGenerator.generateCnf.bind(popTokenGenerator),\n PerformanceEvents.PopTokenGenerateCnf,\n logger,\n performanceClient,\n request.correlationId\n )(request, logger);\n reqCnfData = generatedReqCnfData.reqCnfString;\n } else {\n reqCnfData = cryptoOps.encodeKid(request.popKid);\n }\n RequestParameterBuilder.addPopToken(parameters, reqCnfData);\n }\n }\n\n RequestParameterBuilder.instrumentBrokerParams(\n parameters,\n request.correlationId,\n performanceClient\n );\n\n return parameters;\n}\n\n/**\n * Gets the full /authorize URL with request parameters when using Auth Code + PKCE\n * @param config\n * @param authority\n * @param request\n * @param logger\n * @param performanceClient\n * @returns\n */\nexport async function getAuthCodeRequestUrl(\n config: BrowserConfiguration,\n authority: Authority,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n): Promise {\n if (!request.codeChallenge) {\n throw createClientConfigurationError(\n ClientConfigurationErrorCodes.pkceParamsMissing\n );\n }\n\n const parameters = await invokeAsync(\n getStandardParameters,\n PerformanceEvents.GetStandardParams,\n logger,\n performanceClient,\n request.correlationId\n )(config, authority, request, logger, performanceClient);\n RequestParameterBuilder.addResponseType(parameters, OAuthResponseType.CODE);\n\n RequestParameterBuilder.addCodeChallengeParams(\n parameters,\n request.codeChallenge,\n Constants.S256_CODE_CHALLENGE_METHOD\n );\n\n RequestParameterBuilder.addExtraQueryParameters(\n parameters,\n request.extraQueryParameters || {}\n );\n\n return AuthorizeProtocol.getAuthorizeUrl(\n authority,\n parameters,\n config.auth.encodeExtraQueryParams,\n request.extraQueryParameters\n );\n}\n\n/**\n * Gets the form that will be posted to /authorize with request parameters when using EAR\n */\nexport async function getEARForm(\n frame: Document,\n config: BrowserConfiguration,\n authority: Authority,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n): Promise {\n if (!request.earJwk) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.earJwkEmpty);\n }\n\n const parameters = await getStandardParameters(\n config,\n authority,\n request,\n logger,\n performanceClient\n );\n\n RequestParameterBuilder.addResponseType(\n parameters,\n OAuthResponseType.IDTOKEN_TOKEN_REFRESHTOKEN\n );\n RequestParameterBuilder.addEARParameters(parameters, request.earJwk);\n\n const queryParams = new Map();\n RequestParameterBuilder.addExtraQueryParameters(\n queryParams,\n request.extraQueryParameters || {}\n );\n const url = AuthorizeProtocol.getAuthorizeUrl(\n authority,\n queryParams,\n config.auth.encodeExtraQueryParams,\n request.extraQueryParameters\n );\n\n return createForm(frame, url, parameters);\n}\n\n/**\n * Gets the form that will be posted to /authorize with request parameters when using POST method\n */\nexport async function getCodeForm(\n frame: Document,\n config: BrowserConfiguration,\n authority: Authority,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n): Promise {\n const parameters = await getStandardParameters(\n config,\n authority,\n request,\n logger,\n performanceClient\n );\n\n RequestParameterBuilder.addResponseType(parameters, OAuthResponseType.CODE);\n\n RequestParameterBuilder.addCodeChallengeParams(\n parameters,\n request.codeChallenge,\n request.codeChallengeMethod || Constants.S256_CODE_CHALLENGE_METHOD\n );\n\n RequestParameterBuilder.addPostBodyParameters(\n parameters,\n request.authorizePostBodyParameters || {}\n );\n\n const queryParams = new Map();\n RequestParameterBuilder.addExtraQueryParameters(\n queryParams,\n request.extraQueryParameters || {}\n );\n\n const url = AuthorizeProtocol.getAuthorizeUrl(\n authority,\n queryParams,\n config.auth.encodeExtraQueryParams,\n request.extraQueryParameters\n );\n\n return createForm(frame, url, parameters);\n}\n\n/**\n * Creates form element in the provided document with auth parameters in the post body\n * @param frame\n * @param authorizeUrl\n * @param parameters\n * @returns\n */\nfunction createForm(\n frame: Document,\n authorizeUrl: string,\n parameters: Map\n): HTMLFormElement {\n const form = frame.createElement(\"form\");\n form.method = \"post\";\n form.action = authorizeUrl;\n\n parameters.forEach((value: string, key: string) => {\n const param = frame.createElement(\"input\");\n param.hidden = true;\n param.name = key;\n param.value = value;\n\n form.appendChild(param);\n });\n\n frame.body.appendChild(form);\n return form;\n}\n\n/**\n * Response handler when server returns accountId on the /authorize request\n * @param request\n * @param accountId\n * @param apiId\n * @param config\n * @param browserStorage\n * @param nativeStorage\n * @param eventHandler\n * @param logger\n * @param performanceClient\n * @param nativeMessageHandler\n * @returns\n */\nexport async function handleResponsePlatformBroker(\n request: CommonAuthorizationUrlRequest,\n accountId: string,\n apiId: ApiId,\n config: BrowserConfiguration,\n browserStorage: BrowserCacheManager,\n nativeStorage: BrowserCacheManager,\n eventHandler: EventHandler,\n logger: Logger,\n performanceClient: IPerformanceClient,\n platformAuthProvider?: IPlatformAuthHandler\n): Promise {\n logger.verbose(\"Account id found, calling WAM for token\");\n\n if (!platformAuthProvider) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.nativeConnectionNotEstablished\n );\n }\n const browserCrypto = new CryptoOps(logger, performanceClient);\n const nativeInteractionClient = new PlatformAuthInteractionClient(\n config,\n browserStorage,\n browserCrypto,\n logger,\n eventHandler,\n config.system.navigationClient,\n apiId,\n performanceClient,\n platformAuthProvider,\n accountId,\n nativeStorage,\n request.correlationId\n );\n const { userRequestState } = ProtocolUtils.parseRequestState(\n browserCrypto,\n request.state\n );\n return invokeAsync(\n nativeInteractionClient.acquireToken.bind(nativeInteractionClient),\n PerformanceEvents.NativeInteractionClientAcquireToken,\n logger,\n performanceClient,\n request.correlationId\n )({\n ...request,\n state: userRequestState,\n prompt: undefined, // Server should handle the prompt, ideally native broker can do this part silently\n });\n}\n\n/**\n * Response handler when server returns code on the /authorize request\n * @param request\n * @param response\n * @param codeVerifier\n * @param authClient\n * @param browserStorage\n * @param logger\n * @param performanceClient\n * @returns\n */\nexport async function handleResponseCode(\n request: CommonAuthorizationUrlRequest,\n response: AuthorizeResponse,\n codeVerifier: string,\n apiId: ApiId,\n config: BrowserConfiguration,\n authClient: AuthorizationCodeClient,\n browserStorage: BrowserCacheManager,\n nativeStorage: BrowserCacheManager,\n eventHandler: EventHandler,\n logger: Logger,\n performanceClient: IPerformanceClient,\n platformAuthProvider?: IPlatformAuthHandler\n): Promise {\n // Remove throttle if it exists\n ThrottlingUtils.removeThrottle(\n browserStorage,\n config.auth.clientId,\n request\n );\n if (response.accountId) {\n return invokeAsync(\n handleResponsePlatformBroker,\n PerformanceEvents.HandleResponsePlatformBroker,\n logger,\n performanceClient,\n request.correlationId\n )(\n request,\n response.accountId,\n apiId,\n config,\n browserStorage,\n nativeStorage,\n eventHandler,\n logger,\n performanceClient,\n platformAuthProvider\n );\n }\n const authCodeRequest: CommonAuthorizationCodeRequest = {\n ...request,\n code: response.code || \"\",\n codeVerifier: codeVerifier,\n };\n // Create popup interaction handler.\n const interactionHandler = new InteractionHandler(\n authClient,\n browserStorage,\n authCodeRequest,\n logger,\n performanceClient\n );\n // Handle response from hash string.\n const result = await invokeAsync(\n interactionHandler.handleCodeResponse.bind(interactionHandler),\n PerformanceEvents.HandleCodeResponse,\n logger,\n performanceClient,\n request.correlationId\n )(response, request);\n\n return result;\n}\n\n/**\n * Response handler when server returns ear_jwe on the /authorize request\n * @param request\n * @param response\n * @param apiId\n * @param config\n * @param authority\n * @param browserStorage\n * @param nativeStorage\n * @param eventHandler\n * @param logger\n * @param performanceClient\n * @param nativeMessageHandler\n * @returns\n */\nexport async function handleResponseEAR(\n request: CommonAuthorizationUrlRequest,\n response: AuthorizeResponse,\n apiId: ApiId,\n config: BrowserConfiguration,\n authority: Authority,\n browserStorage: BrowserCacheManager,\n nativeStorage: BrowserCacheManager,\n eventHandler: EventHandler,\n logger: Logger,\n performanceClient: IPerformanceClient,\n platformAuthProvider?: IPlatformAuthHandler\n): Promise {\n // Remove throttle if it exists\n ThrottlingUtils.removeThrottle(\n browserStorage,\n config.auth.clientId,\n request\n );\n\n // Validate state & check response for errors\n AuthorizeProtocol.validateAuthorizationResponse(response, request.state);\n\n if (!response.ear_jwe) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.earJweEmpty);\n }\n\n if (!request.earJwk) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.earJwkEmpty);\n }\n\n const decryptedData = JSON.parse(\n await invokeAsync(\n decryptEarResponse,\n PerformanceEvents.DecryptEarResponse,\n logger,\n performanceClient,\n request.correlationId\n )(request.earJwk, response.ear_jwe)\n ) as AuthorizeResponse & ServerAuthorizationTokenResponse;\n\n if (decryptedData.accountId) {\n return invokeAsync(\n handleResponsePlatformBroker,\n PerformanceEvents.HandleResponsePlatformBroker,\n logger,\n performanceClient,\n request.correlationId\n )(\n request,\n decryptedData.accountId,\n apiId,\n config,\n browserStorage,\n nativeStorage,\n eventHandler,\n logger,\n performanceClient,\n platformAuthProvider\n );\n }\n\n const responseHandler = new ResponseHandler(\n config.auth.clientId,\n browserStorage,\n new CryptoOps(logger, performanceClient),\n logger,\n null,\n null,\n performanceClient\n );\n\n // Validate response. This function throws a server error if an error is returned by the server.\n responseHandler.validateTokenResponse(decryptedData);\n\n // Temporary until response handler is refactored to be more flow agnostic.\n const additionalData: AuthorizationCodePayload = {\n code: \"\",\n state: request.state,\n nonce: request.nonce,\n client_info: decryptedData.client_info,\n cloud_graph_host_name: decryptedData.cloud_graph_host_name,\n cloud_instance_host_name: decryptedData.cloud_instance_host_name,\n cloud_instance_name: decryptedData.cloud_instance_name,\n msgraph_host: decryptedData.msgraph_host,\n };\n\n return (await invokeAsync(\n responseHandler.handleServerTokenResponse.bind(responseHandler),\n PerformanceEvents.HandleServerTokenResponse,\n logger,\n performanceClient,\n request.correlationId\n )(\n decryptedData,\n authority,\n TimeUtils.nowSeconds(),\n request,\n additionalData,\n undefined,\n undefined,\n undefined,\n undefined\n )) as AuthenticationResult;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IPerformanceClient,\n Logger,\n PerformanceEvents,\n PkceCodes,\n invoke,\n invokeAsync,\n} from \"@azure/msal-common/browser\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { urlEncodeArr } from \"../encode/Base64Encode.js\";\nimport { getRandomValues, sha256Digest } from \"./BrowserCrypto.js\";\n\n// Constant byte array length\nconst RANDOM_BYTE_ARR_LENGTH = 32;\n\n/**\n * This file defines APIs to generate PKCE codes and code verifiers.\n */\n\n/**\n * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636\n */\nexport async function generatePkceCodes(\n performanceClient: IPerformanceClient,\n logger: Logger,\n correlationId: string\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.GeneratePkceCodes,\n correlationId\n );\n const codeVerifier = invoke(\n generateCodeVerifier,\n PerformanceEvents.GenerateCodeVerifier,\n logger,\n performanceClient,\n correlationId\n )(performanceClient, logger, correlationId);\n const codeChallenge = await invokeAsync(\n generateCodeChallengeFromVerifier,\n PerformanceEvents.GenerateCodeChallengeFromVerifier,\n logger,\n performanceClient,\n correlationId\n )(codeVerifier, performanceClient, logger, correlationId);\n return {\n verifier: codeVerifier,\n challenge: codeChallenge,\n };\n}\n\n/**\n * Generates a random 32 byte buffer and returns the base64\n * encoded string to be used as a PKCE Code Verifier\n */\nfunction generateCodeVerifier(\n performanceClient: IPerformanceClient,\n logger: Logger,\n correlationId: string\n): string {\n try {\n // Generate random values as utf-8\n const buffer: Uint8Array = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\n invoke(\n getRandomValues,\n PerformanceEvents.GetRandomValues,\n logger,\n performanceClient,\n correlationId\n )(buffer);\n // encode verifier as base64\n const pkceCodeVerifierB64: string = urlEncodeArr(buffer);\n return pkceCodeVerifierB64;\n } catch (e) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.pkceNotCreated);\n }\n}\n\n/**\n * Creates a base64 encoded PKCE Code Challenge string from the\n * hash created from the PKCE Code Verifier supplied\n */\nasync function generateCodeChallengeFromVerifier(\n pkceCodeVerifier: string,\n performanceClient: IPerformanceClient,\n logger: Logger,\n correlationId: string\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.GenerateCodeChallengeFromVerifier,\n correlationId\n );\n try {\n // hashed verifier\n const pkceHashedCodeVerifier = await invokeAsync(\n sha256Digest,\n PerformanceEvents.Sha256Digest,\n logger,\n performanceClient,\n correlationId\n )(pkceCodeVerifier, performanceClient, correlationId);\n // encode hash as base64\n return urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));\n } catch (e) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.pkceNotCreated);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n PlatformAuthConstants,\n NativeExtensionMethod,\n} from \"../../utils/BrowserConstants.js\";\nimport {\n Logger,\n AuthError,\n createAuthError,\n AuthErrorCodes,\n InProgressPerformanceEvent,\n PerformanceEvents,\n IPerformanceClient,\n} from \"@azure/msal-common/browser\";\nimport {\n NativeExtensionRequest,\n NativeExtensionRequestBody,\n PlatformAuthRequest,\n} from \"./PlatformAuthRequest.js\";\nimport { createNativeAuthError } from \"../../error/NativeAuthError.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../../error/BrowserAuthError.js\";\nimport { createNewGuid } from \"../../crypto/BrowserCrypto.js\";\nimport { PlatformAuthResponse } from \"./PlatformAuthResponse.js\";\nimport { IPlatformAuthHandler } from \"./IPlatformAuthHandler.js\";\n\ntype ResponseResolvers = {\n resolve: (value: T | PromiseLike) => void;\n reject: (\n value: AuthError | Error | PromiseLike | PromiseLike\n ) => void;\n};\n\nexport class PlatformAuthExtensionHandler implements IPlatformAuthHandler {\n private extensionId: string | undefined;\n private extensionVersion: string | undefined;\n private logger: Logger;\n private readonly handshakeTimeoutMs: number;\n private timeoutId: number | undefined;\n private resolvers: Map>;\n private handshakeResolvers: Map>;\n private messageChannel: MessageChannel;\n private readonly windowListener: (event: MessageEvent) => void;\n private readonly performanceClient: IPerformanceClient;\n private readonly handshakeEvent: InProgressPerformanceEvent;\n platformAuthType: string;\n\n constructor(\n logger: Logger,\n handshakeTimeoutMs: number,\n performanceClient: IPerformanceClient,\n extensionId?: string\n ) {\n this.logger = logger;\n this.handshakeTimeoutMs = handshakeTimeoutMs;\n this.extensionId = extensionId;\n this.resolvers = new Map(); // Used for non-handshake messages\n this.handshakeResolvers = new Map(); // Used for handshake messages\n this.messageChannel = new MessageChannel();\n this.windowListener = this.onWindowMessage.bind(this); // Window event callback doesn't have access to 'this' unless it's bound\n this.performanceClient = performanceClient;\n this.handshakeEvent = performanceClient.startMeasurement(\n PerformanceEvents.NativeMessageHandlerHandshake\n );\n this.platformAuthType =\n PlatformAuthConstants.PLATFORM_EXTENSION_PROVIDER;\n }\n\n /**\n * Sends a given message to the extension and resolves with the extension response\n * @param request\n */\n async sendMessage(\n request: PlatformAuthRequest\n ): Promise {\n this.logger.trace(this.platformAuthType + \" - sendMessage called.\");\n\n // fall back to native calls\n const messageBody: NativeExtensionRequestBody = {\n method: NativeExtensionMethod.GetToken,\n request: request,\n };\n\n const req: NativeExtensionRequest = {\n channel: PlatformAuthConstants.CHANNEL_ID,\n extensionId: this.extensionId,\n responseId: createNewGuid(),\n body: messageBody,\n };\n\n this.logger.trace(\n this.platformAuthType + \" - Sending request to browser extension\"\n );\n this.logger.tracePii(\n this.platformAuthType +\n ` - Sending request to browser extension: ${JSON.stringify(\n req\n )}`\n );\n this.messageChannel.port1.postMessage(req);\n\n const response: object = await new Promise((resolve, reject) => {\n this.resolvers.set(req.responseId, { resolve, reject });\n });\n\n const validatedResponse: PlatformAuthResponse =\n this.validatePlatformBrokerResponse(response);\n\n return validatedResponse;\n }\n\n /**\n * Returns an instance of the MessageHandler that has successfully established a connection with an extension\n * @param {Logger} logger\n * @param {number} handshakeTimeoutMs\n * @param {IPerformanceClient} performanceClient\n * @param {ICrypto} crypto\n */\n static async createProvider(\n logger: Logger,\n handshakeTimeoutMs: number,\n performanceClient: IPerformanceClient\n ): Promise {\n logger.trace(\"PlatformAuthExtensionHandler - createProvider called.\");\n\n try {\n const preferredProvider = new PlatformAuthExtensionHandler(\n logger,\n handshakeTimeoutMs,\n performanceClient,\n PlatformAuthConstants.PREFERRED_EXTENSION_ID\n );\n await preferredProvider.sendHandshakeRequest();\n return preferredProvider;\n } catch (e) {\n // If preferred extension fails for whatever reason, fallback to using any installed extension\n const backupProvider = new PlatformAuthExtensionHandler(\n logger,\n handshakeTimeoutMs,\n performanceClient\n );\n await backupProvider.sendHandshakeRequest();\n return backupProvider;\n }\n }\n\n /**\n * Send handshake request helper.\n */\n private async sendHandshakeRequest(): Promise {\n this.logger.trace(\n this.platformAuthType + \" - sendHandshakeRequest called.\"\n );\n // Register this event listener before sending handshake\n window.addEventListener(\"message\", this.windowListener, false); // false is important, because content script message processing should work first\n\n const req: NativeExtensionRequest = {\n channel: PlatformAuthConstants.CHANNEL_ID,\n extensionId: this.extensionId,\n responseId: createNewGuid(),\n body: {\n method: NativeExtensionMethod.HandshakeRequest,\n },\n };\n this.handshakeEvent.add({\n extensionId: this.extensionId,\n extensionHandshakeTimeoutMs: this.handshakeTimeoutMs,\n });\n\n this.messageChannel.port1.onmessage = (event) => {\n this.onChannelMessage(event);\n };\n\n window.postMessage(req, window.origin, [this.messageChannel.port2]);\n\n return new Promise((resolve, reject) => {\n this.handshakeResolvers.set(req.responseId, { resolve, reject });\n this.timeoutId = window.setTimeout(() => {\n /*\n * Throw an error if neither HandshakeResponse nor original Handshake request are received in a reasonable timeframe.\n * This typically suggests an event handler stopped propagation of the Handshake request but did not respond to it on the MessageChannel port\n */\n window.removeEventListener(\n \"message\",\n this.windowListener,\n false\n );\n this.messageChannel.port1.close();\n this.messageChannel.port2.close();\n this.handshakeEvent.end({\n extensionHandshakeTimedOut: true,\n success: false,\n });\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.nativeHandshakeTimeout\n )\n );\n this.handshakeResolvers.delete(req.responseId);\n }, this.handshakeTimeoutMs); // Use a reasonable timeout in milliseconds here\n });\n }\n\n /**\n * Invoked when a message is posted to the window. If a handshake request is received it means the extension is not installed.\n * @param event\n */\n private onWindowMessage(event: MessageEvent): void {\n this.logger.trace(this.platformAuthType + \" - onWindowMessage called\");\n // We only accept messages from ourselves\n if (event.source !== window) {\n return;\n }\n\n const request = event.data;\n\n if (\n !request.channel ||\n request.channel !== PlatformAuthConstants.CHANNEL_ID\n ) {\n return;\n }\n\n if (request.extensionId && request.extensionId !== this.extensionId) {\n return;\n }\n\n if (request.body.method === NativeExtensionMethod.HandshakeRequest) {\n const handshakeResolver = this.handshakeResolvers.get(\n request.responseId\n );\n /*\n * Filter out responses with no matched resolvers sooner to keep channel ports open while waiting for\n * the proper response.\n */\n if (!handshakeResolver) {\n this.logger.trace(\n this.platformAuthType +\n `.onWindowMessage - resolver can't be found for request ${request.responseId}`\n );\n return;\n }\n\n // If we receive this message back it means no extension intercepted the request, meaning no extension supporting handshake protocol is installed\n this.logger.verbose(\n request.extensionId\n ? `Extension with id: ${request.extensionId} not installed`\n : \"No extension installed\"\n );\n clearTimeout(this.timeoutId);\n this.messageChannel.port1.close();\n this.messageChannel.port2.close();\n window.removeEventListener(\"message\", this.windowListener, false);\n this.handshakeEvent.end({\n success: false,\n extensionInstalled: false,\n });\n handshakeResolver.reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.nativeExtensionNotInstalled\n )\n );\n }\n }\n\n /**\n * Invoked when a message is received from the extension on the MessageChannel port\n * @param event\n */\n private onChannelMessage(event: MessageEvent): void {\n this.logger.trace(\n this.platformAuthType + \" - onChannelMessage called.\"\n );\n const request = event.data;\n\n const resolver = this.resolvers.get(request.responseId);\n const handshakeResolver = this.handshakeResolvers.get(\n request.responseId\n );\n\n try {\n const method = request.body.method;\n\n if (method === NativeExtensionMethod.Response) {\n if (!resolver) {\n return;\n }\n const response = request.body.response;\n this.logger.trace(\n this.platformAuthType +\n \" - Received response from browser extension\"\n );\n this.logger.tracePii(\n this.platformAuthType +\n ` - Received response from browser extension: ${JSON.stringify(\n response\n )}`\n );\n if (response.status !== \"Success\") {\n resolver.reject(\n createNativeAuthError(\n response.code,\n response.description,\n response.ext\n )\n );\n } else if (response.result) {\n if (\n response.result[\"code\"] &&\n response.result[\"description\"]\n ) {\n resolver.reject(\n createNativeAuthError(\n response.result[\"code\"],\n response.result[\"description\"],\n response.result[\"ext\"]\n )\n );\n } else {\n resolver.resolve(response.result);\n }\n } else {\n throw createAuthError(\n AuthErrorCodes.unexpectedError,\n \"Event does not contain result.\"\n );\n }\n this.resolvers.delete(request.responseId);\n } else if (method === NativeExtensionMethod.HandshakeResponse) {\n if (!handshakeResolver) {\n this.logger.trace(\n this.platformAuthType +\n `.onChannelMessage - resolver can't be found for request ${request.responseId}`\n );\n return;\n }\n clearTimeout(this.timeoutId); // Clear setTimeout\n window.removeEventListener(\n \"message\",\n this.windowListener,\n false\n ); // Remove 'No extension' listener\n this.extensionId = request.extensionId;\n this.extensionVersion = request.body.version;\n this.logger.verbose(\n this.platformAuthType +\n ` - Received HandshakeResponse from extension: ${this.extensionId}`\n );\n this.handshakeEvent.end({\n extensionInstalled: true,\n success: true,\n });\n\n handshakeResolver.resolve();\n this.handshakeResolvers.delete(request.responseId);\n }\n // Do nothing if method is not Response or HandshakeResponse\n } catch (err) {\n this.logger.error(\"Error parsing response from WAM Extension\");\n this.logger.errorPii(\n `Error parsing response from WAM Extension: ${err as string}`\n );\n this.logger.errorPii(`Unable to parse ${event}`);\n\n if (resolver) {\n resolver.reject(err as AuthError);\n } else if (handshakeResolver) {\n handshakeResolver.reject(err as AuthError);\n }\n }\n }\n\n /**\n * Validates native platform response before processing\n * @param response\n */\n private validatePlatformBrokerResponse(\n response: object\n ): PlatformAuthResponse {\n if (\n response.hasOwnProperty(\"access_token\") &&\n response.hasOwnProperty(\"id_token\") &&\n response.hasOwnProperty(\"client_info\") &&\n response.hasOwnProperty(\"account\") &&\n response.hasOwnProperty(\"scope\") &&\n response.hasOwnProperty(\"expires_in\")\n ) {\n return response as PlatformAuthResponse;\n } else {\n throw createAuthError(\n AuthErrorCodes.unexpectedError,\n \"Response missing expected properties.\"\n );\n }\n }\n\n /**\n * Returns the Id for the browser extension this handler is communicating with\n * @returns\n */\n getExtensionId(): string | undefined {\n return this.extensionId;\n }\n\n /**\n * Returns the version for the browser extension this handler is communicating with\n * @returns\n */\n getExtensionVersion(): string | undefined {\n return this.extensionVersion;\n }\n\n getExtensionName(): string | undefined {\n return this.getExtensionId() ===\n PlatformAuthConstants.PREFERRED_EXTENSION_ID\n ? \"chrome\"\n : this.getExtensionId()?.length\n ? \"unknown\"\n : undefined;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n Logger,\n createAuthError,\n AuthErrorCodes,\n IPerformanceClient,\n StringDict,\n} from \"@azure/msal-common/browser\";\nimport {\n DOMExtraParameters,\n PlatformAuthRequest,\n PlatformDOMTokenRequest,\n} from \"./PlatformAuthRequest.js\";\nimport { PlatformAuthConstants } from \"../../utils/BrowserConstants.js\";\nimport {\n PlatformAuthResponse,\n PlatformDOMTokenResponse,\n} from \"./PlatformAuthResponse.js\";\nimport { createNativeAuthError } from \"../../error/NativeAuthError.js\";\nimport { IPlatformAuthHandler } from \"./IPlatformAuthHandler.js\";\n\nexport class PlatformAuthDOMHandler implements IPlatformAuthHandler {\n protected logger: Logger;\n protected performanceClient: IPerformanceClient;\n protected correlationId: string;\n platformAuthType: string;\n\n constructor(\n logger: Logger,\n performanceClient: IPerformanceClient,\n correlationId: string\n ) {\n this.logger = logger;\n this.performanceClient = performanceClient;\n this.correlationId = correlationId;\n this.platformAuthType = PlatformAuthConstants.PLATFORM_DOM_PROVIDER;\n }\n\n static async createProvider(\n logger: Logger,\n performanceClient: IPerformanceClient,\n correlationId: string\n ): Promise {\n logger.trace(\"PlatformAuthDOMHandler: createProvider called\");\n\n // @ts-ignore\n if (window.navigator?.platformAuthentication) {\n const supportedContracts =\n // @ts-ignore\n await window.navigator.platformAuthentication.getSupportedContracts(\n PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID\n );\n if (\n supportedContracts?.includes(\n PlatformAuthConstants.PLATFORM_DOM_APIS\n )\n ) {\n logger.trace(\"Platform auth api available in DOM\");\n return new PlatformAuthDOMHandler(\n logger,\n performanceClient,\n correlationId\n );\n }\n }\n return undefined;\n }\n\n /**\n * Returns the Id for the broker extension this handler is communicating with\n * @returns\n */\n getExtensionId(): string {\n return PlatformAuthConstants.MICROSOFT_ENTRA_BROKERID;\n }\n\n getExtensionVersion(): string | undefined {\n return \"\";\n }\n\n getExtensionName(): string | undefined {\n return PlatformAuthConstants.DOM_API_NAME;\n }\n\n /**\n * Send token request to platform broker via browser DOM API\n * @param request\n * @returns\n */\n async sendMessage(\n request: PlatformAuthRequest\n ): Promise {\n this.logger.trace(\n this.platformAuthType + \" - Sending request to browser DOM API\"\n );\n\n try {\n const platformDOMRequest: PlatformDOMTokenRequest =\n this.initializePlatformDOMRequest(request);\n const response: object =\n // @ts-ignore\n await window.navigator.platformAuthentication.executeGetToken(\n platformDOMRequest\n );\n return this.validatePlatformBrokerResponse(response);\n } catch (e) {\n this.logger.error(\n this.platformAuthType + \" - executeGetToken DOM API error\"\n );\n throw e;\n }\n }\n\n private initializePlatformDOMRequest(\n request: PlatformAuthRequest\n ): PlatformDOMTokenRequest {\n this.logger.trace(\n this.platformAuthType + \" - initializeNativeDOMRequest called\"\n );\n\n const {\n accountId,\n clientId,\n authority,\n scope,\n redirectUri,\n correlationId,\n state,\n storeInCache,\n embeddedClientId,\n extraParameters,\n ...remainingProperties\n } = request;\n\n const validExtraParameters: DOMExtraParameters =\n this.getDOMExtraParams(remainingProperties);\n\n const platformDOMRequest: PlatformDOMTokenRequest = {\n accountId: accountId,\n brokerId: this.getExtensionId(),\n authority: authority,\n clientId: clientId,\n correlationId: correlationId || this.correlationId,\n extraParameters: { ...extraParameters, ...validExtraParameters },\n isSecurityTokenService: false,\n redirectUri: redirectUri,\n scope: scope,\n state: state,\n storeInCache: storeInCache,\n embeddedClientId: embeddedClientId,\n };\n\n return platformDOMRequest;\n }\n\n private validatePlatformBrokerResponse(\n response: object\n ): PlatformAuthResponse {\n if (response.hasOwnProperty(\"isSuccess\")) {\n if (\n response.hasOwnProperty(\"accessToken\") &&\n response.hasOwnProperty(\"idToken\") &&\n response.hasOwnProperty(\"clientInfo\") &&\n response.hasOwnProperty(\"account\") &&\n response.hasOwnProperty(\"scopes\") &&\n response.hasOwnProperty(\"expiresIn\")\n ) {\n this.logger.trace(\n this.platformAuthType +\n \" - platform broker returned successful and valid response\"\n );\n return this.convertToPlatformBrokerResponse(\n response as PlatformDOMTokenResponse\n );\n } else if (response.hasOwnProperty(\"error\")) {\n const errorResponse = response as PlatformDOMTokenResponse;\n if (\n errorResponse.isSuccess === false &&\n errorResponse.error &&\n errorResponse.error.code\n ) {\n this.logger.trace(\n this.platformAuthType +\n \" - platform broker returned error response\"\n );\n throw createNativeAuthError(\n errorResponse.error.code,\n errorResponse.error.description,\n {\n error: parseInt(errorResponse.error.errorCode),\n protocol_error: errorResponse.error.protocolError,\n status: errorResponse.error.status,\n properties: errorResponse.error.properties,\n }\n );\n }\n }\n }\n throw createAuthError(\n AuthErrorCodes.unexpectedError,\n \"Response missing expected properties.\"\n );\n }\n\n private convertToPlatformBrokerResponse(\n response: PlatformDOMTokenResponse\n ): PlatformAuthResponse {\n this.logger.trace(\n this.platformAuthType + \" - convertToNativeResponse called\"\n );\n const nativeResponse: PlatformAuthResponse = {\n access_token: response.accessToken,\n id_token: response.idToken,\n client_info: response.clientInfo,\n account: response.account,\n expires_in: response.expiresIn,\n scope: response.scopes,\n state: response.state || \"\",\n properties: response.properties || {},\n extendedLifetimeToken: response.extendedLifetimeToken ?? false,\n shr: response.proofOfPossessionPayload,\n };\n\n return nativeResponse;\n }\n\n private getDOMExtraParams(\n extraParameters: Record\n ): DOMExtraParameters {\n const stringifiedParams = Object.entries(extraParameters).reduce(\n (record, [key, value]) => {\n record[key] = String(value);\n return record;\n },\n {} as StringDict\n );\n\n const validExtraParams: DOMExtraParameters = {\n ...stringifiedParams,\n };\n\n return validExtraParams;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n LoggerOptions,\n IPerformanceClient,\n Logger,\n AuthenticationScheme,\n StubPerformanceClient,\n} from \"@azure/msal-common/browser\";\nimport { name, version } from \"../../packageMetadata.js\";\nimport {\n BrowserConfiguration,\n DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS,\n} from \"../../config/Configuration.js\";\nimport { PlatformAuthExtensionHandler } from \"./PlatformAuthExtensionHandler.js\";\nimport { IPlatformAuthHandler } from \"./IPlatformAuthHandler.js\";\nimport { PlatformAuthDOMHandler } from \"./PlatformAuthDOMHandler.js\";\nimport { createNewGuid } from \"../../crypto/BrowserCrypto.js\";\nimport { BrowserCacheLocation } from \"../../utils/BrowserConstants.js\";\nimport { PLATFORM_AUTH_DOM_SUPPORT } from \"../../cache/CacheKeys.js\";\n\n/**\n * Checks if the platform broker is available in the current environment.\n * @param loggerOptions\n * @param perfClient\n * @returns\n */\nexport async function isPlatformBrokerAvailable(\n loggerOptions?: LoggerOptions,\n perfClient?: IPerformanceClient,\n correlationId?: string\n): Promise {\n const logger = new Logger(loggerOptions || {}, name, version);\n\n logger.trace(\"isPlatformBrokerAvailable called\");\n\n const performanceClient = perfClient || new StubPerformanceClient();\n\n if (typeof window === \"undefined\") {\n logger.trace(\"Non-browser environment detected, returning false\");\n return false;\n }\n\n return !!(await getPlatformAuthProvider(\n logger,\n performanceClient,\n correlationId || createNewGuid()\n ));\n}\n\nexport async function getPlatformAuthProvider(\n logger: Logger,\n performanceClient: IPerformanceClient,\n correlationId: string,\n nativeBrokerHandshakeTimeout?: number\n): Promise {\n logger.trace(\"getPlatformAuthProvider called\", correlationId);\n\n const enablePlatformBrokerDOMSupport = isDomEnabledForPlatformAuth();\n\n logger.trace(\n \"Has client allowed platform auth via DOM API: \" +\n enablePlatformBrokerDOMSupport\n );\n let platformAuthProvider: IPlatformAuthHandler | undefined;\n try {\n if (enablePlatformBrokerDOMSupport) {\n // Check if DOM platform API is supported first\n platformAuthProvider = await PlatformAuthDOMHandler.createProvider(\n logger,\n performanceClient,\n correlationId\n );\n }\n if (!platformAuthProvider) {\n logger.trace(\n \"Platform auth via DOM API not available, checking for extension\"\n );\n /*\n * If DOM APIs are not available, check if browser extension is available.\n * Platform authentication via DOM APIs is preferred over extension APIs.\n */\n platformAuthProvider =\n await PlatformAuthExtensionHandler.createProvider(\n logger,\n nativeBrokerHandshakeTimeout ||\n DEFAULT_NATIVE_BROKER_HANDSHAKE_TIMEOUT_MS,\n performanceClient\n );\n }\n } catch (e) {\n logger.trace(\"Platform auth not available\", e as string);\n }\n return platformAuthProvider;\n}\n\n/**\n * Returns true if the DOM API support for platform auth is enabled in session storage\n * @returns boolean\n * @deprecated\n */\nexport function isDomEnabledForPlatformAuth(): boolean {\n let sessionStorage: Storage | undefined;\n try {\n sessionStorage = window[BrowserCacheLocation.SessionStorage];\n // Mute errors if it's a non-browser environment or cookies are blocked.\n return sessionStorage?.getItem(PLATFORM_AUTH_DOM_SUPPORT) === \"true\";\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Returns boolean indicating whether or not the request should attempt to use native broker\n * @param logger\n * @param config\n * @param platformAuthProvider\n * @param authenticationScheme\n */\nexport function isPlatformAuthAllowed(\n config: BrowserConfiguration,\n logger: Logger,\n platformAuthProvider?: IPlatformAuthHandler,\n authenticationScheme?: AuthenticationScheme\n): boolean {\n logger.trace(\"isPlatformAuthAllowed called\");\n if (!config.system.allowPlatformBroker) {\n logger.trace(\n \"isPlatformAuthAllowed: allowPlatformBroker is not enabled, returning false\"\n );\n // Developer disabled WAM\n return false;\n }\n\n if (!platformAuthProvider) {\n logger.trace(\n \"isPlatformAuthAllowed: Platform auth provider is not initialized, returning false\"\n );\n // Platform broker auth providers are not available\n return false;\n }\n\n if (authenticationScheme) {\n switch (authenticationScheme) {\n case AuthenticationScheme.BEARER:\n case AuthenticationScheme.POP:\n logger.trace(\n \"isPlatformAuthAllowed: authenticationScheme is supported, returning true\"\n );\n return true;\n default:\n logger.trace(\n \"isPlatformAuthAllowed: authenticationScheme is not supported, returning false\"\n );\n return false;\n }\n }\n return true;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AuthorizationCodeClient,\n CommonEndSessionRequest,\n UrlString,\n AuthError,\n OIDC_DEFAULT_SCOPES,\n PerformanceEvents,\n IPerformanceClient,\n Logger,\n ICrypto,\n ProtocolMode,\n ServerResponseType,\n invokeAsync,\n invoke,\n PkceCodes,\n CommonAuthorizationUrlRequest,\n HttpMethod,\n} from \"@azure/msal-common/browser\";\nimport { StandardInteractionClient } from \"./StandardInteractionClient.js\";\nimport { EventType } from \"../event/EventType.js\";\nimport {\n InteractionType,\n ApiId,\n BrowserConstants,\n} from \"../utils/BrowserConstants.js\";\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest.js\";\nimport { NavigationOptions } from \"../navigation/NavigationOptions.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { PopupWindowAttributes } from \"../request/PopupWindowAttributes.js\";\nimport { EventError } from \"../event/EventMessage.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport * as ResponseHandler from \"../response/ResponseHandler.js\";\nimport * as Authorize from \"../protocol/Authorize.js\";\nimport { generatePkceCodes } from \"../crypto/PkceGenerator.js\";\nimport { isPlatformAuthAllowed } from \"../broker/nativeBroker/PlatformAuthProvider.js\";\nimport { generateEarKey } from \"../crypto/BrowserCrypto.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\nimport { validateRequestMethod } from \"../request/RequestHelpers.js\";\n\nexport type PopupParams = {\n popup?: Window | null;\n popupName: string;\n popupWindowAttributes: PopupWindowAttributes;\n popupWindowParent: Window;\n};\n\nexport class PopupClient extends StandardInteractionClient {\n private currentWindow: Window | undefined;\n protected nativeStorage: BrowserCacheManager;\n\n constructor(\n config: BrowserConfiguration,\n storageImpl: BrowserCacheManager,\n browserCrypto: ICrypto,\n logger: Logger,\n eventHandler: EventHandler,\n navigationClient: INavigationClient,\n performanceClient: IPerformanceClient,\n nativeStorageImpl: BrowserCacheManager,\n platformAuthHandler?: IPlatformAuthHandler,\n correlationId?: string\n ) {\n super(\n config,\n storageImpl,\n browserCrypto,\n logger,\n eventHandler,\n navigationClient,\n performanceClient,\n platformAuthHandler,\n correlationId\n );\n // Properly sets this reference for the unload event.\n this.unloadWindow = this.unloadWindow.bind(this);\n this.nativeStorage = nativeStorageImpl;\n this.eventHandler = eventHandler;\n }\n\n /**\n * Acquires tokens by opening a popup window to the /authorize endpoint of the authority\n * @param request\n * @param pkceCodes\n */\n acquireToken(\n request: PopupRequest,\n pkceCodes?: PkceCodes\n ): Promise {\n let popupParams: PopupParams | undefined = undefined;\n try {\n const popupName = this.generatePopupName(\n request.scopes || OIDC_DEFAULT_SCOPES,\n request.authority || this.config.auth.authority\n );\n popupParams = {\n popupName,\n popupWindowAttributes: request.popupWindowAttributes || {},\n popupWindowParent: request.popupWindowParent ?? window,\n };\n\n this.performanceClient.addFields(\n { isAsyncPopup: this.config.system.asyncPopups },\n this.correlationId\n );\n\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\n if (this.config.system.asyncPopups) {\n this.logger.verbose(\"asyncPopups set to true, acquiring token\");\n // Passes on popup position and dimensions if in request\n return this.acquireTokenPopupAsync(\n request,\n popupParams,\n pkceCodes\n );\n } else {\n // Pre-validate request method to avoid opening popup if the request is invalid\n const validatedRequest: PopupRequest = {\n ...request,\n httpMethod: validateRequestMethod(\n request,\n this.config.auth.protocolMode\n ),\n };\n // asyncPopups flag is set to false. Opens popup before acquiring token.\n this.logger.verbose(\n \"asyncPopup set to false, opening popup before acquiring token\"\n );\n popupParams.popup = this.openSizedPopup(\n \"about:blank\",\n popupParams\n );\n return this.acquireTokenPopupAsync(\n validatedRequest,\n popupParams,\n pkceCodes\n );\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n /**\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\n * @param logoutRequest\n */\n logout(logoutRequest?: EndSessionPopupRequest): Promise {\n try {\n this.logger.verbose(\"logoutPopup called\");\n const validLogoutRequest =\n this.initializeLogoutRequest(logoutRequest);\n const popupParams: PopupParams = {\n popupName: this.generateLogoutPopupName(validLogoutRequest),\n popupWindowAttributes:\n logoutRequest?.popupWindowAttributes || {},\n popupWindowParent: logoutRequest?.popupWindowParent ?? window,\n };\n const authority = logoutRequest && logoutRequest.authority;\n const mainWindowRedirectUri =\n logoutRequest && logoutRequest.mainWindowRedirectUri;\n\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\n if (this.config.system.asyncPopups) {\n this.logger.verbose(\"asyncPopups set to true\");\n // Passes on popup position and dimensions if in request\n return this.logoutPopupAsync(\n validLogoutRequest,\n popupParams,\n authority,\n mainWindowRedirectUri\n );\n } else {\n // asyncPopups flag is set to false. Opens popup before logging out.\n this.logger.verbose(\"asyncPopup set to false, opening popup\");\n popupParams.popup = this.openSizedPopup(\n \"about:blank\",\n popupParams\n );\n return this.logoutPopupAsync(\n validLogoutRequest,\n popupParams,\n authority,\n mainWindowRedirectUri\n );\n }\n } catch (e) {\n // Since this function is synchronous we need to reject\n return Promise.reject(e);\n }\n }\n\n /**\n * Helper which obtains an access_token for your API via opening a popup window in the user's browser\n * @param request\n * @param popupParams\n * @param pkceCodes\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n protected async acquireTokenPopupAsync(\n request: PopupRequest,\n popupParams: PopupParams,\n pkceCodes?: PkceCodes\n ): Promise {\n this.logger.verbose(\"acquireTokenPopupAsync called\");\n\n const validRequest = await invokeAsync(\n this.initializeAuthorizationRequest.bind(this),\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(request, InteractionType.Popup);\n\n /*\n * Skip pre-connect for async popups to reduce time between user interaction and popup window creation to avoid\n * popup from being blocked by browsers with shorter popup timers\n */\n if (popupParams.popup) {\n BrowserUtils.preconnect(validRequest.authority);\n }\n\n const isPlatformBroker = isPlatformAuthAllowed(\n this.config,\n this.logger,\n this.platformAuthProvider,\n request.authenticationScheme\n );\n validRequest.platformBroker = isPlatformBroker;\n\n if (this.config.auth.protocolMode === ProtocolMode.EAR) {\n return this.executeEarFlow(validRequest, popupParams);\n } else {\n return this.executeCodeFlow(validRequest, popupParams, pkceCodes);\n }\n }\n\n /**\n * Executes auth code + PKCE flow\n * @param request\n * @param popupParams\n * @param pkceCodes\n * @returns\n */\n async executeCodeFlow(\n request: CommonAuthorizationUrlRequest,\n popupParams: PopupParams,\n pkceCodes?: PkceCodes\n ): Promise {\n const correlationId = request.correlationId;\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.acquireTokenPopup\n );\n\n const pkce =\n pkceCodes ||\n (await invokeAsync(\n generatePkceCodes,\n PerformanceEvents.GeneratePkceCodes,\n this.logger,\n this.performanceClient,\n correlationId\n )(this.performanceClient, this.logger, correlationId));\n\n const popupRequest = {\n ...request,\n codeChallenge: pkce.challenge,\n };\n\n try {\n // Initialize the client\n const authClient: AuthorizationCodeClient = await invokeAsync(\n this.createAuthCodeClient.bind(this),\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.logger,\n this.performanceClient,\n correlationId\n )({\n serverTelemetryManager,\n requestAuthority: popupRequest.authority,\n requestAzureCloudOptions: popupRequest.azureCloudOptions,\n requestExtraQueryParameters: popupRequest.extraQueryParameters,\n account: popupRequest.account,\n });\n\n if (popupRequest.httpMethod === HttpMethod.POST) {\n return await this.executeCodeFlowWithPost(\n popupRequest,\n popupParams,\n authClient,\n pkce.verifier\n );\n } else {\n // Create acquire token url.\n const navigateUrl = await invokeAsync(\n Authorize.getAuthCodeRequestUrl,\n PerformanceEvents.GetAuthCodeUrl,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n this.config,\n authClient.authority,\n popupRequest,\n this.logger,\n this.performanceClient\n );\n\n // Show the UI once the url has been created. Get the window handle for the popup.\n const popupWindow: Window = this.initiateAuthRequest(\n navigateUrl,\n popupParams\n );\n this.eventHandler.emitEvent(\n EventType.POPUP_OPENED,\n InteractionType.Popup,\n { popupWindow },\n null\n );\n\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\n const responseString = await this.monitorPopupForHash(\n popupWindow,\n popupParams.popupWindowParent\n );\n\n const serverParams = invoke(\n ResponseHandler.deserializeResponse,\n PerformanceEvents.DeserializeResponse,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(\n responseString,\n this.config.auth.OIDCOptions.serverResponseType,\n this.logger\n );\n\n return await invokeAsync(\n Authorize.handleResponseCode,\n PerformanceEvents.HandleResponseCode,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n request,\n serverParams,\n pkce.verifier,\n ApiId.acquireTokenPopup,\n this.config,\n authClient,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n } catch (e) {\n // Close the synchronous popup if an error is thrown before the window unload event is registered\n popupParams.popup?.close();\n\n if (e instanceof AuthError) {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n throw e;\n }\n }\n\n /**\n * Executes EAR flow\n * @param request\n */\n async executeEarFlow(\n request: CommonAuthorizationUrlRequest,\n popupParams: PopupParams\n ): Promise {\n const correlationId = request.correlationId;\n // Get the frame handle for the silent request\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n correlationId\n )({\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n\n const earJwk = await invokeAsync(\n generateEarKey,\n PerformanceEvents.GenerateEarKey,\n this.logger,\n this.performanceClient,\n correlationId\n )();\n const popupRequest = {\n ...request,\n earJwk: earJwk,\n };\n const popupWindow =\n popupParams.popup || this.openPopup(\"about:blank\", popupParams);\n\n const form = await Authorize.getEARForm(\n popupWindow.document,\n this.config,\n discoveredAuthority,\n popupRequest,\n this.logger,\n this.performanceClient\n );\n form.submit();\n\n // Monitor the popup for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\n const responseString = await invokeAsync(\n this.monitorPopupForHash.bind(this),\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\n this.logger,\n this.performanceClient,\n correlationId\n )(popupWindow, popupParams.popupWindowParent);\n\n const serverParams = invoke(\n ResponseHandler.deserializeResponse,\n PerformanceEvents.DeserializeResponse,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(\n responseString,\n this.config.auth.OIDCOptions.serverResponseType,\n this.logger\n );\n\n return invokeAsync(\n Authorize.handleResponseEAR,\n PerformanceEvents.HandleResponseEar,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n popupRequest,\n serverParams,\n ApiId.acquireTokenPopup,\n this.config,\n discoveredAuthority,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n\n async executeCodeFlowWithPost(\n request: CommonAuthorizationUrlRequest,\n popupParams: PopupParams,\n authClient: AuthorizationCodeClient,\n pkceVerifier: string\n ): Promise {\n const correlationId = request.correlationId;\n // Get the frame handle for the silent request\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n correlationId\n )({\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n\n const popupWindow =\n popupParams.popup || this.openPopup(\"about:blank\", popupParams);\n\n const form = await Authorize.getCodeForm(\n popupWindow.document,\n this.config,\n discoveredAuthority,\n request,\n this.logger,\n this.performanceClient\n );\n\n form.submit();\n\n // Monitor the popup for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\n const responseString = await invokeAsync(\n this.monitorPopupForHash.bind(this),\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\n this.logger,\n this.performanceClient,\n correlationId\n )(popupWindow, popupParams.popupWindowParent);\n\n const serverParams = invoke(\n ResponseHandler.deserializeResponse,\n PerformanceEvents.DeserializeResponse,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(\n responseString,\n this.config.auth.OIDCOptions.serverResponseType,\n this.logger\n );\n\n return invokeAsync(\n Authorize.handleResponseCode,\n PerformanceEvents.HandleResponseCode,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n request,\n serverParams,\n pkceVerifier,\n ApiId.acquireTokenPopup,\n this.config,\n authClient,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n\n /**\n *\n * @param validRequest\n * @param popupName\n * @param requestAuthority\n * @param popup\n * @param mainWindowRedirectUri\n * @param popupWindowAttributes\n */\n protected async logoutPopupAsync(\n validRequest: CommonEndSessionRequest,\n popupParams: PopupParams,\n requestAuthority?: string,\n mainWindowRedirectUri?: string\n ): Promise {\n this.logger.verbose(\"logoutPopupAsync called\");\n this.eventHandler.emitEvent(\n EventType.LOGOUT_START,\n InteractionType.Popup,\n validRequest\n );\n\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.logoutPopup\n );\n\n try {\n // Clear cache on logout\n await this.clearCacheOnLogout(\n this.correlationId,\n validRequest.account\n );\n\n // Initialize the client\n const authClient = await invokeAsync(\n this.createAuthCodeClient.bind(this),\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({\n serverTelemetryManager,\n requestAuthority: requestAuthority,\n account: validRequest.account || undefined,\n });\n\n try {\n authClient.authority.endSessionEndpoint;\n } catch {\n if (\n validRequest.account?.homeAccountId &&\n validRequest.postLogoutRedirectUri &&\n authClient.authority.protocolMode === ProtocolMode.OIDC\n ) {\n this.eventHandler.emitEvent(\n EventType.LOGOUT_SUCCESS,\n InteractionType.Popup,\n validRequest\n );\n\n if (mainWindowRedirectUri) {\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.logoutPopup,\n timeout:\n this.config.system.redirectNavigationTimeout,\n noHistory: false,\n };\n const absoluteUrl = UrlString.getAbsoluteUrl(\n mainWindowRedirectUri,\n BrowserUtils.getCurrentUri()\n );\n await this.navigationClient.navigateInternal(\n absoluteUrl,\n navigationOptions\n );\n }\n\n popupParams.popup?.close();\n\n return;\n }\n }\n\n // Create logout string and navigate user window to logout.\n const logoutUri: string = authClient.getLogoutUri(validRequest);\n\n this.eventHandler.emitEvent(\n EventType.LOGOUT_SUCCESS,\n InteractionType.Popup,\n validRequest\n );\n\n // Open the popup window to requestUrl.\n const popupWindow = this.openPopup(logoutUri, popupParams);\n this.eventHandler.emitEvent(\n EventType.POPUP_OPENED,\n InteractionType.Popup,\n { popupWindow },\n null\n );\n\n await this.monitorPopupForHash(\n popupWindow,\n popupParams.popupWindowParent\n ).catch(() => {\n // Swallow any errors related to monitoring the window. Server logout is best effort\n });\n\n if (mainWindowRedirectUri) {\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.logoutPopup,\n timeout: this.config.system.redirectNavigationTimeout,\n noHistory: false,\n };\n const absoluteUrl = UrlString.getAbsoluteUrl(\n mainWindowRedirectUri,\n BrowserUtils.getCurrentUri()\n );\n\n this.logger.verbose(\n \"Redirecting main window to url specified in the request\"\n );\n this.logger.verbosePii(\n `Redirecting main window to: ${absoluteUrl}`\n );\n await this.navigationClient.navigateInternal(\n absoluteUrl,\n navigationOptions\n );\n } else {\n this.logger.verbose(\"No main window navigation requested\");\n }\n } catch (e) {\n // Close the synchronous popup if an error is thrown before the window unload event is registered\n popupParams.popup?.close();\n\n if (e instanceof AuthError) {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n this.eventHandler.emitEvent(\n EventType.LOGOUT_FAILURE,\n InteractionType.Popup,\n null,\n e as EventError\n );\n this.eventHandler.emitEvent(\n EventType.LOGOUT_END,\n InteractionType.Popup\n );\n throw e;\n }\n\n this.eventHandler.emitEvent(\n EventType.LOGOUT_END,\n InteractionType.Popup\n );\n }\n\n /**\n * Opens a popup window with given request Url.\n * @param requestUrl\n */\n initiateAuthRequest(requestUrl: string, params: PopupParams): Window {\n // Check that request url is not empty.\n if (requestUrl) {\n this.logger.infoPii(`Navigate to: ${requestUrl}`);\n // Open the popup window to requestUrl.\n return this.openPopup(requestUrl, params);\n } else {\n // Throw error if request URL is empty.\n this.logger.error(\"Navigate url is empty\");\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.emptyNavigateUri\n );\n }\n }\n\n /**\n * Monitors a window until it loads a url with the same origin.\n * @param popupWindow - window that is being monitored\n * @param timeout - timeout for processing hash once popup is redirected back to application\n */\n monitorPopupForHash(\n popupWindow: Window,\n popupWindowParent: Window\n ): Promise {\n return new Promise((resolve, reject) => {\n this.logger.verbose(\n \"PopupHandler.monitorPopupForHash - polling started\"\n );\n\n const intervalId = setInterval(() => {\n // Window is closed\n if (popupWindow.closed) {\n this.logger.error(\n \"PopupHandler.monitorPopupForHash - window closed\"\n );\n clearInterval(intervalId);\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.userCancelled\n )\n );\n return;\n }\n\n let href = \"\";\n try {\n /*\n * Will throw if cross origin,\n * which should be caught and ignored\n * since we need the interval to keep running while on STS UI.\n */\n href = popupWindow.location.href;\n } catch (e) {}\n\n // Don't process blank pages or cross domain\n if (!href || href === \"about:blank\") {\n return;\n }\n clearInterval(intervalId);\n\n let responseString = \"\";\n const responseType =\n this.config.auth.OIDCOptions.serverResponseType;\n if (popupWindow) {\n if (responseType === ServerResponseType.QUERY) {\n responseString = popupWindow.location.search;\n } else {\n responseString = popupWindow.location.hash;\n }\n }\n\n this.logger.verbose(\n \"PopupHandler.monitorPopupForHash - popup window is on same origin as caller\"\n );\n\n resolve(responseString);\n }, this.config.system.pollIntervalMilliseconds);\n }).finally(() => {\n this.cleanPopup(popupWindow, popupWindowParent);\n });\n }\n\n /**\n * @hidden\n *\n * Configures popup window for login.\n *\n * @param urlNavigate\n * @param title\n * @param popUpWidth\n * @param popUpHeight\n * @param popupWindowAttributes\n * @ignore\n * @hidden\n */\n openPopup(urlNavigate: string, popupParams: PopupParams): Window {\n try {\n let popupWindow;\n // Popup window passed in, setting url to navigate to\n if (popupParams.popup) {\n popupWindow = popupParams.popup;\n this.logger.verbosePii(\n `Navigating popup window to: ${urlNavigate}`\n );\n popupWindow.location.assign(urlNavigate);\n } else if (typeof popupParams.popup === \"undefined\") {\n // Popup will be undefined if it was not passed in\n this.logger.verbosePii(\n `Opening popup window to: ${urlNavigate}`\n );\n popupWindow = this.openSizedPopup(urlNavigate, popupParams);\n }\n\n // Popup will be null if popups are blocked\n if (!popupWindow) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.emptyWindowError\n );\n }\n if (popupWindow.focus) {\n popupWindow.focus();\n }\n this.currentWindow = popupWindow;\n popupParams.popupWindowParent.addEventListener(\n \"beforeunload\",\n this.unloadWindow\n );\n\n return popupWindow;\n } catch (e) {\n this.logger.error(\n \"error opening popup \" + (e as AuthError).message\n );\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.popupWindowError\n );\n }\n }\n\n /**\n * Helper function to set popup window dimensions and position\n * @param urlNavigate\n * @param popupName\n * @param popupWindowAttributes\n * @returns\n */\n openSizedPopup(\n urlNavigate: string,\n { popupName, popupWindowAttributes, popupWindowParent }: PopupParams\n ): Window | null {\n /**\n * adding winLeft and winTop to account for dual monitor\n * using screenLeft and screenTop for IE8 and earlier\n */\n const winLeft = popupWindowParent.screenLeft\n ? popupWindowParent.screenLeft\n : popupWindowParent.screenX;\n const winTop = popupWindowParent.screenTop\n ? popupWindowParent.screenTop\n : popupWindowParent.screenY;\n /**\n * window.innerWidth displays browser window\"s height and width excluding toolbars\n * using document.documentElement.clientWidth for IE8 and earlier\n */\n const winWidth =\n popupWindowParent.innerWidth ||\n document.documentElement.clientWidth ||\n document.body.clientWidth;\n const winHeight =\n popupWindowParent.innerHeight ||\n document.documentElement.clientHeight ||\n document.body.clientHeight;\n\n let width = popupWindowAttributes.popupSize?.width;\n let height = popupWindowAttributes.popupSize?.height;\n let top = popupWindowAttributes.popupPosition?.top;\n let left = popupWindowAttributes.popupPosition?.left;\n\n if (!width || width < 0 || width > winWidth) {\n this.logger.verbose(\n \"Default popup window width used. Window width not configured or invalid.\"\n );\n width = BrowserConstants.POPUP_WIDTH;\n }\n\n if (!height || height < 0 || height > winHeight) {\n this.logger.verbose(\n \"Default popup window height used. Window height not configured or invalid.\"\n );\n height = BrowserConstants.POPUP_HEIGHT;\n }\n\n if (!top || top < 0 || top > winHeight) {\n this.logger.verbose(\n \"Default popup window top position used. Window top not configured or invalid.\"\n );\n top = Math.max(\n 0,\n winHeight / 2 - BrowserConstants.POPUP_HEIGHT / 2 + winTop\n );\n }\n\n if (!left || left < 0 || left > winWidth) {\n this.logger.verbose(\n \"Default popup window left position used. Window left not configured or invalid.\"\n );\n left = Math.max(\n 0,\n winWidth / 2 - BrowserConstants.POPUP_WIDTH / 2 + winLeft\n );\n }\n\n return popupWindowParent.open(\n urlNavigate,\n popupName,\n `width=${width}, height=${height}, top=${top}, left=${left}, scrollbars=yes`\n );\n }\n\n /**\n * Event callback to unload main window.\n */\n unloadWindow(e: Event): void {\n if (this.currentWindow) {\n this.currentWindow.close();\n }\n // Guarantees browser unload will happen, so no other errors will be thrown.\n e.preventDefault();\n }\n\n /**\n * Closes popup, removes any state vars created during popup calls.\n * @param popupWindow\n */\n cleanPopup(popupWindow: Window, popupWindowParent: Window): void {\n // Close window.\n popupWindow.close();\n\n // Remove window unload function\n popupWindowParent.removeEventListener(\n \"beforeunload\",\n this.unloadWindow\n );\n }\n\n /**\n * Generates the name for the popup based on the client id and request\n * @param clientId\n * @param request\n */\n generatePopupName(scopes: Array, authority: string): string {\n return `${BrowserConstants.POPUP_NAME_PREFIX}.${\n this.config.auth.clientId\n }.${scopes.join(\"-\")}.${authority}.${this.correlationId}`;\n }\n\n /**\n * Generates the name for the popup based on the client id and request for logouts\n * @param clientId\n * @param request\n */\n generateLogoutPopupName(request: CommonEndSessionRequest): string {\n const homeAccountId = request.account && request.account.homeAccountId;\n return `${BrowserConstants.POPUP_NAME_PREFIX}.${this.config.auth.clientId}.${homeAccountId}.${this.correlationId}`;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AuthorizationCodeClient,\n UrlString,\n AuthError,\n ServerTelemetryManager,\n Constants,\n AuthorizeResponse,\n ICrypto,\n Logger,\n IPerformanceClient,\n PerformanceEvents,\n ProtocolMode,\n invokeAsync,\n ServerResponseType,\n UrlUtils,\n InProgressPerformanceEvent,\n CommonAuthorizationUrlRequest,\n HttpMethod,\n} from \"@azure/msal-common/browser\";\nimport { StandardInteractionClient } from \"./StandardInteractionClient.js\";\nimport {\n ApiId,\n INTERACTION_TYPE,\n InteractionType,\n TemporaryCacheKeys,\n} from \"../utils/BrowserConstants.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { EventType } from \"../event/EventType.js\";\nimport { NavigationOptions } from \"../navigation/NavigationOptions.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { EventError } from \"../event/EventMessage.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport * as ResponseHandler from \"../response/ResponseHandler.js\";\nimport * as Authorize from \"../protocol/Authorize.js\";\nimport { generatePkceCodes } from \"../crypto/PkceGenerator.js\";\nimport { isPlatformAuthAllowed } from \"../broker/nativeBroker/PlatformAuthProvider.js\";\nimport { generateEarKey } from \"../crypto/BrowserCrypto.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\n\nfunction getNavigationType(): NavigationTimingType | undefined {\n if (\n typeof window === \"undefined\" ||\n typeof window.performance === \"undefined\" ||\n typeof window.performance.getEntriesByType !== \"function\"\n ) {\n return undefined;\n }\n\n const navigationEntries = window.performance.getEntriesByType(\"navigation\");\n const navigation = navigationEntries.length\n ? (navigationEntries[0] as PerformanceNavigationTiming)\n : undefined;\n return navigation?.type;\n}\n\nexport class RedirectClient extends StandardInteractionClient {\n protected nativeStorage: BrowserCacheManager;\n\n constructor(\n config: BrowserConfiguration,\n storageImpl: BrowserCacheManager,\n browserCrypto: ICrypto,\n logger: Logger,\n eventHandler: EventHandler,\n navigationClient: INavigationClient,\n performanceClient: IPerformanceClient,\n nativeStorageImpl: BrowserCacheManager,\n platformAuthHandler?: IPlatformAuthHandler,\n correlationId?: string\n ) {\n super(\n config,\n storageImpl,\n browserCrypto,\n logger,\n eventHandler,\n navigationClient,\n performanceClient,\n platformAuthHandler,\n correlationId\n );\n this.nativeStorage = nativeStorageImpl;\n }\n\n /**\n * Redirects the page to the /authorize endpoint of the IDP\n * @param request\n */\n async acquireToken(request: RedirectRequest): Promise {\n const validRequest = await invokeAsync(\n this.initializeAuthorizationRequest.bind(this),\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(request, InteractionType.Redirect);\n\n validRequest.platformBroker = isPlatformAuthAllowed(\n this.config,\n this.logger,\n this.platformAuthProvider,\n request.authenticationScheme\n );\n\n const handleBackButton = (event: PageTransitionEvent) => {\n // Clear temporary cache if the back button is clicked during the redirect flow.\n if (event.persisted) {\n this.logger.verbose(\n \"Page was restored from back/forward cache. Clearing temporary cache.\"\n );\n this.browserStorage.resetRequestCache();\n this.eventHandler.emitEvent(\n EventType.RESTORE_FROM_BFCACHE,\n InteractionType.Redirect\n );\n }\n };\n\n const redirectStartPage = this.getRedirectStartPage(\n request.redirectStartPage\n );\n this.logger.verbosePii(`Redirect start page: ${redirectStartPage}`);\n // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true\n this.browserStorage.setTemporaryCache(\n TemporaryCacheKeys.ORIGIN_URI,\n redirectStartPage,\n true\n );\n\n // Clear temporary cache if the back button is clicked during the redirect flow.\n window.addEventListener(\"pageshow\", handleBackButton);\n\n try {\n if (this.config.auth.protocolMode === ProtocolMode.EAR) {\n await this.executeEarFlow(validRequest);\n } else {\n await this.executeCodeFlow(\n validRequest,\n request.onRedirectNavigate\n );\n }\n } catch (e) {\n if (e instanceof AuthError) {\n e.setCorrelationId(this.correlationId);\n }\n window.removeEventListener(\"pageshow\", handleBackButton);\n throw e;\n }\n }\n\n /**\n * Executes auth code + PKCE flow\n * @param request\n * @returns\n */\n async executeCodeFlow(\n request: CommonAuthorizationUrlRequest,\n onRedirectNavigate?: (url: string) => boolean | void\n ): Promise {\n const correlationId = request.correlationId;\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.acquireTokenRedirect\n );\n\n const pkceCodes = await invokeAsync(\n generatePkceCodes,\n PerformanceEvents.GeneratePkceCodes,\n this.logger,\n this.performanceClient,\n correlationId\n )(this.performanceClient, this.logger, correlationId);\n\n const redirectRequest = {\n ...request,\n codeChallenge: pkceCodes.challenge,\n };\n\n this.browserStorage.cacheAuthorizeRequest(\n redirectRequest,\n pkceCodes.verifier\n );\n\n try {\n if (redirectRequest.httpMethod === HttpMethod.POST) {\n return await this.executeCodeFlowWithPost(redirectRequest);\n } else {\n // Initialize the client\n const authClient: AuthorizationCodeClient = await invokeAsync(\n this.createAuthCodeClient.bind(this),\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({\n serverTelemetryManager,\n requestAuthority: redirectRequest.authority,\n requestAzureCloudOptions: redirectRequest.azureCloudOptions,\n requestExtraQueryParameters:\n redirectRequest.extraQueryParameters,\n account: redirectRequest.account,\n });\n\n // Create acquire token url.\n const navigateUrl = await invokeAsync(\n Authorize.getAuthCodeRequestUrl,\n PerformanceEvents.GetAuthCodeUrl,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n this.config,\n authClient.authority,\n redirectRequest,\n this.logger,\n this.performanceClient\n );\n // Show the UI once the url has been created. Response will come back in the hash, which will be handled in the handleRedirectCallback function.\n return await this.initiateAuthRequest(\n navigateUrl,\n onRedirectNavigate\n );\n }\n } catch (e) {\n if (e instanceof AuthError) {\n e.setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n throw e;\n }\n }\n\n /**\n * Executes EAR flow\n * @param request\n */\n async executeEarFlow(\n request: CommonAuthorizationUrlRequest\n ): Promise {\n const correlationId = request.correlationId;\n // Get the frame handle for the silent request\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n correlationId\n )({\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n\n const earJwk = await invokeAsync(\n generateEarKey,\n PerformanceEvents.GenerateEarKey,\n this.logger,\n this.performanceClient,\n correlationId\n )();\n const redirectRequest = {\n ...request,\n earJwk: earJwk,\n };\n this.browserStorage.cacheAuthorizeRequest(redirectRequest);\n\n const form = await Authorize.getEARForm(\n document,\n this.config,\n discoveredAuthority,\n redirectRequest,\n this.logger,\n this.performanceClient\n );\n form.submit();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.timedOut,\n \"failed_to_redirect\"\n )\n );\n }, this.config.system.redirectNavigationTimeout);\n });\n }\n\n /**\n * Executes classic Authorization Code flow with a POST request.\n * @param request\n */\n async executeCodeFlowWithPost(\n request: CommonAuthorizationUrlRequest\n ): Promise {\n const correlationId = request.correlationId;\n // Get the frame handle for the silent request\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n correlationId\n )({\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n\n this.browserStorage.cacheAuthorizeRequest(request);\n\n const form = await Authorize.getCodeForm(\n document,\n this.config,\n discoveredAuthority,\n request,\n this.logger,\n this.performanceClient\n );\n\n form.submit();\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.timedOut,\n \"failed_to_redirect\"\n )\n );\n }, this.config.system.redirectNavigationTimeout);\n });\n }\n\n /**\n * Checks if navigateToLoginRequestUrl is set, and:\n * - if true, performs logic to cache and navigate\n * - if false, handles hash string and parses response\n * @param hash {string} url hash\n * @param parentMeasurement {InProgressPerformanceEvent} parent measurement\n */\n async handleRedirectPromise(\n hash: string = \"\",\n request: CommonAuthorizationUrlRequest,\n pkceVerifier: string,\n parentMeasurement: InProgressPerformanceEvent\n ): Promise {\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.handleRedirectPromise\n );\n\n try {\n const [serverParams, responseString] = this.getRedirectResponse(\n hash || \"\"\n );\n if (!serverParams) {\n // Not a recognized server response hash or hash not associated with a redirect request\n this.logger.info(\n \"handleRedirectPromise did not detect a response as a result of a redirect. Cleaning temporary cache.\"\n );\n this.browserStorage.resetRequestCache();\n\n // Do not instrument \"no_server_response\" if user clicked back button\n if (getNavigationType() !== \"back_forward\") {\n parentMeasurement.event.errorCode = \"no_server_response\";\n } else {\n this.logger.verbose(\n \"Back navigation event detected. Muting no_server_response error\"\n );\n }\n return null;\n }\n\n // If navigateToLoginRequestUrl is true, get the url where the redirect request was initiated\n const loginRequestUrl =\n this.browserStorage.getTemporaryCache(\n TemporaryCacheKeys.ORIGIN_URI,\n true\n ) || Constants.EMPTY_STRING;\n const loginRequestUrlNormalized =\n UrlString.removeHashFromUrl(loginRequestUrl);\n const currentUrlNormalized = UrlString.removeHashFromUrl(\n window.location.href\n );\n\n if (\n loginRequestUrlNormalized === currentUrlNormalized &&\n this.config.auth.navigateToLoginRequestUrl\n ) {\n // We are on the page we need to navigate to - handle hash\n this.logger.verbose(\n \"Current page is loginRequestUrl, handling response\"\n );\n\n if (loginRequestUrl.indexOf(\"#\") > -1) {\n // Replace current hash with non-msal hash, if present\n BrowserUtils.replaceHash(loginRequestUrl);\n }\n\n const handleHashResult = await this.handleResponse(\n serverParams,\n request,\n pkceVerifier,\n serverTelemetryManager\n );\n\n return handleHashResult;\n } else if (!this.config.auth.navigateToLoginRequestUrl) {\n this.logger.verbose(\n \"NavigateToLoginRequestUrl set to false, handling response\"\n );\n return await this.handleResponse(\n serverParams,\n request,\n pkceVerifier,\n serverTelemetryManager\n );\n } else if (\n !BrowserUtils.isInIframe() ||\n this.config.system.allowRedirectInIframe\n ) {\n /*\n * Returned from authority using redirect - need to perform navigation before processing response\n * Cache the hash to be retrieved after the next redirect\n */\n this.browserStorage.setTemporaryCache(\n TemporaryCacheKeys.URL_HASH,\n responseString,\n true\n );\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.handleRedirectPromise,\n timeout: this.config.system.redirectNavigationTimeout,\n noHistory: true,\n };\n\n /**\n * Default behavior is to redirect to the start page and not process the hash now.\n * The start page is expected to also call handleRedirectPromise which will process the hash in one of the checks above.\n */\n let processHashOnRedirect: boolean = true;\n if (!loginRequestUrl || loginRequestUrl === \"null\") {\n // Redirect to home page if login request url is null (real null or the string null)\n const homepage = BrowserUtils.getHomepage();\n // Cache the homepage under ORIGIN_URI to ensure cached hash is processed on homepage\n this.browserStorage.setTemporaryCache(\n TemporaryCacheKeys.ORIGIN_URI,\n homepage,\n true\n );\n this.logger.warning(\n \"Unable to get valid login request url from cache, redirecting to home page\"\n );\n processHashOnRedirect =\n await this.navigationClient.navigateInternal(\n homepage,\n navigationOptions\n );\n } else {\n // Navigate to page that initiated the redirect request\n this.logger.verbose(\n `Navigating to loginRequestUrl: ${loginRequestUrl}`\n );\n processHashOnRedirect =\n await this.navigationClient.navigateInternal(\n loginRequestUrl,\n navigationOptions\n );\n }\n\n // If navigateInternal implementation returns false, handle the hash now\n if (!processHashOnRedirect) {\n return await this.handleResponse(\n serverParams,\n request,\n pkceVerifier,\n serverTelemetryManager\n );\n }\n }\n\n return null;\n } catch (e) {\n if (e instanceof AuthError) {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n throw e;\n }\n }\n\n /**\n * Gets the response hash for a redirect request\n * Returns null if interactionType in the state value is not \"redirect\" or the hash does not contain known properties\n * @param hash\n */\n protected getRedirectResponse(\n userProvidedResponse: string\n ): [AuthorizeResponse | null, string] {\n this.logger.verbose(\"getRedirectResponseHash called\");\n // Get current location hash from window or cache.\n let responseString = userProvidedResponse;\n if (!responseString) {\n if (\n this.config.auth.OIDCOptions.serverResponseType ===\n ServerResponseType.QUERY\n ) {\n responseString = window.location.search;\n } else {\n responseString = window.location.hash;\n }\n }\n let response = UrlUtils.getDeserializedResponse(responseString);\n\n if (response) {\n try {\n ResponseHandler.validateInteractionType(\n response,\n this.browserCrypto,\n InteractionType.Redirect\n );\n } catch (e) {\n if (e instanceof AuthError) {\n this.logger.error(\n `Interaction type validation failed due to ${e.errorCode}: ${e.errorMessage}`\n );\n }\n return [null, \"\"];\n }\n\n BrowserUtils.clearHash(window);\n this.logger.verbose(\n \"Hash contains known properties, returning response hash\"\n );\n return [response, responseString];\n }\n\n const cachedHash = this.browserStorage.getTemporaryCache(\n TemporaryCacheKeys.URL_HASH,\n true\n );\n this.browserStorage.removeItem(\n this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH)\n );\n\n if (cachedHash) {\n response = UrlUtils.getDeserializedResponse(cachedHash);\n if (response) {\n this.logger.verbose(\n \"Hash does not contain known properties, returning cached hash\"\n );\n return [response, cachedHash];\n }\n }\n\n return [null, \"\"];\n }\n\n /**\n * Checks if hash exists and handles in window.\n * @param hash\n * @param state\n */\n protected async handleResponse(\n serverParams: AuthorizeResponse,\n request: CommonAuthorizationUrlRequest,\n codeVerifier: string,\n serverTelemetryManager: ServerTelemetryManager\n ): Promise {\n const state = serverParams.state;\n if (!state) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.noStateInHash);\n }\n\n if (serverParams.ear_jwe) {\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n request.correlationId\n )({\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n return invokeAsync(\n Authorize.handleResponseEAR,\n PerformanceEvents.HandleResponseEar,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n request,\n serverParams,\n ApiId.acquireTokenRedirect,\n this.config,\n discoveredAuthority,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n\n const authClient = await invokeAsync(\n this.createAuthCodeClient.bind(this),\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({ serverTelemetryManager, requestAuthority: request.authority });\n return invokeAsync(\n Authorize.handleResponseCode,\n PerformanceEvents.HandleResponseCode,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n request,\n serverParams,\n codeVerifier,\n ApiId.acquireTokenRedirect,\n this.config,\n authClient,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n\n /**\n * Redirects window to given URL.\n * @param urlNavigate\n * @param onRedirectNavigateRequest - onRedirectNavigate callback provided on the request\n */\n async initiateAuthRequest(\n requestUrl: string,\n onRedirectNavigateRequest?: (url: string) => boolean | void\n ): Promise {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest called\");\n // Navigate if valid URL\n if (requestUrl) {\n this.logger.infoPii(\n `RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`\n );\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.acquireTokenRedirect,\n timeout: this.config.system.redirectNavigationTimeout,\n noHistory: false,\n };\n\n const onRedirectNavigate =\n onRedirectNavigateRequest ||\n this.config.auth.onRedirectNavigate;\n\n // If onRedirectNavigate is implemented, invoke it and provide requestUrl\n if (typeof onRedirectNavigate === \"function\") {\n this.logger.verbose(\n \"RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback\"\n );\n const navigate = onRedirectNavigate(requestUrl);\n\n // Returning false from onRedirectNavigate will stop navigation\n if (navigate !== false) {\n this.logger.verbose(\n \"RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating\"\n );\n await this.navigationClient.navigateExternal(\n requestUrl,\n navigationOptions\n );\n return;\n } else {\n this.logger.verbose(\n \"RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation\"\n );\n return;\n }\n } else {\n // Navigate window to request URL\n this.logger.verbose(\n \"RedirectHandler.initiateAuthRequest: Navigating window to navigate url\"\n );\n await this.navigationClient.navigateExternal(\n requestUrl,\n navigationOptions\n );\n return;\n }\n } else {\n // Throw error if request URL is empty.\n this.logger.info(\n \"RedirectHandler.initiateAuthRequest: Navigate url is empty\"\n );\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.emptyNavigateUri\n );\n }\n }\n\n /**\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\n * Default behaviour is to redirect the user to `window.location.href`.\n * @param logoutRequest\n */\n async logout(logoutRequest?: EndSessionRequest): Promise {\n this.logger.verbose(\"logoutRedirect called\");\n const validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.logout\n );\n\n try {\n this.eventHandler.emitEvent(\n EventType.LOGOUT_START,\n InteractionType.Redirect,\n logoutRequest\n );\n\n // Clear cache on logout\n await this.clearCacheOnLogout(\n this.correlationId,\n validLogoutRequest.account\n );\n\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.logout,\n timeout: this.config.system.redirectNavigationTimeout,\n noHistory: false,\n };\n\n const authClient = await invokeAsync(\n this.createAuthCodeClient.bind(this),\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({\n serverTelemetryManager,\n requestAuthority: logoutRequest && logoutRequest.authority,\n requestExtraQueryParameters:\n logoutRequest?.extraQueryParameters,\n account: (logoutRequest && logoutRequest.account) || undefined,\n });\n\n if (authClient.authority.protocolMode === ProtocolMode.OIDC) {\n try {\n authClient.authority.endSessionEndpoint;\n } catch {\n if (validLogoutRequest.account?.homeAccountId) {\n this.eventHandler.emitEvent(\n EventType.LOGOUT_SUCCESS,\n InteractionType.Redirect,\n validLogoutRequest\n );\n\n return;\n }\n }\n }\n\n // Create logout string and navigate user window to logout.\n const logoutUri: string =\n authClient.getLogoutUri(validLogoutRequest);\n\n this.eventHandler.emitEvent(\n EventType.LOGOUT_SUCCESS,\n InteractionType.Redirect,\n validLogoutRequest\n );\n // Check if onRedirectNavigate is implemented, and invoke it if so\n if (\n logoutRequest &&\n typeof logoutRequest.onRedirectNavigate === \"function\"\n ) {\n const navigate = logoutRequest.onRedirectNavigate(logoutUri);\n\n if (navigate !== false) {\n this.logger.verbose(\n \"Logout onRedirectNavigate did not return false, navigating\"\n );\n // Ensure interaction is in progress\n if (!this.browserStorage.getInteractionInProgress()) {\n this.browserStorage.setInteractionInProgress(\n true,\n INTERACTION_TYPE.SIGNOUT\n );\n }\n await this.navigationClient.navigateExternal(\n logoutUri,\n navigationOptions\n );\n return;\n } else {\n // Ensure interaction is not in progress\n this.browserStorage.setInteractionInProgress(false);\n this.logger.verbose(\n \"Logout onRedirectNavigate returned false, stopping navigation\"\n );\n }\n } else {\n // Ensure interaction is in progress\n if (!this.browserStorage.getInteractionInProgress()) {\n this.browserStorage.setInteractionInProgress(\n true,\n INTERACTION_TYPE.SIGNOUT\n );\n }\n await this.navigationClient.navigateExternal(\n logoutUri,\n navigationOptions\n );\n return;\n }\n } catch (e) {\n if (e instanceof AuthError) {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n this.eventHandler.emitEvent(\n EventType.LOGOUT_FAILURE,\n InteractionType.Redirect,\n null,\n e as EventError\n );\n this.eventHandler.emitEvent(\n EventType.LOGOUT_END,\n InteractionType.Redirect\n );\n throw e;\n }\n\n this.eventHandler.emitEvent(\n EventType.LOGOUT_END,\n InteractionType.Redirect\n );\n }\n\n /**\n * Use to get the redirectStartPage either from request or use current window\n * @param requestStartPage\n */\n protected getRedirectStartPage(requestStartPage?: string): string {\n const redirectStartPage = requestStartPage || window.location.href;\n return UrlString.getAbsoluteUrl(\n redirectStartPage,\n BrowserUtils.getCurrentUri()\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n Logger,\n IPerformanceClient,\n PerformanceEvents,\n invokeAsync,\n invoke,\n ServerResponseType,\n Authority,\n CommonAuthorizationUrlRequest,\n} from \"@azure/msal-common/browser\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport {\n BrowserConfiguration,\n DEFAULT_IFRAME_TIMEOUT_MS,\n} from \"../config/Configuration.js\";\nimport { getCodeForm, getEARForm } from \"../protocol/Authorize.js\";\n\n/**\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\n * @param urlNavigate\n * @param userRequestScopes\n */\nexport async function initiateCodeRequest(\n requestUrl: string,\n performanceClient: IPerformanceClient,\n logger: Logger,\n correlationId: string,\n navigateFrameWait?: number\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentHandlerInitiateAuthRequest,\n correlationId\n );\n\n if (!requestUrl) {\n // Throw error if request URL is empty.\n logger.info(\"Navigate url is empty\");\n throw createBrowserAuthError(BrowserAuthErrorCodes.emptyNavigateUri);\n }\n if (navigateFrameWait) {\n return invokeAsync(\n loadFrame,\n PerformanceEvents.SilentHandlerLoadFrame,\n logger,\n performanceClient,\n correlationId\n )(requestUrl, navigateFrameWait, performanceClient, correlationId);\n }\n return invoke(\n loadFrameSync,\n PerformanceEvents.SilentHandlerLoadFrameSync,\n logger,\n performanceClient,\n correlationId\n )(requestUrl);\n}\n\nexport async function initiateCodeFlowWithPost(\n config: BrowserConfiguration,\n authority: Authority,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n): Promise {\n const frame = createHiddenIframe();\n if (!frame.contentDocument) {\n throw \"No document associated with iframe!\";\n }\n const form = await getCodeForm(\n frame.contentDocument,\n config,\n authority,\n request,\n logger,\n performanceClient\n );\n form.submit();\n return frame;\n}\n\nexport async function initiateEarRequest(\n config: BrowserConfiguration,\n authority: Authority,\n request: CommonAuthorizationUrlRequest,\n logger: Logger,\n performanceClient: IPerformanceClient\n): Promise {\n const frame = createHiddenIframe();\n if (!frame.contentDocument) {\n throw \"No document associated with iframe!\";\n }\n const form = await getEARForm(\n frame.contentDocument,\n config,\n authority,\n request,\n logger,\n performanceClient\n );\n form.submit();\n return frame;\n}\n\n/**\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\n * @param iframe\n * @param timeout\n */\nexport async function monitorIframeForHash(\n iframe: HTMLIFrameElement,\n timeout: number,\n pollIntervalMilliseconds: number,\n performanceClient: IPerformanceClient,\n logger: Logger,\n correlationId: string,\n responseType: ServerResponseType\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\n correlationId\n );\n\n return new Promise((resolve, reject) => {\n if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {\n logger.warning(\n `system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`\n );\n }\n\n /*\n * Polling for iframes can be purely timing based,\n * since we don't need to account for interaction.\n */\n const timeoutId = window.setTimeout(() => {\n window.clearInterval(intervalId);\n reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.monitorWindowTimeout\n )\n );\n }, timeout);\n\n const intervalId = window.setInterval(() => {\n let href: string = \"\";\n const contentWindow = iframe.contentWindow;\n try {\n /*\n * Will throw if cross origin,\n * which should be caught and ignored\n * since we need the interval to keep running while on STS UI.\n */\n href = contentWindow ? contentWindow.location.href : \"\";\n } catch (e) {}\n\n if (!href || href === \"about:blank\") {\n return;\n }\n\n let responseString = \"\";\n if (contentWindow) {\n if (responseType === ServerResponseType.QUERY) {\n responseString = contentWindow.location.search;\n } else {\n responseString = contentWindow.location.hash;\n }\n }\n window.clearTimeout(timeoutId);\n window.clearInterval(intervalId);\n resolve(responseString);\n }, pollIntervalMilliseconds);\n }).finally(() => {\n invoke(\n removeHiddenIframe,\n PerformanceEvents.RemoveHiddenIframe,\n logger,\n performanceClient,\n correlationId\n )(iframe);\n });\n}\n\n/**\n * @hidden\n * Loads iframe with authorization endpoint URL\n * @ignore\n * @deprecated\n */\nfunction loadFrame(\n urlNavigate: string,\n navigateFrameWait: number,\n performanceClient: IPerformanceClient,\n correlationId: string\n): Promise {\n performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentHandlerLoadFrame,\n correlationId\n );\n\n /*\n * This trick overcomes iframe navigation in IE\n * IE does not load the page consistently in iframe\n */\n\n return new Promise((resolve, reject) => {\n const frameHandle = createHiddenIframe();\n\n window.setTimeout(() => {\n if (!frameHandle) {\n reject(\"Unable to load iframe\");\n return;\n }\n\n frameHandle.src = urlNavigate;\n\n resolve(frameHandle);\n }, navigateFrameWait);\n });\n}\n/**\n * @hidden\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\n * @param urlNavigate\n * @param frameName\n * @param logger\n */\nfunction loadFrameSync(urlNavigate: string): HTMLIFrameElement {\n const frameHandle = createHiddenIframe();\n\n frameHandle.src = urlNavigate;\n\n return frameHandle;\n}\n\n/**\n * @hidden\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\n * @ignore\n */\nfunction createHiddenIframe(): HTMLIFrameElement {\n const authFrame = document.createElement(\"iframe\");\n\n authFrame.className = \"msalSilentIframe\";\n authFrame.style.visibility = \"hidden\";\n authFrame.style.position = \"absolute\";\n authFrame.style.width = authFrame.style.height = \"0\";\n authFrame.style.border = \"0\";\n authFrame.setAttribute(\n \"sandbox\",\n \"allow-scripts allow-same-origin allow-forms\"\n );\n document.body.appendChild(authFrame);\n\n return authFrame;\n}\n\n/**\n * @hidden\n * Removes a hidden iframe from the page.\n * @ignore\n */\nfunction removeHiddenIframe(iframe: HTMLIFrameElement): void {\n if (document.body === iframe.parentNode) {\n document.body.removeChild(iframe);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ICrypto,\n Logger,\n PromptValue,\n AuthorizationCodeClient,\n AuthError,\n IPerformanceClient,\n PerformanceEvents,\n invokeAsync,\n invoke,\n ProtocolMode,\n CommonAuthorizationUrlRequest,\n HttpMethod,\n} from \"@azure/msal-common/browser\";\nimport { StandardInteractionClient } from \"./StandardInteractionClient.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport {\n InteractionType,\n ApiId,\n BrowserConstants,\n} from \"../utils/BrowserConstants.js\";\nimport {\n initiateCodeRequest,\n initiateCodeFlowWithPost,\n initiateEarRequest,\n monitorIframeForHash,\n} from \"../interaction_handler/SilentHandler.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\nimport * as ResponseHandler from \"../response/ResponseHandler.js\";\nimport * as Authorize from \"../protocol/Authorize.js\";\nimport { generatePkceCodes } from \"../crypto/PkceGenerator.js\";\nimport { isPlatformAuthAllowed } from \"../broker/nativeBroker/PlatformAuthProvider.js\";\nimport { generateEarKey } from \"../crypto/BrowserCrypto.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\n\nexport class SilentIframeClient extends StandardInteractionClient {\n protected apiId: ApiId;\n protected nativeStorage: BrowserCacheManager;\n\n constructor(\n config: BrowserConfiguration,\n storageImpl: BrowserCacheManager,\n browserCrypto: ICrypto,\n logger: Logger,\n eventHandler: EventHandler,\n navigationClient: INavigationClient,\n apiId: ApiId,\n performanceClient: IPerformanceClient,\n nativeStorageImpl: BrowserCacheManager,\n platformAuthProvider?: IPlatformAuthHandler,\n correlationId?: string\n ) {\n super(\n config,\n storageImpl,\n browserCrypto,\n logger,\n eventHandler,\n navigationClient,\n performanceClient,\n platformAuthProvider,\n correlationId\n );\n this.apiId = apiId;\n this.nativeStorage = nativeStorageImpl;\n }\n\n /**\n * Acquires a token silently by opening a hidden iframe to the /authorize endpoint with prompt=none or prompt=no_session\n * @param request\n */\n async acquireToken(\n request: SsoSilentRequest\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentIframeClientAcquireToken,\n request.correlationId\n );\n // Check that we have some SSO data\n if (\n !request.loginHint &&\n !request.sid &&\n (!request.account || !request.account.username)\n ) {\n this.logger.warning(\n \"No user hint provided. The authorization server may need more information to complete this request.\"\n );\n }\n\n // Check the prompt value\n const inputRequest = { ...request };\n if (inputRequest.prompt) {\n if (\n inputRequest.prompt !== PromptValue.NONE &&\n inputRequest.prompt !== PromptValue.NO_SESSION\n ) {\n this.logger.warning(\n `SilentIframeClient. Replacing invalid prompt ${inputRequest.prompt} with ${PromptValue.NONE}`\n );\n inputRequest.prompt = PromptValue.NONE;\n }\n } else {\n inputRequest.prompt = PromptValue.NONE;\n }\n\n // Create silent request\n const silentRequest: CommonAuthorizationUrlRequest = await invokeAsync(\n this.initializeAuthorizationRequest.bind(this),\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(inputRequest, InteractionType.Silent);\n silentRequest.platformBroker = isPlatformAuthAllowed(\n this.config,\n this.logger,\n this.platformAuthProvider,\n silentRequest.authenticationScheme\n );\n BrowserUtils.preconnect(silentRequest.authority);\n\n if (this.config.auth.protocolMode === ProtocolMode.EAR) {\n return this.executeEarFlow(silentRequest);\n } else {\n return this.executeCodeFlow(silentRequest);\n }\n }\n\n /**\n * Executes auth code + PKCE flow\n * @param request\n * @returns\n */\n async executeCodeFlow(\n request: CommonAuthorizationUrlRequest\n ): Promise {\n let authClient: AuthorizationCodeClient | undefined;\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n this.apiId\n );\n\n try {\n // Initialize the client\n authClient = await invokeAsync(\n this.createAuthCodeClient.bind(this),\n PerformanceEvents.StandardInteractionClientCreateAuthCodeClient,\n this.logger,\n this.performanceClient,\n request.correlationId\n )({\n serverTelemetryManager,\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n\n return await invokeAsync(\n this.silentTokenHelper.bind(this),\n PerformanceEvents.SilentIframeClientTokenHelper,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(authClient, request);\n } catch (e) {\n if (e instanceof AuthError) {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n\n if (\n !authClient ||\n !(e instanceof AuthError) ||\n e.errorCode !== BrowserConstants.INVALID_GRANT_ERROR\n ) {\n throw e;\n }\n\n this.performanceClient.addFields(\n {\n retryError: e.errorCode,\n },\n this.correlationId\n );\n\n return await invokeAsync(\n this.silentTokenHelper.bind(this),\n PerformanceEvents.SilentIframeClientTokenHelper,\n this.logger,\n this.performanceClient,\n this.correlationId\n )(authClient, request);\n }\n }\n\n /**\n * Executes EAR flow\n * @param request\n */\n async executeEarFlow(\n request: CommonAuthorizationUrlRequest\n ): Promise {\n const correlationId = request.correlationId;\n const discoveredAuthority = await invokeAsync(\n this.getDiscoveredAuthority.bind(this),\n PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority,\n this.logger,\n this.performanceClient,\n correlationId\n )({\n requestAuthority: request.authority,\n requestAzureCloudOptions: request.azureCloudOptions,\n requestExtraQueryParameters: request.extraQueryParameters,\n account: request.account,\n });\n\n const earJwk = await invokeAsync(\n generateEarKey,\n PerformanceEvents.GenerateEarKey,\n this.logger,\n this.performanceClient,\n correlationId\n )();\n const silentRequest = {\n ...request,\n earJwk: earJwk,\n };\n const msalFrame = await invokeAsync(\n initiateEarRequest,\n PerformanceEvents.SilentHandlerInitiateAuthRequest,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n this.config,\n discoveredAuthority,\n silentRequest,\n this.logger,\n this.performanceClient\n );\n\n const responseType = this.config.auth.OIDCOptions.serverResponseType;\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\n const responseString = await invokeAsync(\n monitorIframeForHash,\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n msalFrame,\n this.config.system.iframeHashTimeout,\n this.config.system.pollIntervalMilliseconds,\n this.performanceClient,\n this.logger,\n correlationId,\n responseType\n );\n\n const serverParams = invoke(\n ResponseHandler.deserializeResponse,\n PerformanceEvents.DeserializeResponse,\n this.logger,\n this.performanceClient,\n correlationId\n )(responseString, responseType, this.logger);\n\n return invokeAsync(\n Authorize.handleResponseEAR,\n PerformanceEvents.HandleResponseEar,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n silentRequest,\n serverParams,\n this.apiId,\n this.config,\n discoveredAuthority,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n\n /**\n * Currently Unsupported\n */\n logout(): Promise {\n // Synchronous so we must reject\n return Promise.reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.silentLogoutUnsupported\n )\n );\n }\n\n /**\n * Helper which acquires an authorization code silently using a hidden iframe from given url\n * using the scopes requested as part of the id, and exchanges the code for a set of OAuth tokens.\n * @param navigateUrl\n * @param userRequestScopes\n */\n protected async silentTokenHelper(\n authClient: AuthorizationCodeClient,\n request: CommonAuthorizationUrlRequest\n ): Promise {\n const correlationId = request.correlationId;\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentIframeClientTokenHelper,\n correlationId\n );\n const pkceCodes = await invokeAsync(\n generatePkceCodes,\n PerformanceEvents.GeneratePkceCodes,\n this.logger,\n this.performanceClient,\n correlationId\n )(this.performanceClient, this.logger, correlationId);\n\n const silentRequest = {\n ...request,\n codeChallenge: pkceCodes.challenge,\n };\n\n let msalFrame: HTMLIFrameElement;\n\n if (request.httpMethod === HttpMethod.POST) {\n msalFrame = await invokeAsync(\n initiateCodeFlowWithPost,\n PerformanceEvents.SilentHandlerInitiateAuthRequest,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n this.config,\n authClient.authority,\n silentRequest,\n this.logger,\n this.performanceClient\n );\n } else {\n // Create authorize request url\n const navigateUrl = await invokeAsync(\n Authorize.getAuthCodeRequestUrl,\n PerformanceEvents.GetAuthCodeUrl,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n this.config,\n authClient.authority,\n silentRequest,\n this.logger,\n this.performanceClient\n );\n\n // Get the frame handle for the silent request\n msalFrame = await invokeAsync(\n initiateCodeRequest,\n PerformanceEvents.SilentHandlerInitiateAuthRequest,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n navigateUrl,\n this.performanceClient,\n this.logger,\n correlationId,\n this.config.system.navigateFrameWait\n );\n }\n\n const responseType = this.config.auth.OIDCOptions.serverResponseType;\n // Monitor the window for the hash. Return the string value and close the popup when the hash is received. Default timeout is 60 seconds.\n const responseString = await invokeAsync(\n monitorIframeForHash,\n PerformanceEvents.SilentHandlerMonitorIframeForHash,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n msalFrame,\n this.config.system.iframeHashTimeout,\n this.config.system.pollIntervalMilliseconds,\n this.performanceClient,\n this.logger,\n correlationId,\n responseType\n );\n const serverParams = invoke(\n ResponseHandler.deserializeResponse,\n PerformanceEvents.DeserializeResponse,\n this.logger,\n this.performanceClient,\n correlationId\n )(responseString, responseType, this.logger);\n\n return invokeAsync(\n Authorize.handleResponseCode,\n PerformanceEvents.HandleResponseCode,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n request,\n serverParams,\n pkceCodes.verifier,\n this.apiId,\n this.config,\n authClient,\n this.browserStorage,\n this.nativeStorage,\n this.eventHandler,\n this.logger,\n this.performanceClient,\n this.platformAuthProvider\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { StandardInteractionClient } from \"./StandardInteractionClient.js\";\nimport {\n CommonSilentFlowRequest,\n ServerTelemetryManager,\n RefreshTokenClient,\n AuthError,\n AzureCloudOptions,\n PerformanceEvents,\n invokeAsync,\n AccountInfo,\n StringDict,\n} from \"@azure/msal-common/browser\";\nimport { ApiId } from \"../utils/BrowserConstants.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { initializeBaseRequest } from \"../request/RequestHelpers.js\";\n\nexport class SilentRefreshClient extends StandardInteractionClient {\n /**\n * Exchanges the refresh token for new tokens\n * @param request\n */\n async acquireToken(\n request: CommonSilentFlowRequest\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.SilentRefreshClientAcquireToken,\n request.correlationId\n );\n\n const baseRequest = await invokeAsync(\n initializeBaseRequest,\n PerformanceEvents.InitializeBaseRequest,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, this.config, this.performanceClient, this.logger);\n const silentRequest: CommonSilentFlowRequest = {\n ...request,\n ...baseRequest,\n };\n\n if (request.redirectUri) {\n // Make sure any passed redirectUri is converted to an absolute URL - redirectUri is not a required parameter for refresh token redemption so only include if explicitly provided\n silentRequest.redirectUri = this.getRedirectUri(\n request.redirectUri\n );\n }\n\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n ApiId.acquireTokenSilent_silentFlow\n );\n\n const refreshTokenClient = await this.createRefreshTokenClient({\n serverTelemetryManager,\n authorityUrl: silentRequest.authority,\n azureCloudOptions: silentRequest.azureCloudOptions,\n account: silentRequest.account,\n });\n // Send request to renew token. Auth module will throw errors if token cannot be renewed.\n return invokeAsync(\n refreshTokenClient.acquireTokenByRefreshToken.bind(\n refreshTokenClient\n ),\n PerformanceEvents.RefreshTokenClientAcquireTokenByRefreshToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(silentRequest).catch((e: AuthError) => {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n throw e;\n }) as Promise;\n }\n\n /**\n * Currently Unsupported\n */\n logout(): Promise {\n // Synchronous so we must reject\n return Promise.reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.silentLogoutUnsupported\n )\n );\n }\n\n /**\n * Creates a Refresh Client with the given authority, or the default authority.\n * @param params {\n * serverTelemetryManager: ServerTelemetryManager;\n * authorityUrl?: string;\n * azureCloudOptions?: AzureCloudOptions;\n * extraQueryParams?: StringDict;\n * account?: AccountInfo;\n * }\n */\n protected async createRefreshTokenClient(params: {\n serverTelemetryManager: ServerTelemetryManager;\n authorityUrl?: string;\n azureCloudOptions?: AzureCloudOptions;\n extraQueryParameters?: StringDict;\n account?: AccountInfo;\n }): Promise {\n // Create auth module.\n const clientConfig = await invokeAsync(\n this.getClientConfiguration.bind(this),\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\n this.logger,\n this.performanceClient,\n this.correlationId\n )({\n serverTelemetryManager: params.serverTelemetryManager,\n requestAuthority: params.authorityUrl,\n requestAzureCloudOptions: params.azureCloudOptions,\n requestExtraQueryParameters: params.extraQueryParameters,\n account: params.account,\n });\n return new RefreshTokenClient(clientConfig, this.performanceClient);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AccessTokenEntity,\n ICrypto,\n IdTokenEntity,\n Logger,\n ScopeSet,\n Authority,\n AuthorityOptions,\n ExternalTokenResponse,\n AccountEntity,\n AuthToken,\n RefreshTokenEntity,\n CacheRecord,\n TokenClaims,\n CacheHelpers,\n buildAccountToCache,\n TimeUtils,\n} from \"@azure/msal-common/browser\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport type { SilentRequest } from \"../request/SilentRequest.js\";\nimport { BrowserCacheManager } from \"./BrowserCacheManager.js\";\nimport type { ITokenCache } from \"./ITokenCache.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport type { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { base64Decode } from \"../encode/Base64Decode.js\";\nimport * as BrowserCrypto from \"../crypto/BrowserCrypto.js\";\n\nexport type LoadTokenOptions = {\n clientInfo?: string;\n expiresOn?: number;\n extendedExpiresOn?: number;\n};\n\n/**\n * Token cache manager\n */\nexport class TokenCache implements ITokenCache {\n // Flag to indicate if in browser environment\n public isBrowserEnvironment: boolean;\n // Input configuration by developer/user\n protected config: BrowserConfiguration;\n // Browser cache storage\n private storage: BrowserCacheManager;\n // Logger\n private logger: Logger;\n // Crypto class\n private cryptoObj: ICrypto;\n\n constructor(\n configuration: BrowserConfiguration,\n storage: BrowserCacheManager,\n logger: Logger,\n cryptoObj: ICrypto\n ) {\n this.isBrowserEnvironment = typeof window !== \"undefined\";\n this.config = configuration;\n this.storage = storage;\n this.logger = logger;\n this.cryptoObj = cryptoObj;\n }\n\n // Move getAllAccounts here and cache utility APIs\n\n /**\n * API to load tokens to msal-browser cache.\n * @param request\n * @param response\n * @param options\n * @returns `AuthenticationResult` for the response that was loaded.\n */\n async loadExternalTokens(\n request: SilentRequest,\n response: ExternalTokenResponse,\n options: LoadTokenOptions\n ): Promise {\n if (!this.isBrowserEnvironment) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.nonBrowserEnvironment\n );\n }\n\n const correlationId =\n request.correlationId || BrowserCrypto.createNewGuid();\n\n const idTokenClaims = response.id_token\n ? AuthToken.extractTokenClaims(response.id_token, base64Decode)\n : undefined;\n\n const authorityOptions: AuthorityOptions = {\n protocolMode: this.config.auth.protocolMode,\n knownAuthorities: this.config.auth.knownAuthorities,\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\n authorityMetadata: this.config.auth.authorityMetadata,\n skipAuthorityMetadataCache:\n this.config.auth.skipAuthorityMetadataCache,\n };\n const authority = request.authority\n ? new Authority(\n Authority.generateAuthority(\n request.authority,\n request.azureCloudOptions\n ),\n this.config.system.networkClient,\n this.storage,\n authorityOptions,\n this.logger,\n request.correlationId || BrowserCrypto.createNewGuid()\n )\n : undefined;\n\n const cacheRecordAccount: AccountEntity = await this.loadAccount(\n request,\n options.clientInfo || response.client_info || \"\",\n correlationId,\n idTokenClaims,\n authority\n );\n\n const idToken = await this.loadIdToken(\n response,\n cacheRecordAccount.homeAccountId,\n cacheRecordAccount.environment,\n cacheRecordAccount.realm,\n correlationId\n );\n\n const accessToken = await this.loadAccessToken(\n request,\n response,\n cacheRecordAccount.homeAccountId,\n cacheRecordAccount.environment,\n cacheRecordAccount.realm,\n options,\n correlationId\n );\n\n const refreshToken = await this.loadRefreshToken(\n response,\n cacheRecordAccount.homeAccountId,\n cacheRecordAccount.environment,\n correlationId\n );\n\n return this.generateAuthenticationResult(\n request,\n {\n account: cacheRecordAccount,\n idToken,\n accessToken,\n refreshToken,\n },\n idTokenClaims,\n authority\n );\n }\n\n /**\n * Helper function to load account to msal-browser cache\n * @param idToken\n * @param environment\n * @param clientInfo\n * @param authorityType\n * @param requestHomeAccountId\n * @returns `AccountEntity`\n */\n private async loadAccount(\n request: SilentRequest,\n clientInfo: string,\n correlationId: string,\n idTokenClaims?: TokenClaims,\n authority?: Authority\n ): Promise {\n this.logger.verbose(\"TokenCache - loading account\");\n\n if (request.account) {\n const accountEntity = AccountEntity.createFromAccountInfo(\n request.account\n );\n await this.storage.setAccount(accountEntity, correlationId);\n return accountEntity;\n } else if (!authority || (!clientInfo && !idTokenClaims)) {\n this.logger.error(\n \"TokenCache - if an account is not provided on the request, authority and either clientInfo or idToken must be provided instead.\"\n );\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.unableToLoadToken\n );\n }\n\n const homeAccountId = AccountEntity.generateHomeAccountId(\n clientInfo,\n authority.authorityType,\n this.logger,\n this.cryptoObj,\n idTokenClaims\n );\n\n const claimsTenantId = idTokenClaims?.tid;\n\n const cachedAccount = buildAccountToCache(\n this.storage,\n authority,\n homeAccountId,\n base64Decode,\n correlationId,\n idTokenClaims,\n clientInfo,\n authority.hostnameAndPort,\n claimsTenantId,\n undefined, // authCodePayload\n undefined, // nativeAccountId\n this.logger\n );\n\n await this.storage.setAccount(cachedAccount, correlationId);\n return cachedAccount;\n }\n\n /**\n * Helper function to load id tokens to msal-browser cache\n * @param idToken\n * @param homeAccountId\n * @param environment\n * @param tenantId\n * @returns `IdTokenEntity`\n */\n private async loadIdToken(\n response: ExternalTokenResponse,\n homeAccountId: string,\n environment: string,\n tenantId: string,\n correlationId: string\n ): Promise {\n if (!response.id_token) {\n this.logger.verbose(\"TokenCache - no id token found in response\");\n return null;\n }\n\n this.logger.verbose(\"TokenCache - loading id token\");\n const idTokenEntity = CacheHelpers.createIdTokenEntity(\n homeAccountId,\n environment,\n response.id_token,\n this.config.auth.clientId,\n tenantId\n );\n\n await this.storage.setIdTokenCredential(idTokenEntity, correlationId);\n return idTokenEntity;\n }\n\n /**\n * Helper function to load access tokens to msal-browser cache\n * @param request\n * @param response\n * @param homeAccountId\n * @param environment\n * @param tenantId\n * @returns `AccessTokenEntity`\n */\n private async loadAccessToken(\n request: SilentRequest,\n response: ExternalTokenResponse,\n homeAccountId: string,\n environment: string,\n tenantId: string,\n options: LoadTokenOptions,\n correlationId: string\n ): Promise {\n if (!response.access_token) {\n this.logger.verbose(\n \"TokenCache - no access token found in response\"\n );\n return null;\n } else if (!response.expires_in) {\n this.logger.error(\n \"TokenCache - no expiration set on the access token. Cannot add it to the cache.\"\n );\n return null;\n } else if (\n !response.scope &&\n (!request.scopes || !request.scopes.length)\n ) {\n this.logger.error(\n \"TokenCache - scopes not specified in the request or response. Cannot add token to the cache.\"\n );\n return null;\n }\n\n this.logger.verbose(\"TokenCache - loading access token\");\n\n const scopes = response.scope\n ? ScopeSet.fromString(response.scope)\n : new ScopeSet(request.scopes);\n const expiresOn =\n options.expiresOn || response.expires_in + TimeUtils.nowSeconds();\n\n const extendedExpiresOn =\n options.extendedExpiresOn ||\n (response.ext_expires_in || response.expires_in) +\n TimeUtils.nowSeconds();\n\n const accessTokenEntity = CacheHelpers.createAccessTokenEntity(\n homeAccountId,\n environment,\n response.access_token,\n this.config.auth.clientId,\n tenantId,\n scopes.printScopes(),\n expiresOn,\n extendedExpiresOn,\n base64Decode\n );\n\n await this.storage.setAccessTokenCredential(\n accessTokenEntity,\n correlationId\n );\n return accessTokenEntity;\n }\n\n /**\n * Helper function to load refresh tokens to msal-browser cache\n * @param request\n * @param response\n * @param homeAccountId\n * @param environment\n * @returns `RefreshTokenEntity`\n */\n private async loadRefreshToken(\n response: ExternalTokenResponse,\n homeAccountId: string,\n environment: string,\n correlationId: string\n ): Promise {\n if (!response.refresh_token) {\n this.logger.verbose(\n \"TokenCache - no refresh token found in response\"\n );\n return null;\n }\n\n this.logger.verbose(\"TokenCache - loading refresh token\");\n const refreshTokenEntity = CacheHelpers.createRefreshTokenEntity(\n homeAccountId,\n environment,\n response.refresh_token,\n this.config.auth.clientId,\n response.foci,\n undefined, // userAssertionHash\n response.refresh_token_expires_in\n );\n\n await this.storage.setRefreshTokenCredential(\n refreshTokenEntity,\n correlationId\n );\n return refreshTokenEntity;\n }\n\n /**\n * Helper function to generate an `AuthenticationResult` for the result.\n * @param request\n * @param idTokenObj\n * @param cacheRecord\n * @param authority\n * @returns `AuthenticationResult`\n */\n private generateAuthenticationResult(\n request: SilentRequest,\n cacheRecord: CacheRecord & { account: AccountEntity },\n idTokenClaims?: TokenClaims,\n authority?: Authority\n ): AuthenticationResult {\n let accessToken: string = \"\";\n let responseScopes: Array = [];\n let expiresOn: Date | null = null;\n let extExpiresOn: Date | undefined;\n\n if (cacheRecord?.accessToken) {\n accessToken = cacheRecord.accessToken.secret;\n responseScopes = ScopeSet.fromString(\n cacheRecord.accessToken.target\n ).asArray();\n // Access token expiresOn stored in seconds, converting to Date for AuthenticationResult\n expiresOn = TimeUtils.toDateFromSeconds(\n cacheRecord.accessToken.expiresOn\n );\n extExpiresOn = TimeUtils.toDateFromSeconds(\n cacheRecord.accessToken.extendedExpiresOn\n );\n }\n\n const accountEntity = cacheRecord.account;\n\n return {\n authority: authority ? authority.canonicalAuthority : \"\",\n uniqueId: cacheRecord.account.localAccountId,\n tenantId: cacheRecord.account.realm,\n scopes: responseScopes,\n account: accountEntity.getAccountInfo(),\n idToken: cacheRecord.idToken?.secret || \"\",\n idTokenClaims: idTokenClaims || {},\n accessToken: accessToken,\n fromCache: true,\n expiresOn: expiresOn,\n correlationId: request.correlationId || \"\",\n requestId: \"\",\n extExpiresOn: extExpiresOn,\n familyId: cacheRecord.refreshToken?.familyId || \"\",\n tokenType: cacheRecord?.accessToken?.tokenType || \"\",\n state: request.state || \"\",\n cloudGraphHostName: accountEntity.cloudGraphHostName || \"\",\n msGraphHost: accountEntity.msGraphHost || \"\",\n fromNativeBroker: false,\n };\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AuthorizationCodeClient,\n ClientConfiguration,\n} from \"@azure/msal-common/browser\";\n\nexport class HybridSpaAuthorizationCodeClient extends AuthorizationCodeClient {\n constructor(config: ClientConfiguration) {\n super(config);\n this.includeRedirectUri = false;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n ICrypto,\n Logger,\n CommonAuthorizationCodeRequest,\n AuthError,\n IPerformanceClient,\n PerformanceEvents,\n invokeAsync,\n CommonAuthorizationUrlRequest,\n} from \"@azure/msal-common/browser\";\nimport { StandardInteractionClient } from \"./StandardInteractionClient.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { InteractionType, ApiId } from \"../utils/BrowserConstants.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { HybridSpaAuthorizationCodeClient } from \"./HybridSpaAuthorizationCodeClient.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { InteractionHandler } from \"../interaction_handler/InteractionHandler.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\n\nexport class SilentAuthCodeClient extends StandardInteractionClient {\n private apiId: ApiId;\n\n constructor(\n config: BrowserConfiguration,\n storageImpl: BrowserCacheManager,\n browserCrypto: ICrypto,\n logger: Logger,\n eventHandler: EventHandler,\n navigationClient: INavigationClient,\n apiId: ApiId,\n performanceClient: IPerformanceClient,\n platformAuthProvider?: IPlatformAuthHandler,\n correlationId?: string\n ) {\n super(\n config,\n storageImpl,\n browserCrypto,\n logger,\n eventHandler,\n navigationClient,\n performanceClient,\n platformAuthProvider,\n correlationId\n );\n this.apiId = apiId;\n }\n\n /**\n * Acquires a token silently by redeeming an authorization code against the /token endpoint\n * @param request\n */\n async acquireToken(\n request: AuthorizationCodeRequest\n ): Promise {\n // Auth code payload is required\n if (!request.code) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.authCodeRequired\n );\n }\n\n // Create silent request\n const silentRequest: CommonAuthorizationUrlRequest = await invokeAsync(\n this.initializeAuthorizationRequest.bind(this),\n PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, InteractionType.Silent);\n\n const serverTelemetryManager = this.initializeServerTelemetryManager(\n this.apiId\n );\n\n try {\n // Create auth code request (PKCE not needed)\n const authCodeRequest: CommonAuthorizationCodeRequest = {\n ...silentRequest,\n code: request.code,\n };\n\n // Initialize the client\n const clientConfig = await invokeAsync(\n this.getClientConfiguration.bind(this),\n PerformanceEvents.StandardInteractionClientGetClientConfiguration,\n this.logger,\n this.performanceClient,\n request.correlationId\n )({\n serverTelemetryManager,\n requestAuthority: silentRequest.authority,\n requestAzureCloudOptions: silentRequest.azureCloudOptions,\n requestExtraQueryParameters: silentRequest.extraQueryParameters,\n account: silentRequest.account,\n });\n const authClient: HybridSpaAuthorizationCodeClient =\n new HybridSpaAuthorizationCodeClient(clientConfig);\n this.logger.verbose(\"Auth code client created\");\n\n // Create silent handler\n const interactionHandler = new InteractionHandler(\n authClient,\n this.browserStorage,\n authCodeRequest,\n this.logger,\n this.performanceClient\n );\n\n // Handle auth code parameters from request\n return await invokeAsync(\n interactionHandler.handleCodeResponseFromServer.bind(\n interactionHandler\n ),\n PerformanceEvents.HandleCodeResponseFromServer,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(\n {\n code: request.code,\n msgraph_host: request.msGraphHost,\n cloud_graph_host_name: request.cloudGraphHostName,\n cloud_instance_host_name: request.cloudInstanceHostName,\n },\n silentRequest,\n false\n );\n } catch (e) {\n if (e instanceof AuthError) {\n (e as AuthError).setCorrelationId(this.correlationId);\n serverTelemetryManager.cacheFailedRequest(e);\n }\n throw e;\n }\n }\n\n /**\n * Currently Unsupported\n */\n logout(): Promise {\n // Synchronous so we must reject\n return Promise.reject(\n createBrowserAuthError(\n BrowserAuthErrorCodes.silentLogoutUnsupported\n )\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { InProgressPerformanceEvent, Logger } from \"@azure/msal-common/browser\";\n\nexport function collectInstanceStats(\n currentClientId: string,\n performanceEvent: InProgressPerformanceEvent,\n logger: Logger\n): void {\n const frameInstances: string[] =\n // @ts-ignore\n window.msal?.clientIds || [];\n\n const msalInstanceCount = frameInstances.length;\n\n const sameClientIdInstanceCount = frameInstances.filter(\n (i) => i === currentClientId\n ).length;\n\n if (sameClientIdInstanceCount > 1) {\n logger.warning(\n \"There is already an instance of MSAL.js in the window with the same client id.\"\n );\n }\n performanceEvent.add({\n msalInstanceCount: msalInstanceCount,\n sameClientIdInstanceCount: sameClientIdInstanceCount,\n });\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { CryptoOps } from \"../crypto/CryptoOps.js\";\nimport {\n InteractionRequiredAuthError,\n AccountInfo,\n Constants,\n INetworkModule,\n Logger,\n CommonSilentFlowRequest,\n ICrypto,\n DEFAULT_CRYPTO_IMPLEMENTATION,\n AuthError,\n PerformanceEvents,\n PerformanceCallbackFunction,\n IPerformanceClient,\n BaseAuthRequest,\n PromptValue,\n InProgressPerformanceEvent,\n getRequestThumbprint,\n AccountEntity,\n invokeAsync,\n invoke,\n createClientAuthError,\n ClientAuthErrorCodes,\n AccountFilter,\n buildStaticAuthorityOptions,\n InteractionRequiredAuthErrorCodes,\n PkceCodes,\n} from \"@azure/msal-common/browser\";\nimport {\n BrowserCacheManager,\n DEFAULT_BROWSER_CACHE_MANAGER,\n} from \"../cache/BrowserCacheManager.js\";\nimport * as AccountManager from \"../cache/AccountManager.js\";\nimport { BrowserConfiguration, CacheOptions } from \"../config/Configuration.js\";\nimport {\n InteractionType,\n ApiId,\n BrowserCacheLocation,\n WrapperSKU,\n CacheLookupPolicy,\n DEFAULT_REQUEST,\n BrowserConstants,\n iFrameRenewalPolicies,\n INTERACTION_TYPE,\n} from \"../utils/BrowserConstants.js\";\nimport * as BrowserUtils from \"../utils/BrowserUtils.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { EventCallbackFunction, EventError } from \"../event/EventMessage.js\";\nimport { EventType } from \"../event/EventType.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { PopupClient } from \"../interaction_client/PopupClient.js\";\nimport { RedirectClient } from \"../interaction_client/RedirectClient.js\";\nimport { SilentIframeClient } from \"../interaction_client/SilentIframeClient.js\";\nimport { SilentRefreshClient } from \"../interaction_client/SilentRefreshClient.js\";\nimport { TokenCache } from \"../cache/TokenCache.js\";\nimport { ITokenCache } from \"../cache/ITokenCache.js\";\nimport { PlatformAuthInteractionClient } from \"../interaction_client/PlatformAuthInteractionClient.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport {\n NativeAuthError,\n isFatalNativeAuthError,\n} from \"../error/NativeAuthError.js\";\nimport { SilentCacheClient } from \"../interaction_client/SilentCacheClient.js\";\nimport { SilentAuthCodeClient } from \"../interaction_client/SilentAuthCodeClient.js\";\nimport {\n createBrowserAuthError,\n BrowserAuthErrorCodes,\n} from \"../error/BrowserAuthError.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { PlatformAuthRequest } from \"../broker/nativeBroker/PlatformAuthRequest.js\";\nimport { StandardOperatingContext } from \"../operatingcontext/StandardOperatingContext.js\";\nimport { BaseOperatingContext } from \"../operatingcontext/BaseOperatingContext.js\";\nimport { IController } from \"./IController.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport { createNewGuid } from \"../crypto/BrowserCrypto.js\";\nimport { initializeSilentRequest } from \"../request/RequestHelpers.js\";\nimport { InitializeApplicationRequest } from \"../request/InitializeApplicationRequest.js\";\nimport { generatePkceCodes } from \"../crypto/PkceGenerator.js\";\nimport {\n getPlatformAuthProvider,\n isPlatformAuthAllowed,\n} from \"../broker/nativeBroker/PlatformAuthProvider.js\";\nimport { IPlatformAuthHandler } from \"../broker/nativeBroker/IPlatformAuthHandler.js\";\nimport { collectInstanceStats } from \"../utils/MsalFrameStatsUtils.js\";\n\nfunction getAccountType(\n account?: AccountInfo\n): \"AAD\" | \"MSA\" | \"B2C\" | undefined {\n const idTokenClaims = account?.idTokenClaims;\n if (idTokenClaims?.tfp || idTokenClaims?.acr) {\n return \"B2C\";\n }\n\n if (!idTokenClaims?.tid) {\n return undefined;\n } else if (idTokenClaims?.tid === \"9188040d-6c67-4c5b-b112-36a304b66dad\") {\n return \"MSA\";\n }\n return \"AAD\";\n}\n\nfunction preflightCheck(\n initialized: boolean,\n performanceEvent: InProgressPerformanceEvent\n) {\n try {\n BrowserUtils.preflightCheck(initialized);\n } catch (e) {\n performanceEvent.end({ success: false }, e);\n throw e;\n }\n}\n\nexport class StandardController implements IController {\n // OperatingContext\n protected readonly operatingContext: StandardOperatingContext;\n\n // Crypto interface implementation\n protected readonly browserCrypto: ICrypto;\n\n // Storage interface implementation\n protected readonly browserStorage: BrowserCacheManager;\n\n // Native Cache in memory storage implementation\n protected readonly nativeInternalStorage: BrowserCacheManager;\n\n // Network interface implementation\n protected readonly networkClient: INetworkModule;\n\n // Navigation interface implementation\n protected navigationClient: INavigationClient;\n\n // Input configuration by developer/user\n protected readonly config: BrowserConfiguration;\n\n // Token cache implementation\n private tokenCache: TokenCache;\n\n // Logger\n protected logger: Logger;\n\n // Flag to indicate if in browser environment\n protected isBrowserEnvironment: boolean;\n\n protected readonly eventHandler: EventHandler;\n\n // Redirect Response Object\n protected readonly redirectResponse: Map<\n string,\n Promise\n >;\n\n // Native Extension Provider\n protected platformAuthProvider: IPlatformAuthHandler | undefined;\n\n // Hybrid auth code responses\n private hybridAuthCodeResponses: Map>;\n\n // Performance telemetry client\n protected readonly performanceClient: IPerformanceClient;\n\n // Flag representing whether or not the initialize API has been called and completed\n protected initialized: boolean;\n\n // Active requests\n private activeSilentTokenRequests: Map<\n string,\n Promise\n >;\n\n // Active Iframe request\n private activeIframeRequest: [Promise, string] | undefined;\n\n private ssoSilentMeasurement?: InProgressPerformanceEvent;\n private acquireTokenByCodeAsyncMeasurement?: InProgressPerformanceEvent;\n\n private pkceCode: PkceCodes | undefined;\n\n /**\n * @constructor\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\n *\n * Important attributes in the Configuration object for auth are:\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\n * - authority: the authority URL for your application.\n * - redirect_uri: the uri of your application registered in the portal.\n *\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\n *\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\n * Full B2C functionality will be available in this library in future versions.\n *\n * @param configuration Object for the MSAL PublicClientApplication instance\n */\n constructor(operatingContext: StandardOperatingContext) {\n this.operatingContext = operatingContext;\n this.isBrowserEnvironment =\n this.operatingContext.isBrowserEnvironment();\n // Set the configuration.\n this.config = operatingContext.getConfig();\n this.initialized = false;\n\n // Initialize logger\n this.logger = this.operatingContext.getLogger();\n\n // Initialize the network module class.\n this.networkClient = this.config.system.networkClient;\n\n // Initialize the navigation client class.\n this.navigationClient = this.config.system.navigationClient;\n\n // Initialize redirectResponse Map\n this.redirectResponse = new Map();\n\n // Initial hybrid spa map\n this.hybridAuthCodeResponses = new Map();\n\n // Initialize performance client\n this.performanceClient = this.config.telemetry.client;\n\n // Initialize the crypto class.\n this.browserCrypto = this.isBrowserEnvironment\n ? new CryptoOps(this.logger, this.performanceClient)\n : DEFAULT_CRYPTO_IMPLEMENTATION;\n\n this.eventHandler = new EventHandler(this.logger);\n\n // Initialize the browser storage class.\n this.browserStorage = this.isBrowserEnvironment\n ? new BrowserCacheManager(\n this.config.auth.clientId,\n this.config.cache,\n this.browserCrypto,\n this.logger,\n this.performanceClient,\n this.eventHandler,\n buildStaticAuthorityOptions(this.config.auth)\n )\n : DEFAULT_BROWSER_CACHE_MANAGER(\n this.config.auth.clientId,\n this.logger,\n this.performanceClient,\n this.eventHandler\n );\n\n // initialize in memory storage for native flows\n const nativeCacheOptions: Required = {\n cacheLocation: BrowserCacheLocation.MemoryStorage,\n cacheRetentionDays: 5,\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\n storeAuthStateInCookie: false,\n secureCookies: false,\n cacheMigrationEnabled: false,\n claimsBasedCachingEnabled: false,\n };\n this.nativeInternalStorage = new BrowserCacheManager(\n this.config.auth.clientId,\n nativeCacheOptions,\n this.browserCrypto,\n this.logger,\n this.performanceClient,\n this.eventHandler\n );\n\n // Initialize the token cache\n this.tokenCache = new TokenCache(\n this.config,\n this.browserStorage,\n this.logger,\n this.browserCrypto\n );\n\n this.activeSilentTokenRequests = new Map();\n\n // Register listener functions\n this.trackPageVisibility = this.trackPageVisibility.bind(this);\n\n // Register listener functions\n this.trackPageVisibilityWithMeasurement =\n this.trackPageVisibilityWithMeasurement.bind(this);\n }\n\n static async createController(\n operatingContext: BaseOperatingContext,\n request?: InitializeApplicationRequest\n ): Promise {\n const controller = new StandardController(operatingContext);\n await controller.initialize(request);\n return controller;\n }\n\n private trackPageVisibility(correlationId?: string): void {\n if (!correlationId) {\n return;\n }\n this.logger.info(\"Perf: Visibility change detected\");\n this.performanceClient.incrementFields(\n { visibilityChangeCount: 1 },\n correlationId\n );\n }\n\n /**\n * Initializer function to perform async startup tasks such as connecting to WAM extension\n * @param request {?InitializeApplicationRequest} correlation id\n */\n async initialize(\n request?: InitializeApplicationRequest,\n isBroker?: boolean\n ): Promise {\n this.logger.trace(\"initialize called\");\n if (this.initialized) {\n this.logger.info(\n \"initialize has already been called, exiting early.\"\n );\n return;\n }\n\n if (!this.isBrowserEnvironment) {\n this.logger.info(\"in non-browser environment, exiting early.\");\n this.initialized = true;\n this.eventHandler.emitEvent(EventType.INITIALIZE_END);\n return;\n }\n\n const initCorrelationId =\n request?.correlationId || this.getRequestCorrelationId();\n const allowPlatformBroker = this.config.system.allowPlatformBroker;\n const initMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.InitializeClientApplication,\n initCorrelationId\n );\n this.eventHandler.emitEvent(EventType.INITIALIZE_START);\n\n // Broker applications are initialized twice, so we avoid double-counting it\n if (!isBroker) {\n try {\n this.logMultipleInstances(initMeasurement);\n } catch {}\n }\n\n await invokeAsync(\n this.browserStorage.initialize.bind(this.browserStorage),\n PerformanceEvents.InitializeCache,\n this.logger,\n this.performanceClient,\n initCorrelationId\n )(initCorrelationId);\n\n if (allowPlatformBroker) {\n try {\n // check if platform authentication is available via DOM or browser extension and create relevant handlers\n this.platformAuthProvider = await getPlatformAuthProvider(\n this.logger,\n this.performanceClient,\n initCorrelationId,\n this.config.system.nativeBrokerHandshakeTimeout\n );\n } catch (e) {\n this.logger.verbose(e as string);\n }\n }\n\n if (!this.config.cache.claimsBasedCachingEnabled) {\n this.logger.verbose(\n \"Claims-based caching is disabled. Clearing the previous cache with claims\"\n );\n\n invoke(\n this.browserStorage.clearTokensAndKeysWithClaims.bind(\n this.browserStorage\n ),\n PerformanceEvents.ClearTokensAndKeysWithClaims,\n this.logger,\n this.performanceClient,\n initCorrelationId\n )(initCorrelationId);\n }\n\n this.config.system.asyncPopups &&\n (await this.preGeneratePkceCodes(initCorrelationId));\n this.initialized = true;\n this.eventHandler.emitEvent(EventType.INITIALIZE_END);\n initMeasurement.end({\n allowPlatformBroker: allowPlatformBroker,\n success: true,\n });\n }\n\n // #region Redirect Flow\n\n /**\n * Event handler function which allows users to fire events after the PublicClientApplication object\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\n * auth flows.\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\n */\n async handleRedirectPromise(\n hash?: string\n ): Promise {\n this.logger.verbose(\"handleRedirectPromise called\");\n // Block token acquisition before initialize has been called\n BrowserUtils.blockAPICallsBeforeInitialize(this.initialized);\n\n if (this.isBrowserEnvironment) {\n /**\n * Store the promise on the PublicClientApplication instance if this is the first invocation of handleRedirectPromise,\n * otherwise return the promise from the first invocation. Prevents race conditions when handleRedirectPromise is called\n * several times concurrently.\n */\n const redirectResponseKey = hash || \"\";\n let response = this.redirectResponse.get(redirectResponseKey);\n if (typeof response === \"undefined\") {\n response = this.handleRedirectPromiseInternal(hash);\n this.redirectResponse.set(redirectResponseKey, response);\n this.logger.verbose(\n \"handleRedirectPromise has been called for the first time, storing the promise\"\n );\n } else {\n this.logger.verbose(\n \"handleRedirectPromise has been called previously, returning the result from the first call\"\n );\n }\n\n return response;\n }\n this.logger.verbose(\n \"handleRedirectPromise returns null, not browser environment\"\n );\n return null;\n }\n\n /**\n * The internal details of handleRedirectPromise. This is separated out to a helper to allow handleRedirectPromise to memoize requests\n * @param hash\n * @returns\n */\n private async handleRedirectPromiseInternal(\n hash?: string\n ): Promise {\n if (!this.browserStorage.isInteractionInProgress(true)) {\n this.logger.info(\n \"handleRedirectPromise called but there is no interaction in progress, returning null.\"\n );\n return null;\n }\n\n const interactionType =\n this.browserStorage.getInteractionInProgress()?.type;\n if (interactionType === INTERACTION_TYPE.SIGNOUT) {\n this.logger.verbose(\n \"handleRedirectPromise removing interaction_in_progress flag and returning null after sign-out\"\n );\n this.browserStorage.setInteractionInProgress(false);\n return Promise.resolve(null);\n }\n\n const loggedInAccounts = this.getAllAccounts();\n const platformBrokerRequest: PlatformAuthRequest | null =\n this.browserStorage.getCachedNativeRequest();\n const useNative =\n platformBrokerRequest && this.platformAuthProvider && !hash;\n\n let rootMeasurement: InProgressPerformanceEvent;\n\n this.eventHandler.emitEvent(\n EventType.HANDLE_REDIRECT_START,\n InteractionType.Redirect\n );\n\n let redirectResponse: Promise;\n try {\n if (useNative && this.platformAuthProvider) {\n rootMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenRedirect,\n platformBrokerRequest?.correlationId || \"\"\n );\n this.logger.trace(\n \"handleRedirectPromise - acquiring token from native platform\"\n );\n const nativeClient = new PlatformAuthInteractionClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n ApiId.handleRedirectPromise,\n this.performanceClient,\n this.platformAuthProvider,\n platformBrokerRequest.accountId,\n this.nativeInternalStorage,\n platformBrokerRequest.correlationId\n );\n\n redirectResponse = invokeAsync(\n nativeClient.handleRedirectPromise.bind(nativeClient),\n PerformanceEvents.HandleNativeRedirectPromiseMeasurement,\n this.logger,\n this.performanceClient,\n rootMeasurement.event.correlationId\n )(this.performanceClient, rootMeasurement.event.correlationId);\n } else {\n const [standardRequest, codeVerifier] =\n this.browserStorage.getCachedRequest();\n const correlationId = standardRequest.correlationId;\n // Reset rootMeasurement now that we have correlationId\n rootMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenRedirect,\n correlationId\n );\n this.logger.trace(\n \"handleRedirectPromise - acquiring token from web flow\"\n );\n const redirectClient = this.createRedirectClient(correlationId);\n redirectResponse = invokeAsync(\n redirectClient.handleRedirectPromise.bind(redirectClient),\n PerformanceEvents.HandleRedirectPromiseMeasurement,\n this.logger,\n this.performanceClient,\n rootMeasurement.event.correlationId\n )(hash, standardRequest, codeVerifier, rootMeasurement);\n }\n } catch (e) {\n this.browserStorage.resetRequestCache();\n throw e;\n }\n\n return redirectResponse\n .then((result: AuthenticationResult | null) => {\n if (result) {\n this.browserStorage.resetRequestCache();\n // Emit login event if number of accounts change\n const isLoggingIn =\n loggedInAccounts.length < this.getAllAccounts().length;\n if (isLoggingIn) {\n this.eventHandler.emitEvent(\n EventType.LOGIN_SUCCESS,\n InteractionType.Redirect,\n result\n );\n this.logger.verbose(\n \"handleRedirectResponse returned result, login success\"\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Redirect,\n result\n );\n this.logger.verbose(\n \"handleRedirectResponse returned result, acquire token success\"\n );\n }\n rootMeasurement.end({\n success: true,\n accountType: getAccountType(result.account),\n });\n } else {\n /*\n * Instrument an event only if an error code is set. Otherwise, discard it when the redirect response\n * is empty and the error code is missing.\n */\n if (rootMeasurement.event.errorCode) {\n rootMeasurement.end({ success: false });\n } else {\n rootMeasurement.discard();\n }\n }\n\n this.eventHandler.emitEvent(\n EventType.HANDLE_REDIRECT_END,\n InteractionType.Redirect\n );\n\n return result;\n })\n .catch((e) => {\n this.browserStorage.resetRequestCache();\n const eventError = e as EventError;\n // Emit login event if there is an account\n if (loggedInAccounts.length > 0) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Redirect,\n null,\n eventError\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.LOGIN_FAILURE,\n InteractionType.Redirect,\n null,\n eventError\n );\n }\n this.eventHandler.emitEvent(\n EventType.HANDLE_REDIRECT_END,\n InteractionType.Redirect\n );\n\n rootMeasurement.end(\n {\n success: false,\n },\n eventError\n );\n\n throw e;\n });\n }\n\n /**\n * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\n * the page, so any code that follows this function will not execute.\n *\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\n *\n * @param request\n */\n async acquireTokenRedirect(request: RedirectRequest): Promise {\n // Preflight request\n const correlationId = this.getRequestCorrelationId(request);\n this.logger.verbose(\"acquireTokenRedirect called\", correlationId);\n\n const atrMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenPreRedirect,\n correlationId\n );\n atrMeasurement.add({\n accountType: getAccountType(request.account),\n scenarioId: request.scenarioId,\n });\n\n // Override on request only if set, as onRedirectNavigate field is deprecated\n const onRedirectNavigateCb = request.onRedirectNavigate;\n if (onRedirectNavigateCb) {\n request.onRedirectNavigate = (url: string) => {\n const navigate =\n typeof onRedirectNavigateCb === \"function\"\n ? onRedirectNavigateCb(url)\n : undefined;\n if (navigate !== false) {\n atrMeasurement.end({ success: true });\n } else {\n atrMeasurement.discard();\n }\n return navigate;\n };\n } else {\n const configOnRedirectNavigateCb =\n this.config.auth.onRedirectNavigate;\n this.config.auth.onRedirectNavigate = (url: string) => {\n const navigate =\n typeof configOnRedirectNavigateCb === \"function\"\n ? configOnRedirectNavigateCb(url)\n : undefined;\n if (navigate !== false) {\n atrMeasurement.end({ success: true });\n } else {\n atrMeasurement.discard();\n }\n return navigate;\n };\n }\n\n // If logged in, emit acquire token events\n const isLoggedIn = this.getAllAccounts().length > 0;\n try {\n BrowserUtils.redirectPreflightCheck(this.initialized, this.config);\n this.browserStorage.setInteractionInProgress(\n true,\n INTERACTION_TYPE.SIGNIN\n );\n\n if (isLoggedIn) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_START,\n InteractionType.Redirect,\n request\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.LOGIN_START,\n InteractionType.Redirect,\n request\n );\n }\n\n let result: Promise;\n\n if (\n this.platformAuthProvider &&\n this.canUsePlatformBroker(request)\n ) {\n const nativeClient = new PlatformAuthInteractionClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n ApiId.acquireTokenRedirect,\n this.performanceClient,\n this.platformAuthProvider,\n this.getNativeAccountId(request),\n this.nativeInternalStorage,\n correlationId\n );\n result = nativeClient\n .acquireTokenRedirect(request, atrMeasurement)\n .catch((e: AuthError) => {\n if (\n e instanceof NativeAuthError &&\n isFatalNativeAuthError(e)\n ) {\n this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\n const redirectClient =\n this.createRedirectClient(correlationId);\n return redirectClient.acquireToken(request);\n } else if (e instanceof InteractionRequiredAuthError) {\n this.logger.verbose(\n \"acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow\"\n );\n const redirectClient =\n this.createRedirectClient(correlationId);\n return redirectClient.acquireToken(request);\n }\n throw e;\n });\n } else {\n const redirectClient = this.createRedirectClient(correlationId);\n result = redirectClient.acquireToken(request);\n }\n\n return await result;\n } catch (e) {\n this.browserStorage.resetRequestCache();\n atrMeasurement.end({ success: false }, e);\n if (isLoggedIn) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Redirect,\n null,\n e as EventError\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.LOGIN_FAILURE,\n InteractionType.Redirect,\n null,\n e as EventError\n );\n }\n throw e;\n }\n }\n\n // #endregion\n\n // #region Popup Flow\n\n /**\n * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\n *\n * @param request\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n acquireTokenPopup(request: PopupRequest): Promise {\n const correlationId = this.getRequestCorrelationId(request);\n const atPopupMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenPopup,\n correlationId\n );\n\n atPopupMeasurement.add({\n scenarioId: request.scenarioId,\n accountType: getAccountType(request.account),\n });\n\n try {\n this.logger.verbose(\"acquireTokenPopup called\", correlationId);\n preflightCheck(this.initialized, atPopupMeasurement);\n this.browserStorage.setInteractionInProgress(\n true,\n INTERACTION_TYPE.SIGNIN\n );\n } catch (e) {\n // Since this function is syncronous we need to reject\n return Promise.reject(e);\n }\n\n // If logged in, emit acquire token events\n const loggedInAccounts = this.getAllAccounts();\n if (loggedInAccounts.length > 0) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_START,\n InteractionType.Popup,\n request\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.LOGIN_START,\n InteractionType.Popup,\n request\n );\n }\n\n let result: Promise;\n const pkce = this.getPreGeneratedPkceCodes(correlationId);\n\n if (this.canUsePlatformBroker(request)) {\n result = this.acquireTokenNative(\n {\n ...request,\n correlationId,\n },\n ApiId.acquireTokenPopup\n )\n .then((response) => {\n atPopupMeasurement.end({\n success: true,\n isNativeBroker: true,\n accountType: getAccountType(response.account),\n });\n return response;\n })\n .catch((e: AuthError) => {\n if (\n e instanceof NativeAuthError &&\n isFatalNativeAuthError(e)\n ) {\n this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\n const popupClient =\n this.createPopupClient(correlationId);\n return popupClient.acquireToken(request, pkce);\n } else if (e instanceof InteractionRequiredAuthError) {\n this.logger.verbose(\n \"acquireTokenPopup - Resolving interaction required error thrown by native broker by falling back to web flow\"\n );\n const popupClient =\n this.createPopupClient(correlationId);\n return popupClient.acquireToken(request, pkce);\n }\n throw e;\n });\n } else {\n const popupClient = this.createPopupClient(correlationId);\n result = popupClient.acquireToken(request, pkce);\n }\n\n return result\n .then((result) => {\n /*\n * If logged in, emit acquire token events\n */\n const isLoggingIn =\n loggedInAccounts.length < this.getAllAccounts().length;\n if (isLoggingIn) {\n this.eventHandler.emitEvent(\n EventType.LOGIN_SUCCESS,\n InteractionType.Popup,\n result\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Popup,\n result\n );\n }\n\n atPopupMeasurement.end({\n success: true,\n accessTokenSize: result.accessToken.length,\n idTokenSize: result.idToken.length,\n accountType: getAccountType(result.account),\n });\n return result;\n })\n .catch((e: Error) => {\n if (loggedInAccounts.length > 0) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Popup,\n null,\n e\n );\n } else {\n this.eventHandler.emitEvent(\n EventType.LOGIN_FAILURE,\n InteractionType.Popup,\n null,\n e\n );\n }\n\n atPopupMeasurement.end(\n {\n success: false,\n },\n e\n );\n\n // Since this function is syncronous we need to reject\n return Promise.reject(e);\n })\n .finally(async () => {\n this.browserStorage.setInteractionInProgress(false);\n if (this.config.system.asyncPopups) {\n await this.preGeneratePkceCodes(correlationId);\n }\n });\n }\n\n private trackPageVisibilityWithMeasurement(): void {\n const measurement =\n this.ssoSilentMeasurement ||\n this.acquireTokenByCodeAsyncMeasurement;\n if (!measurement) {\n return;\n }\n\n this.logger.info(\n \"Perf: Visibility change detected in \",\n measurement.event.name\n );\n measurement.increment({\n visibilityChangeCount: 1,\n });\n }\n // #endregion\n\n // #region Silent Flow\n\n /**\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\n * - Any browser using a form of Intelligent Tracking Prevention\n * - If there is not an established session with the service\n *\n * In these cases, the request must be done inside a popup or full frame redirect.\n *\n * For the cases where interaction is required, you cannot send a request with prompt=none.\n *\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\n * you session on the server still exists.\n * @param request {@link SsoSilentRequest}\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n async ssoSilent(request: SsoSilentRequest): Promise {\n const correlationId = this.getRequestCorrelationId(request);\n const validRequest = {\n ...request,\n // will be PromptValue.NONE or PromptValue.NO_SESSION\n prompt: request.prompt,\n correlationId: correlationId,\n };\n this.ssoSilentMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.SsoSilent,\n correlationId\n );\n this.ssoSilentMeasurement?.add({\n scenarioId: request.scenarioId,\n accountType: getAccountType(request.account),\n });\n preflightCheck(this.initialized, this.ssoSilentMeasurement);\n this.ssoSilentMeasurement?.increment({\n visibilityChangeCount: 0,\n });\n\n document.addEventListener(\n \"visibilitychange\",\n this.trackPageVisibilityWithMeasurement\n );\n this.logger.verbose(\"ssoSilent called\", correlationId);\n this.eventHandler.emitEvent(\n EventType.SSO_SILENT_START,\n InteractionType.Silent,\n validRequest\n );\n\n let result: Promise;\n\n if (this.canUsePlatformBroker(validRequest)) {\n result = this.acquireTokenNative(\n validRequest,\n ApiId.ssoSilent\n ).catch((e: AuthError) => {\n // If native token acquisition fails for availability reasons fallback to standard flow\n if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {\n this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\n const silentIframeClient = this.createSilentIframeClient(\n validRequest.correlationId\n );\n return silentIframeClient.acquireToken(validRequest);\n }\n throw e;\n });\n } else {\n const silentIframeClient = this.createSilentIframeClient(\n validRequest.correlationId\n );\n result = silentIframeClient.acquireToken(validRequest);\n }\n\n return result\n .then((response) => {\n this.eventHandler.emitEvent(\n EventType.SSO_SILENT_SUCCESS,\n InteractionType.Silent,\n response\n );\n this.ssoSilentMeasurement?.end({\n success: true,\n isNativeBroker: response.fromNativeBroker,\n accessTokenSize: response.accessToken.length,\n idTokenSize: response.idToken.length,\n accountType: getAccountType(response.account),\n });\n return response;\n })\n .catch((e: Error) => {\n this.eventHandler.emitEvent(\n EventType.SSO_SILENT_FAILURE,\n InteractionType.Silent,\n null,\n e\n );\n this.ssoSilentMeasurement?.end(\n {\n success: false,\n },\n e\n );\n throw e;\n })\n .finally(() => {\n document.removeEventListener(\n \"visibilitychange\",\n this.trackPageVisibilityWithMeasurement\n );\n });\n }\n\n /**\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\n * This API is not indended for normal authorization code acquisition and redemption.\n *\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\n *\n * @param request {@link AuthorizationCodeRequest}\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n async acquireTokenByCode(\n request: AuthorizationCodeRequest\n ): Promise {\n const correlationId = this.getRequestCorrelationId(request);\n this.logger.trace(\"acquireTokenByCode called\", correlationId);\n const atbcMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenByCode,\n correlationId\n );\n preflightCheck(this.initialized, atbcMeasurement);\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_BY_CODE_START,\n InteractionType.Silent,\n request\n );\n atbcMeasurement.add({ scenarioId: request.scenarioId });\n\n try {\n if (request.code && request.nativeAccountId) {\n // Throw error in case server returns both spa_code and spa_accountid in exchange for auth code.\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.spaCodeAndNativeAccountIdPresent\n );\n } else if (request.code) {\n const hybridAuthCode = request.code;\n let response = this.hybridAuthCodeResponses.get(hybridAuthCode);\n if (!response) {\n this.logger.verbose(\n \"Initiating new acquireTokenByCode request\",\n correlationId\n );\n response = this.acquireTokenByCodeAsync({\n ...request,\n correlationId,\n })\n .then((result: AuthenticationResult) => {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_BY_CODE_SUCCESS,\n InteractionType.Silent,\n result\n );\n this.hybridAuthCodeResponses.delete(hybridAuthCode);\n atbcMeasurement.end({\n success: true,\n isNativeBroker: result.fromNativeBroker,\n accessTokenSize: result.accessToken.length,\n idTokenSize: result.idToken.length,\n accountType: getAccountType(result.account),\n });\n return result;\n })\n .catch((error: Error) => {\n this.hybridAuthCodeResponses.delete(hybridAuthCode);\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE,\n InteractionType.Silent,\n null,\n error\n );\n atbcMeasurement.end(\n {\n success: false,\n },\n error\n );\n throw error;\n });\n this.hybridAuthCodeResponses.set(hybridAuthCode, response);\n } else {\n this.logger.verbose(\n \"Existing acquireTokenByCode request found\",\n correlationId\n );\n atbcMeasurement.discard();\n }\n return await response;\n } else if (request.nativeAccountId) {\n if (\n this.canUsePlatformBroker(request, request.nativeAccountId)\n ) {\n const result = await this.acquireTokenNative(\n {\n ...request,\n correlationId,\n },\n ApiId.acquireTokenByCode,\n request.nativeAccountId\n ).catch((e: AuthError) => {\n // If native token acquisition fails for availability reasons fallback to standard flow\n if (\n e instanceof NativeAuthError &&\n isFatalNativeAuthError(e)\n ) {\n this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt\n }\n throw e;\n });\n atbcMeasurement.end({\n accountType: getAccountType(result.account),\n success: true,\n });\n return result;\n } else {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform\n );\n }\n } else {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.authCodeOrNativeAccountIdRequired\n );\n }\n } catch (e) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_BY_CODE_FAILURE,\n InteractionType.Silent,\n null,\n e as EventError\n );\n atbcMeasurement.end(\n {\n success: false,\n },\n e\n );\n throw e;\n }\n }\n\n /**\n * Creates a SilentAuthCodeClient to redeem an authorization code.\n * @param request\n * @returns Result of the operation to redeem the authorization code\n */\n private async acquireTokenByCodeAsync(\n request: AuthorizationCodeRequest\n ): Promise {\n this.logger.trace(\n \"acquireTokenByCodeAsync called\",\n request.correlationId\n );\n this.acquireTokenByCodeAsyncMeasurement =\n this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenByCodeAsync,\n request.correlationId\n );\n this.acquireTokenByCodeAsyncMeasurement?.increment({\n visibilityChangeCount: 0,\n });\n document.addEventListener(\n \"visibilitychange\",\n this.trackPageVisibilityWithMeasurement\n );\n const silentAuthCodeClient = this.createSilentAuthCodeClient(\n request.correlationId\n );\n const silentTokenResult = await silentAuthCodeClient\n .acquireToken(request)\n .then((response) => {\n this.acquireTokenByCodeAsyncMeasurement?.end({\n success: true,\n fromCache: response.fromCache,\n isNativeBroker: response.fromNativeBroker,\n });\n return response;\n })\n .catch((tokenRenewalError: Error) => {\n this.acquireTokenByCodeAsyncMeasurement?.end(\n {\n success: false,\n },\n tokenRenewalError\n );\n throw tokenRenewalError;\n })\n .finally(() => {\n document.removeEventListener(\n \"visibilitychange\",\n this.trackPageVisibilityWithMeasurement\n );\n });\n return silentTokenResult;\n }\n\n /**\n * Attempt to acquire an access token from the cache\n * @param silentCacheClient SilentCacheClient\n * @param commonRequest CommonSilentFlowRequest\n * @param silentRequest SilentRequest\n * @returns A promise that, when resolved, returns the access token\n */\n protected async acquireTokenFromCache(\n commonRequest: CommonSilentFlowRequest,\n cacheLookupPolicy: CacheLookupPolicy\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.AcquireTokenFromCache,\n commonRequest.correlationId\n );\n switch (cacheLookupPolicy) {\n case CacheLookupPolicy.Default:\n case CacheLookupPolicy.AccessToken:\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\n const silentCacheClient = this.createSilentCacheClient(\n commonRequest.correlationId\n );\n return invokeAsync(\n silentCacheClient.acquireToken.bind(silentCacheClient),\n PerformanceEvents.SilentCacheClientAcquireToken,\n this.logger,\n this.performanceClient,\n commonRequest.correlationId\n )(commonRequest);\n default:\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenRefreshRequired\n );\n }\n }\n\n /**\n * Attempt to acquire an access token via a refresh token\n * @param commonRequest CommonSilentFlowRequest\n * @param cacheLookupPolicy CacheLookupPolicy\n * @returns A promise that, when resolved, returns the access token\n */\n public async acquireTokenByRefreshToken(\n commonRequest: CommonSilentFlowRequest,\n cacheLookupPolicy: CacheLookupPolicy\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.AcquireTokenByRefreshToken,\n commonRequest.correlationId\n );\n switch (cacheLookupPolicy) {\n case CacheLookupPolicy.Default:\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\n case CacheLookupPolicy.RefreshToken:\n case CacheLookupPolicy.RefreshTokenAndNetwork:\n const silentRefreshClient = this.createSilentRefreshClient(\n commonRequest.correlationId\n );\n\n return invokeAsync(\n silentRefreshClient.acquireToken.bind(silentRefreshClient),\n PerformanceEvents.SilentRefreshClientAcquireToken,\n this.logger,\n this.performanceClient,\n commonRequest.correlationId\n )(commonRequest);\n default:\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenRefreshRequired\n );\n }\n }\n\n /**\n * Attempt to acquire an access token via an iframe\n * @param request CommonSilentFlowRequest\n * @returns A promise that, when resolved, returns the access token\n */\n protected async acquireTokenBySilentIframe(\n request: CommonSilentFlowRequest\n ): Promise {\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.AcquireTokenBySilentIframe,\n request.correlationId\n );\n\n const silentIframeClient = this.createSilentIframeClient(\n request.correlationId\n );\n\n return invokeAsync(\n silentIframeClient.acquireToken.bind(silentIframeClient),\n PerformanceEvents.SilentIframeClientAcquireToken,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request);\n }\n\n // #endregion\n\n // #region Logout\n\n /**\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\n * @param logoutRequest\n * @deprecated\n */\n async logout(logoutRequest?: EndSessionRequest): Promise {\n const correlationId = this.getRequestCorrelationId(logoutRequest);\n this.logger.warning(\n \"logout API is deprecated and will be removed in msal-browser v3.0.0. Use logoutRedirect instead.\",\n correlationId\n );\n return this.logoutRedirect({\n correlationId,\n ...logoutRequest,\n });\n }\n\n /**\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\n * Default behaviour is to redirect the user to `window.location.href`.\n * @param logoutRequest\n */\n async logoutRedirect(logoutRequest?: EndSessionRequest): Promise {\n const correlationId = this.getRequestCorrelationId(logoutRequest);\n BrowserUtils.redirectPreflightCheck(this.initialized, this.config);\n this.browserStorage.setInteractionInProgress(\n true,\n INTERACTION_TYPE.SIGNOUT\n );\n\n const redirectClient = this.createRedirectClient(correlationId);\n return redirectClient.logout(logoutRequest);\n }\n\n /**\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\n * @param logoutRequest\n */\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Promise {\n try {\n const correlationId = this.getRequestCorrelationId(logoutRequest);\n BrowserUtils.preflightCheck(this.initialized);\n this.browserStorage.setInteractionInProgress(\n true,\n INTERACTION_TYPE.SIGNOUT\n );\n\n const popupClient = this.createPopupClient(correlationId);\n return popupClient.logout(logoutRequest).finally(() => {\n this.browserStorage.setInteractionInProgress(false);\n });\n } catch (e) {\n // Since this function is syncronous we need to reject\n return Promise.reject(e);\n }\n }\n\n /**\n * Creates a cache interaction client to clear broswer cache.\n * @param logoutRequest\n */\n async clearCache(logoutRequest?: ClearCacheRequest): Promise {\n if (!this.isBrowserEnvironment) {\n this.logger.info(\"in non-browser environment, returning early.\");\n return;\n }\n const correlationId = this.getRequestCorrelationId(logoutRequest);\n const cacheClient = this.createSilentCacheClient(correlationId);\n return cacheClient.logout(logoutRequest);\n }\n\n // #endregion\n\n // #region Account APIs\n\n /**\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\n * @returns Array of AccountInfo objects in cache\n */\n getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {\n const correlationId = this.getRequestCorrelationId();\n return AccountManager.getAllAccounts(\n this.logger,\n this.browserStorage,\n this.isBrowserEnvironment,\n correlationId,\n accountFilter\n );\n }\n\n /**\n * Returns the first account found in the cache that matches the account filter passed in.\n * @param accountFilter\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\n */\n getAccount(accountFilter: AccountFilter): AccountInfo | null {\n const correlationId = this.getRequestCorrelationId();\n return AccountManager.getAccount(\n accountFilter,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Returns the signed in account matching username.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found.\n * This API is provided for convenience but getAccountById should be used for best reliability\n * @param username\n * @returns The account object stored in MSAL\n */\n getAccountByUsername(username: string): AccountInfo | null {\n const correlationId = this.getRequestCorrelationId();\n return AccountManager.getAccountByUsername(\n username,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Returns the signed in account matching homeAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param homeAccountId\n * @returns The account object stored in MSAL\n */\n getAccountByHomeId(homeAccountId: string): AccountInfo | null {\n const correlationId = this.getRequestCorrelationId();\n return AccountManager.getAccountByHomeId(\n homeAccountId,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Returns the signed in account matching localAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param localAccountId\n * @returns The account object stored in MSAL\n */\n getAccountByLocalId(localAccountId: string): AccountInfo | null {\n const correlationId = this.getRequestCorrelationId();\n return AccountManager.getAccountByLocalId(\n localAccountId,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\n * @param account\n */\n setActiveAccount(account: AccountInfo | null): void {\n const correlationId = this.getRequestCorrelationId();\n AccountManager.setActiveAccount(\n account,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Gets the currently active account\n */\n getActiveAccount(): AccountInfo | null {\n const correlationId = this.getRequestCorrelationId();\n return AccountManager.getActiveAccount(\n this.browserStorage,\n correlationId\n );\n }\n\n // #endregion\n\n /**\n * Hydrates the cache with the tokens from an AuthenticationResult\n * @param result\n * @param request\n * @returns\n */\n async hydrateCache(\n result: AuthenticationResult,\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise {\n this.logger.verbose(\"hydrateCache called\");\n\n // Account gets saved to browser storage regardless of native or not\n const accountEntity = AccountEntity.createFromAccountInfo(\n result.account,\n result.cloudGraphHostName,\n result.msGraphHost\n );\n await this.browserStorage.setAccount(\n accountEntity,\n result.correlationId\n );\n\n if (result.fromNativeBroker) {\n this.logger.verbose(\n \"Response was from native broker, storing in-memory\"\n );\n // Tokens from native broker are stored in-memory\n return this.nativeInternalStorage.hydrateCache(result, request);\n } else {\n return this.browserStorage.hydrateCache(result, request);\n }\n }\n\n // #region Helpers\n\n /**\n * Acquire a token from native device (e.g. WAM)\n * @param request\n */\n public async acquireTokenNative(\n request: PopupRequest | SilentRequest | SsoSilentRequest,\n apiId: ApiId,\n accountId?: string,\n cacheLookupPolicy?: CacheLookupPolicy\n ): Promise {\n this.logger.trace(\"acquireTokenNative called\");\n if (!this.platformAuthProvider) {\n throw createBrowserAuthError(\n BrowserAuthErrorCodes.nativeConnectionNotEstablished\n );\n }\n\n const nativeClient = new PlatformAuthInteractionClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n apiId,\n this.performanceClient,\n this.platformAuthProvider,\n accountId || this.getNativeAccountId(request),\n this.nativeInternalStorage,\n request.correlationId\n );\n\n return nativeClient.acquireToken(request, cacheLookupPolicy);\n }\n\n /**\n * Returns boolean indicating if this request can use the platform broker\n * @param request\n */\n public canUsePlatformBroker(\n request: RedirectRequest | PopupRequest | SsoSilentRequest,\n accountId?: string\n ): boolean {\n this.logger.trace(\"canUsePlatformBroker called\");\n if (!this.platformAuthProvider) {\n this.logger.trace(\n \"canUsePlatformBroker: platform broker unavilable, returning false\"\n );\n return false;\n }\n\n if (\n !isPlatformAuthAllowed(\n this.config,\n this.logger,\n this.platformAuthProvider,\n request.authenticationScheme\n )\n ) {\n this.logger.trace(\n \"canUsePlatformBroker: isBrokerAvailable returned false, returning false\"\n );\n return false;\n }\n\n if (request.prompt) {\n switch (request.prompt) {\n case PromptValue.NONE:\n case PromptValue.CONSENT:\n case PromptValue.LOGIN:\n this.logger.trace(\n \"canUsePlatformBroker: prompt is compatible with platform broker flow\"\n );\n break;\n default:\n this.logger.trace(\n `canUsePlatformBroker: prompt = ${request.prompt} is not compatible with platform broker flow, returning false`\n );\n return false;\n }\n }\n\n if (!accountId && !this.getNativeAccountId(request)) {\n this.logger.trace(\n \"canUsePlatformBroker: nativeAccountId is not available, returning false\"\n );\n return false;\n }\n\n return true;\n }\n\n /**\n * Get the native accountId from the account\n * @param request\n * @returns\n */\n public getNativeAccountId(\n request: RedirectRequest | PopupRequest | SsoSilentRequest\n ): string {\n const account =\n request.account ||\n this.getAccount({\n loginHint: request.loginHint,\n sid: request.sid,\n }) ||\n this.getActiveAccount();\n\n return (account && account.nativeAccountId) || \"\";\n }\n\n /**\n * Returns new instance of the Popup Interaction Client\n * @param correlationId\n */\n public createPopupClient(correlationId?: string): PopupClient {\n return new PopupClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n this.performanceClient,\n this.nativeInternalStorage,\n this.platformAuthProvider,\n correlationId\n );\n }\n\n /**\n * Returns new instance of the Redirect Interaction Client\n * @param correlationId\n */\n protected createRedirectClient(correlationId?: string): RedirectClient {\n return new RedirectClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n this.performanceClient,\n this.nativeInternalStorage,\n this.platformAuthProvider,\n correlationId\n );\n }\n\n /**\n * Returns new instance of the Silent Iframe Interaction Client\n * @param correlationId\n */\n public createSilentIframeClient(\n correlationId?: string\n ): SilentIframeClient {\n return new SilentIframeClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n ApiId.ssoSilent,\n this.performanceClient,\n this.nativeInternalStorage,\n this.platformAuthProvider,\n correlationId\n );\n }\n\n /**\n * Returns new instance of the Silent Cache Interaction Client\n */\n protected createSilentCacheClient(\n correlationId?: string\n ): SilentCacheClient {\n return new SilentCacheClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n this.performanceClient,\n this.platformAuthProvider,\n correlationId\n );\n }\n\n /**\n * Returns new instance of the Silent Refresh Interaction Client\n */\n protected createSilentRefreshClient(\n correlationId?: string\n ): SilentRefreshClient {\n return new SilentRefreshClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n this.performanceClient,\n this.platformAuthProvider,\n correlationId\n );\n }\n\n /**\n * Returns new instance of the Silent AuthCode Interaction Client\n */\n protected createSilentAuthCodeClient(\n correlationId?: string\n ): SilentAuthCodeClient {\n return new SilentAuthCodeClient(\n this.config,\n this.browserStorage,\n this.browserCrypto,\n this.logger,\n this.eventHandler,\n this.navigationClient,\n ApiId.acquireTokenByCode,\n this.performanceClient,\n this.platformAuthProvider,\n correlationId\n );\n }\n\n /**\n * Adds event callbacks to array\n * @param callback\n */\n addEventCallback(\n callback: EventCallbackFunction,\n eventTypes?: Array\n ): string | null {\n return this.eventHandler.addEventCallback(callback, eventTypes);\n }\n\n /**\n * Removes callback with provided id from callback array\n * @param callbackId\n */\n removeEventCallback(callbackId: string): void {\n this.eventHandler.removeEventCallback(callbackId);\n }\n\n /**\n * Registers a callback to receive performance events.\n *\n * @param {PerformanceCallbackFunction} callback\n * @returns {string}\n */\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\n BrowserUtils.blockNonBrowserEnvironment();\n return this.performanceClient.addPerformanceCallback(callback);\n }\n\n /**\n * Removes a callback registered with addPerformanceCallback.\n *\n * @param {string} callbackId\n * @returns {boolean}\n */\n removePerformanceCallback(callbackId: string): boolean {\n return this.performanceClient.removePerformanceCallback(callbackId);\n }\n\n /**\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\n * @deprecated These events will be raised by default and this method will be removed in a future major version.\n */\n enableAccountStorageEvents(): void {\n if (\n this.config.cache.cacheLocation !==\n BrowserCacheLocation.LocalStorage\n ) {\n this.logger.info(\n \"Account storage events are only available when cacheLocation is set to localStorage\"\n );\n return;\n }\n\n this.eventHandler.subscribeCrossTab();\n }\n\n /**\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\n * @deprecated These events will be raised by default and this method will be removed in a future major version.\n */\n disableAccountStorageEvents(): void {\n if (\n this.config.cache.cacheLocation !==\n BrowserCacheLocation.LocalStorage\n ) {\n this.logger.info(\n \"Account storage events are only available when cacheLocation is set to localStorage\"\n );\n return;\n }\n\n this.eventHandler.unsubscribeCrossTab();\n }\n\n /**\n * Gets the token cache for the application.\n */\n getTokenCache(): ITokenCache {\n return this.tokenCache;\n }\n\n /**\n * Returns the logger instance\n */\n public getLogger(): Logger {\n return this.logger;\n }\n\n /**\n * Replaces the default logger set in configurations with new Logger with new configurations\n * @param logger Logger instance\n */\n setLogger(logger: Logger): void {\n this.logger = logger;\n }\n\n /**\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\n * @param sku\n * @param version\n */\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void {\n // Validate the SKU passed in is one we expect\n this.browserStorage.setWrapperMetadata(sku, version);\n }\n\n /**\n * Sets navigation client\n * @param navigationClient\n */\n setNavigationClient(navigationClient: INavigationClient): void {\n this.navigationClient = navigationClient;\n }\n\n /**\n * Returns the configuration object\n */\n public getConfiguration(): BrowserConfiguration {\n return this.config;\n }\n\n /**\n * Returns the performance client\n */\n public getPerformanceClient(): IPerformanceClient {\n return this.performanceClient;\n }\n\n /**\n * Returns the browser env indicator\n */\n public isBrowserEnv(): boolean {\n return this.isBrowserEnvironment;\n }\n\n /**\n * Generates a correlation id for a request if none is provided.\n *\n * @protected\n * @param {?Partial} [request]\n * @returns {string}\n */\n protected getRequestCorrelationId(\n request?: Partial\n ): string {\n if (request?.correlationId) {\n return request.correlationId;\n }\n\n if (this.isBrowserEnvironment) {\n return createNewGuid();\n }\n\n /*\n * Included for fallback for non-browser environments,\n * and to ensure this method always returns a string.\n */\n return Constants.EMPTY_STRING;\n }\n\n // #endregion\n\n /**\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\n * any code that follows this function will not execute.\n *\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\n *\n * @param request\n */\n async loginRedirect(request?: RedirectRequest): Promise {\n const correlationId: string = this.getRequestCorrelationId(request);\n this.logger.verbose(\"loginRedirect called\", correlationId);\n return this.acquireTokenRedirect({\n correlationId,\n ...(request || DEFAULT_REQUEST),\n });\n }\n\n /**\n * Use when initiating the login process via opening a popup window in the user's browser\n *\n * @param request\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n loginPopup(request?: PopupRequest): Promise {\n const correlationId: string = this.getRequestCorrelationId(request);\n this.logger.verbose(\"loginPopup called\", correlationId);\n return this.acquireTokenPopup({\n correlationId,\n ...(request || DEFAULT_REQUEST),\n });\n }\n\n /**\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\n *\n * @param {@link (SilentRequest:type)}\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\n */\n async acquireTokenSilent(\n request: SilentRequest\n ): Promise {\n const correlationId = this.getRequestCorrelationId(request);\n const atsMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenSilent,\n correlationId\n );\n atsMeasurement.add({\n cacheLookupPolicy: request.cacheLookupPolicy,\n scenarioId: request.scenarioId,\n });\n\n preflightCheck(this.initialized, atsMeasurement);\n this.logger.verbose(\"acquireTokenSilent called\", correlationId);\n\n const account = request.account || this.getActiveAccount();\n if (!account) {\n throw createBrowserAuthError(BrowserAuthErrorCodes.noAccountError);\n }\n atsMeasurement.add({ accountType: getAccountType(account) });\n\n return this.acquireTokenSilentDeduped(request, account, correlationId)\n .then((result) => {\n atsMeasurement.end({\n success: true,\n fromCache: result.fromCache,\n isNativeBroker: result.fromNativeBroker,\n accessTokenSize: result.accessToken.length,\n idTokenSize: result.idToken.length,\n });\n return {\n ...result,\n state: request.state,\n correlationId: correlationId, // Ensures PWB scenarios can correctly match request to response\n };\n })\n .catch((error: Error) => {\n if (error instanceof AuthError) {\n // Ensures PWB scenarios can correctly match request to response\n error.setCorrelationId(correlationId);\n }\n\n atsMeasurement.end(\n {\n success: false,\n },\n error\n );\n throw error;\n });\n }\n\n /**\n * Checks if identical request is already in flight and returns reference to the existing promise or fires off a new one if this is the first\n * @param request\n * @param account\n * @param correlationId\n * @returns\n */\n private async acquireTokenSilentDeduped(\n request: SilentRequest,\n account: AccountInfo,\n correlationId: string\n ): Promise {\n const thumbprint = getRequestThumbprint(\n this.config.auth.clientId,\n {\n ...request,\n authority: request.authority || this.config.auth.authority,\n correlationId: correlationId,\n },\n account.homeAccountId\n );\n const silentRequestKey = JSON.stringify(thumbprint);\n\n const inProgressRequest =\n this.activeSilentTokenRequests.get(silentRequestKey);\n\n if (typeof inProgressRequest === \"undefined\") {\n this.logger.verbose(\n \"acquireTokenSilent called for the first time, storing active request\",\n correlationId\n );\n this.performanceClient.addFields({ deduped: false }, correlationId);\n\n const activeRequest = invokeAsync(\n this.acquireTokenSilentAsync.bind(this),\n PerformanceEvents.AcquireTokenSilentAsync,\n this.logger,\n this.performanceClient,\n correlationId\n )(\n {\n ...request,\n correlationId,\n },\n account\n );\n this.activeSilentTokenRequests.set(silentRequestKey, activeRequest);\n\n return activeRequest.finally(() => {\n this.activeSilentTokenRequests.delete(silentRequestKey);\n });\n } else {\n this.logger.verbose(\n \"acquireTokenSilent has been called previously, returning the result from the first call\",\n correlationId\n );\n this.performanceClient.addFields({ deduped: true }, correlationId);\n return inProgressRequest;\n }\n }\n\n /**\n * Silently acquire an access token for a given set of scopes. Will use cached token if available, otherwise will attempt to acquire a new token from the network via refresh token.\n * @param {@link (SilentRequest:type)}\n * @param {@link (AccountInfo:type)}\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse}\n */\n protected async acquireTokenSilentAsync(\n request: SilentRequest & { correlationId: string },\n account: AccountInfo\n ): Promise {\n const trackPageVisibility = () =>\n this.trackPageVisibility(request.correlationId);\n this.performanceClient.addQueueMeasurement(\n PerformanceEvents.AcquireTokenSilentAsync,\n request.correlationId\n );\n\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_START,\n InteractionType.Silent,\n request\n );\n\n if (request.correlationId) {\n this.performanceClient.incrementFields(\n { visibilityChangeCount: 0 },\n request.correlationId\n );\n }\n\n document.addEventListener(\"visibilitychange\", trackPageVisibility);\n\n const silentRequest = await invokeAsync(\n initializeSilentRequest,\n PerformanceEvents.InitializeSilentRequest,\n this.logger,\n this.performanceClient,\n request.correlationId\n )(request, account, this.config, this.performanceClient, this.logger);\n const cacheLookupPolicy =\n request.cacheLookupPolicy || CacheLookupPolicy.Default;\n\n const result = this.acquireTokenSilentNoIframe(\n silentRequest,\n cacheLookupPolicy\n ).catch(async (refreshTokenError: AuthError) => {\n const shouldTryToResolveSilently =\n checkIfRefreshTokenErrorCanBeResolvedSilently(\n refreshTokenError,\n cacheLookupPolicy\n );\n\n if (shouldTryToResolveSilently) {\n if (!this.activeIframeRequest) {\n let _resolve: (result: boolean) => void;\n // Always set the active request tracker immediately after checking it to prevent races\n this.activeIframeRequest = [\n new Promise((resolve) => {\n _resolve = resolve;\n }),\n silentRequest.correlationId,\n ];\n this.logger.verbose(\n \"Refresh token expired/invalid or CacheLookupPolicy is set to Skip, attempting acquire token by iframe.\",\n silentRequest.correlationId\n );\n return invokeAsync(\n this.acquireTokenBySilentIframe.bind(this),\n PerformanceEvents.AcquireTokenBySilentIframe,\n this.logger,\n this.performanceClient,\n silentRequest.correlationId\n )(silentRequest)\n .then((iframeResult) => {\n _resolve(true);\n return iframeResult;\n })\n .catch((e) => {\n _resolve(false);\n throw e;\n })\n .finally(() => {\n this.activeIframeRequest = undefined;\n });\n } else if (cacheLookupPolicy !== CacheLookupPolicy.Skip) {\n const [activePromise, activeCorrelationId] =\n this.activeIframeRequest;\n this.logger.verbose(\n `Iframe request is already in progress, awaiting resolution for request with correlationId: ${activeCorrelationId}`,\n silentRequest.correlationId\n );\n const awaitConcurrentIframeMeasure =\n this.performanceClient.startMeasurement(\n PerformanceEvents.AwaitConcurrentIframe,\n silentRequest.correlationId\n );\n awaitConcurrentIframeMeasure.add({\n awaitIframeCorrelationId: activeCorrelationId,\n });\n\n const activePromiseResult = await activePromise;\n awaitConcurrentIframeMeasure.end({\n success: activePromiseResult,\n });\n if (activePromiseResult) {\n this.logger.verbose(\n `Parallel iframe request with correlationId: ${activeCorrelationId} succeeded. Retrying cache and/or RT redemption`,\n silentRequest.correlationId\n );\n // Retry cache lookup and/or RT exchange after iframe completes\n return this.acquireTokenSilentNoIframe(\n silentRequest,\n cacheLookupPolicy\n );\n } else {\n this.logger.info(\n `Iframe request with correlationId: ${activeCorrelationId} failed. Interaction is required.`\n );\n // If previous iframe request failed, it's unlikely to succeed this time. Throw original error.\n throw refreshTokenError;\n }\n } else {\n // Cache policy set to skip and another iframe request is already in progress\n this.logger.warning(\n \"Another iframe request is currently in progress and CacheLookupPolicy is set to Skip. This may result in degraded performance and/or reliability for both calls. Please consider changing the CacheLookupPolicy to take advantage of request queuing and token cache.\",\n silentRequest.correlationId\n );\n return invokeAsync(\n this.acquireTokenBySilentIframe.bind(this),\n PerformanceEvents.AcquireTokenBySilentIframe,\n this.logger,\n this.performanceClient,\n silentRequest.correlationId\n )(silentRequest);\n }\n } else {\n // Error cannot be silently resolved or iframe renewal is not allowed, interaction required\n throw refreshTokenError;\n }\n });\n\n return result\n .then((response) => {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Silent,\n response\n );\n if (request.correlationId) {\n this.performanceClient.addFields(\n {\n fromCache: response.fromCache,\n isNativeBroker: response.fromNativeBroker,\n },\n request.correlationId\n );\n }\n\n return response;\n })\n .catch((tokenRenewalError: Error) => {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Silent,\n null,\n tokenRenewalError\n );\n throw tokenRenewalError;\n })\n .finally(() => {\n document.removeEventListener(\n \"visibilitychange\",\n trackPageVisibility\n );\n });\n }\n\n /**\n * AcquireTokenSilent without the iframe fallback. This is used to enable the correct fallbacks in cases where there's a potential for multiple silent requests to be made in parallel and prevent those requests from making concurrent iframe requests.\n * @param silentRequest\n * @param cacheLookupPolicy\n * @returns\n */\n private async acquireTokenSilentNoIframe(\n silentRequest: CommonSilentFlowRequest,\n cacheLookupPolicy: CacheLookupPolicy\n ): Promise {\n // if the cache policy is set to access_token only, we should not be hitting the native layer yet\n if (\n isPlatformAuthAllowed(\n this.config,\n this.logger,\n this.platformAuthProvider,\n silentRequest.authenticationScheme\n ) &&\n silentRequest.account.nativeAccountId\n ) {\n this.logger.verbose(\n \"acquireTokenSilent - attempting to acquire token from native platform\"\n );\n return this.acquireTokenNative(\n silentRequest,\n ApiId.acquireTokenSilent_silentFlow,\n silentRequest.account.nativeAccountId,\n cacheLookupPolicy\n ).catch(async (e: AuthError) => {\n // If native token acquisition fails for availability reasons fallback to web flow\n if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {\n this.logger.verbose(\n \"acquireTokenSilent - native platform unavailable, falling back to web flow\"\n );\n this.platformAuthProvider = undefined; // Prevent future requests from continuing to attempt\n // Cache will not contain tokens, given that previous WAM requests succeeded. Skip cache and RT renewal and go straight to iframe renewal\n throw createClientAuthError(\n ClientAuthErrorCodes.tokenRefreshRequired\n );\n }\n throw e;\n });\n } else {\n this.logger.verbose(\n \"acquireTokenSilent - attempting to acquire token from web flow\"\n );\n // add logs to identify embedded cache retrieval\n if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\n this.logger.verbose(\n \"acquireTokenSilent - cache lookup policy set to AccessToken, attempting to acquire token from local cache\"\n );\n }\n return invokeAsync(\n this.acquireTokenFromCache.bind(this),\n PerformanceEvents.AcquireTokenFromCache,\n this.logger,\n this.performanceClient,\n silentRequest.correlationId\n )(silentRequest, cacheLookupPolicy).catch(\n (cacheError: AuthError) => {\n if (cacheLookupPolicy === CacheLookupPolicy.AccessToken) {\n throw cacheError;\n }\n\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_NETWORK_START,\n InteractionType.Silent,\n silentRequest\n );\n\n return invokeAsync(\n this.acquireTokenByRefreshToken.bind(this),\n PerformanceEvents.AcquireTokenByRefreshToken,\n this.logger,\n this.performanceClient,\n silentRequest.correlationId\n )(silentRequest, cacheLookupPolicy);\n }\n );\n }\n }\n\n /**\n * Pre-generates PKCE codes and stores it in local variable\n * @param correlationId\n */\n private async preGeneratePkceCodes(correlationId: string): Promise {\n this.logger.verbose(\"Generating new PKCE codes\");\n this.pkceCode = await invokeAsync(\n generatePkceCodes,\n PerformanceEvents.GeneratePkceCodes,\n this.logger,\n this.performanceClient,\n correlationId\n )(this.performanceClient, this.logger, correlationId);\n return Promise.resolve();\n }\n\n /**\n * Provides pre-generated PKCE codes, if any\n * @param correlationId\n */\n private getPreGeneratedPkceCodes(\n correlationId: string\n ): PkceCodes | undefined {\n this.logger.verbose(\"Attempting to pick up pre-generated PKCE codes\");\n const res = this.pkceCode ? { ...this.pkceCode } : undefined;\n this.pkceCode = undefined;\n this.logger.verbose(\n `${res ? \"Found\" : \"Did not find\"} pre-generated PKCE codes`\n );\n this.performanceClient.addFields(\n { usePreGeneratedPkce: !!res },\n correlationId\n );\n return res;\n }\n\n private logMultipleInstances(\n performanceEvent: InProgressPerformanceEvent\n ): void {\n const clientId = this.config.auth.clientId;\n\n if (!window) return;\n // @ts-ignore\n window.msal = window.msal || {};\n // @ts-ignore\n window.msal.clientIds = window.msal.clientIds || [];\n\n // @ts-ignore\n const clientIds: string[] = window.msal.clientIds;\n\n if (clientIds.length > 0) {\n this.logger.verbose(\n \"There is already an instance of MSAL.js in the window.\"\n );\n }\n // @ts-ignore\n window.msal.clientIds.push(clientId);\n collectInstanceStats(clientId, performanceEvent, this.logger);\n }\n}\n\n/**\n * Determines whether an error thrown by the refresh token endpoint can be resolved without interaction\n * @param refreshTokenError\n * @param silentRequest\n * @param cacheLookupPolicy\n * @returns\n */\nfunction checkIfRefreshTokenErrorCanBeResolvedSilently(\n refreshTokenError: AuthError,\n cacheLookupPolicy: CacheLookupPolicy\n): boolean {\n const noInteractionRequired = !(\n refreshTokenError instanceof InteractionRequiredAuthError &&\n // For refresh token errors, bad_token does not always require interaction (silently resolvable)\n refreshTokenError.subError !==\n InteractionRequiredAuthErrorCodes.badToken\n );\n\n // Errors that result when the refresh token needs to be replaced\n const refreshTokenRefreshRequired =\n refreshTokenError.errorCode === BrowserConstants.INVALID_GRANT_ERROR ||\n refreshTokenError.errorCode ===\n ClientAuthErrorCodes.tokenRefreshRequired;\n\n // Errors that may be resolved before falling back to interaction (through iframe renewal)\n const isSilentlyResolvable =\n (noInteractionRequired && refreshTokenRefreshRequired) ||\n refreshTokenError.errorCode ===\n InteractionRequiredAuthErrorCodes.noTokensFound ||\n refreshTokenError.errorCode ===\n InteractionRequiredAuthErrorCodes.refreshTokenExpired;\n\n // Only these policies allow for an iframe renewal attempt\n const tryIframeRenewal = iFrameRenewalPolicies.includes(cacheLookupPolicy);\n\n return isSilentlyResolvable && tryIframeRenewal;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BridgeStatusCode } from \"./BridgeStatusCode.js\";\n\nexport type BridgeError = {\n status: BridgeStatusCode;\n code?: string; // auth_flow_last_error such as invalid_grant\n subError?: string; // server_suberror_code such as consent_required\n description?: string;\n properties?: object; // additional telemetry info\n};\n\nexport function isBridgeError(error: unknown): error is BridgeError {\n return (error as BridgeError).status !== undefined;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { TokenRequest } from \"../TokenRequest.js\";\nimport { AccountInfo as NaaAccountInfo } from \"../AccountInfo.js\";\nimport { RedirectRequest } from \"../../request/RedirectRequest.js\";\nimport { PopupRequest } from \"../../request/PopupRequest.js\";\nimport {\n AccountInfo as MsalAccountInfo,\n AuthError,\n ClientAuthError,\n ClientConfigurationError,\n InteractionRequiredAuthError,\n ServerError,\n ICrypto,\n Logger,\n AuthToken,\n TokenClaims,\n ClientAuthErrorCodes,\n AuthenticationScheme,\n RequestParameterBuilder,\n StringUtils,\n createClientAuthError,\n OIDC_DEFAULT_SCOPES,\n AccountInfo,\n IdTokenEntity,\n AccessTokenEntity,\n TenantProfile,\n buildTenantProfile,\n TimeUtils,\n} from \"@azure/msal-common/browser\";\nimport { isBridgeError } from \"../BridgeError.js\";\nimport { BridgeStatusCode } from \"../BridgeStatusCode.js\";\nimport { AuthenticationResult } from \"../../response/AuthenticationResult.js\";\nimport {} from \"../../error/BrowserAuthErrorCodes.js\";\nimport { AuthResult } from \"../AuthResult.js\";\nimport { SsoSilentRequest } from \"../../request/SsoSilentRequest.js\";\nimport { SilentRequest } from \"../../request/SilentRequest.js\";\n\nexport class NestedAppAuthAdapter {\n protected crypto: ICrypto;\n protected logger: Logger;\n protected clientId: string;\n protected clientCapabilities: string[];\n\n constructor(\n clientId: string,\n clientCapabilities: string[],\n crypto: ICrypto,\n logger: Logger\n ) {\n this.clientId = clientId;\n this.clientCapabilities = clientCapabilities;\n this.crypto = crypto;\n this.logger = logger;\n }\n\n public toNaaTokenRequest(\n request:\n | PopupRequest\n | RedirectRequest\n | SilentRequest\n | SsoSilentRequest\n ): TokenRequest {\n let extraParams: Map;\n if (request.extraQueryParameters === undefined) {\n extraParams = new Map();\n } else {\n extraParams = new Map(\n Object.entries(request.extraQueryParameters)\n );\n }\n\n const correlationId =\n request.correlationId || this.crypto.createNewGuid();\n const claims = RequestParameterBuilder.addClientCapabilitiesToClaims(\n request.claims,\n this.clientCapabilities\n );\n const scopes = request.scopes || OIDC_DEFAULT_SCOPES;\n const tokenRequest: TokenRequest = {\n platformBrokerId: request.account?.homeAccountId,\n clientId: this.clientId,\n authority: request.authority,\n scope: scopes.join(\" \"),\n correlationId,\n claims: !StringUtils.isEmptyObj(claims) ? claims : undefined,\n state: request.state,\n authenticationScheme:\n request.authenticationScheme || AuthenticationScheme.BEARER,\n extraParameters: extraParams,\n };\n\n return tokenRequest;\n }\n\n public fromNaaTokenResponse(\n request: TokenRequest,\n response: AuthResult,\n reqTimestamp: number\n ): AuthenticationResult {\n if (!response.token.id_token || !response.token.access_token) {\n throw createClientAuthError(ClientAuthErrorCodes.nullOrEmptyToken);\n }\n\n // Request timestamp and AuthResult expires_in are in seconds, converting to Date for AuthenticationResult\n const expiresOn = TimeUtils.toDateFromSeconds(\n reqTimestamp + (response.token.expires_in || 0)\n );\n const idTokenClaims = AuthToken.extractTokenClaims(\n response.token.id_token,\n this.crypto.base64Decode\n );\n const account = this.fromNaaAccountInfo(\n response.account,\n response.token.id_token,\n idTokenClaims\n );\n const scopes = response.token.scope || request.scope;\n\n const authenticationResult: AuthenticationResult = {\n authority: response.token.authority || account.environment,\n uniqueId: account.localAccountId,\n tenantId: account.tenantId,\n scopes: scopes.split(\" \"),\n account,\n idToken: response.token.id_token,\n idTokenClaims,\n accessToken: response.token.access_token,\n fromCache: false,\n expiresOn: expiresOn,\n tokenType:\n request.authenticationScheme || AuthenticationScheme.BEARER,\n correlationId: request.correlationId,\n extExpiresOn: expiresOn,\n state: request.state,\n };\n\n return authenticationResult;\n }\n\n /*\n * export type AccountInfo = {\n * homeAccountId: string;\n * environment: string;\n * tenantId: string;\n * username: string;\n * localAccountId: string;\n * name?: string;\n * idToken?: string;\n * idTokenClaims?: TokenClaims & {\n * [key: string]:\n * | string\n * | number\n * | string[]\n * | object\n * | undefined\n * | unknown;\n * };\n * nativeAccountId?: string;\n * authorityType?: string;\n * };\n */\n public fromNaaAccountInfo(\n fromAccount: NaaAccountInfo,\n idToken?: string,\n idTokenClaims?: TokenClaims\n ): MsalAccountInfo {\n const effectiveIdTokenClaims =\n idTokenClaims || (fromAccount.idTokenClaims as TokenClaims);\n\n const localAccountId =\n fromAccount.localAccountId ||\n effectiveIdTokenClaims?.oid ||\n effectiveIdTokenClaims?.sub ||\n \"\";\n\n const tenantId =\n fromAccount.tenantId || effectiveIdTokenClaims?.tid || \"\";\n\n const homeAccountId =\n fromAccount.homeAccountId || `${localAccountId}.${tenantId}`;\n\n const username =\n fromAccount.username ||\n effectiveIdTokenClaims?.preferred_username ||\n \"\";\n\n const name = fromAccount.name || effectiveIdTokenClaims?.name;\n\n const loginHint =\n fromAccount.loginHint || effectiveIdTokenClaims?.login_hint;\n\n const tenantProfiles = new Map();\n\n const tenantProfile = buildTenantProfile(\n homeAccountId,\n localAccountId,\n tenantId,\n effectiveIdTokenClaims\n );\n tenantProfiles.set(tenantId, tenantProfile);\n\n const account: MsalAccountInfo = {\n homeAccountId,\n environment: fromAccount.environment,\n tenantId,\n username,\n localAccountId,\n name,\n loginHint,\n idToken: idToken,\n idTokenClaims: effectiveIdTokenClaims,\n tenantProfiles,\n };\n\n return account;\n }\n\n /**\n *\n * @param error BridgeError\n * @returns AuthError, ClientAuthError, ClientConfigurationError, ServerError, InteractionRequiredError\n */\n public fromBridgeError(\n error: unknown\n ):\n | AuthError\n | ClientAuthError\n | ClientConfigurationError\n | ServerError\n | InteractionRequiredAuthError {\n if (isBridgeError(error)) {\n switch (error.status) {\n case BridgeStatusCode.UserCancel:\n return new ClientAuthError(\n ClientAuthErrorCodes.userCanceled\n );\n case BridgeStatusCode.NoNetwork:\n return new ClientAuthError(\n ClientAuthErrorCodes.noNetworkConnectivity\n );\n case BridgeStatusCode.AccountUnavailable:\n return new ClientAuthError(\n ClientAuthErrorCodes.noAccountFound\n );\n case BridgeStatusCode.Disabled:\n return new ClientAuthError(\n ClientAuthErrorCodes.nestedAppAuthBridgeDisabled\n );\n case BridgeStatusCode.NestedAppAuthUnavailable:\n return new ClientAuthError(\n error.code ||\n ClientAuthErrorCodes.nestedAppAuthBridgeDisabled,\n error.description\n );\n case BridgeStatusCode.TransientError:\n case BridgeStatusCode.PersistentError:\n return new ServerError(error.code, error.description);\n case BridgeStatusCode.UserInteractionRequired:\n return new InteractionRequiredAuthError(\n error.code,\n error.description\n );\n default:\n return new AuthError(error.code, error.description);\n }\n } else {\n return new AuthError(\"unknown_error\", \"An unknown error occurred\");\n }\n }\n\n /**\n * Returns an AuthenticationResult from the given cache items\n *\n * @param account\n * @param idToken\n * @param accessToken\n * @param reqTimestamp\n * @returns\n */\n public toAuthenticationResultFromCache(\n account: AccountInfo,\n idToken: IdTokenEntity,\n accessToken: AccessTokenEntity,\n request: SilentRequest,\n correlationId: string\n ): AuthenticationResult {\n if (!idToken || !accessToken) {\n throw createClientAuthError(ClientAuthErrorCodes.nullOrEmptyToken);\n }\n\n const idTokenClaims = AuthToken.extractTokenClaims(\n idToken.secret,\n this.crypto.base64Decode\n );\n\n const scopes = accessToken.target || request.scopes.join(\" \");\n\n const authenticationResult: AuthenticationResult = {\n authority: accessToken.environment || account.environment,\n uniqueId: account.localAccountId,\n tenantId: account.tenantId,\n scopes: scopes.split(\" \"),\n account,\n idToken: idToken.secret,\n idTokenClaims: idTokenClaims || {},\n accessToken: accessToken.secret,\n fromCache: true,\n expiresOn: TimeUtils.toDateFromSeconds(accessToken.expiresOn),\n extExpiresOn: TimeUtils.toDateFromSeconds(\n accessToken.extendedExpiresOn\n ),\n tokenType:\n request.authenticationScheme || AuthenticationScheme.BEARER,\n correlationId,\n state: request.state,\n };\n\n return authenticationResult;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError } from \"@azure/msal-common/browser\";\n\n/**\n * NestedAppAuthErrorMessage class containing string constants used by error codes and messages.\n */\nexport const NestedAppAuthErrorMessage = {\n unsupportedMethod: {\n code: \"unsupported_method\",\n desc: \"This method is not supported in nested app environment.\",\n },\n};\n\nexport class NestedAppAuthError extends AuthError {\n constructor(errorCode: string, errorMessage?: string) {\n super(errorCode, errorMessage);\n\n Object.setPrototypeOf(this, NestedAppAuthError.prototype);\n this.name = \"NestedAppAuthError\";\n }\n\n public static createUnsupportedError(): NestedAppAuthError {\n return new NestedAppAuthError(\n NestedAppAuthErrorMessage.unsupportedMethod.code,\n NestedAppAuthErrorMessage.unsupportedMethod.desc\n );\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n CommonAuthorizationUrlRequest,\n CommonSilentFlowRequest,\n PerformanceCallbackFunction,\n AccountInfo,\n Logger,\n ICrypto,\n IPerformanceClient,\n DEFAULT_CRYPTO_IMPLEMENTATION,\n PerformanceEvents,\n TimeUtils,\n buildStaticAuthorityOptions,\n AccountEntity,\n OIDC_DEFAULT_SCOPES,\n BaseAuthRequest,\n AccountFilter,\n AuthError,\n} from \"@azure/msal-common/browser\";\nimport { ITokenCache } from \"../cache/ITokenCache.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport {\n ApiId,\n WrapperSKU,\n InteractionType,\n DEFAULT_REQUEST,\n CacheLookupPolicy,\n} from \"../utils/BrowserConstants.js\";\nimport { IController } from \"./IController.js\";\nimport { NestedAppOperatingContext } from \"../operatingcontext/NestedAppOperatingContext.js\";\nimport { IBridgeProxy } from \"../naa/IBridgeProxy.js\";\nimport { CryptoOps } from \"../crypto/CryptoOps.js\";\nimport { NestedAppAuthAdapter } from \"../naa/mapping/NestedAppAuthAdapter.js\";\nimport { NestedAppAuthError } from \"../error/NestedAppAuthError.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\nimport { EventType } from \"../event/EventType.js\";\nimport { EventCallbackFunction, EventError } from \"../event/EventMessage.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport {\n BrowserCacheManager,\n DEFAULT_BROWSER_CACHE_MANAGER,\n} from \"../cache/BrowserCacheManager.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport * as AccountManager from \"../cache/AccountManager.js\";\nimport { AccountContext } from \"../naa/BridgeAccountContext.js\";\nimport { InitializeApplicationRequest } from \"../request/InitializeApplicationRequest.js\";\nimport { createNewGuid } from \"../crypto/BrowserCrypto.js\";\n\nexport class NestedAppAuthController implements IController {\n // OperatingContext\n protected readonly operatingContext: NestedAppOperatingContext;\n\n // BridgeProxy\n protected readonly bridgeProxy: IBridgeProxy;\n\n // Crypto interface implementation\n protected readonly browserCrypto: ICrypto;\n\n // Input configuration by developer/user\n protected readonly config: BrowserConfiguration;\n\n // Storage interface implementation\n protected readonly browserStorage!: BrowserCacheManager;\n\n // Logger\n protected logger: Logger;\n\n // Performance telemetry client\n protected readonly performanceClient: IPerformanceClient;\n\n // EventHandler\n protected readonly eventHandler: EventHandler;\n\n // NestedAppAuthAdapter\n protected readonly nestedAppAuthAdapter: NestedAppAuthAdapter;\n\n // currentAccount for NAA apps\n protected currentAccountContext: AccountContext | null;\n\n constructor(operatingContext: NestedAppOperatingContext) {\n this.operatingContext = operatingContext;\n const proxy = this.operatingContext.getBridgeProxy();\n if (proxy !== undefined) {\n this.bridgeProxy = proxy;\n } else {\n throw new Error(\"unexpected: bridgeProxy is undefined\");\n }\n\n // Set the configuration.\n this.config = operatingContext.getConfig();\n\n // Initialize logger\n this.logger = this.operatingContext.getLogger();\n\n // Initialize performance client\n this.performanceClient = this.config.telemetry.client;\n\n // Initialize the crypto class.\n this.browserCrypto = operatingContext.isBrowserEnvironment()\n ? new CryptoOps(this.logger, this.performanceClient, true)\n : DEFAULT_CRYPTO_IMPLEMENTATION;\n\n this.eventHandler = new EventHandler(this.logger);\n // Initialize the browser storage class.\n this.browserStorage = this.operatingContext.isBrowserEnvironment()\n ? new BrowserCacheManager(\n this.config.auth.clientId,\n this.config.cache,\n this.browserCrypto,\n this.logger,\n this.performanceClient,\n this.eventHandler,\n buildStaticAuthorityOptions(this.config.auth)\n )\n : DEFAULT_BROWSER_CACHE_MANAGER(\n this.config.auth.clientId,\n this.logger,\n this.performanceClient,\n this.eventHandler\n );\n\n this.nestedAppAuthAdapter = new NestedAppAuthAdapter(\n this.config.auth.clientId,\n this.config.auth.clientCapabilities,\n this.browserCrypto,\n this.logger\n );\n\n // Set the active account if available\n const accountContext = this.bridgeProxy.getAccountContext();\n this.currentAccountContext = accountContext ? accountContext : null;\n }\n\n /**\n * Factory function to create a new instance of NestedAppAuthController\n * @param operatingContext\n * @returns Promise\n */\n static async createController(\n operatingContext: NestedAppOperatingContext\n ): Promise {\n const controller = new NestedAppAuthController(operatingContext);\n return Promise.resolve(controller);\n }\n\n /**\n * Specific implementation of initialize function for NestedAppAuthController\n * @returns\n */\n async initialize(\n request?: InitializeApplicationRequest,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isBroker?: boolean\n ): Promise {\n const initCorrelationId = request?.correlationId || createNewGuid();\n await this.browserStorage.initialize(initCorrelationId);\n return Promise.resolve();\n }\n\n /**\n * Validate the incoming request and add correlationId if not present\n * @param request\n * @returns\n */\n private ensureValidRequest<\n T extends\n | SsoSilentRequest\n | SilentRequest\n | PopupRequest\n | RedirectRequest\n >(request: T): T {\n if (request?.correlationId) {\n return request;\n }\n return {\n ...request,\n correlationId: this.browserCrypto.createNewGuid(),\n };\n }\n\n /**\n * Internal implementation of acquireTokenInteractive flow\n * @param request\n * @returns\n */\n private async acquireTokenInteractive(\n request: PopupRequest | RedirectRequest\n ): Promise {\n const validRequest = this.ensureValidRequest(request);\n\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_START,\n InteractionType.Popup,\n validRequest\n );\n\n const atPopupMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenPopup,\n validRequest.correlationId\n );\n\n atPopupMeasurement?.add({ nestedAppAuthRequest: true });\n\n try {\n const naaRequest =\n this.nestedAppAuthAdapter.toNaaTokenRequest(validRequest);\n const reqTimestamp = TimeUtils.nowSeconds();\n const response = await this.bridgeProxy.getTokenInteractive(\n naaRequest\n );\n const result: AuthenticationResult = {\n ...this.nestedAppAuthAdapter.fromNaaTokenResponse(\n naaRequest,\n response,\n reqTimestamp\n ),\n };\n\n // cache the tokens in the response\n try {\n // cache hydration can fail in JS Runtime scenario that doesn't support full crypto API\n await this.hydrateCache(result, request);\n } catch (error) {\n this.logger.warningPii(\n `Failed to hydrate cache. Error: ${error}`,\n validRequest.correlationId\n );\n }\n\n // cache the account context in memory after successful token fetch\n this.currentAccountContext = {\n homeAccountId: result.account.homeAccountId,\n environment: result.account.environment,\n tenantId: result.account.tenantId,\n };\n\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Popup,\n result\n );\n\n atPopupMeasurement.add({\n accessTokenSize: result.accessToken.length,\n idTokenSize: result.idToken.length,\n });\n\n atPopupMeasurement.end({\n success: true,\n requestId: result.requestId,\n });\n\n return result;\n } catch (e) {\n const error =\n e instanceof AuthError\n ? e\n : this.nestedAppAuthAdapter.fromBridgeError(e);\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Popup,\n null,\n e as EventError\n );\n\n atPopupMeasurement.end(\n {\n success: false,\n },\n e\n );\n\n throw error;\n }\n }\n\n /**\n * Internal implementation of acquireTokenSilent flow\n * @param request\n * @returns\n */\n private async acquireTokenSilentInternal(\n request: SilentRequest\n ): Promise {\n const validRequest = this.ensureValidRequest(request);\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_START,\n InteractionType.Silent,\n validRequest\n );\n\n // Look for tokens in the cache first\n const result = await this.acquireTokenFromCache(validRequest);\n if (result) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Silent,\n result\n );\n return result;\n }\n\n // proceed with acquiring tokens via the host\n const ssoSilentMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.SsoSilent,\n validRequest.correlationId\n );\n\n ssoSilentMeasurement?.increment({\n visibilityChangeCount: 0,\n });\n\n ssoSilentMeasurement?.add({\n nestedAppAuthRequest: true,\n });\n\n try {\n const naaRequest =\n this.nestedAppAuthAdapter.toNaaTokenRequest(validRequest);\n const reqTimestamp = TimeUtils.nowSeconds();\n const response = await this.bridgeProxy.getTokenSilent(naaRequest);\n\n const result: AuthenticationResult =\n this.nestedAppAuthAdapter.fromNaaTokenResponse(\n naaRequest,\n response,\n reqTimestamp\n );\n\n // cache the tokens in the response\n try {\n // cache hydration can fail in JS Runtime scenario that doesn't support full crypto API\n await this.hydrateCache(result, request);\n } catch (error) {\n this.logger.warningPii(\n `Failed to hydrate cache. Error: ${error}`,\n validRequest.correlationId\n );\n }\n\n // cache the account context in memory after successful token fetch\n this.currentAccountContext = {\n homeAccountId: result.account.homeAccountId,\n environment: result.account.environment,\n tenantId: result.account.tenantId,\n };\n\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Silent,\n result\n );\n ssoSilentMeasurement?.add({\n accessTokenSize: result.accessToken.length,\n idTokenSize: result.idToken.length,\n });\n ssoSilentMeasurement?.end({\n success: true,\n requestId: result.requestId,\n });\n return result;\n } catch (e) {\n const error =\n e instanceof AuthError\n ? e\n : this.nestedAppAuthAdapter.fromBridgeError(e);\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Silent,\n null,\n e as EventError\n );\n ssoSilentMeasurement?.end(\n {\n success: false,\n },\n e\n );\n throw error;\n }\n }\n\n /**\n * acquires tokens from cache\n * @param request\n * @returns\n */\n private async acquireTokenFromCache(\n request: SilentRequest\n ): Promise {\n const atsMeasurement = this.performanceClient.startMeasurement(\n PerformanceEvents.AcquireTokenSilent,\n request.correlationId\n );\n\n atsMeasurement?.add({\n nestedAppAuthRequest: true,\n });\n\n // if the request has claims, we cannot look up in the cache\n if (request.claims) {\n this.logger.verbose(\n \"Claims are present in the request, skipping cache lookup\"\n );\n return null;\n }\n\n // if the request has forceRefresh, we cannot look up in the cache\n if (request.forceRefresh) {\n this.logger.verbose(\n \"forceRefresh is set to true, skipping cache lookup\"\n );\n return null;\n }\n\n // respect cache lookup policy\n let result: AuthenticationResult | null = null;\n if (!request.cacheLookupPolicy) {\n request.cacheLookupPolicy = CacheLookupPolicy.Default;\n }\n\n switch (request.cacheLookupPolicy) {\n case CacheLookupPolicy.Default:\n case CacheLookupPolicy.AccessToken:\n case CacheLookupPolicy.AccessTokenAndRefreshToken:\n result = await this.acquireTokenFromCacheInternal(request);\n break;\n default:\n return null;\n }\n\n if (result) {\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_SUCCESS,\n InteractionType.Silent,\n result\n );\n atsMeasurement?.add({\n accessTokenSize: result?.accessToken.length,\n idTokenSize: result?.idToken.length,\n });\n atsMeasurement?.end({\n success: true,\n });\n return result;\n }\n\n this.logger.warning(\n \"Cached tokens are not found for the account, proceeding with silent token request.\"\n );\n\n this.eventHandler.emitEvent(\n EventType.ACQUIRE_TOKEN_FAILURE,\n InteractionType.Silent,\n null\n );\n atsMeasurement?.end({\n success: false,\n });\n\n return null;\n }\n\n /**\n *\n * @param request\n * @returns\n */\n private async acquireTokenFromCacheInternal(\n request: SilentRequest\n ): Promise {\n // always prioritize the account context from the bridge\n const accountContext =\n this.bridgeProxy.getAccountContext() || this.currentAccountContext;\n let currentAccount: AccountInfo | null = null;\n const correlationId =\n request.correlationId || this.browserCrypto.createNewGuid();\n if (accountContext) {\n currentAccount = AccountManager.getAccount(\n accountContext,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n // fall back to brokering if no cached account is found\n if (!currentAccount) {\n this.logger.verbose(\n \"No active account found, falling back to the host\"\n );\n return Promise.resolve(null);\n }\n\n this.logger.verbose(\n \"active account found, attempting to acquire token silently\"\n );\n\n const authRequest: BaseAuthRequest = {\n ...request,\n correlationId:\n request.correlationId || this.browserCrypto.createNewGuid(),\n authority: request.authority || currentAccount.environment,\n scopes: request.scopes?.length\n ? request.scopes\n : [...OIDC_DEFAULT_SCOPES],\n };\n\n // fetch access token and check for expiry\n const tokenKeys = this.browserStorage.getTokenKeys();\n const cachedAccessToken = this.browserStorage.getAccessToken(\n currentAccount,\n authRequest,\n tokenKeys,\n currentAccount.tenantId\n );\n\n // If there is no access token, log it and return null\n if (!cachedAccessToken) {\n this.logger.verbose(\"No cached access token found\");\n return Promise.resolve(null);\n } else if (\n TimeUtils.wasClockTurnedBack(cachedAccessToken.cachedAt) ||\n TimeUtils.isTokenExpired(\n cachedAccessToken.expiresOn,\n this.config.system.tokenRenewalOffsetSeconds\n )\n ) {\n this.logger.verbose(\"Cached access token has expired\");\n return Promise.resolve(null);\n }\n\n const cachedIdToken = this.browserStorage.getIdToken(\n currentAccount,\n authRequest.correlationId,\n tokenKeys,\n currentAccount.tenantId,\n this.performanceClient\n );\n\n if (!cachedIdToken) {\n this.logger.verbose(\"No cached id token found\");\n return Promise.resolve(null);\n }\n\n return this.nestedAppAuthAdapter.toAuthenticationResultFromCache(\n currentAccount,\n cachedIdToken,\n cachedAccessToken,\n authRequest,\n authRequest.correlationId\n );\n }\n\n /**\n * acquireTokenPopup flow implementation\n * @param request\n * @returns\n */\n async acquireTokenPopup(\n request: PopupRequest\n ): Promise {\n return this.acquireTokenInteractive(request);\n }\n\n /**\n * acquireTokenRedirect flow is not supported in nested app auth\n * @param request\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n acquireTokenRedirect(request: RedirectRequest): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n /**\n * acquireTokenSilent flow implementation\n * @param silentRequest\n * @returns\n */\n async acquireTokenSilent(\n silentRequest: SilentRequest\n ): Promise {\n return this.acquireTokenSilentInternal(silentRequest);\n }\n\n /**\n * Hybrid flow is not currently supported in nested app auth\n * @param request\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n acquireTokenByCode(\n request: AuthorizationCodeRequest // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n /**\n * acquireTokenNative flow is not currently supported in nested app auth\n * @param request\n * @param apiId\n * @param accountId\n */\n acquireTokenNative(\n request: // eslint-disable-line @typescript-eslint/no-unused-vars\n | SilentRequest\n | Partial<\n Omit<\n CommonAuthorizationUrlRequest,\n | \"requestedClaimsHash\"\n | \"responseMode\"\n | \"earJwk\"\n | \"codeChallenge\"\n | \"codeChallengeMethod\"\n | \"platformBroker\"\n >\n >\n | PopupRequest,\n apiId: ApiId, // eslint-disable-line @typescript-eslint/no-unused-vars\n accountId?: string | undefined // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n /**\n * acquireTokenByRefreshToken flow is not currently supported in nested app auth\n * @param commonRequest\n * @param silentRequest\n */\n acquireTokenByRefreshToken(\n commonRequest: CommonSilentFlowRequest, // eslint-disable-line @typescript-eslint/no-unused-vars\n silentRequest: SilentRequest // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n /**\n * Adds event callbacks to array\n * @param callback\n * @param eventTypes\n */\n addEventCallback(\n callback: EventCallbackFunction,\n eventTypes?: Array\n ): string | null {\n return this.eventHandler.addEventCallback(callback, eventTypes);\n }\n\n /**\n * Removes callback with provided id from callback array\n * @param callbackId\n */\n removeEventCallback(callbackId: string): void {\n this.eventHandler.removeEventCallback(callbackId);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removePerformanceCallback(callbackId: string): boolean {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n enableAccountStorageEvents(): void {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n disableAccountStorageEvents(): void {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n // #region Account APIs\n\n /**\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\n * @returns Array of AccountInfo objects in cache\n */\n getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.getAllAccounts(\n this.logger,\n this.browserStorage,\n this.isBrowserEnv(),\n correlationId,\n accountFilter\n );\n }\n\n /**\n * Returns the first account found in the cache that matches the account filter passed in.\n * @param accountFilter\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\n */\n getAccount(accountFilter: AccountFilter): AccountInfo | null {\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.getAccount(\n accountFilter,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Returns the signed in account matching username.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found.\n * This API is provided for convenience but getAccountById should be used for best reliability\n * @param username\n * @returns The account object stored in MSAL\n */\n getAccountByUsername(username: string): AccountInfo | null {\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.getAccountByUsername(\n username,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Returns the signed in account matching homeAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param homeAccountId\n * @returns The account object stored in MSAL\n */\n getAccountByHomeId(homeAccountId: string): AccountInfo | null {\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.getAccountByHomeId(\n homeAccountId,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Returns the signed in account matching localAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param localAccountId\n * @returns The account object stored in MSAL\n */\n getAccountByLocalId(localAccountId: string): AccountInfo | null {\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.getAccountByLocalId(\n localAccountId,\n this.logger,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\n * @param account\n */\n setActiveAccount(account: AccountInfo | null): void {\n /*\n * StandardController uses this to allow the developer to set the active account\n * in the nested app auth scenario the active account is controlled by the app hosting the nested app\n */\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.setActiveAccount(\n account,\n this.browserStorage,\n correlationId\n );\n }\n\n /**\n * Gets the currently active account\n */\n getActiveAccount(): AccountInfo | null {\n const correlationId = this.browserCrypto.createNewGuid();\n return AccountManager.getActiveAccount(\n this.browserStorage,\n correlationId\n );\n }\n\n // #endregion\n\n handleRedirectPromise(\n hash?: string | undefined // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n return Promise.resolve(null);\n }\n loginPopup(\n request?: PopupRequest | undefined // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n return this.acquireTokenInteractive(request || DEFAULT_REQUEST);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n loginRedirect(request?: RedirectRequest | undefined): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n logout(logoutRequest?: EndSessionRequest | undefined): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n logoutRedirect(\n logoutRequest?: EndSessionRequest | undefined // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n logoutPopup(\n logoutRequest?: EndSessionPopupRequest | undefined // eslint-disable-line @typescript-eslint/no-unused-vars\n ): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n ssoSilent(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n request: Partial<\n Omit<\n CommonAuthorizationUrlRequest,\n | \"requestedClaimsHash\"\n | \"responseMode\"\n | \"earJwk\"\n | \"codeChallenge\"\n | \"codeChallengeMethod\"\n | \"platformBroker\"\n >\n >\n ): Promise {\n return this.acquireTokenSilentInternal(request as SilentRequest);\n }\n getTokenCache(): ITokenCache {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n /**\n * Returns the logger instance\n */\n public getLogger(): Logger {\n return this.logger;\n }\n\n /**\n * Replaces the default logger set in configurations with new Logger with new configurations\n * @param logger Logger instance\n */\n setLogger(logger: Logger): void {\n this.logger = logger;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void {\n /*\n * Standard controller uses this to set the sku and version of the wrapper library in the storage\n * we do nothing here\n */\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setNavigationClient(navigationClient: INavigationClient): void {\n this.logger.warning(\n \"setNavigationClient is not supported in nested app auth\"\n );\n }\n\n getConfiguration(): BrowserConfiguration {\n return this.config;\n }\n\n isBrowserEnv(): boolean {\n return this.operatingContext.isBrowserEnvironment();\n }\n\n getBrowserCrypto(): ICrypto {\n return this.browserCrypto;\n }\n\n getPerformanceClient(): IPerformanceClient {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n getRedirectResponse(): Map> {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async clearCache(logoutRequest?: ClearCacheRequest): Promise {\n throw NestedAppAuthError.createUnsupportedError();\n }\n\n async hydrateCache(\n result: AuthenticationResult,\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise {\n this.logger.verbose(\"hydrateCache called\");\n\n const accountEntity = AccountEntity.createFromAccountInfo(\n result.account,\n result.cloudGraphHostName,\n result.msGraphHost\n );\n await this.browserStorage.setAccount(\n accountEntity,\n result.correlationId\n );\n return this.browserStorage.hydrateCache(result, request);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { NestedAppOperatingContext } from \"../operatingcontext/NestedAppOperatingContext.js\";\nimport { StandardOperatingContext } from \"../operatingcontext/StandardOperatingContext.js\";\nimport { IController } from \"./IController.js\";\nimport { Configuration } from \"../config/Configuration.js\";\nimport { StandardController } from \"./StandardController.js\";\nimport { NestedAppAuthController } from \"./NestedAppAuthController.js\";\nimport { InitializeApplicationRequest } from \"../request/InitializeApplicationRequest.js\";\n\nexport async function createV3Controller(\n config: Configuration,\n request?: InitializeApplicationRequest\n): Promise {\n const standard = new StandardOperatingContext(config);\n\n await standard.initialize();\n return StandardController.createController(standard, request);\n}\n\nexport async function createController(\n config: Configuration\n): Promise {\n const standard = new StandardOperatingContext(config);\n const nestedApp = new NestedAppOperatingContext(config);\n\n const operatingContexts = [standard.initialize(), nestedApp.initialize()];\n\n await Promise.all(operatingContexts);\n\n if (nestedApp.isAvailable() && config.auth.supportsNestedAppAuth) {\n return NestedAppAuthController.createController(nestedApp);\n } else if (standard.isAvailable()) {\n return StandardController.createController(standard);\n } else {\n // Since neither of the actual operating contexts are available keep the UnknownOperatingContextController\n return null;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITokenCache } from \"../cache/ITokenCache.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { WrapperSKU } from \"../utils/BrowserConstants.js\";\nimport { IPublicClientApplication } from \"./IPublicClientApplication.js\";\nimport { IController } from \"../controllers/IController.js\";\nimport {\n PerformanceCallbackFunction,\n AccountInfo,\n AccountFilter,\n Logger,\n} from \"@azure/msal-common/browser\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport * as ControllerFactory from \"../controllers/ControllerFactory.js\";\nimport { StandardController } from \"../controllers/StandardController.js\";\nimport {\n BrowserConfiguration,\n Configuration,\n} from \"../config/Configuration.js\";\nimport { StandardOperatingContext } from \"../operatingcontext/StandardOperatingContext.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { EventCallbackFunction } from \"../event/EventMessage.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest.js\";\nimport { NestedAppAuthController } from \"../controllers/NestedAppAuthController.js\";\nimport { NestedAppOperatingContext } from \"../operatingcontext/NestedAppOperatingContext.js\";\nimport { InitializeApplicationRequest } from \"../request/InitializeApplicationRequest.js\";\nimport { EventType } from \"../event/EventType.js\";\n\n/**\n * The PublicClientApplication class is the object exposed by the library to perform authentication and authorization functions in Single Page Applications\n * to obtain JWT tokens as described in the OAuth 2.0 Authorization Code Flow with PKCE specification.\n */\nexport class PublicClientApplication implements IPublicClientApplication {\n protected controller: IController;\n protected isBroker: boolean = false;\n\n /**\n * Creates StandardController and passes it to the PublicClientApplication\n *\n * @param configuration {Configuration}\n */\n public static async createPublicClientApplication(\n configuration: Configuration\n ): Promise {\n const controller = await ControllerFactory.createV3Controller(\n configuration\n );\n const pca = new PublicClientApplication(configuration, controller);\n\n return pca;\n }\n\n /**\n * @constructor\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\n *\n * Important attributes in the Configuration object for auth are:\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\n * - authority: the authority URL for your application.\n * - redirect_uri: the uri of your application registered in the portal.\n *\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\n *\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\n * Full B2C functionality will be available in this library in future versions.\n *\n * @param configuration Object for the MSAL PublicClientApplication instance\n * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor)\n */\n public constructor(configuration: Configuration, controller?: IController) {\n this.controller =\n controller ||\n new StandardController(new StandardOperatingContext(configuration));\n }\n\n /**\n * Initializer function to perform async startup tasks such as connecting to WAM extension\n * @param request {?InitializeApplicationRequest}\n */\n async initialize(request?: InitializeApplicationRequest): Promise {\n return this.controller.initialize(request, this.isBroker);\n }\n\n /**\n * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\n *\n * @param request\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n async acquireTokenPopup(\n request: PopupRequest\n ): Promise {\n return this.controller.acquireTokenPopup(request);\n }\n\n /**\n * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\n * the page, so any code that follows this function will not execute.\n *\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\n *\n * @param request\n */\n acquireTokenRedirect(request: RedirectRequest): Promise {\n return this.controller.acquireTokenRedirect(request);\n }\n\n /**\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\n *\n * @param {@link (SilentRequest:type)}\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object\n */\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Promise {\n return this.controller.acquireTokenSilent(silentRequest);\n }\n\n /**\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\n * This API is not indended for normal authorization code acquisition and redemption.\n *\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\n *\n * @param request {@link AuthorizationCodeRequest}\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n acquireTokenByCode(\n request: AuthorizationCodeRequest\n ): Promise {\n return this.controller.acquireTokenByCode(request);\n }\n\n /**\n * Adds event callbacks to array\n * @param callback\n * @param eventTypes\n */\n addEventCallback(\n callback: EventCallbackFunction,\n eventTypes?: Array\n ): string | null {\n return this.controller.addEventCallback(callback, eventTypes);\n }\n\n /**\n * Removes callback with provided id from callback array\n * @param callbackId\n */\n removeEventCallback(callbackId: string): void {\n return this.controller.removeEventCallback(callbackId);\n }\n\n /**\n * Registers a callback to receive performance events.\n *\n * @param {PerformanceCallbackFunction} callback\n * @returns {string}\n */\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\n return this.controller.addPerformanceCallback(callback);\n }\n\n /**\n * Removes a callback registered with addPerformanceCallback.\n *\n * @param {string} callbackId\n * @returns {boolean}\n */\n removePerformanceCallback(callbackId: string): boolean {\n return this.controller.removePerformanceCallback(callbackId);\n }\n\n /**\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\n */\n enableAccountStorageEvents(): void {\n this.controller.enableAccountStorageEvents();\n }\n\n /**\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\n */\n disableAccountStorageEvents(): void {\n this.controller.disableAccountStorageEvents();\n }\n\n /**\n * Returns the first account found in the cache that matches the account filter passed in.\n * @param accountFilter\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\n */\n getAccount(accountFilter: AccountFilter): AccountInfo | null {\n return this.controller.getAccount(accountFilter);\n }\n\n /**\n * Returns the signed in account matching homeAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param homeAccountId\n * @returns The account object stored in MSAL\n * @deprecated - Use getAccount instead\n */\n getAccountByHomeId(homeAccountId: string): AccountInfo | null {\n return this.controller.getAccountByHomeId(homeAccountId);\n }\n\n /**\n * Returns the signed in account matching localAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param localAccountId\n * @returns The account object stored in MSAL\n * @deprecated - Use getAccount instead\n */\n getAccountByLocalId(localId: string): AccountInfo | null {\n return this.controller.getAccountByLocalId(localId);\n }\n\n /**\n * Returns the signed in account matching username.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found.\n * This API is provided for convenience but getAccountById should be used for best reliability\n * @param userName\n * @returns The account object stored in MSAL\n * @deprecated - Use getAccount instead\n */\n getAccountByUsername(userName: string): AccountInfo | null {\n return this.controller.getAccountByUsername(userName);\n }\n\n /**\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\n * @returns Array of AccountInfo objects in cache\n */\n getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {\n return this.controller.getAllAccounts(accountFilter);\n }\n\n /**\n * Event handler function which allows users to fire events after the PublicClientApplication object\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\n * auth flows.\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\n */\n handleRedirectPromise(\n hash?: string | undefined\n ): Promise {\n return this.controller.handleRedirectPromise(hash);\n }\n\n /**\n * Use when initiating the login process via opening a popup window in the user's browser\n *\n * @param request\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n loginPopup(\n request?: PopupRequest | undefined\n ): Promise {\n return this.controller.loginPopup(request);\n }\n\n /**\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\n * any code that follows this function will not execute.\n *\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\n *\n * @param request\n */\n loginRedirect(request?: RedirectRequest | undefined): Promise {\n return this.controller.loginRedirect(request);\n }\n\n /**\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\n * @param logoutRequest\n * @deprecated\n */\n logout(logoutRequest?: EndSessionRequest): Promise {\n return this.controller.logout(logoutRequest);\n }\n\n /**\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\n * Default behaviour is to redirect the user to `window.location.href`.\n * @param logoutRequest\n */\n logoutRedirect(logoutRequest?: EndSessionRequest): Promise {\n return this.controller.logoutRedirect(logoutRequest);\n }\n\n /**\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\n * @param logoutRequest\n */\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Promise {\n return this.controller.logoutPopup(logoutRequest);\n }\n\n /**\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\n * - Any browser using a form of Intelligent Tracking Prevention\n * - If there is not an established session with the service\n *\n * In these cases, the request must be done inside a popup or full frame redirect.\n *\n * For the cases where interaction is required, you cannot send a request with prompt=none.\n *\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\n * you session on the server still exists.\n * @param request {@link SsoSilentRequest}\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n ssoSilent(request: SsoSilentRequest): Promise {\n return this.controller.ssoSilent(request);\n }\n\n /**\n * Gets the token cache for the application.\n */\n getTokenCache(): ITokenCache {\n return this.controller.getTokenCache();\n }\n\n /**\n * Returns the logger instance\n */\n getLogger(): Logger {\n return this.controller.getLogger();\n }\n\n /**\n * Replaces the default logger set in configurations with new Logger with new configurations\n * @param logger Logger instance\n */\n setLogger(logger: Logger): void {\n this.controller.setLogger(logger);\n }\n\n /**\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\n * @param account\n */\n setActiveAccount(account: AccountInfo | null): void {\n this.controller.setActiveAccount(account);\n }\n\n /**\n * Gets the currently active account\n */\n getActiveAccount(): AccountInfo | null {\n return this.controller.getActiveAccount();\n }\n\n /**\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\n * @param sku\n * @param version\n */\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void {\n return this.controller.initializeWrapperLibrary(sku, version);\n }\n\n /**\n * Sets navigation client\n * @param navigationClient\n */\n setNavigationClient(navigationClient: INavigationClient): void {\n this.controller.setNavigationClient(navigationClient);\n }\n\n /**\n * Returns the configuration object\n * @internal\n */\n getConfiguration(): BrowserConfiguration {\n return this.controller.getConfiguration();\n }\n\n /**\n * Hydrates cache with the tokens and account in the AuthenticationResult object\n * @param result\n * @param request - The request object that was used to obtain the AuthenticationResult\n * @returns\n */\n async hydrateCache(\n result: AuthenticationResult,\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise {\n return this.controller.hydrateCache(result, request);\n }\n\n /**\n * Clears tokens and account from the browser cache.\n * @param logoutRequest\n */\n clearCache(logoutRequest?: ClearCacheRequest): Promise {\n return this.controller.clearCache(logoutRequest);\n }\n}\n\n/**\n * creates NestedAppAuthController and passes it to the PublicClientApplication,\n * falls back to StandardController if NestedAppAuthController is not available\n *\n * @param configuration\n * @returns IPublicClientApplication\n *\n */\nexport async function createNestablePublicClientApplication(\n configuration: Configuration\n): Promise {\n const nestedAppAuth = new NestedAppOperatingContext(configuration);\n await nestedAppAuth.initialize();\n\n if (nestedAppAuth.isAvailable()) {\n const controller = new NestedAppAuthController(nestedAppAuth);\n const nestablePCA = new PublicClientApplication(\n configuration,\n controller\n );\n await nestablePCA.initialize();\n return nestablePCA;\n }\n\n return createStandardPublicClientApplication(configuration);\n}\n\n/**\n * creates PublicClientApplication using StandardController\n *\n * @param configuration\n * @returns IPublicClientApplication\n *\n */\nexport async function createStandardPublicClientApplication(\n configuration: Configuration\n): Promise {\n const pca = new PublicClientApplication(configuration);\n await pca.initialize();\n return pca;\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n CommonAuthorizationUrlRequest,\n CommonSilentFlowRequest,\n PerformanceCallbackFunction,\n AccountInfo,\n Logger,\n ICrypto,\n IPerformanceClient,\n DEFAULT_CRYPTO_IMPLEMENTATION,\n AccountFilter,\n} from \"@azure/msal-common/browser\";\nimport { ITokenCache } from \"../cache/ITokenCache.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport {\n BrowserCacheManager,\n DEFAULT_BROWSER_CACHE_MANAGER,\n} from \"../cache/BrowserCacheManager.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { ApiId, WrapperSKU } from \"../utils/BrowserConstants.js\";\nimport { IController } from \"./IController.js\";\nimport { UnknownOperatingContext } from \"../operatingcontext/UnknownOperatingContext.js\";\nimport { CryptoOps } from \"../crypto/CryptoOps.js\";\nimport {\n blockAPICallsBeforeInitialize,\n blockNonBrowserEnvironment,\n} from \"../utils/BrowserUtils.js\";\nimport { EventCallbackFunction } from \"../event/EventMessage.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport { EventType } from \"../event/EventType.js\";\nimport { EventHandler } from \"../event/EventHandler.js\";\n\n/**\n * UnknownOperatingContextController class\n *\n * - Until initialize method is called, this controller is the default\n * - AFter initialize method is called, this controller will be swapped out for the appropriate controller\n * if the operating context can be determined; otherwise this controller will continued be used\n *\n * - Why do we have this? We don't want to dynamically import (download) all of the code in StandardController if we don't need to.\n *\n * - Only includes implementation for getAccounts and handleRedirectPromise\n * - All other methods are will throw initialization error (because either initialize method or the factory method were not used)\n * - This controller is necessary for React Native wrapper, server side rendering and any other scenario where we don't have a DOM\n *\n */\nexport class UnknownOperatingContextController implements IController {\n // OperatingContext\n protected readonly operatingContext: UnknownOperatingContext;\n\n // Logger\n protected logger: Logger;\n\n // Storage interface implementation\n protected readonly browserStorage: BrowserCacheManager;\n\n // Input configuration by developer/user\n protected readonly config: BrowserConfiguration;\n\n // Performance telemetry client\n protected readonly performanceClient: IPerformanceClient;\n\n // Event handler\n private readonly eventHandler: EventHandler;\n\n // Crypto interface implementation\n protected readonly browserCrypto: ICrypto;\n\n // Flag to indicate if in browser environment\n protected isBrowserEnvironment: boolean;\n\n // Flag representing whether or not the initialize API has been called and completed\n protected initialized: boolean = false;\n\n constructor(operatingContext: UnknownOperatingContext) {\n this.operatingContext = operatingContext;\n\n this.isBrowserEnvironment =\n this.operatingContext.isBrowserEnvironment();\n\n this.config = operatingContext.getConfig();\n\n this.logger = operatingContext.getLogger();\n\n // Initialize performance client\n this.performanceClient = this.config.telemetry.client;\n\n // Initialize the crypto class.\n this.browserCrypto = this.isBrowserEnvironment\n ? new CryptoOps(this.logger, this.performanceClient)\n : DEFAULT_CRYPTO_IMPLEMENTATION;\n\n this.eventHandler = new EventHandler(this.logger);\n\n // Initialize the browser storage class.\n this.browserStorage = this.isBrowserEnvironment\n ? new BrowserCacheManager(\n this.config.auth.clientId,\n this.config.cache,\n this.browserCrypto,\n this.logger,\n this.performanceClient,\n this.eventHandler,\n undefined\n )\n : DEFAULT_BROWSER_CACHE_MANAGER(\n this.config.auth.clientId,\n this.logger,\n this.performanceClient,\n this.eventHandler\n );\n }\n getBrowserStorage(): BrowserCacheManager {\n return this.browserStorage;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAccount(accountFilter: AccountFilter): AccountInfo | null {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAccountByHomeId(homeAccountId: string): AccountInfo | null {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAccountByLocalId(localAccountId: string): AccountInfo | null {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAccountByUsername(username: string): AccountInfo | null {\n return null;\n }\n getAllAccounts(): AccountInfo[] {\n return [];\n }\n initialize(): Promise {\n this.initialized = true;\n return Promise.resolve();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n acquireTokenPopup(request: PopupRequest): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n acquireTokenRedirect(request: RedirectRequest): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return Promise.resolve();\n }\n acquireTokenSilent(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n silentRequest: SilentRequest\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n acquireTokenByCode(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n request: AuthorizationCodeRequest\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n acquireTokenNative(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n request:\n | PopupRequest\n | SilentRequest\n | Partial<\n Omit<\n CommonAuthorizationUrlRequest,\n | \"responseMode\"\n | \"earJwk\"\n | \"codeChallenge\"\n | \"codeChallengeMethod\"\n | \"requestedClaimsHash\"\n | \"platformBroker\"\n >\n >,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n apiId: ApiId,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n accountId?: string | undefined\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n acquireTokenByRefreshToken(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n commonRequest: CommonSilentFlowRequest,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n silentRequest: SilentRequest\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n addEventCallback(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n callback: EventCallbackFunction,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n eventTypes?: Array\n ): string | null {\n return null;\n }\n removeEventCallback(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n callbackId: string\n ): void {}\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return \"\";\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n removePerformanceCallback(callbackId: string): boolean {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return true;\n }\n enableAccountStorageEvents(): void {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n disableAccountStorageEvents(): void {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n\n handleRedirectPromise(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n hash?: string | undefined\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n return Promise.resolve(null);\n }\n loginPopup(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n request?: PopupRequest | undefined\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n loginRedirect(request?: RedirectRequest | undefined): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n logout(logoutRequest?: EndSessionRequest | undefined): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n logoutRedirect(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n logoutRequest?: EndSessionRequest | undefined\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n logoutPopup(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n logoutRequest?: EndSessionPopupRequest | undefined\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n ssoSilent(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n request: Partial<\n Omit<\n CommonAuthorizationUrlRequest,\n | \"responseMode\"\n | \"earJwk\"\n | \"codeChallenge\"\n | \"codeChallengeMethod\"\n | \"requestedClaimsHash\"\n | \"platformBroker\"\n >\n >\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Promise;\n }\n getTokenCache(): ITokenCache {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as ITokenCache;\n }\n getLogger(): Logger {\n return this.logger;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setLogger(logger: Logger): void {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setActiveAccount(account: AccountInfo | null): void {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n getActiveAccount(): AccountInfo | null {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void {\n this.browserStorage.setWrapperMetadata(sku, version);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setNavigationClient(navigationClient: INavigationClient): void {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n getConfiguration(): BrowserConfiguration {\n return this.config;\n }\n isBrowserEnv(): boolean {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return true;\n }\n getBrowserCrypto(): ICrypto {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as ICrypto;\n }\n getPerformanceClient(): IPerformanceClient {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as IPerformanceClient;\n }\n getRedirectResponse(): Map> {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n return {} as Map>;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async clearCache(logoutRequest?: ClearCacheRequest): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async hydrateCache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n result: AuthenticationResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise {\n blockAPICallsBeforeInitialize(this.initialized);\n blockNonBrowserEnvironment();\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BaseOperatingContext } from \"./BaseOperatingContext.js\";\n\nexport class UnknownOperatingContext extends BaseOperatingContext {\n /*\n * TODO: Once we have determine the bundling code return here to specify the name of the bundle\n * containing the implementation for this operating context\n */\n static readonly MODULE_NAME: string = \"\";\n\n /**\n * Unique identifier for the operating context\n */\n static readonly ID: string = \"UnknownOperatingContext\";\n\n /**\n * Returns the unique identifier for this operating context\n * @returns string\n */\n getId(): string {\n return UnknownOperatingContext.ID;\n }\n\n /**\n * Return the module name. Intended for use with import() to enable dynamic import\n * of the implementation associated with this operating context\n * @returns\n */\n getModuleName(): string {\n return UnknownOperatingContext.MODULE_NAME;\n }\n\n /**\n * Checks whether the operating context is available.\n * Confirms that the code is running a browser rather. This is required.\n * @returns Promise indicating whether this operating context is currently available.\n */\n async initialize(): Promise {\n /**\n * This operating context is in use when we have not checked for what the operating context is.\n * The context is unknown until we check it.\n */\n return true;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITokenCache } from \"../cache/ITokenCache.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { WrapperSKU } from \"../utils/BrowserConstants.js\";\nimport { IPublicClientApplication } from \"./IPublicClientApplication.js\";\nimport { IController } from \"../controllers/IController.js\";\nimport {\n PerformanceCallbackFunction,\n AccountInfo,\n AccountFilter,\n Logger,\n} from \"@azure/msal-common/browser\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport * as ControllerFactory from \"../controllers/ControllerFactory.js\";\nimport {\n BrowserConfiguration,\n Configuration,\n} from \"../config/Configuration.js\";\nimport { EventCallbackFunction } from \"../event/EventMessage.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { UnknownOperatingContextController } from \"../controllers/UnknownOperatingContextController.js\";\nimport { UnknownOperatingContext } from \"../operatingcontext/UnknownOperatingContext.js\";\nimport { EventType } from \"../event/EventType.js\";\n\n/**\n * PublicClientNext is an early look at the planned implementation of PublicClientApplication in the next major version of MSAL.js.\n * It contains support for multiple API implementations based on the runtime environment that it is running in.\n *\n * The goals of these changes are to provide a clean separation of behavior between different operating contexts (Nested App Auth, Platform Brokers, Plain old Browser, etc.)\n * while still providing a consistent API surface for developers.\n *\n * Please use PublicClientApplication for any prod/real-world scenarios.\n * Note: PublicClientNext is experimental and subject to breaking changes without following semver\n *\n */\nexport class PublicClientNext implements IPublicClientApplication {\n /*\n * Definite assignment assertion used below\n * https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#definite-assignment-assertions\n */\n protected controller!: IController;\n protected configuration: Configuration;\n\n public static async createPublicClientApplication(\n configuration: Configuration\n ): Promise {\n const controller = await ControllerFactory.createController(\n configuration\n );\n let pca;\n if (controller !== null) {\n pca = new PublicClientNext(configuration, controller);\n } else {\n pca = new PublicClientNext(configuration);\n }\n return pca;\n }\n\n /**\n * @constructor\n * Constructor for the PublicClientNext used to instantiate the PublicClientNext object\n *\n * Important attributes in the Configuration object for auth are:\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\n * - authority: the authority URL for your application.\n * - redirect_uri: the uri of your application registered in the portal.\n *\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\n *\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\n * Full B2C functionality will be available in this library in future versions.\n *\n * @param configuration Object for the MSAL PublicClientApplication instance\n * @param IController Optional parameter to explictly set the controller. (Will be removed when we remove public constructor)\n */\n private constructor(\n configuration: Configuration,\n controller?: IController\n ) {\n this.configuration = configuration;\n if (controller) {\n this.controller = controller;\n } else {\n const operatingContext = new UnknownOperatingContext(configuration);\n this.controller = new UnknownOperatingContextController(\n operatingContext\n );\n }\n }\n\n /**\n * Initializer function to perform async startup tasks such as connecting to WAM extension\n */\n async initialize(): Promise {\n if (this.controller instanceof UnknownOperatingContextController) {\n const result = await ControllerFactory.createController(\n this.configuration\n );\n if (result !== null) {\n this.controller = result;\n }\n return this.controller.initialize();\n }\n return Promise.resolve();\n }\n\n /**\n * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\n *\n * @param request\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n async acquireTokenPopup(\n request: PopupRequest\n ): Promise {\n return this.controller.acquireTokenPopup(request);\n }\n\n /**\n * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\n * the page, so any code that follows this function will not execute.\n *\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\n *\n * @param request\n */\n acquireTokenRedirect(request: RedirectRequest): Promise {\n return this.controller.acquireTokenRedirect(request);\n }\n\n /**\n * Silently acquire an access token for a given set of scopes. Returns currently processing promise if parallel requests are made.\n *\n * @param {@link (SilentRequest:type)}\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthenticationResult} object\n */\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Promise {\n return this.controller.acquireTokenSilent(silentRequest);\n }\n\n /**\n * This function redeems an authorization code (passed as code) from the eSTS token endpoint.\n * This authorization code should be acquired server-side using a confidential client to acquire a spa_code.\n * This API is not indended for normal authorization code acquisition and redemption.\n *\n * Redemption of this authorization code will not require PKCE, as it was acquired by a confidential client.\n *\n * @param request {@link AuthorizationCodeRequest}\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n acquireTokenByCode(\n request: AuthorizationCodeRequest\n ): Promise {\n return this.controller.acquireTokenByCode(request);\n }\n\n /**\n * Adds event callbacks to array\n * @param callback\n */\n addEventCallback(\n callback: EventCallbackFunction,\n eventTypes?: Array\n ): string | null {\n return this.controller.addEventCallback(callback, eventTypes);\n }\n\n /**\n * Removes callback with provided id from callback array\n * @param callbackId\n */\n removeEventCallback(callbackId: string): void {\n return this.controller.removeEventCallback(callbackId);\n }\n\n /**\n * Registers a callback to receive performance events.\n *\n * @param {PerformanceCallbackFunction} callback\n * @returns {string}\n */\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\n return this.controller.addPerformanceCallback(callback);\n }\n\n /**\n * Removes a callback registered with addPerformanceCallback.\n *\n * @param {string} callbackId\n * @returns {boolean}\n */\n removePerformanceCallback(callbackId: string): boolean {\n return this.controller.removePerformanceCallback(callbackId);\n }\n\n /**\n * Adds event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\n */\n enableAccountStorageEvents(): void {\n this.controller.enableAccountStorageEvents();\n }\n\n /**\n * Removes event listener that emits an event when a user account is added or removed from localstorage in a different browser tab or window\n */\n disableAccountStorageEvents(): void {\n this.controller.disableAccountStorageEvents();\n }\n\n /**\n * Returns the first account found in the cache that matches the account filter passed in.\n * @param accountFilter\n * @returns The first account found in the cache matching the provided filter or null if no account could be found.\n */\n getAccount(accountFilter: AccountFilter): AccountInfo | null {\n return this.controller.getAccount(accountFilter);\n }\n\n /**\n * Returns the signed in account matching homeAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param homeAccountId\n * @returns The account object stored in MSAL\n * @deprecated - Use getAccount instead\n */\n getAccountByHomeId(homeAccountId: string): AccountInfo | null {\n return this.controller.getAccountByHomeId(homeAccountId);\n }\n\n /**\n * Returns the signed in account matching localAccountId.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found\n * @param localAccountId\n * @returns The account object stored in MSAL\n * @deprecated - Use getAccount instead\n */\n getAccountByLocalId(localId: string): AccountInfo | null {\n return this.controller.getAccountByLocalId(localId);\n }\n\n /**\n * Returns the signed in account matching username.\n * (the account object is created at the time of successful login)\n * or null when no matching account is found.\n * This API is provided for convenience but getAccountById should be used for best reliability\n * @param userName\n * @returns The account object stored in MSAL\n * @deprecated - Use getAccount instead\n */\n getAccountByUsername(userName: string): AccountInfo | null {\n return this.controller.getAccountByUsername(userName);\n }\n\n /**\n * Returns all the accounts in the cache that match the optional filter. If no filter is provided, all accounts are returned.\n * @param accountFilter - (Optional) filter to narrow down the accounts returned\n * @returns Array of AccountInfo objects in cache\n */\n getAllAccounts(accountFilter?: AccountFilter): AccountInfo[] {\n return this.controller.getAllAccounts(accountFilter);\n }\n\n /**\n * Event handler function which allows users to fire events after the PublicClientApplication object\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\n * auth flows.\n * @param hash Hash to process. Defaults to the current value of window.location.hash. Only needs to be provided explicitly if the response to be handled is not contained in the current value.\n * @returns Token response or null. If the return value is null, then no auth redirect was detected.\n */\n handleRedirectPromise(\n hash?: string | undefined\n ): Promise {\n return this.controller.handleRedirectPromise(hash);\n }\n\n /**\n * Use when initiating the login process via opening a popup window in the user's browser\n *\n * @param request\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n loginPopup(\n request?: PopupRequest | undefined\n ): Promise {\n return this.controller.loginPopup(request);\n }\n\n /**\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\n * any code that follows this function will not execute.\n *\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\n *\n * @param request\n */\n loginRedirect(request?: RedirectRequest | undefined): Promise {\n return this.controller.loginRedirect(request);\n }\n\n /**\n * Deprecated logout function. Use logoutRedirect or logoutPopup instead\n * @param logoutRequest\n * @deprecated\n */\n logout(logoutRequest?: EndSessionRequest): Promise {\n return this.controller.logout(logoutRequest);\n }\n\n /**\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\n * Default behaviour is to redirect the user to `window.location.href`.\n * @param logoutRequest\n */\n logoutRedirect(logoutRequest?: EndSessionRequest): Promise {\n return this.controller.logoutRedirect(logoutRequest);\n }\n\n /**\n * Clears local cache for the current user then opens a popup window prompting the user to sign-out of the server\n * @param logoutRequest\n */\n logoutPopup(logoutRequest?: EndSessionRequest): Promise {\n return this.controller.logoutPopup(logoutRequest);\n }\n\n /**\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\n * - Any browser using a form of Intelligent Tracking Prevention\n * - If there is not an established session with the service\n *\n * In these cases, the request must be done inside a popup or full frame redirect.\n *\n * For the cases where interaction is required, you cannot send a request with prompt=none.\n *\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\n * you session on the server still exists.\n * @param request {@link SsoSilentRequest}\n *\n * @returns A promise that is fulfilled when this function has completed, or rejected if an error was raised.\n */\n ssoSilent(request: SsoSilentRequest): Promise {\n return this.controller.ssoSilent(request);\n }\n\n /**\n * Gets the token cache for the application.\n */\n getTokenCache(): ITokenCache {\n return this.controller.getTokenCache();\n }\n\n /**\n * Returns the logger instance\n */\n getLogger(): Logger {\n return this.controller.getLogger();\n }\n\n /**\n * Replaces the default logger set in configurations with new Logger with new configurations\n * @param logger Logger instance\n */\n setLogger(logger: Logger): void {\n this.controller.setLogger(logger);\n }\n\n /**\n * Sets the account to use as the active account. If no account is passed to the acquireToken APIs, then MSAL will use this active account.\n * @param account\n */\n setActiveAccount(account: AccountInfo | null): void {\n this.controller.setActiveAccount(account);\n }\n\n /**\n * Gets the currently active account\n */\n getActiveAccount(): AccountInfo | null {\n return this.controller.getActiveAccount();\n }\n\n /**\n * Called by wrapper libraries (Angular & React) to set SKU and Version passed down to telemetry, logger, etc.\n * @param sku\n * @param version\n */\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void {\n return this.controller.initializeWrapperLibrary(sku, version);\n }\n\n /**\n * Sets navigation client\n * @param navigationClient\n */\n setNavigationClient(navigationClient: INavigationClient): void {\n this.controller.setNavigationClient(navigationClient);\n }\n\n /**\n * Returns the configuration object\n * @internal\n */\n getConfiguration(): BrowserConfiguration {\n return this.controller.getConfiguration();\n }\n\n /**\n * Hydrates cache with the tokens and account in the AuthenticationResult object\n * @param result\n * @param request - The request object that was used to obtain the AuthenticationResult\n * @returns\n */\n async hydrateCache(\n result: AuthenticationResult,\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise {\n return this.controller.hydrateCache(result, request);\n }\n\n /**\n * Clears tokens and account from the browser cache.\n * @param logoutRequest\n */\n clearCache(logoutRequest?: ClearCacheRequest): Promise {\n return this.controller.clearCache(logoutRequest);\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n AccountFilter,\n AccountInfo,\n Logger,\n PerformanceCallbackFunction,\n} from \"@azure/msal-common/browser\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport {\n BrowserConfigurationAuthErrorCodes,\n createBrowserConfigurationAuthError,\n} from \"../error/BrowserConfigurationAuthError.js\";\nimport { WrapperSKU } from \"../utils/BrowserConstants.js\";\nimport { INavigationClient } from \"../navigation/INavigationClient.js\";\nimport { EndSessionPopupRequest } from \"../request/EndSessionPopupRequest.js\";\nimport { ITokenCache } from \"../cache/ITokenCache.js\";\nimport { AuthorizationCodeRequest } from \"../request/AuthorizationCodeRequest.js\";\nimport { BrowserConfiguration } from \"../config/Configuration.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\nimport { EventCallbackFunction } from \"../event/EventMessage.js\";\nimport { ClearCacheRequest } from \"../request/ClearCacheRequest.js\";\nimport { InitializeApplicationRequest } from \"../request/InitializeApplicationRequest.js\";\nimport { EventType } from \"../event/EventType.js\";\n\nexport interface IPublicClientApplication {\n // TODO: Make request mandatory in the next major version?\n initialize(request?: InitializeApplicationRequest): Promise;\n acquireTokenPopup(request: PopupRequest): Promise;\n acquireTokenRedirect(request: RedirectRequest): Promise;\n acquireTokenSilent(\n silentRequest: SilentRequest\n ): Promise;\n acquireTokenByCode(\n request: AuthorizationCodeRequest\n ): Promise;\n addEventCallback(\n callback: EventCallbackFunction,\n eventTypes?: Array\n ): string | null;\n removeEventCallback(callbackId: string): void;\n addPerformanceCallback(callback: PerformanceCallbackFunction): string;\n removePerformanceCallback(callbackId: string): boolean;\n enableAccountStorageEvents(): void;\n disableAccountStorageEvents(): void;\n getAccount(accountFilter: AccountFilter): AccountInfo | null;\n getAccountByHomeId(homeAccountId: string): AccountInfo | null;\n getAccountByLocalId(localId: string): AccountInfo | null;\n getAccountByUsername(userName: string): AccountInfo | null;\n getAllAccounts(): AccountInfo[];\n handleRedirectPromise(hash?: string): Promise;\n loginPopup(request?: PopupRequest): Promise;\n loginRedirect(request?: RedirectRequest): Promise;\n logout(logoutRequest?: EndSessionRequest): Promise;\n logoutRedirect(logoutRequest?: EndSessionRequest): Promise;\n logoutPopup(logoutRequest?: EndSessionPopupRequest): Promise;\n ssoSilent(request: SsoSilentRequest): Promise;\n getTokenCache(): ITokenCache;\n getLogger(): Logger;\n setLogger(logger: Logger): void;\n setActiveAccount(account: AccountInfo | null): void;\n getActiveAccount(): AccountInfo | null;\n initializeWrapperLibrary(sku: WrapperSKU, version: string): void;\n setNavigationClient(navigationClient: INavigationClient): void;\n /** @internal */\n getConfiguration(): BrowserConfiguration;\n hydrateCache(\n result: AuthenticationResult,\n request:\n | SilentRequest\n | SsoSilentRequest\n | RedirectRequest\n | PopupRequest\n ): Promise;\n clearCache(logoutRequest?: ClearCacheRequest): Promise;\n}\n\nexport const stubbedPublicClientApplication: IPublicClientApplication = {\n initialize: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n acquireTokenPopup: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n acquireTokenRedirect: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n acquireTokenSilent: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n acquireTokenByCode: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n getAllAccounts: () => {\n return [];\n },\n getAccount: () => {\n return null;\n },\n getAccountByHomeId: () => {\n return null;\n },\n getAccountByUsername: () => {\n return null;\n },\n getAccountByLocalId: () => {\n return null;\n },\n handleRedirectPromise: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n loginPopup: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n loginRedirect: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n logout: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n logoutRedirect: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n logoutPopup: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n ssoSilent: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n addEventCallback: () => {\n return null;\n },\n removeEventCallback: () => {\n return;\n },\n addPerformanceCallback: () => {\n return \"\";\n },\n removePerformanceCallback: () => {\n return false;\n },\n enableAccountStorageEvents: () => {\n return;\n },\n disableAccountStorageEvents: () => {\n return;\n },\n getTokenCache: () => {\n throw createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n );\n },\n getLogger: () => {\n throw createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n );\n },\n setLogger: () => {\n return;\n },\n setActiveAccount: () => {\n return;\n },\n getActiveAccount: () => {\n return null;\n },\n initializeWrapperLibrary: () => {\n return;\n },\n setNavigationClient: () => {\n return;\n },\n getConfiguration: () => {\n throw createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n );\n },\n hydrateCache: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n clearCache: () => {\n return Promise.reject(\n createBrowserConfigurationAuthError(\n BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled\n )\n );\n },\n};\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthError, AccountInfo } from \"@azure/msal-common/browser\";\nimport { EventType } from \"./EventType.js\";\nimport {\n InteractionStatus,\n InteractionType,\n} from \"../utils/BrowserConstants.js\";\nimport { PopupRequest } from \"../request/PopupRequest.js\";\nimport { RedirectRequest } from \"../request/RedirectRequest.js\";\nimport { SilentRequest } from \"../request/SilentRequest.js\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest.js\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest.js\";\nimport { AuthenticationResult } from \"../response/AuthenticationResult.js\";\n\nexport type EventMessage = {\n eventType: EventType;\n interactionType: InteractionType | null;\n payload: EventPayload;\n error: EventError;\n timestamp: number;\n};\n\nexport type PopupEvent = {\n popupWindow: Window;\n};\n\n/**\n * Payload for the BrokerConnectionEstablished event\n */\nexport type BrokerConnectionEvent = {\n /**\n * The origin of the broker that is connected to the client\n */\n pairwiseBrokerOrigin: string;\n};\n\nexport type EventPayload =\n | AccountInfo\n | PopupRequest\n | RedirectRequest\n | SilentRequest\n | SsoSilentRequest\n | EndSessionRequest\n | AuthenticationResult\n | PopupEvent\n | BrokerConnectionEvent\n | null;\n\nexport type EventError = AuthError | Error | null;\n\nexport type EventCallbackFunction = (message: EventMessage) => void;\n\nexport class EventMessageUtils {\n /**\n * Gets interaction status from event message\n * @param message\n * @param currentStatus\n */\n static getInteractionStatusFromEvent(\n message: EventMessage,\n currentStatus?: InteractionStatus\n ): InteractionStatus | null {\n switch (message.eventType) {\n case EventType.LOGIN_START:\n return InteractionStatus.Login;\n case EventType.SSO_SILENT_START:\n return InteractionStatus.SsoSilent;\n case EventType.ACQUIRE_TOKEN_START:\n if (\n message.interactionType === InteractionType.Redirect ||\n message.interactionType === InteractionType.Popup\n ) {\n return InteractionStatus.AcquireToken;\n }\n break;\n case EventType.HANDLE_REDIRECT_START:\n return InteractionStatus.HandleRedirect;\n case EventType.LOGOUT_START:\n return InteractionStatus.Logout;\n case EventType.SSO_SILENT_SUCCESS:\n case EventType.SSO_SILENT_FAILURE:\n if (\n currentStatus &&\n currentStatus !== InteractionStatus.SsoSilent\n ) {\n // Prevent this event from clearing any status other than ssoSilent\n break;\n }\n return InteractionStatus.None;\n case EventType.LOGOUT_END:\n if (\n currentStatus &&\n currentStatus !== InteractionStatus.Logout\n ) {\n // Prevent this event from clearing any status other than logout\n break;\n }\n return InteractionStatus.None;\n case EventType.HANDLE_REDIRECT_END:\n if (\n currentStatus &&\n currentStatus !== InteractionStatus.HandleRedirect\n ) {\n // Prevent this event from clearing any status other than handleRedirect\n break;\n }\n return InteractionStatus.None;\n case EventType.LOGIN_SUCCESS:\n case EventType.LOGIN_FAILURE:\n case EventType.ACQUIRE_TOKEN_SUCCESS:\n case EventType.ACQUIRE_TOKEN_FAILURE:\n case EventType.RESTORE_FROM_BFCACHE:\n if (\n message.interactionType === InteractionType.Redirect ||\n message.interactionType === InteractionType.Popup\n ) {\n if (\n currentStatus &&\n currentStatus !== InteractionStatus.Login &&\n currentStatus !== InteractionStatus.AcquireToken\n ) {\n // Prevent this event from clearing any status other than login or acquireToken\n break;\n }\n return InteractionStatus.None;\n }\n break;\n default:\n break;\n }\n return null;\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { CryptoOps } from \"./CryptoOps.js\";\nimport {\n ClientAuthError,\n ClientAuthErrorCodes,\n Logger,\n LoggerOptions,\n PopTokenGenerator,\n SignedHttpRequestParameters,\n} from \"@azure/msal-common/browser\";\nimport { version, name } from \"../packageMetadata.js\";\n\nexport type SignedHttpRequestOptions = {\n loggerOptions: LoggerOptions;\n};\n\nexport class SignedHttpRequest {\n private popTokenGenerator: PopTokenGenerator;\n private cryptoOps: CryptoOps;\n private shrParameters: SignedHttpRequestParameters;\n private logger: Logger;\n\n constructor(\n shrParameters: SignedHttpRequestParameters,\n shrOptions?: SignedHttpRequestOptions\n ) {\n const loggerOptions = (shrOptions && shrOptions.loggerOptions) || {};\n this.logger = new Logger(loggerOptions, name, version);\n this.cryptoOps = new CryptoOps(this.logger);\n this.popTokenGenerator = new PopTokenGenerator(this.cryptoOps);\n this.shrParameters = shrParameters;\n }\n\n /**\n * Generates and caches a keypair for the given request options.\n * @returns Public key digest, which should be sent to the token issuer.\n */\n async generatePublicKeyThumbprint(): Promise {\n const { kid } = await this.popTokenGenerator.generateKid(\n this.shrParameters\n );\n\n return kid;\n }\n\n /**\n * Generates a signed http request for the given payload with the given key.\n * @param payload Payload to sign (e.g. access token)\n * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)\n * @param claims Additional claims to include/override in the signed JWT\n * @returns Pop token signed with the corresponding private key\n */\n async signRequest(\n payload: string,\n publicKeyThumbprint: string,\n claims?: object\n ): Promise {\n return this.popTokenGenerator.signPayload(\n payload,\n publicKeyThumbprint,\n this.shrParameters,\n claims\n );\n }\n\n /**\n * Removes cached keys from browser for given public key thumbprint\n * @param publicKeyThumbprint Public key digest (from generatePublicKeyThumbprint API)\n * @returns If keys are properly deleted\n */\n async removeKeys(publicKeyThumbprint: string): Promise {\n return this.cryptoOps\n .removeTokenBindingKey(publicKeyThumbprint)\n .then(() => true)\n .catch((error) => {\n /*\n * @deprecated - To maintain public API signature, we return false if the error is due to the key still being present in indexedDB.\n */\n if (\n error instanceof ClientAuthError &&\n error.errorCode ===\n ClientAuthErrorCodes.bindingKeyNotRemoved\n ) {\n return false;\n }\n\n throw error;\n });\n }\n}\n", "/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n Constants,\n InProgressPerformanceEvent,\n IPerformanceClient,\n Logger,\n PerformanceClient,\n PerformanceEvent,\n PerformanceEvents,\n PreQueueEvent,\n SubMeasurement,\n} from \"@azure/msal-common/browser\";\nimport { Configuration } from \"../config/Configuration.js\";\nimport { name, version } from \"../packageMetadata.js\";\nimport { BrowserCacheLocation } from \"../utils/BrowserConstants.js\";\nimport * as BrowserCrypto from \"../crypto/BrowserCrypto.js\";\nimport { BROWSER_PERF_ENABLED_KEY } from \"../cache/CacheKeys.js\";\n\n/**\n * Returns browser performance measurement module if session flag is enabled. Returns undefined otherwise.\n */\nfunction getPerfMeasurementModule() {\n let sessionStorage: Storage | undefined;\n try {\n sessionStorage = window[BrowserCacheLocation.SessionStorage];\n const perfEnabled = sessionStorage?.getItem(BROWSER_PERF_ENABLED_KEY);\n if (Number(perfEnabled) === 1) {\n return import(\"./BrowserPerformanceMeasurement.js\");\n }\n // Mute errors if it's a non-browser environment or cookies are blocked.\n } catch (e) {}\n\n return undefined;\n}\n\n/**\n * Returns boolean, indicating whether browser supports window.performance.now() function.\n */\nfunction supportsBrowserPerformanceNow(): boolean {\n return (\n typeof window !== \"undefined\" &&\n typeof window.performance !== \"undefined\" &&\n typeof window.performance.now === \"function\"\n );\n}\n\n/**\n * Returns event duration in milliseconds using window performance API if available. Returns undefined otherwise.\n * @param startTime {DOMHighResTimeStamp | undefined}\n * @returns {number | undefined}\n */\nfunction getPerfDurationMs(\n startTime: DOMHighResTimeStamp | undefined\n): number | undefined {\n if (!startTime || !supportsBrowserPerformanceNow()) {\n return undefined;\n }\n\n return Math.round(window.performance.now() - startTime);\n}\n\nexport class BrowserPerformanceClient\n extends PerformanceClient\n implements IPerformanceClient\n{\n constructor(\n configuration: Configuration,\n intFields?: Set,\n abbreviations?: Map\n ) {\n super(\n configuration.auth.clientId,\n configuration.auth.authority || `${Constants.DEFAULT_AUTHORITY}`,\n new Logger(\n configuration.system?.loggerOptions || {},\n name,\n version\n ),\n name,\n version,\n configuration.telemetry?.application || {\n appName: \"\",\n appVersion: \"\",\n },\n intFields,\n abbreviations\n );\n }\n\n generateId(): string {\n return BrowserCrypto.createNewGuid();\n }\n\n private getPageVisibility(): string | null {\n return document.visibilityState?.toString() || null;\n }\n\n private deleteIncompleteSubMeasurements(\n inProgressEvent: InProgressPerformanceEvent\n ): void {\n void getPerfMeasurementModule()?.then((module) => {\n const rootEvent = this.eventsByCorrelationId.get(\n inProgressEvent.event.correlationId\n );\n const isRootEvent =\n rootEvent &&\n rootEvent.eventId === inProgressEvent.event.eventId;\n const incompleteMeasurements: SubMeasurement[] = [];\n if (isRootEvent && rootEvent?.incompleteSubMeasurements) {\n rootEvent.incompleteSubMeasurements.forEach(\n (subMeasurement: SubMeasurement) => {\n incompleteMeasurements.push({ ...subMeasurement });\n }\n );\n }\n // Clean up remaining marks for incomplete sub-measurements\n module.BrowserPerformanceMeasurement.flushMeasurements(\n inProgressEvent.event.correlationId,\n incompleteMeasurements\n );\n });\n }\n\n /**\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\n * Also captures browser page visibilityState.\n *\n * @param {PerformanceEvents} measureName\n * @param {?string} [correlationId]\n * @returns {((event?: Partial) => PerformanceEvent| null)}\n */\n startMeasurement(\n measureName: string,\n correlationId?: string\n ): InProgressPerformanceEvent {\n // Capture page visibilityState and then invoke start/end measurement\n const startPageVisibility = this.getPageVisibility();\n const inProgressEvent = super.startMeasurement(\n measureName,\n correlationId\n );\n const startTime: number | undefined = supportsBrowserPerformanceNow()\n ? window.performance.now()\n : undefined;\n\n const browserMeasurement = getPerfMeasurementModule()?.then(\n (module) => {\n return new module.BrowserPerformanceMeasurement(\n measureName,\n inProgressEvent.event.correlationId\n );\n }\n );\n void browserMeasurement?.then((measurement) =>\n measurement.startMeasurement()\n );\n\n return {\n ...inProgressEvent,\n end: (\n event?: Partial,\n error?: unknown\n ): PerformanceEvent | null => {\n const res = inProgressEvent.end(\n {\n ...event,\n startPageVisibility,\n endPageVisibility: this.getPageVisibility(),\n durationMs: getPerfDurationMs(startTime),\n },\n error\n );\n void browserMeasurement?.then((measurement) =>\n measurement.endMeasurement()\n );\n this.deleteIncompleteSubMeasurements(inProgressEvent);\n\n return res;\n },\n discard: () => {\n inProgressEvent.discard();\n void browserMeasurement?.then((measurement) =>\n measurement.flushMeasurement()\n );\n this.deleteIncompleteSubMeasurements(inProgressEvent);\n },\n };\n }\n\n /**\n * Adds pre-queue time to preQueueTimeByCorrelationId map.\n * @param {PerformanceEvents} eventName\n * @param {?string} correlationId\n * @returns\n */\n setPreQueueTime(\n eventName: PerformanceEvents,\n correlationId?: string\n ): void {\n if (!supportsBrowserPerformanceNow()) {\n this.logger.trace(\n `BrowserPerformanceClient: window performance API not available, unable to set telemetry queue time for ${eventName}`\n );\n return;\n }\n\n if (!correlationId) {\n this.logger.trace(\n `BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to set telemetry queue time`\n );\n return;\n }\n\n const preQueueEvent: PreQueueEvent | undefined =\n this.preQueueTimeByCorrelationId.get(correlationId);\n /**\n * Manually complete queue measurement if there is an incomplete pre-queue event.\n * Incomplete pre-queue events are instrumentation bugs that should be fixed.\n */\n if (preQueueEvent) {\n this.logger.trace(\n `BrowserPerformanceClient: Incomplete pre-queue ${preQueueEvent.name} found`,\n correlationId\n );\n this.addQueueMeasurement(\n preQueueEvent.name,\n correlationId,\n undefined,\n true\n );\n }\n this.preQueueTimeByCorrelationId.set(correlationId, {\n name: eventName,\n time: window.performance.now(),\n });\n }\n\n /**\n * Calculates and adds queue time measurement for given performance event.\n *\n * @param {PerformanceEvents} eventName\n * @param {?string} correlationId\n * @param {?number} queueTime\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\n * @returns\n */\n addQueueMeasurement(\n eventName: string,\n correlationId?: string,\n queueTime?: number,\n manuallyCompleted?: boolean\n ): void {\n if (!supportsBrowserPerformanceNow()) {\n this.logger.trace(\n `BrowserPerformanceClient: window performance API not available, unable to add queue measurement for ${eventName}`\n );\n return;\n }\n\n if (!correlationId) {\n this.logger.trace(\n `BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to add queue measurement`\n );\n return;\n }\n\n const preQueueTime = super.getPreQueueTime(eventName, correlationId);\n if (!preQueueTime) {\n return;\n }\n\n const currentTime = window.performance.now();\n const resQueueTime =\n queueTime || super.calculateQueuedTime(preQueueTime, currentTime);\n\n return super.addQueueMeasurement(\n eventName,\n correlationId,\n resQueueTime,\n manuallyCompleted\n );\n }\n}\n"], + "mappings": "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", + "names": ["AuthErrorCodes.unexpectedError", "AuthErrorCodes.postRequestFailed", "ClientAuthErrorCodes.clientInfoDecodingError", "ClientAuthErrorCodes.clientInfoEmptyError", "ClientAuthErrorCodes.tokenParsingError", "ClientAuthErrorCodes.nullOrEmptyToken", "ClientAuthErrorCodes.endpointResolutionError", "ClientAuthErrorCodes.networkError", "ClientAuthErrorCodes.openIdConfigError", "ClientAuthErrorCodes.hashNotDeserialized", "ClientAuthErrorCodes.invalidState", "ClientAuthErrorCodes.stateMismatch", "ClientAuthErrorCodes.stateNotFound", "ClientAuthErrorCodes.nonceMismatch", "ClientAuthErrorCodes.authTimeNotFound", "ClientAuthErrorCodes.maxAgeTranspired", "ClientAuthErrorCodes.multipleMatchingTokens", "ClientAuthErrorCodes.multipleMatchingAccounts", "ClientAuthErrorCodes.multipleMatchingAppMetadata", "ClientAuthErrorCodes.requestCannotBeMade", "ClientAuthErrorCodes.cannotRemoveEmptyScope", "ClientAuthErrorCodes.cannotAppendScopeSet", "ClientAuthErrorCodes.emptyInputScopeSet", "ClientAuthErrorCodes.deviceCodePollingCancelled", "ClientAuthErrorCodes.deviceCodeExpired", "ClientAuthErrorCodes.deviceCodeUnknownError", "ClientAuthErrorCodes.noAccountInSilentRequest", "ClientAuthErrorCodes.invalidCacheRecord", "ClientAuthErrorCodes.invalidCacheEnvironment", "ClientAuthErrorCodes.noAccountFound", "ClientAuthErrorCodes.noCryptoObject", "ClientAuthErrorCodes.unexpectedCredentialType", "ClientAuthErrorCodes.invalidAssertion", "ClientAuthErrorCodes.invalidClientCredential", "ClientAuthErrorCodes.tokenRefreshRequired", "ClientAuthErrorCodes.userTimeoutReached", "ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt", "ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse", "ClientAuthErrorCodes.bindingKeyNotRemoved", "ClientAuthErrorCodes.endSessionEndpointNotSupported", "ClientAuthErrorCodes.keyIdMissing", "ClientAuthErrorCodes.noNetworkConnectivity", "ClientAuthErrorCodes.userCanceled", "ClientAuthErrorCodes.missingTenantIdError", "ClientAuthErrorCodes.methodNotImplemented", "ClientAuthErrorCodes.nestedAppAuthBridgeDisabled", "ClientAuthErrorCodes.methodNotImplemented", "LogLevel", "ClientConfigurationErrorCodes.redirectUriEmpty", "ClientConfigurationErrorCodes.claimsRequestParsingError", "ClientConfigurationErrorCodes.authorityUriInsecure", "ClientConfigurationErrorCodes.urlParseError", "ClientConfigurationErrorCodes.urlEmptyError", "ClientConfigurationErrorCodes.emptyInputScopesError", "ClientConfigurationErrorCodes.invalidClaims", "ClientConfigurationErrorCodes.tokenRequestEmpty", "ClientConfigurationErrorCodes.logoutRequestEmpty", "ClientConfigurationErrorCodes.invalidCodeChallengeMethod", "ClientConfigurationErrorCodes.pkceParamsMissing", "ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata", "ClientConfigurationErrorCodes.invalidAuthorityMetadata", "ClientConfigurationErrorCodes.untrustedAuthority", "ClientConfigurationErrorCodes.missingSshJwk", "ClientConfigurationErrorCodes.missingSshKid", "ClientConfigurationErrorCodes.missingNonceAuthenticationHeader", "ClientConfigurationErrorCodes.invalidAuthenticationHeader", "ClientConfigurationErrorCodes.cannotSetOIDCOptions", "ClientConfigurationErrorCodes.cannotAllowPlatformBroker", "ClientConfigurationErrorCodes.authorityMismatch", "ClientConfigurationErrorCodes.invalidAuthorizePostBodyParameters", "ClientConfigurationErrorCodes.invalidRequestMethodForEAR", "ClientConfigurationErrorCodes.emptyInputScopesError", "ClientAuthErrorCodes.cannotAppendScopeSet", "ClientAuthErrorCodes.cannotRemoveEmptyScope", "ClientAuthErrorCodes.emptyInputScopeSet", "name", "tenantId", "base64Decode", "ClientAuthErrorCodes.tokenParsingError", "ClientAuthErrorCodes.nullOrEmptyToken", "ClientAuthErrorCodes.maxAgeTranspired", "ClientAuthErrorCodes.hashNotDeserialized", "ClientConfigurationErrorCodes.urlEmptyError", "ClientConfigurationErrorCodes.urlParseError", "ClientConfigurationErrorCodes.authorityUriInsecure", "UrlUtils.getDeserializedResponse", "CacheErrorCodes.cacheQuotaExceeded", "CacheErrorCodes.cacheErrorUnknown", "ClientAuthErrorCodes.invalidCacheRecord", "ClientAuthErrorCodes.multipleMatchingAppMetadata", "name", "ClientAuthErrorCodes.methodNotImplemented", "ClientAuthErrorCodes.methodNotImplemented", "base64Decode", "ClientAuthErrorCodes.clientInfoEmptyError", "ClientAuthErrorCodes.clientInfoDecodingError", "CLIENT_INFO", "AADServerParamKeys.CLIENT_ID", "AADServerParamKeys.BROKER_CLIENT_ID", "AADServerParamKeys.REDIRECT_URI", "AADServerParamKeys.RESPONSE_TYPE", "AADServerParamKeys.RESPONSE_MODE", "AADServerParamKeys.NATIVE_BROKER", "AADServerParamKeys.SCOPE", "AADServerParamKeys.POST_LOGOUT_URI", "AADServerParamKeys.ID_TOKEN_HINT", "AADServerParamKeys.DOMAIN_HINT", "AADServerParamKeys.LOGIN_HINT", "AADServerParamKeys.SID", "ClientConfigurationErrorCodes.invalidClaims", "AADServerParamKeys.CLAIMS", "AADServerParamKeys.CLIENT_REQUEST_ID", "AADServerParamKeys.X_CLIENT_SKU", "AADServerParamKeys.X_CLIENT_VER", "AADServerParamKeys.X_CLIENT_OS", "AADServerParamKeys.X_CLIENT_CPU", "AADServerParamKeys.X_APP_NAME", "AADServerParamKeys.X_APP_VER", "AADServerParamKeys.PROMPT", "AADServerParamKeys.STATE", "AADServerParamKeys.NONCE", "AADServerParamKeys.CODE_CHALLENGE", "AADServerParamKeys.CODE_CHALLENGE_METHOD", "ClientConfigurationErrorCodes.pkceParamsMissing", "AADServerParamKeys.CODE", "AADServerParamKeys.DEVICE_CODE", "AADServerParamKeys.REFRESH_TOKEN", "AADServerParamKeys.CODE_VERIFIER", "AADServerParamKeys.CLIENT_SECRET", "AADServerParamKeys.CLIENT_ASSERTION", "AADServerParamKeys.CLIENT_ASSERTION_TYPE", "AADServerParamKeys.OBO_ASSERTION", "AADServerParamKeys.REQUESTED_TOKEN_USE", "AADServerParamKeys.GRANT_TYPE", "AADServerParamKeys.INSTANCE_AWARE", "AADServerParamKeys.TOKEN_TYPE", "AADServerParamKeys.REQ_CNF", "AADServerParamKeys.X_CLIENT_CURR_TELEM", "AADServerParamKeys.X_CLIENT_LAST_TELEM", "AADServerParamKeys.X_MS_LIB_CAPABILITY", "AADServerParamKeys.LOGOUT_HINT", "AADServerParamKeys.BROKER_REDIRECT_URI", "AADServerParamKeys.EAR_JWK", "AADServerParamKeys.EAR_JWE_CRYPTO", "e", "version", "base64Decode", "TimeUtils.nowSeconds", "ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt", "ClientAuthErrorCodes.endpointResolutionError", "ClientAuthErrorCodes.endSessionEndpointNotSupported", "CacheHelpers.generateAuthorityMetadataExpiresAt", "CacheHelpers.updateAuthorityEndpointMetadata", "ClientAuthErrorCodes.openIdConfigError", "CacheHelpers.isAuthorityMetadataExpired", "ClientConfigurationErrorCodes.invalidAuthorityMetadata", "CacheHelpers.updateCloudDiscoveryMetadata", "ClientConfigurationErrorCodes.untrustedAuthority", "ClientConfigurationErrorCodes.invalidCloudDiscoveryMetadata", "ClientAuthErrorCodes.endpointResolutionError", "ClientAuthErrorCodes.networkError", "RequestParameterBuilder.addBrokerParameters", "RequestParameterBuilder.addExtraQueryParameters", "RequestParameterBuilder.addCorrelationId", "RequestParameterBuilder.instrumentBrokerParams", "UrlUtils.mapToQueryString", "base64Decode", "ClientAuthErrorCodes.invalidCacheEnvironment", "InteractionRequiredAuthErrorCodes.interactionRequired", "InteractionRequiredAuthErrorCodes.consentRequired", "InteractionRequiredAuthErrorCodes.loginRequired", "InteractionRequiredAuthErrorCodes.badToken", "InteractionRequiredAuthErrorCodes.uxNotAllowed", "InteractionRequiredAuthErrorCodes.noTokensFound", "InteractionRequiredAuthErrorCodes.nativeAccountUnavailable", "InteractionRequiredAuthErrorCodes.refreshTokenExpired", "ClientAuthErrorCodes.noCryptoObject", "ClientAuthErrorCodes.invalidState", "TimeUtils.nowSeconds", "ClientAuthErrorCodes.nonceMismatch", "ClientAuthErrorCodes.authTimeNotFound", "ClientAuthErrorCodes.invalidCacheEnvironment", "CacheHelpers.createIdTokenEntity", "CacheHelpers.createAccessTokenEntity", "CacheHelpers.createRefreshTokenEntity", "ClientAuthErrorCodes.keyIdMissing", "TimeUtils.toDateFromSeconds", "base64Decode", "ClientAuthErrorCodes.requestCannotBeMade", "TimeUtils.nowSeconds", "ClientConfigurationErrorCodes.logoutRequestEmpty", "RequestParameterBuilder.addClientId", "AADServerParamKeys.CLIENT_ID", "ClientConfigurationErrorCodes.redirectUriEmpty", "RequestParameterBuilder.addRedirectUri", "RequestParameterBuilder.addScopes", "RequestParameterBuilder.addAuthorizationCode", "RequestParameterBuilder.addLibraryInfo", "RequestParameterBuilder.addApplicationTelemetry", "RequestParameterBuilder.addThrottling", "RequestParameterBuilder.addServerTelemetry", "RequestParameterBuilder.addCodeVerifier", "RequestParameterBuilder.addClientSecret", "RequestParameterBuilder.addClientAssertion", "RequestParameterBuilder.addClientAssertionType", "RequestParameterBuilder.addGrantType", "RequestParameterBuilder.addClientInfo", "RequestParameterBuilder.addPopToken", "RequestParameterBuilder.addSshJwk", "ClientConfigurationErrorCodes.missingSshJwk", "RequestParameterBuilder.addClaims", "RequestParameterBuilder.addCcsOid", "RequestParameterBuilder.addCcsUpn", "RequestParameterBuilder.addBrokerParameters", "RequestParameterBuilder.addExtraQueryParameters", "AADServerParamKeys.RETURN_SPA_CODE", "RequestParameterBuilder.instrumentBrokerParams", "UrlUtils.mapToQueryString", "RequestParameterBuilder.addPostLogoutRedirectUri", "RequestParameterBuilder.addCorrelationId", "RequestParameterBuilder.addIdTokenHint", "RequestParameterBuilder.addState", "RequestParameterBuilder.addLogoutHint", "RequestParameterBuilder.addInstanceAware", "TimeUtils.nowSeconds", "ClientConfigurationErrorCodes.tokenRequestEmpty", "ClientAuthErrorCodes.noAccountInSilentRequest", "InteractionRequiredAuthErrorCodes.noTokensFound", "TimeUtils.isTokenExpired", "InteractionRequiredAuthErrorCodes.refreshTokenExpired", "InteractionRequiredAuthErrorCodes.badToken", "RequestParameterBuilder.addClientId", "AADServerParamKeys.CLIENT_ID", "RequestParameterBuilder.addRedirectUri", "RequestParameterBuilder.addScopes", "RequestParameterBuilder.addGrantType", "RequestParameterBuilder.addClientInfo", "RequestParameterBuilder.addLibraryInfo", "RequestParameterBuilder.addApplicationTelemetry", "RequestParameterBuilder.addThrottling", "RequestParameterBuilder.addServerTelemetry", "RequestParameterBuilder.addRefreshToken", "RequestParameterBuilder.addClientSecret", "RequestParameterBuilder.addClientAssertion", "RequestParameterBuilder.addClientAssertionType", "RequestParameterBuilder.addPopToken", "RequestParameterBuilder.addSshJwk", "ClientConfigurationErrorCodes.missingSshJwk", "RequestParameterBuilder.addClaims", "RequestParameterBuilder.addCcsOid", "RequestParameterBuilder.addCcsUpn", "RequestParameterBuilder.addBrokerParameters", "RequestParameterBuilder.addExtraQueryParameters", "RequestParameterBuilder.instrumentBrokerParams", "UrlUtils.mapToQueryString", "ClientAuthErrorCodes.tokenRefreshRequired", "ClientAuthErrorCodes.noAccountInSilentRequest", "TimeUtils.wasClockTurnedBack", "TimeUtils.isTokenExpired", "ClientAuthErrorCodes.authTimeNotFound", "ClientAuthErrorCodes.methodNotImplemented", "RequestParameterBuilder.addClientId", "AADServerParamKeys.CLIENT_ID", "RequestParameterBuilder.addScopes", "RequestParameterBuilder.addRedirectUri", "RequestParameterBuilder.addCorrelationId", "RequestParameterBuilder.addResponseMode", "RequestParameterBuilder.addClientInfo", "RequestParameterBuilder.addPrompt", "RequestParameterBuilder.addDomainHint", "RequestParameterBuilder.addSid", "RequestParameterBuilder.addLoginHint", "RequestParameterBuilder.addCcsOid", "RequestParameterBuilder.addCcsUpn", "RequestParameterBuilder.addNonce", "RequestParameterBuilder.addState", "RequestParameterBuilder.addClaims", "RequestParameterBuilder.addBrokerParameters", "AADServerParamKeys.INSTANCE_AWARE", "RequestParameterBuilder.addInstanceAware", "ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse", "ClientAuthErrorCodes.stateNotFound", "ClientAuthErrorCodes.invalidState", "ClientAuthErrorCodes.stateMismatch", "ClientConfigurationErrorCodes.invalidAuthenticationHeader", "ClientConfigurationErrorCodes.missingNonceAuthenticationHeader", "JoseHeaderErrorCodes.missingKidError", "JoseHeaderErrorCodes.missingAlgError", "JoseHeaderErrorCodes.missingKidError", "JoseHeaderErrorCodes.missingAlgError", "stack", "noNetworkConnectivity", "postRequestFailed", "BrowserAuthErrorCodes.pkceNotCreated", "BrowserAuthErrorCodes.earJwkEmpty", "BrowserAuthErrorCodes.earJweEmpty", "BrowserAuthErrorCodes.cryptoNonExistent", "BrowserAuthErrorCodes.emptyNavigateUri", "BrowserAuthErrorCodes.hashEmptyError", "BrowserAuthErrorCodes.noStateInHash", "BrowserAuthErrorCodes.hashDoesNotContainKnownProperties", "BrowserAuthErrorCodes.unableToParseState", "BrowserAuthErrorCodes.stateInteractionTypeMismatch", "BrowserAuthErrorCodes.interactionInProgress", "BrowserAuthErrorCodes.popupWindowError", "BrowserAuthErrorCodes.emptyWindowError", "BrowserAuthErrorCodes.userCancelled", "BrowserAuthErrorCodes.monitorPopupTimeout", "BrowserAuthErrorCodes.monitorWindowTimeout", "BrowserAuthErrorCodes.redirectInIframe", "BrowserAuthErrorCodes.blockIframeReload", "BrowserAuthErrorCodes.blockNestedPopups", "BrowserAuthErrorCodes.iframeClosedPrematurely", "BrowserAuthErrorCodes.silentLogoutUnsupported", "BrowserAuthErrorCodes.noAccountError", "BrowserAuthErrorCodes.silentPromptValueError", "BrowserAuthErrorCodes.noTokenRequestCacheError", "BrowserAuthErrorCodes.unableToParseTokenRequestCacheError", "BrowserAuthErrorCodes.authRequestNotSetError", "BrowserAuthErrorCodes.invalidCacheType", "BrowserAuthErrorCodes.nonBrowserEnvironment", "BrowserAuthErrorCodes.databaseNotOpen", "BrowserAuthErrorCodes.noNetworkConnectivity", "BrowserAuthErrorCodes.postRequestFailed", "BrowserAuthErrorCodes.getRequestFailed", "BrowserAuthErrorCodes.failedToParseResponse", "BrowserAuthErrorCodes.unableToLoadToken", "BrowserAuthErrorCodes.cryptoKeyNotFound", "BrowserAuthErrorCodes.authCodeRequired", "BrowserAuthErrorCodes.authCodeOrNativeAccountIdRequired", "BrowserAuthErrorCodes.spaCodeAndNativeAccountIdPresent", "BrowserAuthErrorCodes.databaseUnavailable", "BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform", "BrowserAuthErrorCodes.nativeHandshakeTimeout", "BrowserAuthErrorCodes.nativeExtensionNotInstalled", "BrowserAuthErrorCodes.nativeConnectionNotEstablished", "BrowserAuthErrorCodes.uninitializedPublicClientApplication", "BrowserAuthErrorCodes.nativePromptNotSupported", "BrowserAuthErrorCodes.invalidBase64String", "BrowserAuthErrorCodes.invalidPopTokenRequest", "BrowserAuthErrorCodes.failedToBuildHeaders", "BrowserAuthErrorCodes.failedToParseHeaders", "BrowserAuthErrorCodes.failedToDecryptEarResponse", "BrowserAuthErrorCodes.timedOut", "InteractionType", "BrowserAuthErrorCodes.invalidBase64String", "BrowserAuthErrorCodes.nonBrowserEnvironment", "BrowserAuthErrorCodes.cryptoNonExistent", "BrowserAuthErrorCodes.failedToDecryptEarResponse", "BrowserConfigurationAuthErrorCodes.storageNotSupported", "BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled", "BrowserConfigurationAuthErrorCodes.inMemRedirectUnavailable", "BrowserConfigurationAuthErrorCodes\r\n .stubbedPublicClientApplicationCalled", "BrowserAuthErrorCodes.blockIframeReload", "BrowserAuthErrorCodes.redirectInIframe", "BrowserAuthErrorCodes.blockNestedPopups", "BrowserAuthErrorCodes.nonBrowserEnvironment", "BrowserAuthErrorCodes.uninitializedPublicClientApplication", "BrowserConfigurationAuthErrorCodes.inMemRedirectUnavailable", "BrowserCrypto.createNewGuid", "BrowserAuthErrorCodes.timedOut", "BrowserAuthErrorCodes.getRequestFailed", "BrowserAuthErrorCodes.noNetworkConnectivity", "BrowserAuthErrorCodes.failedToParseResponse", "BrowserAuthErrorCodes.postRequestFailed", "BrowserAuthErrorCodes.failedToBuildHeaders", "BrowserAuthErrorCodes.failedToParseHeaders", "BrowserUtils.getCurrentUri", "DEFAULT_CACHE_OPTIONS", "DEFAULT_TELEMETRY_OPTIONS", "name", "version", "name", "version", "BrowserCrypto.createNewGuid", "version", "BrowserAuthErrorCodes.databaseUnavailable", "BrowserAuthErrorCodes.databaseNotOpen", "BrowserAuthErrorCodes.databaseUnavailable", "BrowserCrypto.validateCryptoAvailable", "BrowserCrypto.createNewGuid", "BrowserCrypto.generateKeyPair", "BrowserCrypto.exportJwk", "BrowserCrypto.importJwk", "BrowserAuthErrorCodes.cryptoKeyNotFound", "BrowserCrypto.sign", "BrowserCrypto.hashString", "name", "key", "CacheKeys.getAccountKeysCacheKey", "CacheKeys.getTokenKeysCacheKey", "BrowserConfigurationAuthErrorCodes.storageNotSupported", "BrowserAuthErrorCodes.uninitializedPublicClientApplication", "CacheKeys.PREFIX", "CacheKeys.getAccountKeysCacheKey", "CacheKeys.getTokenKeysCacheKey", "BrowserConfigurationAuthErrorCodes.storageNotSupported", "CacheKeys.ACCOUNT_SCHEMA_VERSION", "CacheKeys.CREDENTIAL_SCHEMA_VERSION", "CacheKeys.getAccountKeysCacheKey", "CacheKeys.PREFIX", "CacheKeys.CACHE_KEY_SEPARATOR", "CacheKeys.VERSION_CACHE_KEY", "version", "CacheKeys.getTokenKeysCacheKey", "BrowserAuthErrorCodes.noTokenRequestCacheError", "BrowserAuthErrorCodes.unableToParseTokenRequestCacheError", "BrowserAuthErrorCodes.interactionInProgress", "e", "BROADCAST_CHANNEL_NAME", "version", "BrowserUtils.getCurrentUri", "BrowserUtils.getCurrentUri", "version", "BrowserAuthErrorCodes.hashEmptyError", "BrowserAuthErrorCodes.hashDoesNotContainKnownProperties", "BrowserAuthErrorCodes.noStateInHash", "BrowserAuthErrorCodes.unableToParseState", "BrowserAuthErrorCodes.stateInteractionTypeMismatch", "BrowserAuthErrorCodes.userCancelled", "NativeAuthErrorCodes.userSwitch", "NativeStatusCodes.PERSISTENT_ERROR", "NativeStatusCodes.DISABLED", "NativeAuthErrorCodes.contentError", "NativeStatusCodes.ACCOUNT_UNAVAILABLE", "NativeStatusCodes.USER_INTERACTION_REQUIRED", "NativeStatusCodes.USER_CANCEL", "BrowserAuthErrorCodes.userCancelled", "NativeStatusCodes.NO_NETWORK", "BrowserAuthErrorCodes.noNetworkConnectivity", "NativeStatusCodes.UX_NOT_ALLOWED", "BrowserAuthErrorCodes.cryptoKeyNotFound", "version", "NativeAuthErrorCodes.userSwitch", "BrowserAuthErrorCodes.invalidPopTokenRequest", "BrowserAuthErrorCodes.nativePromptNotSupported", "version", "BrowserAuthErrorCodes.earJwkEmpty", "BrowserAuthErrorCodes.nativeConnectionNotEstablished", "BrowserAuthErrorCodes.earJweEmpty", "BrowserAuthErrorCodes.pkceNotCreated", "BrowserAuthErrorCodes.nativeHandshakeTimeout", "BrowserAuthErrorCodes.nativeExtensionNotInstalled", "name", "version", "BrowserUtils.preconnect", "Authorize.getAuthCodeRequestUrl", "ResponseHandler.deserializeResponse", "Authorize.handleResponseCode", "Authorize.getEARForm", "Authorize.handleResponseEAR", "Authorize.getCodeForm", "BrowserUtils.getCurrentUri", "BrowserAuthErrorCodes.emptyNavigateUri", "BrowserAuthErrorCodes.userCancelled", "BrowserAuthErrorCodes.emptyWindowError", "BrowserAuthErrorCodes.popupWindowError", "Authorize.getAuthCodeRequestUrl", "Authorize.getEARForm", "BrowserAuthErrorCodes.timedOut", "Authorize.getCodeForm", "BrowserUtils.replaceHash", "BrowserUtils.isInIframe", "BrowserUtils.getHomepage", "ResponseHandler.validateInteractionType", "BrowserUtils.clearHash", "BrowserAuthErrorCodes.noStateInHash", "Authorize.handleResponseEAR", "Authorize.handleResponseCode", "BrowserAuthErrorCodes.emptyNavigateUri", "BrowserUtils.getCurrentUri", "BrowserAuthErrorCodes.emptyNavigateUri", "BrowserAuthErrorCodes.monitorWindowTimeout", "BrowserUtils.preconnect", "ResponseHandler.deserializeResponse", "Authorize.handleResponseEAR", "BrowserAuthErrorCodes.silentLogoutUnsupported", "Authorize.getAuthCodeRequestUrl", "Authorize.handleResponseCode", "BrowserAuthErrorCodes.silentLogoutUnsupported", "BrowserAuthErrorCodes.nonBrowserEnvironment", "BrowserCrypto.createNewGuid", "BrowserAuthErrorCodes.unableToLoadToken", "BrowserAuthErrorCodes.authCodeRequired", "BrowserAuthErrorCodes.silentLogoutUnsupported", "preflightCheck", "BrowserUtils.preflightCheck", "BrowserUtils.blockAPICallsBeforeInitialize", "BrowserUtils.redirectPreflightCheck", "result", "_a", "BrowserAuthErrorCodes.spaCodeAndNativeAccountIdPresent", "BrowserAuthErrorCodes.unableToAcquireTokenFromNativePlatform", "BrowserAuthErrorCodes.authCodeOrNativeAccountIdRequired", "AccountManager.getAllAccounts", "AccountManager.getAccount", "AccountManager.getAccountByUsername", "AccountManager.getAccountByHomeId", "AccountManager.getAccountByLocalId", "AccountManager.setActiveAccount", "AccountManager.getActiveAccount", "BrowserAuthErrorCodes.nativeConnectionNotEstablished", "BrowserUtils.blockNonBrowserEnvironment", "version", "BrowserAuthErrorCodes.noAccountError", "name", "result", "AccountManager.getAccount", "AccountManager.getAllAccounts", "AccountManager.getAccountByUsername", "AccountManager.getAccountByHomeId", "AccountManager.getAccountByLocalId", "AccountManager.setActiveAccount", "AccountManager.getActiveAccount", "version", "ControllerFactory.createV3Controller", "version", "version", "ControllerFactory.createController", "version", "BrowserConfigurationAuthErrorCodes.stubbedPublicClientApplicationCalled", "name", "version", "name", "version", "BrowserCrypto.createNewGuid"] +} diff --git a/node_modules/.vite/deps/chunk-5I6CIHEW.js b/node_modules/.vite/deps/chunk-ZZUMGTHG.js similarity index 89% rename from node_modules/.vite/deps/chunk-5I6CIHEW.js rename to node_modules/.vite/deps/chunk-ZZUMGTHG.js index e03a0149..7f7dc727 100644 --- a/node_modules/.vite/deps/chunk-5I6CIHEW.js +++ b/node_modules/.vite/deps/chunk-ZZUMGTHG.js @@ -1,6 +1,6 @@ import { useLayoutEffect2 -} from "./chunk-SZRZRZSM.js"; +} from "./chunk-ILYE3ZA7.js"; import { require_react } from "./chunk-3TFVT2CW.js"; @@ -23,4 +23,4 @@ function useId(deterministicId) { export { useId }; -//# sourceMappingURL=chunk-5I6CIHEW.js.map +//# sourceMappingURL=chunk-ZZUMGTHG.js.map diff --git a/node_modules/.vite/deps/chunk-5I6CIHEW.js.map b/node_modules/.vite/deps/chunk-ZZUMGTHG.js.map similarity index 100% rename from node_modules/.vite/deps/chunk-5I6CIHEW.js.map rename to node_modules/.vite/deps/chunk-ZZUMGTHG.js.map diff --git a/node_modules/.vite/deps/react-hook-form.js b/node_modules/.vite/deps/react-hook-form.js index 994a928c..5eb6e787 100644 --- a/node_modules/.vite/deps/react-hook-form.js +++ b/node_modules/.vite/deps/react-hook-form.js @@ -11,7 +11,7 @@ import { useFormContext, useFormState, useWatch -} from "./chunk-HQGJFDI6.js"; +} from "./chunk-RBMNEPGM.js"; import "./chunk-3TFVT2CW.js"; import "./chunk-4MBMRILA.js"; export { diff --git a/node_modules/.vite/deps/react-router-dom.js b/node_modules/.vite/deps/react-router-dom.js index 68ac6eca..ffead3cb 100644 --- a/node_modules/.vite/deps/react-router-dom.js +++ b/node_modules/.vite/deps/react-router-dom.js @@ -1076,8 +1076,8 @@ function createRouter(init) { let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties2, void 0, manifest); let inFlightDataRoutes; let basename = init.basename || "/"; - let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy; - let patchRoutesOnNavigationImpl = init.unstable_patchRoutesOnNavigation; + let dataStrategyImpl = init.dataStrategy || defaultDataStrategy; + let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation; let future = _extends({ v7_fetcherPersist: false, v7_normalizeFormMethod: false, @@ -1088,8 +1088,6 @@ function createRouter(init) { }, init.future); let unlistenHistory = null; let subscribers = /* @__PURE__ */ new Set(); - let discoveredRoutesMaxSize = 1e3; - let discoveredRoutes = /* @__PURE__ */ new Set(); let savedScrollPositions2 = null; let getScrollRestorationKey = null; let getScrollPosition = null; @@ -1132,20 +1130,11 @@ function createRouter(init) { } else if (future.v7_partialHydration) { let loaderData = init.hydrationData ? init.hydrationData.loaderData : null; let errors = init.hydrationData ? init.hydrationData.errors : null; - let isRouteInitialized = (m) => { - if (!m.route.loader) { - return true; - } - if (typeof m.route.loader === "function" && m.route.loader.hydrate === true) { - return false; - } - return loaderData && loaderData[m.route.id] !== void 0 || errors && errors[m.route.id] !== void 0; - }; if (errors) { let idx = initialMatches.findIndex((m) => errors[m.route.id] !== void 0); - initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized); + initialized = initialMatches.slice(0, idx + 1).every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)); } else { - initialized = initialMatches.every(isRouteInitialized); + initialized = initialMatches.every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)); } } else { initialized = init.hydrationData != null; @@ -1187,7 +1176,6 @@ function createRouter(init) { let deletedFetchers = /* @__PURE__ */ new Set(); let activeDeferreds = /* @__PURE__ */ new Map(); let blockerFunctions = /* @__PURE__ */ new Map(); - let pendingPatchRoutes = /* @__PURE__ */ new Map(); let unblockBlockerHistoryUpdate = void 0; function initialize() { unlistenHistory = init.history.listen((_ref) => { @@ -1285,8 +1273,8 @@ function createRouter(init) { } [...subscribers].forEach((subscriber) => subscriber(state, { deletedFetchers: deletedFetchersKeys, - unstable_viewTransitionOpts: opts.viewTransitionOpts, - unstable_flushSync: opts.flushSync === true + viewTransitionOpts: opts.viewTransitionOpts, + flushSync: opts.flushSync === true })); if (future.v7_fetcherPersist) { completedFetchers.forEach((key) => state.fetchers.delete(key)); @@ -1401,7 +1389,7 @@ function createRouter(init) { historyAction = Action.Replace; } let preventScrollReset = opts && "preventScrollReset" in opts ? opts.preventScrollReset === true : void 0; - let flushSync = (opts && opts.unstable_flushSync) === true; + let flushSync = (opts && opts.flushSync) === true; let blockerKey = shouldBlockNavigation({ currentLocation, nextLocation, @@ -1437,7 +1425,7 @@ function createRouter(init) { pendingError: error, preventScrollReset, replace: opts && opts.replace, - enableViewTransition: opts && opts.unstable_viewTransition, + enableViewTransition: opts && opts.viewTransition, flushSync }); } @@ -1574,15 +1562,12 @@ function createRouter(init) { shortCircuited: true }; } else if (discoverResult.type === "error") { - let { - boundaryId, - error - } = handleDiscoverRouteError(location.pathname, discoverResult); + let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id; return { matches: discoverResult.partialMatches, pendingActionResult: [boundaryId, { type: ResultType.error, - error + error: discoverResult.error }] }; } else if (!discoverResult.matches) { @@ -1679,15 +1664,12 @@ function createRouter(init) { shortCircuited: true }; } else if (discoverResult.type === "error") { - let { - boundaryId, - error - } = handleDiscoverRouteError(location.pathname, discoverResult); + let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id; return { matches: discoverResult.partialMatches, loaderData: {}, errors: { - [boundaryId]: error + [boundaryId]: discoverResult.error } }; } else if (!discoverResult.matches) { @@ -1746,9 +1728,7 @@ function createRouter(init) { }); } revalidatingFetchers.forEach((rf) => { - if (fetchControllers.has(rf.key)) { - abortFetcher(rf.key); - } + abortFetcher(rf.key); if (rf.controller) { fetchControllers.set(rf.key, rf.controller); } @@ -1792,7 +1772,7 @@ function createRouter(init) { let { loaderData, errors - } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds); + } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds); activeDeferreds.forEach((deferredData, routeId) => { deferredData.subscribe((aborted) => { if (aborted || deferredData.done) { @@ -1801,15 +1781,7 @@ function createRouter(init) { }); }); if (future.v7_partialHydration && initialHydration && state.errors) { - Object.entries(state.errors).filter((_ref2) => { - let [id] = _ref2; - return !matchesToLoad.some((m) => m.route.id === id); - }).forEach((_ref3) => { - let [routeId, error] = _ref3; - errors = Object.assign(errors || {}, { - [routeId]: error - }); - }); + errors = _extends({}, state.errors, errors); } let updatedFetchers = markFetchRedirectsDone(); let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId); @@ -1847,8 +1819,8 @@ function createRouter(init) { if (isServer) { throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback."); } - if (fetchControllers.has(key)) abortFetcher(key); - let flushSync = (opts && opts.unstable_flushSync) === true; + abortFetcher(key); + let flushSync = (opts && opts.flushSync) === true; let routesToUse = inFlightDataRoutes || dataRoutes; let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative); let matches = matchRoutes(routesToUse, normalizedPath, basename); @@ -1876,18 +1848,18 @@ function createRouter(init) { return; } let match = getTargetMatch(matches, path); - pendingPreventScrollReset = (opts && opts.preventScrollReset) === true; + let preventScrollReset = (opts && opts.preventScrollReset) === true; if (submission && isMutationMethod(submission.formMethod)) { - handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission); + handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission); return; } fetchLoadMatches.set(key, { routeId, path }); - handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission); + handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission); } - async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, submission) { + async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) { interruptActiveLoads(); fetchLoadMatches.delete(key); function detectAndHandle405Error(m) { @@ -1918,10 +1890,7 @@ function createRouter(init) { if (discoverResult.type === "aborted") { return; } else if (discoverResult.type === "error") { - let { - error - } = handleDiscoverRouteError(path, discoverResult); - setFetcherError(key, routeId, error, { + setFetcherError(key, routeId, discoverResult.error, { flushSync }); return; @@ -1965,7 +1934,8 @@ function createRouter(init) { fetchRedirectIds.add(key); updateFetcherState(key, getLoadingFetcher(submission)); return startRedirectNavigation(fetchRequest, actionResult, false, { - fetcherSubmission: submission + fetcherSubmission: submission, + preventScrollReset }); } } @@ -1994,9 +1964,7 @@ function createRouter(init) { let existingFetcher2 = state.fetchers.get(staleKey); let revalidatingFetcher = getLoadingFetcher(void 0, existingFetcher2 ? existingFetcher2.data : void 0); state.fetchers.set(staleKey, revalidatingFetcher); - if (fetchControllers.has(staleKey)) { - abortFetcher(staleKey); - } + abortFetcher(staleKey); if (rf.controller) { fetchControllers.set(staleKey, rf.controller); } @@ -2019,17 +1987,21 @@ function createRouter(init) { revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key)); let redirect3 = findRedirect(loaderResults); if (redirect3) { - return startRedirectNavigation(revalidationRequest, redirect3.result, false); + return startRedirectNavigation(revalidationRequest, redirect3.result, false, { + preventScrollReset + }); } redirect3 = findRedirect(fetcherResults); if (redirect3) { fetchRedirectIds.add(redirect3.key); - return startRedirectNavigation(revalidationRequest, redirect3.result, false); + return startRedirectNavigation(revalidationRequest, redirect3.result, false, { + preventScrollReset + }); } let { loaderData, errors - } = processLoaderData(state, matches, matchesToLoad, loaderResults, void 0, revalidatingFetchers, fetcherResults, activeDeferreds); + } = processLoaderData(state, matches, loaderResults, void 0, revalidatingFetchers, fetcherResults, activeDeferreds); if (state.fetchers.has(key)) { let doneFetcher = getDoneFetcher(actionResult.data); state.fetchers.set(key, doneFetcher); @@ -2053,7 +2025,7 @@ function createRouter(init) { isRevalidationRequired = false; } } - async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, submission) { + async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) { let existingFetcher = state.fetchers.get(key); updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : void 0), { flushSync @@ -2065,10 +2037,7 @@ function createRouter(init) { if (discoverResult.type === "aborted") { return; } else if (discoverResult.type === "error") { - let { - error - } = handleDiscoverRouteError(path, discoverResult); - setFetcherError(key, routeId, error, { + setFetcherError(key, routeId, discoverResult.error, { flushSync }); return; @@ -2107,7 +2076,9 @@ function createRouter(init) { return; } else { fetchRedirectIds.add(key); - await startRedirectNavigation(fetchRequest, result, false); + await startRedirectNavigation(fetchRequest, result, false, { + preventScrollReset + }); return; } } @@ -2122,6 +2093,7 @@ function createRouter(init) { let { submission, fetcherSubmission, + preventScrollReset, replace: replace2 } = _temp2 === void 0 ? {} : _temp2; if (redirect3.response.headers.has("X-Remix-Revalidate")) { @@ -2169,7 +2141,7 @@ function createRouter(init) { formAction: location }), // Preserve these flags across redirects - preventScrollReset: pendingPreventScrollReset, + preventScrollReset: preventScrollReset || pendingPreventScrollReset, enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0 }); } else { @@ -2179,7 +2151,7 @@ function createRouter(init) { // Send fetcher submissions through for shouldRevalidate fetcherSubmission, // Preserve these flags across redirects - preventScrollReset: pendingPreventScrollReset, + preventScrollReset: preventScrollReset || pendingPreventScrollReset, enableViewTransition: isNavigation ? pendingViewTransitionEnabled : void 0 }); } @@ -2246,8 +2218,8 @@ function createRouter(init) { fetchLoadMatches.forEach((_, key) => { if (fetchControllers.has(key)) { cancelledFetcherLoads.add(key); - abortFetcher(key); } + abortFetcher(key); }); } function updateFetcherState(key, fetcher, opts) { @@ -2315,9 +2287,10 @@ function createRouter(init) { } function abortFetcher(key) { let controller = fetchControllers.get(key); - invariant(controller, "Expected fetch controller: " + key); - controller.abort(); - fetchControllers.delete(key); + if (controller) { + controller.abort(); + fetchControllers.delete(key); + } } function markFetchersDone(keys) { for (let key of keys) { @@ -2377,12 +2350,12 @@ function createRouter(init) { blockers }); } - function shouldBlockNavigation(_ref4) { + function shouldBlockNavigation(_ref2) { let { currentLocation, nextLocation, historyAction - } = _ref4; + } = _ref2; if (blockerFunctions.size === 0) { return; } @@ -2419,16 +2392,6 @@ function createRouter(init) { error }; } - function handleDiscoverRouteError(pathname, discoverResult) { - return { - boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id, - error: getInternalRouterError(400, { - type: "route-discovery", - pathname, - message: discoverResult.error != null && "message" in discoverResult.error ? discoverResult.error : String(discoverResult.error) - }) - }; - } function cancelActiveDeferreds(predicate) { let cancelledRouteIds = []; activeDeferreds.forEach((dfd, routeId) => { @@ -2484,12 +2447,6 @@ function createRouter(init) { } function checkFogOfWar(matches, routesToUse, pathname) { if (patchRoutesOnNavigationImpl) { - if (discoveredRoutes.has(pathname)) { - return { - active: false, - matches - }; - } if (!matches) { let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true); return { @@ -2512,12 +2469,26 @@ function createRouter(init) { }; } async function discoverRoutes(matches, pathname, signal) { + if (!patchRoutesOnNavigationImpl) { + return { + type: "success", + matches + }; + } let partialMatches = matches; while (true) { let isNonHMR = inFlightDataRoutes == null; let routesToUse = inFlightDataRoutes || dataRoutes; + let localManifest = manifest; try { - await loadLazyRouteChildren(patchRoutesOnNavigationImpl, pathname, partialMatches, routesToUse, manifest, mapRouteProperties2, pendingPatchRoutes, signal); + await patchRoutesOnNavigationImpl({ + path: pathname, + matches: partialMatches, + patch: (routeId, children) => { + if (signal.aborted) return; + patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties2); + } + }); } catch (e) { return { type: "error", @@ -2525,7 +2496,7 @@ function createRouter(init) { partialMatches }; } finally { - if (isNonHMR) { + if (isNonHMR && !signal.aborted) { dataRoutes = [...dataRoutes]; } } @@ -2536,7 +2507,6 @@ function createRouter(init) { } let newMatches = matchRoutes(routesToUse, pathname, basename); if (newMatches) { - addToFifoQueue(pathname, discoveredRoutes); return { type: "success", matches: newMatches @@ -2544,7 +2514,6 @@ function createRouter(init) { } let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true); if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) { - addToFifoQueue(pathname, discoveredRoutes); return { type: "success", matches: null @@ -2553,13 +2522,6 @@ function createRouter(init) { partialMatches = newPartialMatches; } } - function addToFifoQueue(path, queue) { - if (queue.size >= discoveredRoutesMaxSize) { - let first = queue.values().next().value; - queue.delete(first); - } - queue.add(path); - } function _internalSetRoutes(newRoutes) { manifest = {}; inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties2, void 0, manifest); @@ -2638,8 +2600,18 @@ function normalizeTo(location, matches, basename, prependBasename, to, v7_relati path.search = location.search; path.hash = location.hash; } - if ((to == null || to === "" || to === ".") && activeRouteMatch && activeRouteMatch.route.index && !hasNakedIndexQuery(path.search)) { - path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index"; + if ((to == null || to === "" || to === ".") && activeRouteMatch) { + let nakedIndex = hasNakedIndexQuery(path.search); + if (activeRouteMatch.route.index && !nakedIndex) { + path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index"; + } else if (!activeRouteMatch.route.index && nakedIndex) { + let params = new URLSearchParams(path.search); + let indexValues = params.getAll("index"); + params.delete("index"); + indexValues.filter((v) => v).forEach((v) => params.append("index", v)); + let qs = params.toString(); + path.search = qs ? "?" + qs : ""; + } } if (prependBasename && basename !== "/") { path.pathname = path.pathname === "/" ? basename : joinPaths([basename, path.pathname]); @@ -2676,8 +2648,8 @@ function normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) { } let text = typeof opts.body === "string" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ? ( // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data - Array.from(opts.body.entries()).reduce((acc, _ref5) => { - let [name, value] = _ref5; + Array.from(opts.body.entries()).reduce((acc, _ref3) => { + let [name, value] = _ref3; return "" + acc + name + "=" + value + "\n"; }, "") ) : String(opts.body); @@ -2761,22 +2733,26 @@ function normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) { submission }; } -function getLoaderMatchesUntilBoundary(matches, boundaryId) { - let boundaryMatches = matches; - if (boundaryId) { - let index = matches.findIndex((m) => m.route.id === boundaryId); - if (index >= 0) { - boundaryMatches = matches.slice(0, index); - } +function getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) { + if (includeBoundary === void 0) { + includeBoundary = false; } - return boundaryMatches; + let index = matches.findIndex((m) => m.route.id === boundaryId); + if (index >= 0) { + return matches.slice(0, includeBoundary ? index + 1 : index); + } + return matches; } -function getMatchesToLoad(history, state, matches, submission, location, isInitialLoad, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) { +function getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) { let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : void 0; let currentUrl = history.createURL(state.location); let nextUrl = history.createURL(location); - let boundaryId = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[0] : void 0; - let boundaryMatches = boundaryId ? getLoaderMatchesUntilBoundary(matches, boundaryId) : matches; + let boundaryMatches = matches; + if (initialHydration && state.errors) { + boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true); + } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) { + boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]); + } let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : void 0; let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400; let navigationMatches = boundaryMatches.filter((match, index) => { @@ -2789,12 +2765,8 @@ function getMatchesToLoad(history, state, matches, submission, location, isIniti if (route.loader == null) { return false; } - if (isInitialLoad) { - if (typeof route.loader !== "function" || route.loader.hydrate) { - return true; - } - return state.loaderData[route.id] === void 0 && // Don't re-run if the loader ran and threw an error - (!state.errors || state.errors[route.id] === void 0); + if (initialHydration) { + return shouldLoadRouteOnHydration(route, state.loaderData, state.errors); } if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some((id) => id === match.route.id)) { return true; @@ -2818,7 +2790,7 @@ function getMatchesToLoad(history, state, matches, submission, location, isIniti }); let revalidatingFetchers = []; fetchLoadMatches.forEach((f, key) => { - if (isInitialLoad || !matches.some((m) => m.route.id === f.routeId) || deletedFetchers.has(key)) { + if (initialHydration || !matches.some((m) => m.route.id === f.routeId) || deletedFetchers.has(key)) { return; } let fetcherMatches = matchRoutes(routesToUse, f.path, basename); @@ -2868,6 +2840,23 @@ function getMatchesToLoad(history, state, matches, submission, location, isIniti }); return [navigationMatches, revalidatingFetchers]; } +function shouldLoadRouteOnHydration(route, loaderData, errors) { + if (route.lazy) { + return true; + } + if (!route.loader) { + return false; + } + let hasData = loaderData != null && loaderData[route.id] !== void 0; + let hasError = errors != null && errors[route.id] !== void 0; + if (!hasData && hasError) { + return false; + } + if (typeof route.loader === "function" && route.loader.hydrate === true) { + return true; + } + return !hasData && !hasError; +} function isNewLoader(currentLoaderData, currentMatch, match) { let isNew = ( // [a] -> [a, b] @@ -2895,44 +2884,37 @@ function shouldRevalidateLoader(loaderMatch, arg) { } return arg.defaultShouldRevalidate; } -async function loadLazyRouteChildren(patchRoutesOnNavigationImpl, path, matches, routes, manifest, mapRouteProperties2, pendingRouteChildren, signal) { - let key = [path, ...matches.map((m) => m.route.id)].join("-"); - try { - let pending = pendingRouteChildren.get(key); - if (!pending) { - pending = patchRoutesOnNavigationImpl({ - path, - matches, - patch: (routeId, children) => { - if (!signal.aborted) { - patchRoutesImpl(routeId, children, routes, manifest, mapRouteProperties2); - } - } - }); - pendingRouteChildren.set(key, pending); - } - if (pending && isPromise(pending)) { - await pending; - } - } finally { - pendingRouteChildren.delete(key); - } -} function patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties2) { + var _childrenToPatch; + let childrenToPatch; if (routeId) { - var _route$children; let route = manifest[routeId]; invariant(route, "No route found to patch children into: routeId = " + routeId); - let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties2, [routeId, "patch", String(((_route$children = route.children) == null ? void 0 : _route$children.length) || "0")], manifest); - if (route.children) { - route.children.push(...dataChildren); - } else { - route.children = dataChildren; + if (!route.children) { + route.children = []; } + childrenToPatch = route.children; } else { - let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties2, ["patch", String(routesToUse.length || "0")], manifest); - routesToUse.push(...dataChildren); + childrenToPatch = routesToUse; } + let uniqueChildren = children.filter((newRoute) => !childrenToPatch.some((existingRoute) => isSameRoute(newRoute, existingRoute))); + let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties2, [routeId || "_", "patch", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || "0")], manifest); + childrenToPatch.push(...newRoutes); +} +function isSameRoute(newRoute, existingRoute) { + if ("id" in newRoute && "id" in existingRoute && newRoute.id === existingRoute.id) { + return true; + } + if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) { + return false; + } + if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) { + return true; + } + return newRoute.children.every((aChild, i) => { + var _existingRoute$childr; + return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some((bChild) => isSameRoute(aChild, bChild)); + }); } async function loadLazyRouteModule(route, mapRouteProperties2, manifest) { if (!route.lazy) { @@ -2960,10 +2942,10 @@ async function loadLazyRouteModule(route, mapRouteProperties2, manifest) { lazy: void 0 })); } -async function defaultDataStrategy(_ref6) { +async function defaultDataStrategy(_ref4) { let { matches - } = _ref6; + } = _ref4; let matchesToLoad = matches.filter((m) => m.shouldLoad); let results = await Promise.all(matchesToLoad.map((m) => m.resolve())); return results.reduce((acc, result, i) => Object.assign(acc, { @@ -3309,7 +3291,7 @@ function processRouteLoaderData(matches, results, pendingActionResult, activeDef loaderHeaders }; } -function processLoaderData(state, matches, matchesToLoad, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) { +function processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) { let { loaderData, errors @@ -3413,9 +3395,7 @@ function getInternalRouterError(status, _temp5) { let errorMessage = "Unknown @remix-run/router error"; if (status === 400) { statusText = "Bad Request"; - if (type === "route-discovery") { - errorMessage = 'Unable to match URL "' + pathname + '" - the `unstable_patchRoutesOnNavigation()` ' + ("function threw the following error:\n" + message); - } else if (method && pathname && routeId) { + if (method && pathname && routeId) { errorMessage = "You made a " + method + ' request to "' + pathname + '" but ' + ('did not provide a `loader` for route "' + routeId + '", ') + "so there is no way to handle the request."; } else if (type === "defer-action") { errorMessage = "defer() is not supported in actions"; @@ -3469,9 +3449,6 @@ function isHashChangeOnly(a, b) { } return false; } -function isPromise(val) { - return typeof val === "object" && val != null && "then" in val; -} function isRedirectDataStrategyResultResult(result) { return isResponse(result.result) && redirectStatusCodes.has(result.result.status); } @@ -4734,8 +4711,8 @@ function createMemoryRouter(routes, opts) { hydrationData: opts == null ? void 0 : opts.hydrationData, routes, mapRouteProperties, - unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy, - unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation + dataStrategy: opts == null ? void 0 : opts.dataStrategy, + patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation }).initialize(); } @@ -4890,9 +4867,9 @@ function getFormSubmissionInfo(target, basename) { body }; } -var _excluded = ["onClick", "relative", "reloadDocument", "replace", "state", "target", "to", "preventScrollReset", "unstable_viewTransition"]; -var _excluded2 = ["aria-current", "caseSensitive", "className", "end", "style", "to", "unstable_viewTransition", "children"]; -var _excluded3 = ["fetcherKey", "navigate", "reloadDocument", "replace", "state", "method", "action", "onSubmit", "relative", "preventScrollReset", "unstable_viewTransition"]; +var _excluded = ["onClick", "relative", "reloadDocument", "replace", "state", "target", "to", "preventScrollReset", "viewTransition"]; +var _excluded2 = ["aria-current", "caseSensitive", "className", "end", "style", "to", "viewTransition", "children"]; +var _excluded3 = ["fetcherKey", "navigate", "reloadDocument", "replace", "state", "method", "action", "onSubmit", "relative", "preventScrollReset", "viewTransition"]; var REACT_ROUTER_VERSION = "6"; try { window.__reactRouterVersion = REACT_ROUTER_VERSION; @@ -4910,8 +4887,8 @@ function createBrowserRouter(routes, opts) { hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(), routes, mapRouteProperties, - unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy, - unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation, + dataStrategy: opts == null ? void 0 : opts.dataStrategy, + patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation, window: opts == null ? void 0 : opts.window }).initialize(); } @@ -4927,8 +4904,8 @@ function createHashRouter(routes, opts) { hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(), routes, mapRouteProperties, - unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy, - unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation, + dataStrategy: opts == null ? void 0 : opts.dataStrategy, + patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation, window: opts == null ? void 0 : opts.window }).initialize(); } @@ -5049,8 +5026,8 @@ function RouterProvider(_ref) { let setState = React2.useCallback((newState, _ref2) => { let { deletedFetchers, - unstable_flushSync: flushSync, - unstable_viewTransitionOpts: viewTransitionOpts + flushSync, + viewTransitionOpts } = _ref2; deletedFetchers.forEach((key) => fetcherData.current.delete(key)); newState.fetchers.forEach((fetcher, key) => { @@ -5326,7 +5303,7 @@ var Link = React2.forwardRef(function LinkWithRef(_ref7, ref) { target, to, preventScrollReset, - unstable_viewTransition + viewTransition } = _ref7, rest = _objectWithoutPropertiesLoose(_ref7, _excluded); let { basename @@ -5359,7 +5336,7 @@ var Link = React2.forwardRef(function LinkWithRef(_ref7, ref) { target, preventScrollReset, relative, - unstable_viewTransition + viewTransition }); function handleClick(event) { if (onClick) onClick(event); @@ -5388,7 +5365,7 @@ var NavLink = React2.forwardRef(function NavLinkWithRef(_ref8, ref) { end = false, style: styleProp, to, - unstable_viewTransition, + viewTransition, children } = _ref8, rest = _objectWithoutPropertiesLoose(_ref8, _excluded2); let path = useResolvedPath(to, { @@ -5402,7 +5379,7 @@ var NavLink = React2.forwardRef(function NavLinkWithRef(_ref8, ref) { } = React2.useContext(NavigationContext); let isTransitioning = routerState != null && // Conditional usage is OK here because the usage of a data router is static // eslint-disable-next-line react-hooks/rules-of-hooks - useViewTransitionState(path) && unstable_viewTransition === true; + useViewTransitionState(path) && viewTransition === true; let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname; let locationPathname = location.pathname; let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null; @@ -5436,7 +5413,7 @@ var NavLink = React2.forwardRef(function NavLinkWithRef(_ref8, ref) { ref, style, to, - unstable_viewTransition + viewTransition }), typeof children === "function" ? children(renderProps) : children); }); if (true) { @@ -5454,7 +5431,7 @@ var Form = React2.forwardRef((_ref9, forwardedRef) => { onSubmit, relative, preventScrollReset, - unstable_viewTransition + viewTransition } = _ref9, props = _objectWithoutPropertiesLoose(_ref9, _excluded3); let submit = useSubmit(); let formAction = useFormAction(action, { @@ -5475,7 +5452,7 @@ var Form = React2.forwardRef((_ref9, forwardedRef) => { state, relative, preventScrollReset, - unstable_viewTransition + viewTransition }); }; return React2.createElement("form", _extends3({ @@ -5536,7 +5513,7 @@ function useLinkClickHandler(to, _temp) { state, preventScrollReset, relative, - unstable_viewTransition + viewTransition } = _temp === void 0 ? {} : _temp; let navigate = useNavigate(); let location = useLocation(); @@ -5552,10 +5529,10 @@ function useLinkClickHandler(to, _temp) { state, preventScrollReset, relative, - unstable_viewTransition + viewTransition }); } - }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, unstable_viewTransition]); + }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]); } function useSearchParams(defaultInit) { true ? warning(typeof URLSearchParams !== "undefined", "You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.") : void 0; @@ -5611,7 +5588,7 @@ function useSubmit() { body, formMethod: options.method || method, formEncType: options.encType || encType, - unstable_flushSync: options.unstable_flushSync + flushSync: options.flushSync }); } else { router.navigate(options.action || action, { @@ -5623,8 +5600,8 @@ function useSubmit() { replace: options.replace, state: options.state, fromRouteId: currentRouteId, - unstable_flushSync: options.unstable_flushSync, - unstable_viewTransition: options.unstable_viewTransition + flushSync: options.flushSync, + viewTransition: options.viewTransition }); } }, [router, basename, currentRouteId]); @@ -5646,9 +5623,13 @@ function useFormAction(action, _temp2) { if (action == null) { path.search = location.search; let params = new URLSearchParams(path.search); - if (params.has("index") && params.get("index") === "") { + let indexValues = params.getAll("index"); + let hasNakedIndexParam = indexValues.some((v) => v === ""); + if (hasNakedIndexParam) { params.delete("index"); - path.search = params.toString() ? "?" + params.toString() : ""; + indexValues.filter((v) => v).forEach((v) => params.append("index", v)); + let qs = params.toString(); + path.search = qs ? "?" + qs : ""; } } if ((!action || action === ".") && match.route.index) { @@ -5867,7 +5848,7 @@ function useViewTransitionState(to, opts) { opts = {}; } let vtContext = React2.useContext(ViewTransitionContext); - !(vtContext != null) ? true ? invariant(false, "`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?") : invariant(false) : void 0; + !(vtContext != null) ? true ? invariant(false, "`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?") : invariant(false) : void 0; let { basename } = useDataRouterContext2(DataRouterHook2.useViewTransitionState); @@ -5929,7 +5910,6 @@ export { resolvePath, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, - useViewTransitionState as unstable_useViewTransitionState, useActionData, useAsyncError, useAsyncValue, @@ -5957,13 +5937,14 @@ export { useRouteLoaderData, useRoutes, useSearchParams, - useSubmit + useSubmit, + useViewTransitionState }; /*! Bundled license information: @remix-run/router/dist/router.js: (** - * @remix-run/router v1.19.2 + * @remix-run/router v1.20.0 * * Copyright (c) Remix Software Inc. * @@ -5975,7 +5956,7 @@ export { react-router/dist/index.js: (** - * React Router v6.26.2 + * React Router v6.27.0 * * Copyright (c) Remix Software Inc. * @@ -5987,7 +5968,7 @@ react-router/dist/index.js: react-router-dom/dist/index.js: (** - * React Router DOM v6.26.2 + * React Router DOM v6.27.0 * * Copyright (c) Remix Software Inc. * diff --git a/node_modules/.vite/deps/react-router-dom.js.map b/node_modules/.vite/deps/react-router-dom.js.map index d41dc990..8ac9ec3c 100644 --- a/node_modules/.vite/deps/react-router-dom.js.map +++ b/node_modules/.vite/deps/react-router-dom.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../@remix-run/router/history.ts", "../../@remix-run/router/utils.ts", "../../@remix-run/router/router.ts", "../../react-router/lib/context.ts", "../../react-router/lib/hooks.tsx", "../../react-router/lib/components.tsx", "../../react-router/index.ts", "../../react-router-dom/dom.ts", "../../react-router-dom/index.tsx"], - "sourcesContent": ["////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n", "import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\ntype DataFunctionReturnValue = Promise | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (\n args: LoaderFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (\n args: ActionFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => DataFunctionReturnValue\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise>;\n}\n\nexport interface AgnosticPatchRoutesOnNavigationFunction<\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> {\n (opts: {\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: AgnosticRouteObject[]) => void;\n }): void | Promise;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string,\n allowPartial = false\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\n );\n}\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n", "import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n DataStrategyResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n AgnosticPatchRoutesOnNavigationFunction,\n DataWithResponseInit,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n matchRoutesImpl,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE DO NOT USE\n *\n * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n unstable_patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\n unstable_dataStrategy?: DataStrategyFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.unstable_patchRoutesOnNavigation;\n\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // FIFO queue of previously discovered routes to prevent re-calling on\n // subsequent navigations to the same path\n let discoveredRoutesMaxSize = 1000;\n let discoveredRoutes = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) {\n return true;\n }\n // Explicitly opting-in to running on hydration\n if (\n typeof m.route.loader === \"function\" &&\n m.route.loader.hydrate === true\n ) {\n return false;\n }\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: Set = new Set();\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true,\n }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let { boundaryId, error } = handleDiscoverRouteError(\n location.pathname,\n discoverResult\n );\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n state,\n request,\n [actionMatch],\n matches,\n null\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let { boundaryId, error } = handleDiscoverRouteError(\n location.pathname,\n discoverResult\n );\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n if (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): Record | null | undefined {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let { error } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n state,\n fetchRequest,\n [match],\n requestMatches,\n key\n );\n let actionResult = actionResults[match.route.id];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false\n );\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false\n );\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let { error } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n state,\n fetchRequest,\n [match],\n matches,\n key\n );\n let result = results[match.route.id];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n isNavigation: boolean,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve these flags across redirects\n preventScrollReset: pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n state: RouterState,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null\n ): Promise> {\n let results: Record;\n let dataResults: Record = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n state,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e,\n };\n });\n return dataResults;\n }\n\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n\n return dataResults;\n }\n\n async function callLoadersAndMaybeResolveData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let currentMatches = state.matches;\n\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n state,\n request,\n matchesToLoad,\n matches,\n null\n );\n\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n state,\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n f.key\n );\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n } as ErrorResult,\n });\n }\n })\n );\n\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n\n await Promise.all([\n resolveNavigationDeferredResults(\n matches,\n loaderResults,\n request.signal,\n currentMatches,\n state.loaderData\n ),\n resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\n }\n\n function handleDiscoverRouteError(\n pathname: string,\n discoverResult: DiscoverRoutesErrorResult\n ) {\n return {\n boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id,\n error: getInternalRouterError(400, {\n type: \"route-discovery\",\n pathname,\n message:\n discoverResult.error != null && \"message\" in discoverResult.error\n ? discoverResult.error\n : String(discoverResult.error),\n }),\n };\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnNavigationImpl) {\n // Don't bother re-calling patchRouteOnMiss for a path we've already\n // processed. the last execution would have patched the route tree\n // accordingly so `matches` here are already accurate.\n if (discoveredRoutes.has(pathname)) {\n return { active: false, matches };\n }\n\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n try {\n await loadLazyRouteChildren(\n patchRoutesOnNavigationImpl!,\n pathname,\n partialMatches,\n routesToUse,\n manifest,\n mapRouteProperties,\n pendingPatchRoutes,\n signal\n );\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n addToFifoQueue(pathname, discoveredRoutes);\n return { type: \"success\", matches: newMatches };\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // Avoid loops if the second pass results in the same partial matches\n if (\n !newPartialMatches ||\n (partialMatches.length === newPartialMatches.length &&\n partialMatches.every(\n (m, i) => m.route.id === newPartialMatches![i].route.id\n ))\n ) {\n addToFifoQueue(pathname, discoveredRoutes);\n return { type: \"success\", matches: null };\n }\n\n partialMatches = newPartialMatches;\n }\n }\n\n function addToFifoQueue(path: string, queue: Set) {\n if (queue.size >= discoveredRoutesMaxSize) {\n let first = queue.values().next().value;\n queue.delete(first);\n }\n queue.add(path);\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null\n ): Promise> {\n let results = await callDataStrategyImpl(\n unstable_dataStrategy || defaultDataStrategy,\n type,\n null,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n let dataResults: Record = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n dataResults[match.route.id] =\n await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[0]\n : undefined;\n let boundaryMatches = boundaryId\n ? getLoaderMatchesUntilBoundary(matches, boundaryId)\n : matches;\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Idempotent utility to execute patchRoutesOnNavigation() to lazily load route\n * definitions and update the routes/routeManifest\n */\nasync function loadLazyRouteChildren(\n patchRoutesOnNavigationImpl: AgnosticPatchRoutesOnNavigationFunction,\n path: string,\n matches: AgnosticDataRouteMatch[],\n routes: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n pendingRouteChildren: Map<\n string,\n ReturnType\n >,\n signal: AbortSignal\n) {\n let key = [path, ...matches.map((m) => m.route.id)].join(\"-\");\n try {\n let pending = pendingRouteChildren.get(key);\n if (!pending) {\n pending = patchRoutesOnNavigationImpl({\n path,\n matches,\n patch: (routeId, children) => {\n if (!signal.aborted) {\n patchRoutesImpl(\n routeId,\n children,\n routes,\n manifest,\n mapRouteProperties\n );\n }\n },\n });\n pendingRouteChildren.set(key, pending);\n }\n\n if (pending && isPromise(pending)) {\n await pending;\n }\n } finally {\n pendingRouteChildren.delete(key);\n }\n}\n\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n let dataChildren = convertRoutesToDataRoutes(\n children,\n mapRouteProperties,\n [routeId, \"patch\", String(route.children?.length || \"0\")],\n manifest\n );\n if (route.children) {\n route.children.push(...dataChildren);\n } else {\n route.children = dataChildren;\n }\n } else {\n let dataChildren = convertRoutesToDataRoutes(\n children,\n mapRouteProperties,\n [\"patch\", String(routesToUse.length || \"0\")],\n manifest\n );\n routesToUse.push(...dataChildren);\n }\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy({\n matches,\n}: DataStrategyFunctionArgs): ReturnType {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n return results.reduce(\n (acc, result, i) =>\n Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n {}\n );\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n state: RouterState | null,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise> {\n let loadRouteDefinitionsPromises = matches.map((m) =>\n m.route.lazy\n ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n : undefined\n );\n\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n if (\n handlerOverride &&\n request.method === \"GET\" &&\n (match.route.lazy || match.route.loader)\n ) {\n shouldLoad = true;\n }\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n });\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext,\n });\n\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n\n return results;\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n loadRoutePromise: Promise | undefined,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: DataStrategyResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise = (async () => {\n try {\n let val = await (handlerOverride\n ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadRoutePromise,\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadRoutePromise;\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // DataStrategyResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertDataStrategyResultToDataResult(\n dataStrategyResult: DataStrategyResult\n): Promise {\n let { result, type } = dataStrategyResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n };\n }\n\n // Convert thrown unstable_data() to ErrorResponse instances\n result = new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n );\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: Record,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\" | \"route-discovery\";\n message?: string;\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (type === \"route-discovery\") {\n errorMessage =\n `Unable to match URL \"${pathname}\" - the \\`unstable_patchRoutesOnNavigation()\\` ` +\n `function threw the following error:\\n${message}`;\n } else if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: Record\n): { key: string; result: RedirectResult } | undefined {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isPromise(val: unknown): val is Promise {\n return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isDataStrategyResult(result: unknown): result is DataStrategyResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectDataStrategyResultResult(result: DataStrategyResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n value: any\n): value is DataWithResponseInit {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"type\" in value &&\n \"data\" in value &&\n \"init\" in value &&\n value.type === \"DataWithResponseInit\"\n );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveNavigationDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n signal: AbortSignal,\n currentMatches: AgnosticDataRouteMatch[],\n currentLoaderData: RouteData\n) {\n let entries = Object.entries(results);\n for (let index = 0; index < entries.length; index++) {\n let [routeId, result] = entries[index];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && isRevalidatingLoader) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, false).then((result) => {\n if (result) {\n results[routeId] = result;\n }\n });\n }\n }\n}\n\nasync function resolveFetcherDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n revalidatingFetchers: RevalidatingFetcher[]\n) {\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, routeId, controller } = revalidatingFetchers[index];\n let result = results[key];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n if (isDeferredResult(result)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n invariant(\n controller,\n \"Expected an AbortController for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, controller.signal, true).then(\n (result) => {\n if (result) {\n results[key] = result;\n }\n }\n );\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n//#endregion\n", "import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n", "import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_decodePath as decodePath,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else if (\n future?.v7_partialHydration &&\n parentMatches.length === 0 &&\n !dataRouterState.initialized &&\n dataRouterState.matches.length > 0\n ) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnNavigation`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // ``\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n", "import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a